RTS Project

The goal is the make a RTS game in an Original Scifi setting.
Art style is yet to be determined

*Disclaimer* This page currently only focuses on the foundation of the systems that need to be in place for the project AKA programming
The graphics 99% placeholder, and Unit Audio Responses are taken from RTS game Dawn of War II for educational purposes only. I do not intend to use them in production.

Setting the terms

RTS games excel when their complex systems work efficiently and thus allow the player's actions to be responsive. That means this game needs to do that as well. I intend to optimize this game for current gen systems, well above the 60 fps mark. As such, my main focus has been improving project component modularity and efficiency.
With that out of the way, lets see what new Systems I've added, and what has been re-designed...

Re-Designed Systems

Scriptable objects

Many of the games systems have been re-designed to be as data-oriented as possible with the use of scriptable objects. This allows for much better project management as the project grows, and setting up new things wont become progressively harder.
These Systems include:
- Audio (Unit Responses, Guns, Impacts and other effects)
- Units (Stats, armor and attack type, UI icons)
- Projectiles / Ammo types

Events, Custom Update Loops and Space Partitioning

These systems combined are massive factors in reducing the amount of unnecessary cpu usage. I was also able to implement a more advanced way of checking for nearby enemy units with the use of Space Partitioning, using a so called K-D tree. These systems reduced the cpu usage with Unit logic to great effect. Due to these optimizations, 50 vs 50 unit battle barely raises cpu usage. While these systems take a bit of time to get used to and setup, it's easily worth the effort and essential for the game I intend to develop.
Currently implemented:
- Mouse input
- Updating UI (Unit HP, enabling and disabling elements)
- Unit Logic & Commands

New Systems

Audio processing & Music

Volume and filter roll off over distance: Most of the sounds will implement processing to make them more quiet the further the camera is from them to create a sense of scale and realism. Currently combat sounds are the only ones that have this implemented.
Audio clip limiting: Many things are happening at the same time in an RTS game just by itself, and also the players actions cause things to give audio feedback almost each second. This makes it essential to have a system in place to limit the amount of audioclips playing at a given time. Unit command inputs are a great example: the combat of this type of game requires multiple actions per second and having that many audioclips playing will result in overall a bad experience.
MUSIC made by Jesse Kiiskinen
This guy's music deserves recognition. After I don't know how many hours of developing this project, the soundtracks playing in-game still don't sound boring to me and that just goes to show how well the tracks fit in thematically.

Fog of war

A must have feature in RTS games, but a whole new beast for me as a developer. This task required me to delve deep into programming shaders, and I'm glad to say that the result is *mostly* what I wanted. In terms of performance / looks, i balanced this a bit heavier on the looks side. I think the tradeoff was well worth it.
Current limitation: Does not take the Y axis(height) into account.

UI & Minimap

Altough placeholder, I like the look of the "in-game" scene UI already in terms of layout and sizing.
The minimap works as intended, but as I have not included almost any optimizations on the graphics side, the minimap is taking quite a big of a performance hit. This will be mostly fixed, by simply rendering a low quality rendered mesh for the ground. Currently, the minimap renders the terrain as a whole each frame.

What's next?

AI & Base building

I am well aware that some core features are still completely missing from the game, including Advanced AI behaviours and commands, Base Building. This has been a concious decision that I learned from my past mistakes. In order to keep the project moving forwards and not sideways, I need to write easily understandable, scalable code. That being said, I've made huge progress on that side of things and I'm very close to the point where I can start working on a new system. The ones above being considered, as they are high on the priority list.

More Units!

With the new additions of space partitioning and events, I'm confident I can soon start adding in different types of units and behaviours. As it stands, there's only two units in the game, and they even share all the same functionality. The existing systems regarding unit logic have been re-designed to have the ability to dynamically add more units, unit types, ammo types and so on.