All Projects → SFTtech → Nyan

SFTtech / Nyan

Licence: other
Modding API with a typesafe hierarchical key-value database with inheritance and dynamic patching 😺

Projects that are alternatives of or similar to Nyan

EMF
Extended Mechanics & Flavor
Stars: ✭ 33 (-76.6%)
Mutual labels:  modding, mod
SMLHelper
A complete Subnautica and Subnautica: Below Zero modding library for the popular QModManager framework.
Stars: ✭ 36 (-74.47%)
Mutual labels:  modding, mod
factorio-example-mod
Lightweight modular example mod with various features and compatibilities
Stars: ✭ 15 (-89.36%)
Mutual labels:  modding, mod
ModdingDiablo2Resurrected
This repository contains some tools and guides on modding Diablo 2 Resurrected.
Stars: ✭ 75 (-46.81%)
Mutual labels:  modding, mod
Tremor
Tremor mod, for tModLoader Terraria
Stars: ✭ 26 (-81.56%)
Mutual labels:  mod, modding
ME3TweaksModManager
Mod Manager for Mass Effect Original Trilogy and Mass Effect Legendary Edition
Stars: ✭ 83 (-41.13%)
Mutual labels:  modding, mod
LoS-Mod Files X
Mod Files for the Xbox 360 version of Sonic '06 mod; Legacy of Solaris.
Stars: ✭ 22 (-84.4%)
Mutual labels:  modding, mod
VRCMods
⚙️ New features & quality of life improvements for VRChat
Stars: ✭ 21 (-85.11%)
Mutual labels:  modding, mod
MPPatch
Patch for Civilization V to allow modded multiplayer. Currently under development.
Stars: ✭ 31 (-78.01%)
Mutual labels:  modding, mod
Thunderstore
Thunderstore is a mod database and API for downloading mods. Thunderstore Discord: https://discord.gg/UWpWhjZken
Stars: ✭ 45 (-68.09%)
Mutual labels:  modding, mod
Open-Terraria-API
Open Terraria API - Mac, Linux & Windows
Stars: ✭ 65 (-53.9%)
Mutual labels:  modding, mod
Linkermod
Enhancements for Black Ops' modtools
Stars: ✭ 63 (-55.32%)
Mutual labels:  mod, modding
EvenMoreModifiers
A mod for Terraria that adds a system for Modifiers that can apply to items giving various bonuses
Stars: ✭ 21 (-85.11%)
Mutual labels:  modding, mod
Resource-Pack
The official repository for Faithful 32x for Minecraft: Dungeons
Stars: ✭ 16 (-88.65%)
Mutual labels:  modding, mod
morrowind-sharp
A Morrowind modding guide. New and experienced players welcomed.
Stars: ✭ 107 (-24.11%)
Mutual labels:  modding, mod
Showoff-NVSE
An NVSE plugin that adds functions and some engine-level tweaks.
Stars: ✭ 32 (-77.3%)
Mutual labels:  modding, mod
paintjob-packer
Lightweight mod making tool for ETS 2 and ATS
Stars: ✭ 28 (-80.14%)
Mutual labels:  modding, mod
HeroesOfTheStorm TryMode2.0
A modified Try Mode Map for Heroes of the Storm to create a better experience with enhanced functionalities.
Stars: ✭ 18 (-87.23%)
Mutual labels:  modding, mod
XLShredLoader
A collection of mods for Skater XL that use the Unity Mod Manager (reworked from the XLShredMenu mod)
Stars: ✭ 33 (-76.6%)
Mutual labels:  modding, mod
Modio Unity
Unity Plugin for integrating mod.io - a modding API for game developers
Stars: ✭ 53 (-62.41%)
Mutual labels:  mod, modding

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 Freenode

The foundation of nyan:

Technology Component
C++17 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.

There's some features left to implement, but those only cover special use cases:

  • [ ] Inverse patch generation
  • [ ] Subobject set specializations
  • [ ] Callback trigger when a value changes
  • [ ] Member name qualifications for name conflict resolving

Dependencies, Building and Running

  • 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.

Operating System Build status
Debian Sid Todo: Kevin #11
MacOSX 10.14 Build Status
Windows 10 - x64 Build status

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 or IRC 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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].