Follow through with my plan to create simpler game with Godot 4, I decided to create a 3D side scrolling run and gun for mobile. I don't want any major delay trying to fix too complicated codes with newer Godot updates as I plan to complete this game and upload to app stores for testing.

This is inspired by Contra, Megaman, Metal Slugs. It is not a true 3D, just a classic 2d run'gun mechanic with 3D models. Story would be like "escape from new York/ LA" type but more disgusting creatures emerges as you get to later stages. (At least 5 stages are planned but let's see if there could be more)

Let's see what I have done so far.

Features

Player:

  • WASD control with 8 ways diagonal aim, jump, shoot, weapon switch.

Enemies:
Running ground enemy
-Just run at you
-appears constantly when in the right zone
-only 3 on screen at a time
-damage flash: need to limit to individual enemy

8 ways shooting turret
-aim at player, limit to 8 directions.
-burst shot of 3

Moving Platforms:
Each done in different ways using codes, Path3D, animation, and tween. All are working as intended.

Extras
Coins popping when certain enemies are killed

  • still need to make coins disappears after few seconds.
  • need to fix coins doubling if killed with 2 or more bullets at the same time.

To do list:
-Scoring, Health bar, other UI elements.
-Player actions (Crouching, platform drop down, Ledge grab, and Rope Hanging)
-More weapons (laser, missile, flame thrower)
-More types of enemy (Flying, grenade throwing, tanks, bosses)

    Gowydot this looks really cool. I hope we see it with some assets next 👍

    make sure to add a picture so we can vote it to be highlighted.

    Quick update:
    -Simple scores and coins count
    -Drop down platform
    -Simple ledge grab
    -Player's crouching

    @Jesusemora
    Thank you! I'd like to get most mechanics to work first before adding any assets and sounds. But I guess I can make some placeholder assets for it just for this thread. 👍

    25 days later

    Done some player weapons: Normal, Spread, Flame, Laser, and "Heat"-seeking missile.

    Next up will do some variations of enemy weapons.

    Then will be putting the first level together and start the player modelling/animations.

    11 days later

    Been testing a few different enemy types and shootings.

    Ground enemy type:

    • Run and jump attack
    • Straight shooter
    • Throwing attack
    • Left/Right patrol
    • Crawling
    • Bouncing

    Fly type:

    • Up/Down sine pattern
    • Tween pattern
    • Wander and chase player if close enough

    Turret type:

    • 8 ways aim shooter
    • Limited angle shooter
    • Burst shooter
    • Spin shooter
    • Curve sine bullet shooter
    • Bullet hell style shooter

    Next will finally start on visuals. Time to fire up my blender program.

      Gowydot Nice! Looking forward to seeing this with some cool graphics! 😃

      @MikeCL Will do some animation testing before doing actual graphics for the game. placeholder model for now 😉

      Here's a little update on animation tree blending using placeholder model (from makehuman software) and a quick rig for testing.

      Can't decide if I should flip the model (so he looks the same on both side) or keep it natural as is (see his back when turning left)

      btw project updated from 4.2 to 4.3, no problem so far.

        Gowydot btw project updated from 4.2 to 4.3, no problem so far.

        That's because you didn't use shaders. And the animation is simple.

        Are you going to leave the hair as it is?

        Can't decide if I should flip the model (so he looks the same on both side) or keep it natural as is (see his back when turning left)

        This is purely to the creator's taste. I like it that way.

        It's nice to have a prototype like this. 👍

          Tomcat

          That's my plan 🙂 . Simple gameplay and codes save me a lot of headaches from fixing it with each minor versions. The game codes I got should last me at least godot6 LOL. I will add some shader for explosions though, but with basic shader codes only.

          I will be testing long hair movements but it won't be anything too complicated, maybe just keyframe it or with jiggle addon. I've not yet decide on how the player will look like but will definitely be throwback 80's macho vibe (think Arnold, Sylvester).

          I think I will make a web version for itch.io too so people can play test easily. Will update player's control for keyboard and mouse.

          I spent way too much time for the poster 😆 (placed on the first post). It's not about child custody I swear!

          Gowydot there is a reason military shave they heads, long hair can get jammed into gears and such. I suggest tie it to a pony tail, and add bandana

          6 days later

          I put visual/animation on hold last 2 weeks and went back to update my player control. New features are:

          • Now with Enum/Match statemachine
          • Climb ladder with shooting directions
          • Ledge grab with shooting directions
          • Rail with shooting directions

          Took me awhile to figure all the logics out. I had to separate the body, the aiming, and the raycasts detection into individual function group so I can update them in each state.

          In the end I will go with flipping my model left/right so you can see the gun all the time.

          I think I pretty much got what I wanted to work. Will continue on with visuals/animations next.

          @kuligs2
          I'm thinking along the line of him being military prisoner or deserter, so long hair is quite appropriate. Besides, it doesn't bother him because he's the baddest.

          Quick update:

          Add another version of player control to work with keyboard and mouse

          • A/D = Left/Right
          • W/S = Climb Ladder Up/Down/Crouching
          • LMB = Shoot
          • Aiming is now done with mouse.
          • Still not yet decide which button to jump (Either press W or Spacebar or RMB). I will add animations and some enemies to playtest it first to see how it feels.

          Will truly start modelling and animation now finally.

          a month later

          Update: Aiming

          Took awhile because in the beginning I had a player with 360 rotation aiming so I've been playing around with arm bone rotations. Suddenly I thought that wouldn't be fair for the enemies because they can only shoot in 8 directions! so I went back with 8 directions shooting for player and use animation player/tree instead (and much easier than bone rotations).

          • Player shoots in 8 directions
          • Aim by mouse, move by keyboard.
          • Testing aiming animations using animationPlayer only, no blending just yet.
          • The red thing is a placeholder for gun. Right now it is boneattachment to forearm so it looks a bit weird, will correct the placement later.
          7 days later
          a month later

          Away from Godot and been learning Blender on and off, especially for texturing body and face and doing haircard. Trying to find efficient workflow of creating game characters(low-mid poly). At the moment I'm creating characters for story purpose and not for actual game play.
          Right now I use makehuman software to get the base body up quickly then just photoshop face/muscle to that uv texture.

          This is my main player Viper K design. Trying to based him off some caveman. Retired special force, now doing some oddjob to make ends meet.

          This is The Director, Viper K's ex superior (not yet with hair). He's trying to get Viper K to do a new mission, anyway he can.

          I love cliche story 😃

          5 days later

          Looking sharp now isn't he? 😃
          A bit unnecessary,though, to model shirt/jacket since I probably won't be using them but anyway..good for learning quick modelling and texturing. I will keep the coat and texture the shirt/jacket onto his body instead.



          Then will rig and animate him doing something.

          24 days later

          Here I've made simple facial expression for my player.
          Blender 4.3, Godot 4.3


          (A) is using separate planes for brows, eyes, and mouth then just change the textures, with simple hand/foot rig.


          (B) is a facial rig with bone constraints and drivers, with full hand/fingers/foot rig. There are also no subdivisions on the models as I think it wouldn't matter much during gameplay (with camera zoom out).

          Originally I wanted to use A for in-game character and B for cinematic cutscenes but now I'm just gonna use A for both. I will use animated slide show to forward the story (old school NES style) instead of cinematic cut scenes. Just trying to keep things as simple as possible.

          Not really the best looking character (well, he's meant to be a bit clueless 😄 ) but overall I'm happy for its simplicity and glad that I got my Blender rig/textures workflow in the bag (lots of trials/errors). No problem import to Godot using .glb file with just Image Texture Nodes.

          Next will do some guns and other human characters.

            Gowydot Originally I wanted to use A for in-game character and B for cinematic cutscenes but now I'm just gonna use A for both.

            What is the reason for not using option B?

            How did you handle the emotions?

              Tomcat
              To save time basically.

              Although I only planned to have 3-4 acting characters, for (B) I'd have to weight paint the their faces and rig the fingers then keyframe a bunch of drivers for facial expressions. But for (A) I'd just photoshop eyes, brows, and mouths then just keyframe the textures change.

              I'm not too worry about making the top visuals for this game. I could see lots of work ahead to create items, stages, enemies..etc. in Blender. AND THEN I need to put them all together in Godot. I've been away from Godot for awhile now I forgot how my codes work already LOL.

                Gowydot for (B) I'd have to weight paint the their faces and rig the fingers then keyframe a bunch of drivers for facial expressions.

                It seems to be possible to transfer emotions from MakeHuman to Blender with both rigs and shape keys.

                a month later

                Update: Boss area camera movements & Changed Player's camera to orthogonal


                *I sped up player movements for quick showing.

                • Using subviewport, I've separated my player's camera to orthogonal while keeping level's camera to perspective. This way you can see the player on fixed view angle all the time instead of level's perspective camera angle, which aims slightly looking down on top of player's head.

                using just level's perspective camera angle

                Now with Player's orthogonal camera angle

                • I also did a sub-boss/boss camera area, where it 'detach' from player and move to a fixed position when fighting with bosses. Nothing fancy, when player touches an invisible area3D it turn "camera to follow player" bool = false then lerp camera to desired position.
                24 days later

                Update: Add Crawl position and prototype level design

                Add a crawling state to player

                • Up/down to toggle crawl position
                • Left/right to move (slower than walk, even slower if crawling backwards)
                • Looking/aiming using mouse positions.
                • Only shoots left/right
                • Testing animation logic using placeholder animations.

                Prototype level design

                • Prototyping level 1 design using box mesh.
                • *sped up player for quick visual

                Trying to create just a simple level on the go and I realized even this needs a lot of planning ahead. I'd plan the levels on paper first next time.

                Next, will add hanging on rail state / add some enemies/ more level prototyping.

                  Gowydot
                  Make the bullets faster than the characters speed. It looks like the bullets are just standing still when you move.

                    SuperDoomKing

                    I've increased player's speed only for the preview, otherwise it would take a whole minute to watch to the end. I aim for the player to finish the level with enemies/bosses in about 5 minutes average.

                    15 days later

                    Update : First level first scene background.

                    Testing object models and lighting. First I tried doing all the textures/lighting in Blender and baked them because I don't worry too much about dynamic shadows for background. However, The result was blurry and look terrible. The solution was basically I need to bake into large image to look decent. I read that vanilla bake from Blender is bad so I dropped that and now just export plain models and do the textures/lighting in Godot.

                    Quick Update : The wall becomes invisible when player is near.

                    When the door is destroyed it sends signal to activate area3D collision to true. When player hits this area3D it triggers the on_body_enter/exit to activates/deactivates the lerping of material opacity.
                    *note: The grey "rectangle" is still left visible because this wall was made with CSG boolean mesh for prototype. I plan to use imported blender mesh later.

                    6 days later

                    Now using Godot 4.4 - converted fine except occasionally editor shutdowns when re-importing .glb. To be fair I re-import my model everytime I add a new animation so few shutdowns here and there isn't much of a problem and after re-start everything works as normal.

                    Update : Rail actions

                    -Player hanging on rail using raycast on the head.
                    -Aiming while hanging using animationTree blending hanging animation with arm and head from standing aim animations.
                    -When moving he can not shoot.
                    -There's a misalignment when coming down to the rail or jump when hanging, maybe I will fix it by lock the player to desired position , disable raycast for split second, or simply disable jump while hanging altogether.

                    Update : Ladder actions

                    -Same system as Rail actions

                    Quick update:

                    • I fixed rail hanging misalignment by shorten raycast length and disable raycast for a split second using timer.
                    • Rotate/reposition player collision (not visible here) using animation player.

                    6 days later

                    Update: Baked Lightmap

                    Visually not much different but I've been learning the bake lightmap and using it for the first time.

                    Original lights:

                    Baked Lightmap:

                    After trials and errors, these are the steps that I used (not sure if correct but it worked as shown above):

                    • Make sure the model has UV2. You can do this by clicking advance import on your model and in "Generate" check both "Shadow Mes / Lightmap UV" then re-import.
                    • Make sure the lights you want to bake is on bake static mode.
                    • Add LightmapGI node the scene then Bake.

                    It works OK even though it's a bit flat and I couldn't get the hightlights on the sofa to show like the original.
                    Any Idea on how to do it?

                    10 days later

                    Update : Level objects

                    Made 3d objects and added to the level. Experimenting with sprite3Ds and alpha materials..etc.

                    8 days later

                    Some dancer

                    7 days later

                    More dancers I guess..
                    (Just learning Blender to quickly customize lowpoly human with animation for godot export)

                    10 days later

                    UPDATE: Test Shooting enemy and Running enemies

                    • Add some test Shooting enemy.
                    • Add Spawner for running enemies. The spawner will follow player when visible on screen (VisibleOnScreenNotifier3D).
                    • Randomly appears at left / right of screen at random time. Limited to 3 enemies per screen.
                    • Queue_free spawner at the end.
                    12 days later

                    Update: Test adding running enemy animations.

                    Unfortunately I realized I didn't apply all transform to all my rigs (player, dancers, enemies). I didn't know that the scale properties in Blender Object Mode and Pose Mode are different!

                    Blender's Object mode

                    Blender's Pose mode

                    ..and so they were out of scale when imported to Godot. I plan to use these rigs for other human enemies and I don't want to re-scale them everytime in Godot so I decided to just gonna re-do all my rigs and animations again. 😞

                    18 days later

                    Update: Hit flash and bullet bounce (mega man style)

                    a month later

                    Added more enemies and their attacks

                    Flying Drones:
                    Type 1 : Flying left to right while continuously dropping bombs
                    Type 2 : Following and dropping bombs at player
                    Type 3 : Flying back/forth and dropping bombs at player

                    Turret:
                    Aims/Shoots at player in 8 directions

                    Running:
                    Runs at player

                    Bombing:
                    Throws bombs at player at random proximity, depends on player's distance.

                    Shooting:
                    Type 1 : Shooting only 1 direction(with/without shield)
                    Type 2 : Shooting 8 directions

                    Mines:
                    Type 1 : Activated when stepped on, 2 seconds to explode, can be jumped over if timing is right
                    Type 2 : Activated when stepped on, pops up in the air and explodes with wider area.

                    I think it's enough enemies for first stage. Will continue with stage design and boss.