Releases: thetawavegame/thetawave-legacy
v0.1.7 "Organization"
The primary focus of this release was to organize how source files are categorized into directories and modules.
Organization
- Divided project into thetawave_lib and thetawave_game workspaces
- Removed components directory
- Removed resources directory
- Removed systems directory
- Removed entities directory
- Added boss directory/module
- Added misc directory/module
- Added motion directory/module
- Added phases directory/module
- Added player directory/module
- Added spawn directory/module
- Added spawnable directory/module
- Added store directory/module
- Added visual directory/module
- Added weapons directory/module
Misc
- Added blast range for mobs and players
- Added
Timer
for managing periodic events - Added
Health
for managing health of players and mobs - Began adding comments for everything in the game
v0.1.6 "Loot"
Items
- Blast Repeller
- Tractor Beam
Mobs
- Money Asteroid
Misc
- Fixed bug: index out of bounds error when there are less than two phases in level
- Added
Modifier
enum for implementing item and consumable effects - Items and Consumables are now a collection of "Modifier" enums
- Added
DropRolls
for defining how many loot rolls a mob has and different drop tables to hold different types of loot odds - Consumable drops from enemies now have random initial movement and spin
- Items and consumables now attract to the player when nearby
Controls for playing the game are here.
v0.1.5 "Formations"
Focus
The focus of this release was to organize how Spawnables
are spawned into the level. Previously, levels only contained a phase of randomly spawning enemies and a boss. In the Formations update there are four types of phases that can be used to construct a level:
InvasionRandom
InvasionFormation
Rest
Boss
The InvasionRandom
phase takes in an InvasionRandomPool
parameter and spawns Spawnables
from that pool at random. Below is an example of an InvasionRandomPool
called Level1Easy
defined in spawner.ron.
Level1Easy: [
(
spawnable_type: Some(Mob(Enemy(Drone))),
weight: 1.0,
period: 1.5,
),
(
spawnable_type: Some(Mob(Enemy(Pawn))),
weight: 0.9,
period: 2.0,
),
(
spawnable_type: Some(Consumable(Money1)),
weight: 0.2,
period: 0.3,
),
(
spawnable_type: None,
weight: 0.5,
period: 0.3,
)
],
The spawnable_type
property is the type of spawnable in the pool. The weight
property is how likely the Spawnable
should spawn relative to other Spawnables
. The period
property is how long the spawner will wait before spawning something else.
Similarly, the InvasionFormation
phase takes in an InvasionFormationPool
parameter and spawns a vector of Spawnables
with positions from that pool at random. Below is an example of an InvasionFormationPool
called Level1Easy
defined in spawner.ron.
Level1Easy: [
(
formation_spawnables: [
(
spawnable_type: Mob(Enemy(Drone)),
position: [150, 310],
),
(
spawnable_type: Mob(Enemy(Drone)),
position: [180, 300],
),
(
spawnable_type: Mob(Enemy(Drone)),
position: [210, 310],
),
(
spawnable_type: Mob(Enemy(Pawn)),
position: [100, 390],
),
(
spawnable_type: Mob(Enemy(Pawn)),
position: [260, 390],
),
],
weight: 1.5,
period: 10.0,
),
(
formation_spawnables: [
(
spawnable_type: Mob(Enemy(Pawn)),
position: [110, 390],
),
(
spawnable_type: Mob(Enemy(Drone)),
position: [150, 370],
),
(
spawnable_type: Mob(Enemy(MissileLauncher)),
position: [180, 300],
),
(
spawnable_type: Mob(Enemy(Drone)),
position: [210, 370],
),
(
spawnable_type: Mob(Enemy(Pawn)),
position: [250, 390],
),
],
weight: 0.8,
period: 12.0,
),
(
formation_spawnables: [
(
spawnable_type: Mob(Enemy(StraferRight)),
position: [180, 300],
),
(
spawnable_type: Mob(Enemy(StraferLeft)),
position: [180, 320],
),
(
spawnable_type: Mob(Enemy(StraferRight)),
position: [170, 340],
),
(
spawnable_type: Mob(Enemy(StraferLeft)),
position: [190, 360],
),
(
spawnable_type: Mob(Enemy(StraferRight)),
position: [160, 380],
),
(
spawnable_type: Mob(Enemy(StraferLeft)),
position: [200, 400],
),
],
weight: 1.0,
period: 8.0,
)
],
The formation_spawnables
property is a vector of spawnable_types
paired with an x y coordinate position
. When a formation is spawned, each spawnable in this vector is spawned at the same time at its position, creating a formation. Formations
also have a weight
and period
that works the same as in the InvasionRandomPool
.
The release makes adding a formation by far the most straightforward contribution a contributor can make to the game.
Change List
- New
InvasionFormationPhase
InvasionRandomPhase
updated to use periods and weights- Minor refactors of the
PhaseManager
- Add spawner pools defined in spawner.ron
Strafer
enemy divided into variants:StraferLeft
andStraferRight
- Add parent
SpawnableType
for enemies and allies calledMob
- Data ron files now included in the binary
- Config files now generate at runtime
v0.1.4 "Foundations"
This is the first release since @tigleym joined the project! Together, we have been working hard to refactor the codebase to be more conforming to ECS, and more accessible to new contributors. You can learn more about the revival of this project from our RustFest Global talk. Along the way, we have also added some more fun features! Here is a list:
Items
- Blaster Size Enhancer
- Frequency Augmentor
Consumables
- Armor
Enemies
- Missile
- Missile Launcher
Misc
- Generalized store to sell any kind of spawnable entity
- Giblets!
- Enemy thruster animations
- Blast hit animations
- Cursed scrolling background
- Barriers at the arena borders
- New sound effects
- Started writing a game/contribution guide
Controls for playing the game are here.
Release 0.1.3
-
More items (view readme for full list of item effects)
- quadrupedal tentaclover
- defense satellite
- double barrel
- yithian plague
- spice
-
Items are now purchased from store
- store restocks with 3 items every 10 seconds (I intend to increase this in the future to about 60 seconds)
- items can be purchased by using the 1,2, and 3 keys corresponding to the top. middle, and bottom slots respectively
- when purchased the item is removed from the item pool and spawned at the top of the arena at the same x coordinate as the player
- skipped items will have their weight of appearing again halved
-
Sound effects added
-
3D background with GLTF sun and rotating earth
-
Sprites separated into different sprite sheets by category
Release 0.1.2
- Updated to Amethyst v0.12.0
- 1x and 5x currency drops
- Hauler ally added
- "Phase" system added
This release has one level containing the following phase map:
8 second Rest -> 60 second Invasion -> 8 second Rest -> 300 second Invasion
Release 0.1.1
- Health and Defense drops added
- Minor status bar fixes
- Refactor status bar code
Release 0.1.0
- Core mechanics
- Enemies
- Items
- Stats display panels
- Status bars
- Collisions
- Shooting
- Barrel roll
- Pausing