Robocalypse - 3D Platformer

Hello all, soon I plan to assemble a YouTube video of the development evolution of this game as I’ve taken lot’s of videos during it’s creation.

But I couldn’t resist sharing it here :wink:

It’s something I’ve been doing with with my 6 year old son, where he designs the world and scenarios and I then build them. It’s great fun, and I would love to know how we can improve the gameplay or mechanics if you have any suggestions.

You know I appreciate you!

https://www.weaversgames.com

17 Likes

It says I should use Google Chrome and kicks me out :frowning:

Chrome is the only browser that currently supports all of the features required, such as web workers etc

I really appreciate you giving it a go, I would absolutely love to know how it runs on others devices. :slight_smile:

Got it working with Edge. Played a little. I love the late 90s art style and spot on controls! And the tutorial: teaches me everyhing in a few seconds. Great! Oh, and I like the AI. Robot tries to get me, cannot reach me - and gives up. Overall I really like being in that world. :slightly_smiling_face:

Some other thoughs/observations:

  • After the tutorial scene, frame rate goes down to what feels like 10fps - even if I go into a corner and look at a bush. Hmm, even if I resize the window to 1/4.
  • I died and hit abort on the confirm dialog. Got me stuck on the death screen.
  • Died again and this time hit ok on the confirm dialog. Is there any way you could short cut the loading time? For me as a gamer this is super frustrating: you know I just died, I am pissed already. Now I have to wait for the loading again.
  • Died again. I was standing on the edge down to the first red/white robot. Was just taunting it for a while, then I moved a little closer and it got me! Up the cliff :rage:
  • There needs to be some sort of aim assist. If you do not want auto aiming and homing fire balls, ok. But at least a crosshair or trajectory preview?
  • Just a matter of taste but I am not so sure about the Mahjong music in the tutorial scene.
  • Attributions: are these all CC0 or similar?
1 Like

Thank you so much for the feedback Joe! I have been going for a throw back to the NES as much as possible, I want it to feel like you played an NES game remake in 3D. Awesome you picked up on this.

I have been working hard on FPS, it’s ongoing but everyday I think I get 1 more, I believe I’m getting about 53-54 on avg :frowning: What kind of device are you running CPU wise? I try to dev on my m1 mac air so I don’t go too hard on my scene but things are adding up in that small little world.

For the confirm on death, great point, this is one of those things once a game menu is added will gone, thank you though for pointing this out and reminding me I need to get to work on that menu.

For the loading, same kind of deal here, once second level is added I’ll be adding an actual scene loader instead of refreshing the browser, but for it was the easiest way to kill off everything :wink:

The Y distance is limited for the melee AI, but yea they will get you on that ledge :slight_smile:

Excellent call out on the aiming, I’ve been thinking about this as well, maybe not an aim assist, but at least a way to know if you attack you will hit. I may put a reticle under the enemies, I’m thinking when in close range and can be hit with the flame thrower it will appear under all enemies in the cone, but once they get past flame thrower range that only enemies directly in front of you would get the reticle.

The Mahjong music I’m probably just too familiar with as it get’s expensive buying tracks and this was one I’m comfortable hearing.

Joe, thanks again, this kind of feedback is what helps me get out of dev brain and back into player brain, lot’s of great ideas, and important callouts, if you check it out in the future, you’ll know some of what you see was your idea :slight_smile:

1 Like

CPU is an old Intel i7 (something, something 6700).

Yeah, will do, I love following these posts :slight_smile:

1 Like

Today I focused on Shadow Reduction, I was able to reduce the number of shadows by…

Floors - was 72 now 4
Walls - was 80 now 1
Cylinders - was 36 now 11
Boxes - was 69 now 31
GLB’s - was 106 now 48

I also reduce the total freeze lights to 1 and removed it from all GLBS’ as they don’t receive shadows
Not sure how much of an FPS boost this will end up making as these were supposedly frozen shadows that render once, but it’s got to be something :slight_smile:

woooot this is amazing !!! and so cute :slight_smile: cc @PirateJC to do your thing

1 Like

That is so sweet, and probably because it was all designed by a 6 year old :wink:
We use AI to generate all the textures and he picks them out, and he drew up the world and everything at the kitchen table.

Side note - I spent allot of time reducing the polygon counts, I think I’m getting some pretty good FPS now finally!

I hope this helps others, as I’ve been playing with the scene rendering as the final performance improvement steps, and I found interesting results.

I tried using engine.renderLoop, I tried using animationFrames with onBeforeRenderObservable, and many other things and I could not get good frames or smooth frames.

The below is what I have finally settled on as the “render pipeline”, and it has finally resolved all of the jitters and low FPS I have been dealing with.

I feel like the game is now running smooth as butter.

function sceneRenderLoop() {
    setTimeout(() => {
        sceneCurrentTime = performance.now();
        sceneDeltaTime = sceneCurrentTime - sceneLastTime;
        sceneLastTime = sceneCurrentTime;

        if (sceneDeltaTime < 16) {
            setTimeout(() => {
                sceneAnimationFrames = requestAnimationFrame(() => {
                    sceneRenderLoop();
                });
            }, 16 - sceneDeltaTime);
        } else {
            sceneAnimationFrames = requestAnimationFrame(() => {
                sceneRenderLoop();
            });
        }

        scene.render();
    }, 1);

    gameCode();
}
sceneRenderLoop();

As promised, here is the Montage video, was a fun adventure.

2 Likes

@truimagz this is wonderful! Are you on Twitter? I’d love to send some love for Robocalypse your way from the Babylon account!

3 Likes

Thank you so much that really made my son’s day :smiling_face_with_three_hearts:

Okay I could not resist, I re-worked the render pipeline again, I’ve now inlined the service workers and re-arrange the render flow.

I’m now able to run a delta of 28 without a single frame drop the whole time I’m playing. And the Mobs and Projectiles are perfectly synced.

If you go try the game now I think you’ll be shocked how smooth it runs.

   function sceneRenderLoop() {
        rendering = false;

        projectileWorker.postMessage({ ... });
        aiWorker.postMessage({ ... });
    }

    projectileWorker.addEventListener('message', (e) => {
        projectileUnits = e.data.projectiles;

        if (rendering) {
            render();
        } else {
            rendering = true;
        }
    });

    aiWorker.addEventListener('message', (e) => {
        aiUnits = e.data.ai;

        if (rendering) {
            render();
        } else {
            rendering = true;
        }
    });

    function render() {
        sceneAnimationFrames = requestAnimationFrame(() => {
            sceneCurrentTime = performance.now();
            sceneDeltaTime = sceneCurrentTime - sceneLastTime;
            sceneLastTime = sceneCurrentTime;

            if (sceneDeltaTime < 28) {
                setTimeout(() => {
                    sceneRenderLoop();
                }, 28 - sceneDeltaTime);
            } else {
                sceneRenderLoop();
            }

            scene.render();
        });

        gameCode();
    }

    sceneRenderLoop();
4 Likes

Cool! This video is also very instructive :smiley:

1 Like

Aw come on. I die if I jump into the well? That is just mean :grin:

The buckets too!

1 Like

AWESOME! Your son is very lucky to have a parent to help turn his dreams into reality! :grin:

1 Like
3 Likes

Weaver is the best !!! Say hi for us :slight_smile:

1 Like