forked from Winsalot/AutumnRTS
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New plan for developement and some changes
- Loading branch information
Showing
9 changed files
with
162 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
# Micro Tournament | ||
|
||
I got dissilusioned by my ability to finish (or get even close to finish) of this project solo. Since I still feel passionate about making a proper open source RTS I decided to focus on making a smaller game and engine that supports it. | ||
|
||
Basically idea is scale down my planned game into a project that is a subset of traditional RTS: **Micro Tournament**. | ||
|
||
This is not an original name, and describes a minigame where each player controls a small force of units and they fight each other. Winner is usually the one who is most skilled in micromanaging their units and using their abilities. | ||
|
||
Therefore as a subset of traditional RTS this type of game won't implement these features: | ||
|
||
- Resource gathering. | ||
- Army building & unit production. | ||
- Tech tree. | ||
- Multiplayer (maybe someday). | ||
- Bots (enemy units can be spawned with existing order to attack move the player). | ||
- Unit upgrades. | ||
|
||
Instead the game format could look something like this. | ||
|
||
1. Player enters game. | ||
2. From menu player gets to choose a starting army. | ||
3. Once player's army spawns he gets like ~30 seconds to prepare for a fight. | ||
4. Enemy army spawns. They mindlessly A-move player. | ||
5. Fight happens. | ||
6. If player's units die game over. | ||
7. If player wins the engagement then he gets to keep the remaining units and chooses reinforcements from menu. | ||
8. Another fight in the same format. | ||
|
||
So yeah, something like this. | ||
|
||
### Roadmap of features needed to finish this game: | ||
|
||
At the moment of writing none of these are implemented haha. | ||
|
||
- Simulation features: | ||
- Spawn units of different teams. | ||
- Functional unit collision. | ||
- Implemented weapons. | ||
- Implemented active abilities. | ||
- Win/lose condition. | ||
- Interactive map features (teleport units that walk too far away). | ||
- Advanced unit & group control: | ||
- Group orders. | ||
- Pathfinding for groups. | ||
- Schedule orders (shift-orders). | ||
- A-move, M-move, Follow, stop, hold position commands. | ||
- Renderer features: | ||
- Everything. Current godot implementation will need to be rewritten entirely. | ||
- Content features: | ||
- Lots of cool maps. | ||
- Lots of badass units. | ||
- Create levels from 2 things above. | ||
|
||
As you can see from above points, every feature listed (except content) is also relevant for for traditional RTS games. Therefore if I implement them I will have a much simpler but functional game that could be further scaled up to support full rts gameplay. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
//Chill my dude. This file contains list of abilities and subsystems that "cast" them. subsystems Themselves are called from within systems in main game loop. | ||
|
||
// Fuck me. I forgot that I need to pass aditional arguments to subsystems. One more Enum? This is getting crazy tbh. | ||
|
||
use crate::sim_fix_math::*; | ||
use crate::sim_ecs::*; | ||
|
||
|
||
pub enum Ability { | ||
GenericAbility{pw_cost: i32, cooldown_end_at: u64, range: FixF, damage: i32}, | ||
BuildSimpleStructure, | ||
|
||
} | ||
|
||
pub fn use_ability(sim: &mut SimState, ability: &mut Ability){ | ||
|
||
match ability { | ||
Ability::BuildSimpleStructure => build_simple_structure(), | ||
Ability::GenericAbility{pw_cost: _pw, | ||
cooldown_end_at: mut cd, | ||
range: _r, | ||
damage: dmg} => generic_ability(sim, &mut cd, &dmg), | ||
//_ => () | ||
} | ||
} | ||
|
||
fn build_simple_structure(){ | ||
|
||
} | ||
|
||
fn generic_ability( | ||
_sim: &mut SimState, | ||
cooldown_end_at: &mut u64, | ||
damage: &i32) { | ||
|
||
|
||
println!("Casting ability! Deals {:?} damage!", damage); | ||
*cooldown_end_at += 30; // 30 ticks cooldown. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// Simulation rendering decoupling and use of MPSC requries to use types that implement Copy trait. Vec doesn't implement it, therefore I will use fixed size array for abilities. The result is that unit will have a capped number of active abilities. | ||
|
||
/*// This shit sucks either way. | ||
I would prefer to have ability component that holds array of abilities. Seems like a cleaner approach to having a separate component for every ability. | ||
But the problem I am worried about is sim-rend messenger. This part is always trouble. How would a message look like for this kind of data. I think either way I would be throwing around indices. Which might not be that bad though. Idk. | ||
So I guess idea is that rend sends index of ability to use. | ||
And engine informs renderer of ability by sending index and enum value. But that means Ability enum should be decoupled from the component itself. | ||
*/ | ||
|
||
use crate::sim_abilities::*; | ||
|
||
const N_ABILITY_CAP: usize = 3; | ||
|
||
|
||
pub struct ActiveAbilityComp { | ||
abilities: [Option<Ability>; N_ABILITY_CAP], | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
pub mod sim_unit_base_components; | ||
pub mod structure_comp; | ||
pub mod structure_comp; | ||
pub mod active_ability_comp; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.