Coder Social home page Coder Social logo

thetawavegame / thetawave Goto Github PK

View Code? Open in Web Editor NEW
159.0 2.0 9.0 218.65 MB

A physics based, space shooter game made with Rust and the Bevy engine.

Home Page: https://thetawave.metalmancy.tech

License: MIT License

Rust 98.26% Shell 0.50% HTML 0.13% Python 0.58% CSS 0.40% JavaScript 0.13%
2d bevy game physics rapier spaceshooter

thetawave's Introduction

Demo Build Discord License: MIT

What is Thetawave?

Thetawave is a physics-based space shooter with procedurally generated levels, diverse foes, and distinct characters. As an open-source project, it invites collaboration and creativity from the community, allowing enthusiasts and developers to contribute to its evolution. This aspect of open-source development adds a unique dimension to Thetawave, as it grows and diversifies with inputs from its user base. Engaging in both gameplay and development, players and developers alike can experience the thrill of space combat while shaping the game's future.

Gameplay

Controls

Action Keyboard ๐Ÿ–ฎ Controller ๐ŸŽฎ
๐Ÿ•น๏ธ Movement 'WASD' / Arrow Keys D-Pad
๐Ÿ”ซ Fire Weapon Left Click / Spacebar Right Bumper (RB)
๐Ÿ’ฅ Special Ability Right Click / Shift Left Bumper (LB)

How to Play

Objective: Protect the planet from invading enemies!

Game Over Conditions:

  • When all players' health bars are depleted from damage.
  • When the blue defense bar is depleted (occurs when enemies reach the bottom of the arena).

Power-Ups:

Wrenches restore health.
Gems increase fire rate.
Armor negates damage.
Energy orbs give additional projectiles.

Special Mechanics:

  • Letting cargo hauler mobs reach the bottom of the arena heals the defense bar.

Building and Playing Locally

While you can play in the browser (works best on Google Chrome...for now), you can play offline in a few ways. The simplest way to play a native build of the game offline is to download the latest Github release for Windows or Linux. Then run the executable.

To run the game after compiling locally, do the following.

  1. Clone the repository git clone https://github.com/thetawavegame/thetawave.git

  2. Download our assets.

    One way is to download a recent Linux .tar.gz release, and extract the assets/ directory in the tarball into your local assets/ directory. We do so in the following Bash command. In Windows, just copy the files manually. Replace the link with that of a build from the latest release, especially if you are running off of the main branch.

    curl -Ls https://github.com/thetawavegame/thetawave/releases/download/v0.2.0/thetawave-0.2.0-x86_64-unknown-linux-gnu.tar.gz  \
        | tar -xz -C assets/ --strip-components=2 --wildcards "*/assets/*"

    If when running the main branch you still have missing assets, it means that we are using assets that are not yet published in a release. In that case, you might checkout the latest tag. Find it by running git tag and then execute, for example, git checkout v0.2.0.

  3. Compile/run using Cargo as follows.

    cargo run --release
  4. Enable the install features you want. Our install features are as follows.

    • cli - Enables start up parameters on the built thetawave executable.
    • storage - Enables writing user stats to a local SQLite database.
    • arcade - Enables arcade-specific features, namely through serial communication to a microcontroller.

    One can run using install features as follows.

    cargo run --release --features "storage,cli,arcade"

How to Contribute

We welcome contributions from all community members. Your insights and improvements help us grow.

For complete guidelines on contributing, please see our Contributing Guide. It includes all the necessary information on how you can participate in shaping Thetawave.

Team

@cdsupina ๐Ÿ’ก
Role: Creative Director
Contribution: Visionary leadership and creative oversight.
@varoonp123 ๐Ÿ’ป
Role: Lead Programmer
Contribution: Architect of the game's deployment and technical features.
@LordDeatHunter ๐ŸŽจ
Role: Lead Artist
Contribution: Key driver of the game's visual style and artistic assets.

External Assets

๐ŸŽต Music

Joel Schuman - Original Game Soundtrack

๐Ÿ“ข Sound Effects

Space Ultimate Megapack - Comprehensive Space Audio Collection

๐ŸŽจ Art

Kadith's icons - Game Iconography

๐Ÿ“œ Fonts

Space Madness - Font Design by Rose Frye

thetawave's People

Contributors

cdsupina avatar dh337071 avatar lorddeathunter avatar varoonp123 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

thetawave's Issues

Remove Empty Space Around Sprites

Nearly all of the sprites in the game have a empty boarder around the art. I deliberately did this to prevent sprites from "leaking" into different frames. We should try removing this boarder to improve the workflow of adding new sprites to the game. If we still encounter the issue we should ask in the Bevy discord what we can do to address it.

Change color of EnemyPassBarriers

Right now all of the barriers in the game are blue. We should change the color of barriers that only let enemies through to red to differentiate them.

Add giblets

One mobs are destroy they should spawn giblets (small chunks of the mob's artwork) that fling in random directions.

Add debug lines for colliders

While Rapier has a debug system for colliders. It is difficult to use effectively and requires commenting of major sections of code to remove sprites. Let's instead use the bevy_debug_lines plugin to draw debug lines where colliders are instead just like in Amethyst Theta Wave.

https://github.com/Toqozz/bevy_debug_lines

Debug lines should only appear in debug builds: cargo run

They should not appear in release builds: cargo run --release

Defense damage feedback

Players are still often confused when they fail a run due to defense damage. We need to make it more clear in-game that allowing enemies to get past you is bad and will lead to a loss.

We could try flashing a red tint at the bottom of the screen and maybe even adding some "!" alert text that tells the player that they can't continue to allow enemies past them.

Interact with neopixel LEDs in arcade machine

When the arcade feature is enabled. The arcade should communicate with the microcontroller to set patterns for the led strips.

  • Main menu, instructions: lights show transition between green and purple
  • Character selection: lights should be off and turn on green when the player on the corresponding side joins
  • Game:
    • Flash red on corresponding side when damage taken to health
    • Flash red on both sides when defense damage taken
    • Flash blue when defense healed
    • Otherwise fade between green and purple
  • Victory: exciting happy pattern!
  • Game over: sad pattern :(

Options Menu

  • Volume control #52
  • Resolution control #102
  • Input mapping
  • Light settings
  • Bloom settings

Create "Jellyfish" Boss

People seem to really like the "Crustling" mobs. We should create a miniboss based off of the mob.

Add icon

We need to add an icon for the game that will appear in the taskbar.

Star Explosion Effect Doesn't Work in some Linux Environments

The star explosion effect doesn't work as intended on the linux version of the game. To create the effect, the star light intensity is increased after the defense bar has been depleted. Creating the effect shown in the gif below. On Linux, the light just seems to be come dim instead of increasing.
star_explosion

Move Health struct to its own component

Health is currently a struct and part of the core component of things that use it (PlayerComponent, MobComponent). We should make health its own component.

Improve ability charging UI

Change ability UI to be more clear. We could use Dota style ability squares, this we way we can easily add more ability squares if more than one ability is added to characters.

Compile ron data files into the game

The ron data files located in assets/data should not be able to be accessed and changed after the game is compiled. We should compile these with the rest of the game.

Player damage feedback

The player character should also flash when damage is taken like described in #34. We should also give the border of the screen a red tint that appears and fades when a player character takes damage.

Damage counter effect

Whenever anything takes damage there should be a colored text that spawns showing the amount of damage that was done as a float with a single decimal place. This will aid in helping players understand exactly how much damage they are dealing and receiving.

More formations!

Thetawave can always use more formations. Add a new formations in assets/data/formation_pools.ron. Make sure that the formation is appropriate for the pool you are adding it to (easy, medium, or hard).

Various damaged states for mob sprites

We should create damaged states for all of the mobs, especially the boss, so that as you do more damage, the texture changes.

We would probably want 3 states of damage total, one that looks normal for near full health (which we already have), one for a little damaged, and one for very damaged.

These should all be added to one sprite sheet along with the existing "normal" state for mobs and any future states that require an adjusted texture.

Enemies and Formations

Enemies should periodically spawn in formations defined in-game data files.

All enemies from Amethyst Theta Wave should be transferred.

Divide behaviors into spawnable behaviors and mob behaviors

Currently, all behaviors are stored in the spawnable component, but there are some behaviors currently in the game that don't make sense to be able to be applied to all spawnables. Notably, SpawnMob and ExplodeOnImpact.

Also, when the FireBlast behavior is added it should be added as a mob behavior.

Let's add a behavior property to the MobComponent.

pub struct MobComponent {
    ...
    behaviors: MobBehaviors,   
}

Change crustling mob behavior

This mob currently has the same behavior as the strafer mob. We should change this mob so it has a more unique movement and attack pattern that makes sense for jellyfish-like creature.

Port from Amethyst Engine to Bevy

This issue will outline steps that need to be taken to port the game to Bevy. They will be listed and grouped in the order they should be done. You can find the Amethyst Engine code here: https://github.com/amethyst/theta-wave

  • Step 1
    • Player Movement
    • Debug Lines #9
    • Arena Borders #4
    • Game size/scaling #7
    • Background art #10
    • UI Placement
    • Config and data files #7
    • Pause game #22
  • Step 2
    • Formations #12
    • Player Health #16
    • Defense #17
    • Firing Blasts #15
    • Explosions (Projectiles and Mobs) #18
  • Step 3
    • Consumables #21
    • Items
    • Barrel Roll Ability #28
    • Store
    • Z Levels (Sprite Layering) #22
  • Step 4
    • Repeater boss #26
  • Finalize
    • Documentation Comments
    • Code Comments
    • Module Organization
    • Log Important Data

Change resolutions in-game

Users should be able to change the resolution in-game through an options menu. The game should adjust nicely to any chosen resolution.

  • include many common resolutions
  • fullscreen
  • borderless

Volume control

We need a way to control the volume with UI elements in the game. Ideally we want a "master" volume control, and then separate volume controls for music and sound effects. This should be part of the options menu.

Beam ProjectileType

Beam projectile will be the third projectile type along with the "blast" and "bullet" types. It should have the following attributes:

  • piercing, goes through all mobs
  • while intersecting with mob, does damage every tick
  • has a variable range and width

Thetawave 'full' game smoke test

We should be able to assert the the game can start and stop when the vast majority of plugins (except some graphics ones) are loaded. There are ways bevy can panic at runtime like if resources were not inserted. This would go a long way to preventing many kinds of regressions.

Replace Options Config with CLI Parameters

          I think we should delete this. CLI parameters are a more standard way to do this. `thetawave --resolution 1920x1080 --fullscreen` and those can be used for launch options in steam. I dont think we want others to change this via ron (99.99% of people dont know what RON is, but almost all programmers can do `thetawave --help` and set CLI params). 

pub struct GameInitCLIOptions {

Atleast outside of the browser, we can save user settings in sqlite. Keeping a couple of preconfigured ones as ron is...fine for now (if they can be toml and are simple enough, I think toml is better and more portable/standard; i dont particularly value serde's data model enough to have a strong preference for ron).

Originally posted by @varoonp123 in #108 (comment)

Make "Power" UI Clearer

The UI for indicating the power level (fire rate) of the player is not clear on what it represents. This should be adjusted and re-labeled so that players can more easily understand it.

Load backgrounds from scene files

Bevy has the capability to load entities from scene files. https://github.com/bevyengine/bevy/blob/main/examples/scene/scene.rs

Instead of hardcoding backgrounds like what was done in Amethyst Thetawave, we should define the entities in these scene files. Currently, there are gltf model files for the earth and sun located in the Amethyst Thetawave repo. Since everything else in the game (player, enemies, items, etc) is generated at runtime, the scene file should only contain these background model files.

Provide feedback that hitting certain mobs is bad

Nearly every new player to the game immediately starts shooting at the green cargo hauler mobs which are allied with the player. We need to provide feedback in-game to the player when certain mobs are hit that this is bad and that they should stop. Maybe a warning and audio indicator.

Fade projectile despawn animations using a Bevy system

@LordDeatHunter improved the textures and animations for projectiles. We decided not to add transparency to texture itself to give the fade out effect, but rather use Bevy to provide a fade out effect.

This fade out effect should be strong enough to eliminate the jarring "popping out" appearance that no transparency in the animation gives.

Create a premade skippable tutorial level

We need a level that explains all of the mechanics Thetawave to players. Let's make a skippable tutorial level that gives players instructions on how to play the game.

Normalize game coordinates

Currently, the coordinates of the game don't make much sense. This is apparent from the player spawning at (0,0), which is located near the top right of the game window. (0,0) should be the exact top left of the game window. We need to figure out why the coordinates are where they are and normalize them to be more sensible. This behavior is likely due to bevy_rapier.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.