Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1412151 Posts in 69752 Topics- by 58685 Members - Latest Member: gyanisingh

January 18, 2025, 05:15:05 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsSpecFreq - Multi-Player Top Down Shooter
Pages: [1]
Print
Author Topic: SpecFreq - Multi-Player Top Down Shooter  (Read 4460 times)
dangerz
Level 0
***


~


View Profile WWW
« on: January 01, 2025, 08:46:12 PM »


Instagram:  @specfreqgame
Steam:  SpecFreq on Steam
Discord:  Join me on Discord!
YouTube:  https://www.youtube.com/@SpecFreq

Hey everyone!  My name is Roy and I've been developing SpecFreq for about a year now.  SpecFreq is a top-down multiplayer shooter that I'm working on.  I'll start the thread by talking about the game itself.  Once that's done, I'll share some nerdy details and what my plans are for the future.

SpecFreq supports multiple zones.  Each zone has its own gameplay style and look/feel to it.  There are currently 2 zones online right now:

Current Zones
Zone 1:  Combat Training Zone

Combat Training Zone (CTZ) is a small beginner zone meant to introduce players to the game mechanics.  You start off in a training area that's just you.  This will walk you through the controls, show you how to select your class and weapons, and show you how to drive vehicles.  Once you go through this training, you're thrown into a city-style fighting area.  The gameplay type in this zone is Capture The Flag.

It's currently the rainy season in training zone.  It rains most of the time and thunderstorms are frequent.

This zone is currently in Capture The Flag mode.  That means you and your team will have to go and secure each flag.  There are several different classes to help you with this.  Infantry, Medic, Engineer, and Snipers are the primary classes here.  The Engineer class will allow you to build sandbags and turrets to help defend the flag.  Snipers are helpful, but the strength comes with the Infantry and Medic classes.  They'll have the firepower and healing to support your base.


This is the training area in the zone.  You can see the walkthrough that you can do.  It's also optional - if you've done it before, you can skip it and head to the teleporters to be dropped back into the fight.

Zone 2:  Desert Assault

Desert Assault (DA) is an intermediate zone.  The map is bigger than CTZ and more open.  While this map is also in CTF mode, there is a major difference:  some of the flags can be moved.  Your player can pick up a flag and place it wherever they want.  

Desert Assault starts with the same classes that CTZ has:  Infantry, Medic, Engineer, Sniper.  It also adds two additional classes:  Heavy Infantry and TACP.  TACP is a newer class that I'm still working on.  Right now, the big advantage is that it will allow you to call in air strikes.  In the future, it'll also allow you to drop beacons that mess with the enemies radar as well.

Heavy Infantry will be important here because DA has a lot more vehicles.  There are 2 different tanks types, UTVs, and Mechs.  Each one of these vehicles has its own advantages and will go a long way in helping you capture the flags.

Desert Assault is currently going through Winter.  This means that it snows frequently.  It's usually light flurries, but every once in a while a Blizzard rolls through.

Game Info
SpecFreq was originally written in Godot 3.5 and C#.  After about 9 months of development, I decided to move it to Godot 4.3.  This was a fun adventure.  It took about a month and a half to transition the entire codebase.  The game is split into several different parts.

Client - This is the game client itself.  It's what the players use to play the game.
Game Server - This is the multiplayer game server.  It's where most of the game logic happens.
Load Balancer - This is what determines how many game servers to spawn.  Zone designers can pick a maximum number of players per zone.  If that number of players is reached, the load balancer will spawn another game server for players to join.  Players can also create their own private arenas and the load balancer will mange that as well.
Chat Server - All in-game chat functionality goes through the chat server.
Store Server - Buying ammo and weapons in the game goes through the store server.

I'm hosting all the servers on AWS right now.  

Zone Editor
When I started SpecFreq, I knew early on that I wanted players to be able to create their own zone.  It wasn't until about 2 months ago that I really started that part of the game.  I designed the game from the beginning to support mods, but it took me almost a year to get to the point where I could actually put time towards that.

Let me preface by saying that the zone editor isn't released yet.  I'm very, very close - I just have a few small things to work out.  The zone editor itself is Godot 4.3.  You'll be able to clone down a repository with a Godot project, some 3d resources, and copies of the servers and client for you to run locally.  There's a help file in the repository that talks about how you set up your zone, what each XML file does, and how to set up your 3d.  My goal is to have very minimal C# coding required, if any.  Any C# that you have to do will be very easily explained.  If you want an idea of what it looks like, check out my devlog:  



Right now, my biggest issue is getting players.  I haven't spent any time marketing the game because I didn't think it was ready for it.  I have an awesome Discord channel with some old friends that help me playtest, but the game is pretty quiet.  I'm somewhat ok with that for now because I still feel like I have some fine tuning to do before releasing to the masses.  

The game is available on Steam at https://store.steampowered.com/app/2723080/SpecFreq/ and is free.  Feel free to jump on and try it out, but you might be a little lonely.  I did have a Bot Server running, but I haven't upgraded it to Godot 4.3 yet.  I'm hoping to coordinate a bigger gameplay session sometime in February.  This game is a really fun side project of mine and my full-time job takes priority, so I only get to dev a few hours a week unfortunately.  Once I feel like the game is polished and ready, I'll start putting time towards actually marketing it and trying to get more players.

Also, for those of you thinking this looks familiar, you're probably thinking of one of my favorite old games:  Infantry.  I played that game a ton when I was younger.  I'm still on their Discord channel and hop on sometimes.  This game is my modern take on it.  If you join me on Discord, you might see some old names that you recognize from back in the day Smiley

Ok, thanks for taking the time to read through this whole post!  I'll keep this updated as I continue to dev the game.  I also post a bunch of development videos on Youtube.  I'm also frequently on my Discord channel if you all want to join!  I'll see you in-game!
« Last Edit: January 01, 2025, 10:10:32 PM by dangerz » Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #1 on: January 01, 2025, 08:46:24 PM »

This is the dropship you start with in Desert Assault.


Inventory Selector.


Here are the currently available vehicles in Desert Assault.  There are 2 Tank types, a UTV, and a Mech..


Here are some of the vehicles in Combat Training Zone.  There is a Tank, UTVs, and some civilian vehicles..


Here's the actual training area in Combat Training Zone..

Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #2 on: January 01, 2025, 08:46:33 PM »

Reserved
Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #3 on: January 03, 2025, 10:01:32 AM »

Put together a quick video showing some of the vehicles currently in the game.  You can also see some of the weather effects in the game.



Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #4 on: January 07, 2025, 06:57:02 PM »

Released a new build tonight.  It is a combo of bugfixes and new features.  I updated the UI a bit to make it look a bit more modern.  I was getting feedback that players didn't like all the gray.



I also added a new Close Air Support weapon for the TACP.  Hard to capture this one in a screenshot, so here's a quick video:





I'm starting to add more audio.  I don't spend enough time on that part of the game, and I know it adds a lot to the immersion.  I'm going to try and find some areas that feel dead from an audio perspective and see what I can do to wake them up.

Here's the full changelog for this release:
Version b.29 Bugfixes
(Client) Cleaned up code that switches zones.
(Client) Updated UI
(Client) Fixed bug in recharge UI
(Client) Added Close Air Support to TACP class
(Client) Fixed Bullet Hole Color
(Client) Added Audio for different events (Air Support, No Fire Areas, Drop In)
(Client) Fixed bug where winning team text label was being cut off
(Server) Added ability to custom set the flag capture rate as well as team win rate
(Client/Server) Fixed character weapon collider areas
(Client/Server) Added radio calls
(Client/Server) Fixed bug where bullets weren’t always registering a hit
(Server) Added support for Close Air Support
(Desert Assault) Updated Map
(Training Zone) Updated Map
Logged

Bombini
Level 3
***



View Profile WWW
« Reply #5 on: January 08, 2025, 03:18:38 AM »

Very nice! Ping me if you need a tester.
Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #6 on: January 08, 2025, 04:03:11 PM »

Very nice! Ping me if you need a tester.
Appreciate it, will do! I'm having issues with the Mac build right now.  Linux and Windows are still good.  Once I figure the Mac build and find a good time to test in February, I'll let you know.
Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #7 on: January 12, 2025, 09:58:15 AM »

Quick little update for today.  I wanted the zone designers to have the ability to define their own 3d models and classes.  This video is the first test of that capability:





I used a zombie 3d model that I got off of fab.com.  I'm not good with 3d or animation, so I just buy stuff from there.  Zone designers can now build their own 3d models, create their own Godot scene for it, and assign attributes to it all from the SpecFreq API.  I'm going to keep some default models as part of the client itself so people don't have to create their own models if they don't want to.

Here's what the code looks like when you just want to use a default model.

Code:
        CharacterAPI infantryCharacter = new CharacterAPI(SpecFreqAPIEnums.CharacterTypes.Character0, "Infantry", "Light duty infantry character");
        infantryCharacter.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.HandToHand);
        infantryCharacter.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.HandToHand);
        infantryCharacter.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.Light);
        infantryCharacter.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.Light);
        infantryCharacter.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.Heavy);
        infantryCharacter.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.LightBuild);
        SpecFreqAPI.AddCharacter(infantryCharacter);

Here's what the code looks like when you want to create your own.  There are additional parameters that you can set as well.  I'm working on full documentation for the API.

Code:
        CustomModelCharacterAPI zombieCharacter = new CustomModelCharacterAPI();
        zombieCharacter.WalkSpeed = 300;
        zombieCharacter.RunMultiplier = 2.0f;
        zombieCharacter.SceneFilePath = "res://DesertZone/Scenes/Characters/Zombie.tscn";
        zombieCharacter.ModelMeshInstanceFilePath = "res://DesertZone/Scenes/Characters/ZombieModel.tscn";
        zombieCharacter.ModelMeshMaterialTRESFilePath = "res://DesertZone/Scenes/Characters/ZombieMaterial.tres";
        zombieCharacter.ModelMeshMaterialTRESBehindObjectsFilePath = "res://DesertZone/Scenes/Characters/ZombieMaterial.tres";
        zombieCharacter.ModelMeshAnimationPath = "AnimationPlayer";
        zombieCharacter.ModelMeshMeshInstancePath = "RL_BoneRoot(0)/Skeleton3D/3dmodel";
        zombieCharacter.AnimationIdleName = "Idle";
        zombieCharacter.AnimationShootName = "Attack";
        zombieCharacter.AnimationRunName = "Walk";
        zombieCharacter.Stealthy = true;

        CharacterAPI zombie = new CharacterAPI(SpecFreqAPIEnums.CharacterTypes.Character6, "Zombie", "Weird Zombie Guy");
        zombie.SetCustomModel(zombieCharacter);
        zombie.AddInventorySlot(SpecFreqAPIEnums.InventorySlotType.HandToHand);

        SpecFreqAPI.AddCharacter(zombie);

For the create-your-own code, you can see that I define the CustomModelCharacterAPI up above it.  I then pass that into the CharacterAPI as a custom model.  When the client reads it in, it triggers it to use the custom model instead of the default.

The zone designer still has to define the scene.  I think I can create a default scene so they don't have to do it each time, but I feel like it's going to be very different for each custom model that it might not do much.

I struggled with how to make it work in Godot 4.  I thought it could be as simple as loading the scene, casting it to a custom class I have that inherits Godot's CharacterBody3D object, and then using it as normal.  Unfortunately Godot had other ideas and it kept throwing errors telling me it can't cast it to my custom class.  What I ended up doing is loading the scene and copying all of its nodes over to a new scene, applying my custom class, and then treating it like any other character.  It doesn't feel right, but it works.

Here's what that looks like:

Code:
                CharacterBody3D controllableCharacterBody3d = (CharacterBody3D)_scene.Instantiate();
                controllableCharacterBody3d.SetScript(FileLocationsManager.CustomClass_ControllableCharacter);
                _controllableCharacter = new ControllableCharacter();
                Godot.Collections.Array<Node> children = controllableCharacterBody3d.GetChildren();
                foreach (Node childNode in children)
                    _controllableCharacter.AddChild(childNode.Duplicate());

I don't know why it doesn't feel right - I feel like I should be able to just cast it since my ControllableCharacter class inherits CharacterBody3D, but Godot just doesn't allow it.  No big deal.  This works for now.

I still have some code cleanup to do.  I don't like to have open strings like that if I don't need to, so I'll move that over to a static class I have that stores all the file locations. 
« Last Edit: January 12, 2025, 10:06:07 AM by dangerz » Logged

dangerz
Level 0
***


~


View Profile WWW
« Reply #8 on: January 15, 2025, 08:30:05 PM »

Updated the game to b.30 tonight.  Here's the changelog:

Code:
Version b.30 Custom 3d Models (1/15/2025)
(Client) Characters now leave footsteps.  This is configurable per character type. Snipers and TACP don’t leave footsteps.  Footsteps are also able to be toggled on/off for your individual client.
(Client) Character types are no longer hard coded.  This opens up the ability for zone designers to have their own characters.  There are a total of 40 slots for zone designers to utilize.
(Client) Converted internal slot type enum over to the SpecFreqAPI slot type
(Client) Converted internal project type enum over to the SpecFreqAPI projectile type
(Client) Added Slash weapon
(Server) Added ability to define important character attributes inside zone xml configuration file
(Server) Fixed bug where players couldn’t enter vehicles sometimes.
(Server) Removed hard coded character types.
(API) Added Zombie Hand To Hand to slot type
(API) Added ability to have custom 3d models for characters.
(API) Added ability to set camera angle and size.
(Client/Desert Assault/Training Zone) New SpecFreqAPI

I'm going to go back to focusing on the zone editor again.  I keep going back and forth due to finding things I want exposed in the API.  The only thing left before releasing the zone editor is making an easy editor for the zone xml config files.  I built something in C#, but I honestly hate it.  I'm going to make something that's web based instead.
Logged

Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic