Coder Social home page Coder Social logo

sfttech / nyan Goto Github PK

View Code? Open in Web Editor NEW
201.0 25.0 29.0 762 KB

Typesafe hierarchical key-value database with inheritance and dynamic patching :smiley_cat:

License: Other

C++ 96.53% CMake 3.24% C 0.23%
nyan mod database openage c-plus-plus modding mod-api cpp

nyan's Introduction

nyan - yet another notation

just make it meta-meta-meta.

nyan is a data description language, It is a mixture of python, json, patch, wml, yaml and some new ideas.

It stores hierarchical objects with key-value pairs in a database with the key idea that changes in a parent affect all children.

We created nyan because there existed no suitable language to properly represent the enormous complexity of storing the data for openage.

The main focus is readability and moddability.

github stars #sfttech on matrix.org

The foundation of nyan:

Technology Component
C++20 nyan core
Flex Tokenizer generator
CMake Build "system"
Humans Doing it wrong all the time

How?

Let's assume we have a fun λ half-life strategy game.

The game engine provides some functionality which is exposed by nyan.

# This is the content and mod API of the Engine:

Unit():
    hp : int
    animation : file

Building():
    hp : int
    creates : set(Unit)
    model : file

Using this, the base game pack provides actual game content:

# base_game_data.nyan

OverwatchSoldier(Unit):
    hp = 50
    animation = "./assets/soldier.ani"

Strider(Unit):
    hp = 2100
    animation = "./assets/strider.ani"

CombineCitadel(Building):
    hp = 9001
    creates = {OverwatchSoldier, Strider}
    model = "./assets/lambda_hq.mdl"

Citizen(Unit):
    hp = 60
    animation = "./assets/male09.ani"

# gordon is a citizen with more hp
Gordon(Citizen):
    hp += 40
    animation = "./assets/gordon.ani"

RebelHQ(Building):
    hp = 5000
    creates = {Citizen, Gordon}
    model = "./assets/lambda_hq.mdl"

Now, let's create a mod that adds the overwatch elite and gives the striders even more hp.

# elite_strider_mod.nyan

# create a new unit:
OverwatchElite(Unit):
    hp = 70
    animation = "./assets/coolersoldier.ani"

# change the strider:
ChangeStrider<Strider>():
    hp += 1000

# change the citadel to build the elite:
AddElite<CombineCitadel>():
    creates += {OverwatchElite}

# create a mod that informs the engine about its patches
StriderEliteMod(Mod):
    name = "Add the elite and make striders stronger"
    patches = {AddElite, ChangeStrider}

When the engine activates the mod ("applies the patches"), the combine citadel can create the new unit and the strider is stronger.

The fun begins if you now create a mod that mods the mod. Which is totally possible with nyan.

Specification

Read the specification.

Current State of the Project

nyan is fully functional and can be used in your project. Please make us aware of your needs/experiences in our chat!

We try to keep the API stable, but there's still some unknowns and need-to-change features.

Please submit bugs and feature requests (and patches) on GitHub!

Dependencies, Building and Running

Operating System Build status
Debian Sid Todo: Kevin #11
  • How do I get this to install on my box?

  • Waaaaaah! It

    • crashes
    • spams all kinds of shit on the screen
    • my girlfriend dumped me because I debugged for nights

All of those observations are intended, not bugs.

To get rid of them, recompile with --dont-segfault --shut-up --new-girlfriend.

If this still does not help, try the contact section or the bug tracker.

Development Process

How does contributing work here?

The documentation is also in this repo:

  • Code documentation is embedded in the sources for Doxygen (see doc readme).
  • Have a look at the doc directory. This folder tends to outdate when code changes.

Contact

If you have the desire to perform semi-human interaction, join our Matrix chatroom!

For ideas, problems, ..., use the issue tracker!

If it's a problem with the usage of nyan in openage, head over there.

License

GNU LGPLv3 or later; see copying.md and legal/LGPLv3.

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

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.