Git Product home page Git Product logo

shellaga's Introduction

<o[ Shellaga ]o>

A Galaga-like game which runs in the Terminal.

⚡ Quick Start ⚡

Simply checkout the code and run the target via cargo. 🦀

git clone [email protected]:BenLeadbetter/shellaga.git
cd shellaga
cargo run

🔧 Requirements 🔧

Currently shellaga requires a Terminal which supports Kitty terminal protocol extensions.

✏️ Design ✏️

We use the Bevy game engine and it's Entity Component System to handle game logic, run loop, time, etc.

We use Crossterm to handle rendering in the terminal and terminal events.

We use Ratatui to handle drawing ui.

🌟 Contribution 🌟

Contributions are actively encouraged! Please check out the Issues for ideas.

shellaga's People

Contributors

benleadbetter avatar bmwilly avatar

Stargazers

Adam Killam avatar kirill avatar Matthias avatar  avatar  avatar Marco Gazzetta avatar Stephen Waits avatar Rett avatar

Watchers

 avatar

Forkers

bmwilly

shellaga's Issues

Multiplayer

Allow several players to play a single level at the same time in multiplayer mode.

Acceptance Critera

  • There is an option on launch to allow for a multiplayer game.
  • This shouldn't complicate single player mode at all.
  • Single player mode should remain the default.
  • The is a dedicated screen for configuring the two player game. e.g. waiting for additional players to join the session.
  • In multiplayer mode, there is an additional spacecraft for each additional player.
  • Additional spacecrafts are controlled identically for each player from their respective remote systems.
  • This should not have a visible impact on the game's snappy feel.

Design Suggestion

Level serialisation

Add serialisation for the level struct to allow the data to be saved and loaded to disk.

Acceptance Criteria

  • Levels are losslessly serialised to json
  • Levels are losslessly loaded from json
  • The entry point for starting the game is loaded from some default level file rather than from hard coded default level code as it currently is.

Design Suggestion

Use serde?

Diverse weapons

There are additional weapons which the player can acquire. This would serve as a proof-of-concept for adding further weapon types going forward.

Success Criteria

  • There is an additional weapon available to the player
  • Weapons are gained from upgrades
  • The new weapon should be more powerful than the default.
  • The new weapon should change the way a player needs to play.

Allow colour to be used in sprites.

Currently the background and foreground colour fields in the Sprite component are totally when the sprite is rendered.

Acceptance Criteria

  • Foreground and background colour fields of sprites are rendered to the main buffer.

Considerations

It would be nice to use "True Colour" by default for terminals which support it, with a sensible default for terminals which do not.

Add title screen

Add a screen which is the first landing page when the game is started. A new game can be started from here. This page will also be important as further features come later down the line, like settings, loading a previous game, etc.

Acceptance Criteria

  • The page should be implemented using the preexisting ratatui widgets.
  • The screen should include a "start" button
  • The screen should include an "exit" button

Diverse enemies

Enemies can take on different forms and have different behaviours. This would serve as a proof-of-concept for adding further enemy types going forward.

Success Criteria

  • The single enemy type is replaced with three different enemy types.
  • The different enemy types should appear different (different sprites)
  • The different enemy types should move differently.
  • The different enemy types should introduce different threats to the player.

Add game over state

Add a state which to handle the "game over" state. Currently the game simply exits.

Acceptance Criteria

  • The state should be entered whenever a level would end, either by beating the level, or by dying.
  • There should be an easy escape from this state back to the title page.

Design Suggestion

  • The game pauses
  • An overlay is drawn on top of the level widget indicating the level has finished. "You Won", or "Game Over".

Sprite Sheets

Add a sprite sheet feature to the existing Sprite component. This should allow for simple animations of sprites by adding a parameter which moves the frame of reference within an atlas.

For example, animating between the following two buffers every second.

!_!
>o<
!_!

and

i_i
<o>
i_i

Planets in the background

Planets can be included in a level's background render.

Acceptance Criteria

  • Planets can be procedurally defined and drawn (allowing to randomise the process)
  • Planets form perfect circles rendered in ascii
  • Planets have nice "planety" ascii textures

Upgrades

Upgrade entities can be picked up by the player to provide the player with bonuses. This story would serve as a proof of concept so that further upgrades can be easily added in the future.

Acceptance Criteria

  • An upgrade is sometimes dropped my killed enemies.
  • The upgrade temporarily increases the player's speed.
  • The upgrade is only "alive" for a limited time.

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.