11 Years on a Hobby Project: SymOntoClay Dev Journal
Source: Dev.to
Introduction
For 11 years I have been experimenting with a multi‑paradigm language designed to describe NPC behavior.
The main objective is to create a language that is both highly expressive and human‑readable. This is achieved through the use of useful but rarely applied techniques (e.g., fuzzy logic or logic programming) implemented via dedicated syntactic constructs, making the language more compact and expressive.
History
The idea of SymOntoClay began with a plan to build an Action/RPG with elements of a social simulator—a miniature Fallout‑style game set in a military conflict zone. Early on I focused on the software implementation rather than team building. While developing the game concept I recalled rule‑based systems such as Prolog and expert systems, and thought it would be convenient to program at least part of the NPC logic that way.
Gradually, applying logical inference within imperative languages (C++/C#) became more appealing than the game development itself. In May 2014 I had the “crazy” idea to create my own programming language that would combine logic programming with imperative code and embed rarely used concepts (e.g., fuzzy logic) directly into the syntax.
The original Action/RPG never materialized; instead the project evolved into what is now called SymOntoClay (Symbolic Ontological Clay). I initially expected to finish the language specification in a few months and implement it within a year, but the project has taken 11 years and shows no sign of ending.
Publication Motivation
During those years I never published any post or article. My “inner perfectionist” wanted to present only a completed, fully polished project. After 11 years I realized waiting for the perfect moment is meaningless, so I decided to share SymOntoClay as a living, evolving, imperfect system with its accumulated legacy.
Current State
- Many features have been implemented, but they currently allow only the description of very simple NPC behavior.
- Experiments with Unity have been performed sporadically, mainly to verify basic functionality.
- The code is available on GitHub under the MIT license.
- More details are on the project website (link in the original post).
- The White Paper describes the development idea.
- Documentation is uneven: the language specification is up‑to‑date, while “Getting Started” and usage examples are less detailed.
- The project YouTube channel is empty but will be populated soon.
- No community exists yet; this post is the first public presentation beyond personal notes.
Example: Fuzzy Membership Definition
linvar `degree of membership` for range [0, 1]
{
constraints:
for inheritance;
terms:
minimal = L(0, 0.1);
low = Trapezoid(0, 0.05, 0.3, 0.45);
middle = Trapezoid(0.3, 0.4, 0.6, 0.7);
high = Trapezoid(0.55, 0.7, 0.95, 1);
maximal = S(0.9, 1);
}
Future Work
- Demo Scene – Create a minimally playable demo by finalizing the HTN implementation and integrating it with Unity.
- Tooling – Develop a debugger, profiler, and other tools to ease DSL debugging.
- Editor Support – Implement syntax highlighting for VS Code (or at least Notepad++) and a full language server.
- Documentation – Expand architecture descriptions, add up‑to‑date diagrams, and improve “Getting Started” guides.
- YouTube Content – Publish short videos demonstrating demo scenes with characters controlled by SymOntoClay.
- Community Building – Write articles, open a Discord server, and encourage contributions.
Closing
This is the first publication about SymOntoClay on the wider Internet. The project has finally moved beyond personal notes.
Thank you for reading to the end!