Git Product home page Git Product logo

game's Introduction

Digital Extinction

AGPLv3 CI Sponsors

Digital Extinction (de-game.org, Documentation, GitHub, Discord) is a 3D real-time strategy (RTS) game. It is set in the near future when humans and AI fight over their existence.

It is open source & free software. Forever! It runs on Linux, Windows and potentially other platforms.

The game is completely written in Rust with Bevy used as the engine.

Gameplay video

Status

The game is still in the early phases of its development. If you are looking for a mature game, come back in a few months.

Feedback, bug reports, and other contributions are welcome.

How to Play?

Game controls & gameplay tutorial is at docs.de-game.org/tutorial/.

Downloading Nightly Builds

Build from main branch is automatically published every night as a ZIP archive. The archive contains:

  • all necessary game assets,
  • main game binary (de or de.exe),
  • DE Lobby binary (de-lobby or de-lobby.exe),
  • and DE Connector binary (de-connector or de-connector.exe).

Follow these steps to start the game on your computer:

  1. Download nightly ZIP file for your OS and CPU:

  2. Extract the ZIP file.

  3. Execute binary file called de or de.exe.

Building from Source

What you need:

Clone, build & run recipe (will work in the majority of the cases):

  • git clone [email protected]:DigitalExtinction/Game.git DigitalExtinction
  • cd DigitalExtinction
  • make sure that Git LFS files in assets/ are pulled
  • cargo run --release

Build Profiles

Testing Profile

On top of the standard Cargo build profiles, there is a testing profile optimized for manual testing. In this profile, extra checks and debug info are included in the build. LTO is disabled and the optimization level is fine-tuned for fast compilation times while keeping performance reasonable.

LTO Profile

Profile lto shares configuration with release profile but enables LTO.

Cargo Build Features

The following are the Cargo build features supported by the game. These features enable special functionality that can be useful during development, testing, and experimentation.

godmode

godmode makes it possible to control all game entities (i.e. enemy units and buildings).

Where to Get Help?

Community

See Contributor Covenant Code of Conduct.

Goals

Many of the goals are intentionally vague and aspirational. They serve as a general direction for future development. All changes and decisions shall go hand in hand with the spirit of the following goals.

  • Develop a forever free (as in free speech) and open source RTS game. A game without the restraints of commercial development – no marketing-motivated features, no dopamine traps, no in-game purchases…

  • Design an original game, not yet another clone of an existing (and often a very old) game. The game is a combination of tried and true concepts and mechanics from the RTS genre with new and innovative ideas.

  • Create a true strategy game, where dexterity or APS do not play the primary role.

  • Focus on exponential in-game technological and economical progress. Players who consistently outperform their competitors for extended times prevail. Short-term boosts and performance fluctuations do have a proportionately small impact on the game results.

  • Produce a modern game, unchained from obsoleted constraints and utilizing current technology. Truly utilize the power of modern multi-core CPUs and other capable hardware with the help of advances in software development, like fearless concurrency of Rust programming language, or ECS-based Bevy engine.

    Seize this technological opportunity to create an RTS of grand scale, with hundreds of buildings and thousands of fully simulated units on the game map.

  • Develop the game indefinitely and incrementally. To regularly ship a new version (rolling release) and to forever improve the game based on new experiences and new ideas.

  • Show that non-trivial games could be created in Rust and by extension Bevy engine.

Game Design

See game design documentation.

Contributing

Contributions to the project in any form are welcomed. Check out our Contributor's Guide.

MSRV: the Minimum Supported Rust Version (MSRV) is “the latest stable release” of Rust.

Roadmap

Bellow is a high-level roadmap. Also, see Issue #246 with a detailed path toward version 1.0.

  1. Proof of Concept (PoC)
  2. Prioritize in development cycles, each organized in a GitHub milestone named Run N. For example Run 2.
  3. Release (first) version 1.0
  4. Indefinitely improve the game

Proof of Concept

This is an embarrassingly bare bones game. It is complete in the sense that you can start the game, play against someone and win or loose.

At this stage, the game is too bare bones to be enjoyable. The UI/UX misses some very important features (like seeing what units are selected, ability to see health / energy of units, and so on).

The goal of this milestone is to lay down the foundations, setup basic infrastructure (GitHub Actions, issues labels, …) and achieve an important psychological milestone.

1.0

This is the first published version of the game. In theory, this should be the earliest possible version, minimizing development time and effort, which is threshold enjoyable for an actual player.

As opposed to PoC, this version has all the basic UI to make the UX acceptable. The game mechanics are somewhat expanded so it is no longer thoroughly “dummy”.

License

Source Code

Digital Extinction is free and open source. All code in this repository is licensed under GNU AGPLv3 (LICENSE or https://www.gnu.org/licenses/agpl-3.0.en.html).

Unless you explicitly state otherwise, any source code contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any additional terms or conditions.

Assets

All game assets are located in /assets directory of this repository. Assets placed in a directory with a file named LICENSE are licensed under the license stated in the file.

All other artwork in this repository, including 3D models, textures, animations, UI bitmaps, sounds and music are licensed under Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

Sponsors

@JustinDaleGray

game's People

Contributors

0hypercube avatar dependabot[bot] avatar indy2222 avatar jackcrumpleys avatar polostor avatar redbugz avatar vrixyz avatar zakru 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  avatar  avatar  avatar  avatar

game's Issues

Use Parry and some simple spatial indexing

  • Insert all solid objects to a spatial index
  • Update positions of the objects in the index on GlobalTransform change.
    • Make sure this happens after Transform -> GlobalTransform propagation to avoid one frame lag.
  • Remove all solid objects from the index after despawning.
  • Use the index + Parry for object selection (and remove current ray intersection implementation).

Add Terrain Heightmap Loading

This is a continuation of #7.

  • Modify map TAR file so it contains an entry with the heightmap (NPZ entry?).
  • Split the terrain to a grid of meshes:
    • This allows better camera frustum culling (only relevant parts will be rendered).
    • Also, various intersection algorithms will be faster due to AABB pre-filtering.
  • Modify line rendering (originally implemented in #489) so they are rendered correctly on uneven terrain.

This requires modification of object placement and movement in the map so everything is positioned correctly on the surface.

Benchmark the solution: if slow, RTIN or other mesh simplification techniques might be required.

Make camera parameters configurable

  • Make all or most camera parameters configurable (e.g. movement speed, minimum and maximum zoom, etc.).
  • Load & store the configuration to an appropriate path (e.g. XDG_CONFIG).
  • Document the configuration format.
  • Make sure that issues in the configuration are properly reported (logging and error and fall-backing to default?)

UI for the configuration is not part of the issue. Manual edits to the configuration file are good enough.

This relates to #69.

This is blocked by #243.

Proper group movement (flocking, formations, ...)

Groups of object should reasonably move together:

  • clustering
    • objects are clustered when send to a target so close objects make flocks
  • flocking
    • objects are attracted to their relative position from flock centroid
    • object are influence by average flock velocity
  • repulsion
    • objects are repulsed from other nearby object

Benchmark the solution.

Move out of way of moving units

Movable objects of the player should move out of the way when possible (and then move back). Otherwise, some destinations could be blocked or alternative and much worse paths might be used.

Create a website

URL: https://de-game.org/

Contents:

  • basic info about the game (license, status, goals, link to GitHub repository, ...)
  • embedded video with gameplay so people can see how it looks like

Use better shapes for entity colliders

Currently, minimum axis-aligned bounding box of the entity shape and all descendant entity shapes represented with Parry's Cuboid is used.

Use better shapes of higher fidelity instead. These can be stored alongside object models. The shapes should be simple for fast geometrical operations.

Implement pathfinding

After #11 is implemented adapt it to proper object movement.

There are several requirements:

  • Do not go across terrain obstacles.
  • Avoid all solid object, static and movable.

Research available algorithms. Plain A* won't work.

Implement Naive Object Movement

This depends on #10.

  • Send selected (movable) objects to a location when right-clicking on the map.
  • Implement naive version: objects go on straight line ignoring any potential obstacles.

Automatically publish docs from the main branch

To make life of developers easier. When published on the web, it is easier to reference to it.

  • Include private items in the docs (cargo doc --no-deps --all-features --workspace)
  • Make it accessible from the web, e.g. docs.de-game.org

Use Bors

The following conditions must be met for a PR to be merged:

  • The PR is approved by a repository administrator
  • All conversations on the PR are resolved
  • The PR is not marked as Draft
  • Rust workflow was executed successfully

Add Static Object Loading from Map File

  • There is a JSON file in the map TAR file which contains information about each object.
  • Each object has two coordinates: horizontal position in meters along x and y axis.

Logging to file

Log to a file. To output could be used for example for bug reports.

Publish docs from main branch from CI

To make life of developers easier. When published on the web, it is easier to reference to it.

  • Include private items in the docs (cargo doc --document-private-items)
  • Make it accessible from the web, e.g. docs.de-game.org

Add Rudimentary Map Loading

  • Map is loaded from a TAR file
  • Only map size is part of the map file. It is a TXT entry with a number.
  • Game is initialized only after the resource is loaded & the terrain added.
    • This is preparation for future more complex initializing.
  • Simple green plane is used for terrain.

Add directional light shadows

Update directional light projection with camera movement -> otherwise shadows would be too coarse on large maps. (cascaded shadow map in Bevy v0.10 is used instead).

This is related to bevyengine/bevy#3629, cascaded shadow would work even better.

Cascaded directional lights are supported from Bevy v0.10 (migrated to as part of #324).

Avoid enemies when path finding

This is especially important for non-combat units.

First idea: compute influential map (some combination of HP and damage of friendly end enemy objects) and minimize it when path finding.

Implement Energy

  • energy generation
  • energy distribution
  • energy storage
  • energy consumption
  • consumption prioritization

Extract user input code

  • Move all user input code to de_controller crate
  • Systems from this crate run first & emit various events
  • These events are processed by various other plugins (e.g. camera)

This will improve code quality. Currently user input code is at several different places.

Add Simple Main Menu

The initial implementation will be minimal:

  • necessary network configuration -- to enable multiplayer
  • some start game button
  • waiting screen when other players join & assets are being loaded

Implement Unit Manufacturing

  • When a single factory building is selected, a menu with available units is shown. When the user clicks on a unit, it is added to a manufacturing queue.
  • For each factory, there is a queue of units to be manufactured. The queue is gradually processed.

Open the repository

Before doing so, make sure that:

  • outsiders cannot set labels for PRs
  • outsiders cannot approve PRs

?

This is related to #85.

Research & Design Network Comunnication

Design:

  • Internet games are started via a (central but configurable) lobby server (#255). The server serves as a rendezvous.
  • LAN games start the same server locally and announce it over mDNS.
  • In came networking is based on a (custom?) peer-to-peer protocol.
    • This limits the load on the central server,
    • and decreases latency (especially on LAN and other close network endpoints).
  • The over the Internet pear-to-peer connection is be established with Hole Punching technique.
  • The (message oriented) communication is be based on UDP:
    • all messages are idempotent (thus packet duplication is not an issue) and order independent (thus reordering is not an issue),
    • most messages won't require 0% packet loss,
    • a to-be-decided technique is used to guarantee delivery of some messages.

Explore:

Implement Initial Simple Attacking

  • All entities has max HP and current HP.
  • Entities with attacking capability have something like LaserGun { damage: f32, rate: f32, last_fire: Option<Time> }
  • When an entity reached HP of 0, it is destroyed.
  • There is a new EntityDestroyed event handled by all relevant plugins (to remove dangling Entity IDs).

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.