Coder Social home page Coder Social logo

age-rs / age-rs Goto Github PK

View Code? Open in Web Editor NEW
17.0 17.0 2.0 68 KB

age-rs - Cross-platform RTS game engine core based on Age of Empires mechanics

License: GNU General Public License v3.0

Rust 100.00%
age-of-empires cmake cross-platform-game game-development game-engine-2d gamedev python rts-engine rust-lang strategy

age-rs's Introduction

age-rs GPLv3+ Bors enabled

Cross-platform RTS game engine based on Age of Empires mechanics

For now we focus to port nyan and libopenage (part of openage) to rust-lang and create a stable toolchain around it. Both are part of the engine core of openage which is written mainly in C++17 and Python 3. While we are trying to stick to fundamental design decisions (regarding e.g. architecture, multiplayer) that the openage authors did - we are going to use Rust to build a reliable cross-platform toolchain that empowers everyone to develop on age-rs easily and efficiently.

Goals

  • reimplement nyan

  • reimplement libopenage

  • create a stable rust/python-interface

  • create extensive documentation around the project

  • Ultimate goals:

    • lower the bar on developing
    • create secure, reliable software that is easy to maintain long-term

Current State of the Project

This project has just begun, if you are eager to help feel free to contribute or open an issue to get in touch. You can also send me a message on Discord: simonsanone#4039

Cloning this repository

As we are dealing with git submodules here, you should use the following command to clone, initialize and update:

git clone --recurse-submodules https://github.com/age-rs/age-rs.git

If you need more information you find them here in the Git submodules documentation

How to contribute?

If you want to contribute to this project feel free to do so. The easiest way would be that you fork this repository, create a branch for the things you want to do and make a PR to this main repository.

We've collected some essential knowledge about contributions in contributing, please read it.

Dependencies, Building and Running

  • You will need everything that is stated in the openage build documentation

    • so you will need to be able to build openage it self for the beginning
    • if you have any questions, feel free to ask either the openage-authors or send me a message on Discord (simonsanone#4039)
    • you can also ask in the forum of openage for help (I'm active there as well)
  • Make sure you initialize and use the submodules of nyan and openage from this repository here as we will probably need to patch some things in/out for compatibility reasons

License

GNU GPLv3 or later; see COPYING.md and LICENSE.

I know that probably nobody is ever gonna look at the COPYING file, but if you want to contribute code to openage, please take the time to skim through it and add yourself to the authors list.

age-rs's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar simonsan avatar

Stargazers

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

Watchers

 avatar  avatar

age-rs's Issues

[NEW FEATURE] Serialization support for permanent storage

Description

If the application terminates because of any reason, the state is gone. It can be recreated if the application stores the order and timestamps of successful transactions permanently on disk, those can then be restored by recreation of the initial state and replaying the transactions. Currently, there is no serialization support for permanent storage. This is offloaded to the application, but can be added to the implementation if needed.

p.63, Database properties

What problem does this solve? What need does it fill?

It would give the possible to restore a "gamestate" without replaying all of the transactions.

Describe the solution you'd like

Use serialisation (e.g. serde) and create a permanent storage system.

Implementation discussion nyan-rs library

2020-05-13_09_16_14-thesis_nyan pdf_-_Adobe_Acrobat_Pro_DC-Screenshot1

This is the component overview of nyan from the master thesis of Jonas Jelten.

An example nyan file you can find here example.nyan

I would propose that we use logos/logos-derive to create our lexer.

Tokens are found in the masters thesis as well on p.40:
2020-05-13 12_54_00-Wayback Machine-Screenshot

For the parsing into some rust structs we can use pest.rs and create a pest-file with parsing expression grammars (or PEG) for nyan as an input.

For the nyan type and value databases we could maybe use a component-graph-system like froggy, create a Rust API and build cdylibs.

Something like Legion and PumpkinDB sound promising as well, but are either pure ECS or lack other features we might want to have. For example PumpkinDB has ACID transactions, but has the last activity 3 years ago.

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.