New Project: 3D Isometric Extraction Shooter
So I've started yet another project, which puts me at three different focuses right now. First is the Vampire Survivors clone I've been posting about a lot, then an AdventureQuest-style game to learn more about creating resources in Godot (eventually using those new inverse kinematic nodes for custom battle animations), and now this new one: a 3D isometric extraction shooter.
Think Zero Sievert crossed with Gray Zone Warfare.
I really caught the itch for that blood-pumping adrenaline extraction shooters bring after trying the SPT mod for Tarkov. I wanted to enjoy it at my own pace without stressing over other players exploiting my lack of experience. Gray Zone Warfare replaced that pretty well for playing the games, but I'm also interested in Incursion Red River. They have great options for customizing difficulty since the guy who made the biggest AI tweaking mod for SPT wrote their AI code. However, it's lacking in some gameplay mechanics: hydration and energy aren't factors, health recovery is extremely basic ("use item to refill health bar"), and there's no prone. And this is after over a year in early access, for some reason.
Zero Sievert is like a 2D top-down version of that but with more depth to health and needs, so that's what I wanted to aim for with my own project.
Honestly, It's More "Composition" Than "Game" Right Now
It's a bit generous to call what I have a 3D isometric extraction shooter. All I have so far is a small number of systems I'm using to start piecing the rest of the game together. I suppose the focus of this project is "composition."
As an example, I have a MovementComponent that can be attached to add movement to any node extending the CharacterBody3D class, since it calls move_and_slide() after taking into account vectors from an InputComponent. Then the InputComponent is a base class extended by PlayerInput and, soon, an AIController, to control their movement actions. Poorly formatted ASCII diagrams incoming...
+-----------------------+
| CharacterBase |
| (Extends CharacterBody3D) |
+-----------------------+
|
+---> [InputComponent] (Base Class)
| |
| +---> [PlayerInput] <-- Human Controller
| +---> [AIController] <-- Bot Logic
|
+---> [MovementComponent]
|
+---> Reads vectors from InputComponent
+---> Calls move_and_slide()
The Inventory Puzzle
The most interesting thing I've had to wrap my mind around is item resources and inventory management. I've had to learn about "data-driven design". Basically the separation of logic and content. Inventories are abstract ideas of grids with items taking up a certain number of cells (that's the data), and then I had to make a UI, mostly created through code outside of a few initial containers, which shows the "content."
I've mostly
been working on making sure the inventory works more or less how I want
it to before moving on to other systems. I also have a ContainerComponent
that can be "looted," but it's just a quick-and-dirty prototype that
ultimately facilitates manipulating inventory data visually with the UI.
Eventually, it'll also need to let the player loot enemies as well as
static loot objects.
+----------------------+ +----------------------+
| DATA LAYER | | UI LAYER |
| | | |
| [Inventory Grid]| <---------> | [UI Grid Renderer] |
| (Item ID + Coords)| Syncs | (Visual Cells + |
| | | Icons) |
+----------------------+ +----------------------+
^ ^
| |
| |
+-------+------+ +-------+------+
| Container | | Loot Window |
| Component | | (Visual View)|
+--------------+ +--------------+
It's been pretty decent progress for having only started a couple weeks ago, though I haven't had nearly enough brainpower in my free time to work on it as much as I'd like.
Multiplayer Dreams
Another
thing I definitely want to try learning is multiplayer, so I'm trying
to build in a way that'll allow me to add co-op later. I'll need to read
up on what the @rpc tag needs to be used for, multiplayer
synchronizer and spawner stuff, and so on, so I can have it all in place
and essentially just plug in the multiplayer stuff when I'm ready.
A Funny Marketing Idea
I have no idea if anyone will ever discover this blog, but I did have a funny idea for an announcement trailer before launching into early access. Basically, I don't indicate multiplayer in any marketing for the game, hoping to generate engagement with people saying "this should have multiplayer." Then I make a video where I'm chatting about it with my friends or testers, saying:
"It's just so crazy how people think adding multiplayer to a game is just as simple as going into global and adding
multiplayer = trueand then you just launch the game and start multiplayer."
And then I basically do exactly that as I'm talking, see new options on the main menu for starting or joining multiplayer, and go:
"Uh... hang on a second. We gotta test some things."
Then I move on to clips showcasing the multiplayer gameplay. It makes me chuckle and think it'd be pretty successful in generating traffic for the game if it got some attention.

Comments
Post a Comment