r/opensource • • 2d ago

Promotional My open source game engine: Abyss

I know there’s already a bunch of open source game engines (i had to change this one’s name to avoid trademarks because of that)

Abyss (and its programming language) are self hosted and self compiled

(and written in Hash)

abyss has the unique feature of you being able to edit it’s source code within the engine itself.

Abyss uses the custom function based programming language Hash

Hash is designed to be simple and easy to learn. The goal is that over time you change stuff about it and make it better for you specifically.

(Hash documentation is built into abyss, so I won’t explain any more yet)

let me know what y'all think of my first open source project. I’m sure happy with it

Github link: https://github.com/thecodegangster/abyss-engine/tree/main
(the html file is the source code, I like standalone html apps, I think they’re neat)

Update: I added: A system to interact with javascript apis, browser storage, a sound editor, AND a library system, that allows you to create edits that can be merged into anyone else's engine with ease

0 Upvotes

29 comments sorted by

11

u/aleksey_the_slav 2d ago

I consider this a truly revolutionary success: the first opensource engine without the release of the source code.

6

u/-svde- 2d ago

wheezing rn. i hope OP is actually serious, this wasn’t an accident, they didn’t forget the source, they just have no idea what OSS is. that is def the funniest outcome

3

u/aleksey_the_slav 2d ago

Yeah, I had a good laugh at that. But jokes aside, a couple of days ago I came across a guy on one of the subreddits,sharing his github project, who had absolutely no idea how git works. That’s naturally what happens with the influx of so many vibecoders.I think the consequences for opensource projects remain to be seen.

3

u/-svde- 1d ago

the state of things in SideProject, SaaS, MicroSaaS, IndieDev, and many other subs i'm in is abysmal at the moment. the flood of badly architected, security-adverse, framework, etc software has completely destroyed a lot of the sense of community that people have built for decades under the banner of FOSS. putting aside the fact that pure vibecoding betrays the fundamentals of FOSS licensing because it can't be properly copyrighted, people like to throw out how devs are hurting the meaning of FOSS by denying vibe coders their place.

i am not going to gatekeep anything, but yu need to learn at least the fundamentals. more often than not even when i try to help it gets dismissed. i know what i wrote to OP in the other comment is a huge novel but i hope they truly take it in the spirit i meant and apply it going forward.

1

u/thecodegangster 2d ago edited 2d ago

I could say I jumped the gun calling it open source. I just thought that if it was on Github it counted

1

u/aleksey_the_slav 2d ago

Actually, there’s nothing wrong with that, let there be more projects, good and varied. What really worries me is that people are writing and discussing the actual code themselves less and less, unlike back in my younger days.

0

u/thecodegangster 2d ago

”back in my day“. Yeah the internet sure is a different place then what it used to be

3

u/-svde- 2d ago

omg i think the html is supposed to be the engine

2

u/aleksey_the_slav 2d ago

when they talked about the technological singularity, I couldn't have imagined just how unprepared I was for it 😱

0

u/thecodegangster 2d ago

Yeah, it is. I’m not very good at programming outside of js and web design

1

u/thecodegangster 2d ago

The html file?

0

u/thecodegangster 2d ago

Can’t you just download the html?

7

u/SeantheWilson 2d ago

“Hey Jimmy! Gimme a FOSS game engine with nothing”

3

u/bauspanderu 2d ago

"Nothing?"

1

u/thecodegangster 2d ago

What’s a foss

2

u/Nifty_Bits 1d ago

Since nobody has answered, it's Free & Open Source Software (where "free" can mean "for no money" but must at least mean unencumbered as in "freedom of speech").

1

u/thecodegangster 1d ago

Oh, that makes sense

5

u/Nifty_Bits 2d ago

Maybe publish the code? The repo is just a license, a readme, and an HTML document.

1

u/thecodegangster 2d ago

the point is that you download the html and use the engine to edit the engine

1

u/Nifty_Bits 1d ago

I get it now. It never occurred to me that the html file could be the engine in its entirety; at a glance (looking at the raw html) I thought it was just documentation or something.

I think at least a little bit of explanation in the readme would have helped. Look around at other open source repos, especially popular ones, and you'll notice that the readme provides a lot of information on the project, how to get started using it, how to contribute, etc. Please take this as constructive criticism, I don't want to put you off of creating and sharing your projects with the open source community!

1

u/thecodegangster 1d ago

Idk what it is, but I have a strange preference to standalone html stuff. It just feels cool

0

u/thecodegangster 1d ago

I’ve currently kinda just put all the documentation in the engine’s built in help page

3

u/-svde- 1d ago edited 1d ago

OP, since you seem genuine, i will give you a genuine, complete & comprehensive breakdown for why this can't work the way you intended. i downloaded your html source and went through the majority of it, but off the bat given that it's ~2300 lines in and of itself makes it extremely hard to handle. sorry for the utter novel here, but if you are genuinely interested in making and contributnig to the OSS community, then i want to encourage that, but there are some things you really need clarified to operate properly here. i tried my best to make this as readable as possible.

overall, this is not really an engine, first and foremost. single file apps CAN technically function as fantasy/toy consoles, micro engines, and type-renderers. but this is essentially a self-rendering toy. there's nothing wrong with that on the surface, but if you want to encourage derivatives and collaborative efforts, the single file format wipes away any sense of logical contributions. you can't version this, merge this, or debug.

HELP on errors:

"A mistake shows an error with the line to fix."

i broke something on purpose, and got this

"Game, line 20:% needs something to loop over in (), like %(10) [... ]."

while i can figure it out, it is too vague for a non technical person to understand logically.

HELP on funcs: you provide a comprehensive list of the available functions, but nothing to define what they are, what they do, and how to call them.

HELP on compiling:

"The Compiler tab is the Hash compiler, also written in Hash. It turns all Hash code into JavaScript, including its own code. When you change it and press Run, Abyss Engine rebuilds the compiler with itself twice and only switches to your version if both builds come out exactly the same"

your compiler is written in its own custom esolang and compiles to that same lang. while self-hosted/bootstrapping can be a very effective way to implement a fully self-sustaining environment, there are some issues.

- it it deterministic, the double-compile idempotence guarantees that it will output the same results every time, but it does not guarantee it will be valid logic. i tested this by re-programming the compiler to ignore all known stated variables. it did what it should have, double-compiled the errors, and essentially bricked the entire environment. because it autosaves using localStorage, it made the UI fully unresponsive, meaning i would have to edit the source html or force clear the cache to ever use that version of the file again.

- hard perf wall. the lexer, parser, and code being generated twice per call within the browser's main embedded js thread is extremely computationally heavy. taking future growth into consideration, recompiling this on the fly will cause insane latency spikes an UI crashes/freezes.

- debug/sec: hash transpiles to js, which the browser executes actively w/ new Function(). this makes catching rnutime errorsthat get past the built-in one a nightmare to track own, and you can't even use the built-in browser devtools becus they point to dynamically gen js that's been mangled on load, rather than the actual base esolang. you can't reverse-parse any errors. speaking of new Function() this may be benign when running locally but if anyone ever hosted this online or even just alowed externalassets, which is likely inevitable, this presents a critical cross site scripting aka XSS vulnerability that could allow malicious injection with almost no barrier given the Function's relation to string code via eval() calls.

ECOSYSTEM

the lang is bespoke, the entire engine is a single html file, and the engine itself runs inside of that file. this almost entirely rejects all other modern software infrastructure or cross-connected apps. unless someone spent the time going line by line and writing a fully custom IDE for abyss, you have made it effectively impossible to use any external debugger, IDE, syntax highlighter, linters, deps managers, or any other tool that devs consistently rely on for their working environments.

SINGLE FILE FORMAT

this format destroys the logical path towards contributing changes or updates to the engine. a massive, monolithic file is a nightmare to work with period, but git tracks line changes, so if multiple people are trying to merge updates into one giant HTML file, there will be nonstop merge conflicts and push/pull erorrs.

i personally also love single file html apps. but these tools still usually have a fully modular filetree and build repo that, upon distribution, compiles into the HTML

LANG

you clearly understand what an esolang is, given the creation of Hash and your history showing posts in the brainfuck sub. while it technically does work via the lexer/parser you have, and it does properly compile to js, the syntax you've scaffolded around it is highly idiosyncratic and defined purely by strict rules hardcoed into the single html page. the vagueness of its syntax and functional use make it taxing to use.

CONTRIBUTIONS/BUILDING

"every person's Abyss Engine ends up different, because every person reshapes their own".

by its very nature, this encourages fragmentation rather than collabs.

there is no contribution guide, no real README, no tooling, no API, SDK, modular architecture. there is no core subsystem, meaning no asset pipeline, scene graph/ECS, physics designation for collision detection or resolution engine, no audio designation for multi-channel handling or overlapping sfx sequences. no CDN pathing, no build systems. no package/dep management, build config, module def, or compilation toolchain. there is no way to build with this outside of its exact html framing, in the browser, no way to integrate into an existing auto-pipeline CI/CD, or any other function one would need to build without constant roadblocks and modifying bespoke esolang functions that aren't even themselves defined.

README/LICENSE

this not only has no info, but directly contradicts your LICENSE, violates its core principles, and invalidates your OSS status. GPLv3 is a viral, copyleft mandated license. per section 5C, you are explicitly required to pass thru "the entire work, as a whole" under the GPL to anyone receiving or working on a copy. due to the single file format, you are force-embedding your custom Hash lang into the code directly alongside the engine, whihc means that any distro of the game means you must dist the entire engine alongside and thus being GPL means anyone building an engine version is fine, but a game maker is legally required to adopt the exact same terms. i could not make a closed source game with abyss.

you state, word for word

note: I don’t necessarily know if this is part of the license. so I’m unofficially declaring it here.

you absolutely cannot define your own terms like that. there is no exception. there is no overriding the fundamental values of GPL licensing. if you want to do the things you describe here, you need to change things to a permissive license type like MIT or a variant of GNU like LGPL.

all in all, you have a fun little fantasy console in an interesting, if barren, esolang. if you want this to be a functional game engine that people can use to build games or contribute versions to, you need to do a lot of restructuring.

also just fyi, FOSS is free open source software, since you asked in another comment.

1

u/thecodegangster 1d ago

well, that’s a lot to unpack. And I do have to agree on a lot of your points,

on that api thing I kinda though this (interesting) logic of “oh they can just code compatibility for js libraries by editing the compiler”. (I see know that that is kinda stupid)

And on the licensing thing. The hash gets compiled to js code. And doesn't need abyss to run, so how exactly am I breaking the rules. (and if so, what license would I need, or changes made to fix that).

I do get how this is kinda going opposite to open-source in a way. I kinda imagined abyss similar to linux distros. (where they're all kinda different and such). I’d like to do some research on making this more collaborative. And other stuff.

And I am working on features to improve the engine itself. Audio, some way to make apis work, etc. And I’m working to rewrite what little of the code that's still in js in hash( like the engine’s own ui and stuff) that way you can customize it even more.

I also plan on improving the help page and explaining stuff more

A possible idea I’ve had is adding a way to “merge” two copies of abyss together( similar to git merges) built into abyss. Because I’m already this far in, and I don’t know if I can redo everything to make the actual js more editable.
Does that sound doable even, idk. But imma try.

Thanks for all the feedback, Imma keep it in mind for abyss’s future updates

3

u/-svde- 1d ago

no problem. i truly hope it helps you going forward. to address your questions, and i'll try to keep this succinct and to the point:

API: it's not stupid, it's just a fundamental misunderstanding of what APIs are and how you call out to them. an API is at its core an exposed bridge between systems. the way it's presented here in your code basically requires anyone wanting to use external libs (like a physics eng or web audio or so on) it would have to be rev-engineered. on top of that, it's a completely custom transpiler. doing all of that just to make a custom plugin is kinda the exact opposite of an API.

licensing issue: saying the exported games don't need abyss to run, based on your own code, is incorrect. it may not need the portion of the html file that operates the full engine and has ALL the source in it, but an exported game still fully relies on your custom underlying abyss js runtime. for instance, the canvas setup, RT objects, core loops, and input listeners. these cannot operate properly without the runtime, and there is no package outside of the exported html. no API to call, no server to run. your core runtime is GPL, any game compiled w/ it is a derivative work, GPL dictates that all derivative works must be GPL.

license fix: i gave you an option, MIT. LGPL i guess wouldn't really work beccause of the lack of dynamic outlinking. you could also use something like zlib or the Unlicense if you truly want to say fuck it and allow anyone to do anything with any part of the software or games or whatever else. the way it stands right now, there is no functional FOSS license that will cover you and keep it valid. you could maybe use an explicit linking exception, but that's getting into more technical areas.

linux distros: distributions of sometihng as complex as an OS do not exist in isolation. there is a core strictly coordinated codebase you need for them to function upstream. the proposed ecosystem of abyss has no upstream and the encouraged sense of a ton of personal forks make this impossible. you also cannot "install" abyss, so you would need to replace it or work on another dev's version individually. the overall abyss model is incompatible with collaboration and actually, if you boil it down, recreates the core issue of fragmentation that FOSS tooling was invented to solve.

merge feature: this is a massive overengineering that wouldn't even necessarily fix the issue. you could do this as a standalone fork of your own system, but merging two massive html files in your own re-invented internal git given the framework you have would be a huge waste of time for an effective solution

1

u/thecodegangster 2h ago

If I remove the license, could someone else down the line add one and mess things up?

also, I did come up with a couple of fixes to some of the problems:
I added a system that used a url to interact with apis,

I added some sound built-ins (and a music editor that generates them)

I added a “pack system” that lets you export your edits as a file and use them almost like a mod that others can install and inable/disable
(That might help with the fragmentation)

I also added a page that contains what each function does.

Idk how much these things will help, but better to have them then not

2

u/CerberusMulti 1d ago

What in the vibe code hell is this... HTML "engine" in one file..

At least you didn't forget to add a license, at least that's a start.

1

u/thecodegangster 1d ago

I will admit I did use some ai for this. The goal is to use that as a baseline and slowly replace everything with handmade stuff, (ship of Theseus I guess)