The goal of this Proof of Concept is to explore using Godot, learning GDScript, and seeing if I can make a very rough RTS game. It's going to be very simple, with incredibly dumb AI, simple controls, and only a few units. It should be complex enough to count as an RTS, even if it's a little light on the "S" part. The goal is to use the ship models from the wiki with no textures, maybe a station model, our old, trusty purple skybox, some of the asteroids, and possibly drop a sphere with a free planet texture for a planet or moon.
The development of the PoC will proceed in a few main phases:
Phase I: Technically a Game
Phase II: Actually a Game
Phase III: Polish
Phase IV: Multiplayer
Movement UI Concept
Attack UI Concept
This will be the standard level from Precursors, using our already created skybox and the asteroid models. The asteroids will be positioned roughly in the middle of the map, while the player starts at the bottom and the enemy / second player starts at the top.
For Phase III, we can look at adding space dust or a nebula or something visual to make it more interesting.
The camera will be a semi-fix orthographic camera with zoom in/out and panning abilities. We may play with allowing the map to be rotated 90° at a time. (The enemy's gate is down, after all.)
Each side will have the following:
Each of these ships will have the same basic stats:
'at will'
, 'as ordered'
, 'defensive'
, 'stand down'
] - The ship's offensive posture.'offensive'
, 'nominal'
, 'defensive'
, 'full defensive'
] - The ship's defensive posture.Additionally, they will have these stats which control the arcade-like physics / movement:
The units will need to have some basic physics, but they just need to move/look close enough. They don't need to have accurate collisions, or realistic physics; as long as the game feels fun, we're working at unrealistic scales anyway; we are trading realism for fun.
Note: In previous games, we had a 'target velocity' controller that was a bit crazy. Instead, it looks like we want a "PD" controller, or a "PID" controller. Look at control systems for real-world solutions to this problem. (See here for some basics.)
We will be starting with very basic actions for the units, just "move" and "attack" at first (Phase I). Then (Phase II) we will add actions that modify a unit's stats (Defensive Postures) and actions that modify unit behavior (Offensive Postures).
The move action will allow the player to set a destination target. The ships will accellerate to their NominalLinearVelocity
heading towards the target, then decellerate as they get closer to it.
All movements will be assumed to happen on an etherial grid at Y=0
. All targets will assume the y
component it 0, so everything roughly heads towards the same height on the map.
Note: we can experiment with full 3D movement, but we'll have to implement a Homeworld style movement system.
A secondary action much like move is follow, where the unit's movement target is another unit. This means the taget location needs to be updated ever tick, and course adjusted. The actual destination is simply "near" the target, not on top of it.
Initially (Phase I), attack will be automatic; units will attack the nearest enemy to them, and only switch targets once their current target is out of range for long enough. Units will follow their target until it is destroyed, or they switch targets because it's out of range. If there's no targets in range, they return to their last position specified by 'move' action.
In later versions (Phase II+), attack will be modified by the ship's DefensePosture
; most postured reduce attack power in exchange for damage reduction.
Special actions are unit specific. Those will be decided on later, after the core of the game exists.
This action controls how the ship responds to threats. The different levels are as follows:
'at will'
- Attack any enemies in range. (i.e. the Phase I auto-attack)'as ordered'
- Attack any targes specified by the attack action.'defensive'
- Only attack ships that attack this unit or allies.'stand down'
- Never attack other units.All the action does is to set the posture, and the unit's AI uses this posture to determine it's actions.
This action modifies the stats of the ship. The different levels are as follows:
'offensive'
- -20% Soak
, +10% Attack
'nominal'
- +/-0% Soak
, +/-0% Attack
'defensive'
- +10% Soak
, -20% Attack
'full defensive'
- Special: 98% of damage soaked, unable to attack (without special weapons), 20s time limitThe 'full defensive'
posture is unique; it blocks most (but not all) damage, but the unit is unable to attack. It only lasts a little while (for now, 20s, but might make this dynamic in the full game).
When a ship hits 0
Hull
, the ship is considered 'disabled'. It no longer responds to commands, no longer moves, and its Soak
is set to 30%
of it's normal Soak
value. The unit counts as destroyed for the purposes of the victory condition. Its model is still on the map, though it will rotate slowly in random directions.
While disabled, a ship may still be targeted and can be 'destroyed' (-50% of it's maximum hull
value). If a ship is 'destroyed', it is removed from the map.
The reason for this is for future gameplay ideas: salvaging enemy wrecks, or repairing your own units. Ships are going to be pretty costly and slow to produce; utilizing wrecks is going to be a big part of the game, especially for the Privateer or Confed factions.