Hello! I am digging out an old project from the ground:
https://godotforums.org/d/29569-icy-and-spicy-an-open-source-3d-prototype-project

And I have the ambition to polish it up and make it a 3D TwinStick Shooter starter kit.
I am looking for a place where to post my progress, keep motivated and get feedback ๐Ÿ˜Š !

Here is a sneak peek to the current version that I converted to Godot 4. I also added new controller schemes.

EDIT: I will try to update the above preview with the latest version each month.

Github link:
https://github.com/Nodragem/twin-stick-shooter-starter-kit

The current features:

  • 3 controller schemes for Gamepad:
    • Left Stick to Move/Aim, Right Trigger to Aim, Button B to shoot
    • Left Stick to Move, Right Stick to Aim, shoot with Right Trigger
    • Left Stick to Move, Right Stick to Aim, auto shoot
  • Collision layers are set up to reproduce the infinite_inertia property which was dropped in Godot 4
  • Character Controller based on a State Machine (inspired from GDQuest tutorials)
  • Animation System based on a Blend Tree (rather than a State Machine)
  • Fully modelled and rigged character
  • Easily switch Characterโ€™s Skin
  • Camera follows Main Character
  • One Laser Gun
  • Debug Layer which can be toggled with L key

Next features, I am thinking of:

  • add Pause menu to select Controller Scheme
  • add keyboard + mouse Controller Scheme
  • make a level with Kaykit Prototype Bits
  • adding breakable box
  • adding juice / game feel
  • add ennemies
  • add multiple weapon support

Please let me know if you have any feedback, and/or what you would like to see in a such a starter kit? To be honest, I am thinking that it could be a starter kit for any top-down view game :smiley: but well, better keep the scope small for now.

If you are interested in some technical details / how I did something, feel free to ask!

    Nodragem To be honest, I am thinking that it could be a starter kit for any top-down view game

    It's a very interesting project. Could be extremely useful for me. I have to study it in detail.

    • Easily switch Characterโ€™s Skin

    You mean a customisable character?

    • adding breakable box

    Some sort of destructible environment?

      Thank you for your interest! My project is a bit similar to the project in the thread you linked in the sense that it is meant to be free and to explore what are the pain points in Godot and their workarounds. Before I start a bigger project.

      Tomcat You mean a customisable character?

      More like being able to choose between different characters/appearances.

      Tomcat Some sort of destructible environment?

      yes, I want to have some particles flying around when I break boxes and destructible elements.

        Nodragem Before I start a bigger project.

        I have a similar idea โ€” start with the simplest.

        yes, I want to have some particles flying around when I break boxes and destructible elements.

        With environmental destruction, I know of three options. Two and a half, actually.

        1. godot-destructible-body A dynamic destruction plugin for the Godot Game Engine. (half, for the reason that it is for G3.
        2. Godot Destruction Plugin Simulated destruction.
        3. Voxel Tools for Godot The most brutal variant with the possibility of a complete change of the landscape.

        Perhaps you can use it.

        1. godot-destructible-body A dynamic destruction plugin for the Godot Game Engine. (half, for the reason that it is for G3.

        I seemed to be able to hastily convert the project to Godot_v4.3-dev5

        godot-destructible-body-g43-convert-2.zip
        759kB
        6 days later

        Hello there!

        @Tomcat that looks very nice! I am not exactly sure how to make breakable boxes yet, but this seems very useful if I want to make destructable solid objects such as stone columns or walls. I need to find out how they make breakable boxes in Crash Bandicoot (I mean any game with boxes really).

        I updated my project with a new feature. We can now open a menu and select between 3 controller schemes:

        • One Stick Controller (move with Left Stick, aim with Left Trigger, shoot with B)
        • Two Stick Controller (move with Left Stick, aim with Right Stick, shoot with Left Trigger)
        • Two Stick Auto-Shoot Controller (move with Left Stick, aim and shoot with Right Stick)

        Does not look like much on-screen without seeing the gamepad!
        Is there an easy way to show the gamepad input on screen :/ for demonstration purposes ?

        Anyway, you can try it for yourself by cloning the repo ๐Ÿ˜ƒ !

          Nodragem I am not exactly sure how to make breakable boxes yet, but this seems very useful if I want to make destructable solid objects such as stone columns or walls.

          If the destructibility is partial (columns), Option 1 is suitable, with subtraction of the destructible volume. If the destructibility is full (boxes), it is better to use the preliminary fragmentation from Option 2. Walls โ€” depending on the situation.

          Is there an easy way to show the gamepad input on screen :/ for demonstration purposes ?

          You can display gamepad buttons in the corner of the screen and highlight the buttons that are pressed or display only those that are pressed at the moment.

          a month later

          Hoho, I forgot to post last week's update here ๐Ÿ˜ƒ !
          Basically, I made a little level using Kaykit's Prototype Bits. I arrange my level into 2 structures:

          • A Gridmap for the static, modular elements that are on-grid (2x2 elements on a 1x1 grid).
          • Normal Node3Ds for static off-grid elements (some of them will be interactive).

          I will post this week update on Sunday I think.

            Nodragem Looks awesome! Wish I had this a couple of years back when I started my own project (also a top down shooter)

            I forgot to post yesterday as I was making my first Pull Request to the Godot Engine:
            https://github.com/godotengine/godot/pull/91874#issuecomment-2108360729
            It's about changing the default behaviour when drag and drop object in the 2D/3D Viewport.

            In terms of the Starter Kit, I added destructible elements.

            I was the occasion to find a workflow where I can import 40 glb files as destructible objects.
            Godot imports GLB files implicitly as scenes (.scn file) in the .import folder of our projects. And with the advanced import and post-import script you can shape the .scn file basically. So here is the post-import script I am wrote (on the left) and what the results of what it does on the (right):

            It basically add a RigidBody (in Kinematic mode), a AABB Collision Shape and a script to the root node (destructible.gd).

            And a quick example of how I use it:

            Note that if your assets are already in a level (.tscsn file, as it was for me), it is a bit more complicated to use. Godot automatically keeps the properties of the objects in the level as they were before the re-import. That is good for keeping the object in the same position as before the re-import, but, guess what? the script slot is a property!! so Godot will force it to null as before the reimport and the object won't be destructible.

            My temporary solution was to open VS Code and delete all occurence of script = null in the .tscn file of the level ๐Ÿ˜„
            I will probably open a proposal to discuss this behaviour. Godot should probably keep the script that the user added through the post-import.

            Looks sick!!! This makes me want to start a 3D project but I gotta restrain myself, I already have 2.5 games in progress ๐Ÿ˜ƒ

            Adding some enemies would be nice.

              6 days later

              Curious. How do you deal with a twin-stick controller and strafing? I'm currently redoing my player character with animationTree and BlendSpace2D where I blend the different forward and side strafing animations.

                MikeCL In short, I did not implement an "actual straffing".
                What I mean is that:

                • you can strafe because of the twin stick mechanism that allows you to move with the left stick and aim with the right stick.
                • but there is no special straffing animation playing when the player moves at 90 deg of their aim (i.e. crab movement of the legs)
                • it works well because of the camera placement (top) and the chunkiness of the player model.

                At the moment, I use this system:

                Note how I ve put in place a "straffing" animation as a transition but I don't use it for now.

                Why a Transition rather than a BlendSpace2d?
                -> Because my plan is to implement a aiming button as in Zelda's Ocarina of time, where the player locks an ennemie and circle around it. So the straffing will just be an On/Off thing.

                But if I wanted to have the straffing animation playing whenever the player is aiming at 90 deg from its movement vector, I would probably:

                • compute a cross product between aiming vector and movement vector and take its absolute value;
                • set up a BlendSpace2D to mix Idle, Running, Straffing into one space;
                • link movement speed to Idle-Running ;
                • link aforementioned cross product to Running-Straffing
                  7 days later


                  Here is the final kill animation. These is just a in-game test here, the enemy is set to play the same animation again and again and I do as if I am shooting at him.

                  This week I am working on the actual IA. Here I've got a simple navigation region and agent working for a chase behaviour:

                  2 months later

                  Hello!

                  A long time I did not post an update, sorry!

                  Since then, I basically added the AI for the meelee enemies:

                  And I started to work on putting together a part of the level (which I call Beat 2), where the player will have to activate 2 switches while being sent waves of meelee enemies.

                  That was the opportunity to work on a switch and door system :slight_smile:

                  The switch manager basically holds a list of its emitting children (e.g. switch) and its receiving children (e.g. doors, spawners) and it activates the receiving objects when the emittings object are all switched ON.

                  What's next? I will be adding:

                  • a first room with just a simple switch to teach the player that they need to look for switches to open the doors
                  • replace the placeholder switches/doors with better assets

                  Then it will be time to work on Beat 1, which is the intro of the game (i.e. the player wakes up in a lab/workshop and speaks with a scientist).

                  Hopefully I will give more regular update now that I am back from annual leave :rocket: