Project looking for a home

Hi,

I'm a professional software developer and a graphics enthusiast. Earlier this year I left Smith Micro as the lead developer of Poser 3D Character Animation Software. This famous piece of software had its heyday in the mid-90s, and is responsible for a lot of the technologies behind content that made it into console gaming in the 2003 era. I also released a game engine and ran a series of tutorials for it called Pixitron that outlines an approach to multiplayer game making on the web. https://lmgtfy.com/?q=pixitron

(Pixitron, despite being a "new beginning" for cross-platform gaming, but it was rejected from Handmade because it relied on Electronjs and Pixijs.)

This other engine, a 12-year epic, is largely ground up but yes it does rely on WinAPI, OpenAL and some other optional libraries, but most of the code is essentially "from scratch" -- built very much on the ZeroTypes library that is a part of Handmade

Anyway, now that I've moved on from my job at Smith Micro, it's back to moonlighting as Lost Astronaut (lostastronaut.com) ... I picked up my old game engine a few weeks ago and decided I needed to take things in a new direction. However, I've spent 12 years on it and for a long time I held on to it with white-knuckle strength.

For the 10th time over the past few years, a few hours ago I thought about releasing the 12-year-old project as open source.

Every time I go to release this engine, thuogh, I worry no one will see it, and if they do see it, they'll just run away. I know it has some serious value (there's a reason I haven't released it yet), but it's locked into a certain technology level (Windows, 32-bit) and as I've started to move features into Qt to support a wider array of platforms, I guess I realized it's going to be entirely different but I'd like to release the 32-bit version of my engine if it gets some traction.

So, I'm wondering what you think about this? The engine is written in C++, uses OpenGL, builds readily on Windows in free versions of Visual Studio 2017, and may be too big for Github but I'm not sure yet. I spent the 1990s writing MUDs and the 2000s doing all sorts of different things in and out of gaming, but mainly made money on the Web until 2007 when I went all-in on my graphics hobby and set out not only to write a game, but also to build "the encyclopedia of graphics routines" in what became a massive 1900 class super monster codebase that, to this day, builds with an almost flawless execution, and can do a very wide range of things using OpenGL, OpenAL, and about 80 other libraries that I explored. It's the "ultimate" starting place for a C++ Win32 OpenGL project complete with multiple UIs, image processing, texture uploads, vbos of varying flavors, GLSL, graphics systems, 3D file support, you name it. I released some of the shaders from this engine (and some of the source graphics used in the shaders) (modified for GameMaker) as a pack called GML-Pro https://github.com/h3rb/gml-pro a few years ago, but it got buried when GMS2 came out.

I used my engine to launch a moderately successful 3D printing company, some of it made its way into Poser, and it's just a lot of accumulated work not only by me but some very famous people who I collaborated with years ago when building the engine in the early days. It also has a commonality in the code that is powerful, but also many approaches with different results for everything from color manipulation, to fonts, to the way you organize worlds in 2D.

My questions for you are:

1) As a reader of these forums: Are you interested in this at all? Do you want to learn more? Is this a project you'd contribute to? How would you contribute to it? Does it have value?

2) Do you have any idea how I might avoid it hitting the bin? How can we keep this open source from being just another pile on the heap? How can a community form around it?

3) Can we find a home for it at Handmade?


Edited by Lost Astronaut Studios on Reason: Initial post
The following is only my point of view.

After watching the video, it seems to me that what you're looking for is some credits for making this engine, which I can understand after spending that much time on something. But, without using it and only looking at the video of the games and software linked on your website it doesn't look like a good engine. The games and software aren't visually appealing or looking interesting to play or use. If those games/software are what came out of your engine after spending 12 years on it, than your engine probably doesn't properly solve basic problems, and there is no reason for other to use it. And you'll probably not get any credits from that.

In your post you mention "... a massive 1900 class super monster codebase ..." which is scary more than anything else. "... builds with an almost flawless execution ..." What does that means ? "It's the "ultimate" starting place for a C++ Win32 OpenGL project ..." Those kind of sentences sounds like marketing bullshit to me when you seem to only shipped small uninteresting games (again, it's my opinion, not a fact). In the video the compile time of the engine is super long (more than a minute), the application startup time is slow, only to (not really) show some particles. The fact that the engine is Windows and 32 bits only doesn't help either. And you ask people several times to convince you to publish the source, but in my opinion it should be the other way around: if your project is interesting to others, they will ask for the sources.

In my opinion there would be no point for anyone to use this engine.

It doesn't mean that there is no value in it. In the video you mention a lot of small things that might be interesting, but aren't commonly used, and would probably be better suited for small single file libraries that could live outside the engine itself. Those might be interesting to publish as a reference for someone that wants to implements something similar.
@mrmixer

That's a pretty negative response, though tempered, I'm not sure I want to delve too deeply into it. It sounds like you don't like my aesthetics (which is an art thing, not a code thing) .. I think it's important to mention that one piece of software I built with the engine did receive an award (Best in Toy Fair 2016, Popular Science) as part of a commercialization platform with Toys-R-Us.


> In your post you mention "... a massive 1900 class super monster codebase ..." which is scary more than anything else.

The reality is, it's the value of it. So much is available for people to use and build from.

I'm not sure why that is scary other than that people not familiar with large projects are likely not to know where to go or how to use it, but I assure you it so large because it does so many different things with different approaches. For someone like me, I'm used to large projects, partly because I built this one but also because I'm hired as a developer to work on large (<1M lines) projects.

When it comes down to it, there are only about 30 that matter "on a daily basis" for general use to create UIs and games. Those are "Framework" classes, like GLWindow, that allows you to create layered applications. But, like anything, there are a lot of approaches. An example is that 100 classes handle specific implementations of GLSL shaders.


> The fact that the engine is Windows and 32 bits only doesn't help either.

I'm not sure it hurts -- you can build games for Windows. Most work in games takes place on the GPU, which has nothing to do with the 32-bit part.

> "It's the "ultimate" starting place for a C++ Win32 OpenGL project ..." Those kind of sentences sounds like marketing bullshit to me

I said that out of enthusiasm for it. For me, it was the "ultimate thing" to work on.

> would probably be better suited for small single file libraries

It just cannot be made into an SFL. The classes are all inter-operable, not disparate. Sure, I can trim it down to some minimal version of what it is, but that wouldn't be what it is.

Edited by Lost Astronaut Studios on
You mentioned that you are adapting and simplifying your engine code into a new improved version using what you know now. In that case it sounds like writing the engine was a good learning experience, but in my opinion you should probably not dump code into the world that you consider to be subpar by your current standards.

To answer your question: "how can I make this take off?" The answer is to continue working on a better version, and release that instead. It seems that there is (was?) no clear vision for the engine, and it was more of a testing ground for you to experiment with libraries and programming techniques (you prety much say this in the video). That's perfectly fine, but if you haven't used it to make a substantial game project yourself, then it definitely is not ready for other people to use for that purpose. Having 400,000 lines of code is a liability, not an asset, and the sheer quantity of code does not mean that it will be useful to other developers - in fact, most likely it means the opposite. It seems like you already understand that on some level; the main reasons you cite for wanting to open-source the engine are 1. to "get credit" for it, whatever that means, and 2. that you don't want your efforts on the engine to "go to waste" - which they obviously won't if you learned from making it and are now incorporating parts of it into a newer, better engine. Painful though it may be for you to see it go, maybe it's time to let the old code rest.
@notnullnotvoid

Thanks for the suggestion to release my "latest project". But I won't be releasing the Qt version. It's a different project.

I like my code, I don't think it is sub-par, I just think it's trapped in a certain technical paradigm and I can't do it alone anymore.

I'm not sure what to tell you, I think you're missing the point and didn't pay attention to what was onscreen in the video, or just don't get the project. Perhaps I'm partially to blame for that since I've not released the code or written any tutorials?

The project was used to release some games, but I spent most of my time working on the engine, or on a 3D printing kiosk that appeared in multiple Toys-R-Us, including Times Square.

What I mean by "Get Credit" is "not be plagiarized" which has happened before, where someone took my open source project and just wrote their name in place of mine and released it. It's a standard licensing clause to have your name appear in the copyrights of a file and to not have the copyrights portion disturbed.

Your claim "Having 400,000 lines of code is a liability," well, actually all code is a liability until you limit liability through a liability limitation clause -- and that "400000" is actually not useful, shows a very strange view of how software lives in the modern world. It's through 12 years of hardening that the code was debugged, tested, improved, expanded. It's not all perfect, but you can make a game with it, you can make an editor with it, and those things will be reliable upon execution.

Edited by Lost Astronaut Studios on
When I say 400,000 lines of code are a liability, I am not invoking the word "liability" in a legal context. I mean you will be better off having less code which has more work put in per line and is written with focus and purpose, rather than a larger amount of miscellaneous code, at various stages of completion, doing a hodgepodge collection of things.

You say your old code is not bad but just "trapped in a certain technical paradigm" which, in the context of knowing the engine's platform limitations, sounds to me like a euphemism for legacy code.

Regarding what was onscreen in the video, I watched the whole thing. The only example project shown was a particle system test, which took a suspiciously long time to compile and start up. Aside from that you mostly just showed how much code there is, and talked about many disparate features there are. Maybe it really is just a marketing problem, but nothing you demonstrated or mentioned would come close to making me want to adopt the entire engine and all its limitations as a monolithic dependency. I don't doubt there are useful bits in there, which could probably be teased out into some very nice standalone libraries, but you've already summarily discounted the possibility of doing that, so I'm not sure what else to tell you.

To give a more clear point of comparison for the 400,000 lines number, Braid is around 70,000 source lines in total after some cleanup according to this blog post: http://number-none.com/blow/blog/...g/2016/07/19/braid_cleanup_4.html That's an entire substantial, complex game that shipped on Windows, Mac, Linux, Playstation, and Xbox, and is still supported more than a decade after its release. That's the whole thing, including game code, internal tools, and asset pipeline code, not just the engine parts. 400,000 lines of miscellaneous utility code which has not been as thoroughly battle-tested is, by comparison, suspicious to say the least.

In this case I also have the context of having previously looked through your ZeroTypes library, and having been disenchanted by what I saw there - particularly the lack of focus, large amounts of boilerplate, unnecessary platform limitations, and unmarked sections of untested code. As you say, I of course can't really thoroughly evaluate code I don't have in front of me, but from what you've said this engine seems like it suffers similar issues at 50x the scale (400,000 lines vs 8,000).

It's clear you are dead set on a specific path of action you want to take - open-sourcing the old engine as a monolithic piece of software, and not releasing the new one - and are not interested in hearing opinions to the contrary even though you asked for them. If you already know what you want to do, you can just do it. You don't need anyone's permission, least of all mine. I'm only advising that if you are not willing to make compromises with your preferred plan to improve usability of your code for others, you should not expect it to find users, as that is a large portion, perhaps a majority, of the work involved in releasing code for public use.

Edited by Miles on
ZeroTypes is 100% tested! Even comes with a test function that proves it involved testing... been using it for 10 years, refined it over and over.. maybe code that's been around could be.. could be.. (drum roll) could be ... hardened code? Like, code that's tried and true and served someone for a decade?

Well, I don't think my eyes can roll any more without falling out of my head, so... C YA



Edited by Lost Astronaut Studios on
https://github.com/h3rb/ZeroTypes/issues/1

Dude. I was the guy who filed this issue, the only issue in the repo, about a bug I found casually reading the code where indexing into one of your containers would literally always fail. Meaning, that container could not possibly have been properly tested. (also, it is a wrapper around std::vector that provides no extra functionality). And the only commit since then is an update to the readme, so presumably the situation has not changed. Clearly we have very different ideas of what "100% tested" means.

Edited by Miles on
Okay, so I watched the part 2 video. IMHO, the Processing-esque shape drawing routines would make for a nice standalone library. I've actually considered making a C++ version of Processing's 2D renderer (and maybe some of the other functionality) myself, and I have some nicely optmized shape and line tessellation code I wrote for that purpose, which I could contribute to such a library.

Some other things like the skybox utils and the GLWindow layout stuff also look promising to me, though I'm less clear on the exact functionality those parts provide.

The Proce55or system may well be of interest to someone else, but for me personally I've become disenchanted with the sort of object oriented "everything is a _____" code structure. I used to do something very similar back when I made games mainly with Processing, having a base object with init/update/render functions that I subclassed for most things, but I guess I fell out of love with the technique over time as I moved to C++ and experimented with other ways of doing things.
notnullnotvoid
https://github.com/h3rb/ZeroTypes/issues/1

Dude. I was the guy who filed this issue, the only issue in the repo, about a bug I found casually reading the code where indexing into one of your containers would literally always fail. Meaning, that container could not possibly have been properly tested. (also, it is a wrapper around std::vector that provides no extra functionality). And the only commit since then is an update to the readme, so presumably the situation has not changed. Clearly we have very different ideas of what "100% tested" means.


You may whish to check the commits again: https://github.com/h3rb/ZeroTypes...1137e9f2db54979f7af298d2af5d2b613

But yeah such a bug should not be able to exist in a properly battle tested library.
Poor communication on my part. I meant that there have not been other commits since the fix, so although that bug did get fixed, the library does not appear to be any more thoroughly tested now than it was then, and it wasn't 100% tested then, so it won't be now either.

Edited by Miles on
I actually don't use matrix1d for anything. It was replaced with ZIndexed template.
> meant that there have not been other commits since the fix

Efforts were moved to ZeroTypesSFL ; https://github.com/h3rb/ZeroTypesSFL

Note there is no "matrix1d"


Edited by Lost Astronaut Studios on
Hey Lost Astronaut Studios,

If you feel energetic & excited about releasing it i reckon you should go for it.

I think the not so favourable response was because people on the Handmade forum put understanding & learning as a high priority. I think a big codebase doesn't lend itself to such an easy learning experience or productive one. I think having minimal code showing how to achieve different things, or like smaller components released are of higher value.

I think you need to ask yourself, what do I want to achieve by releasing this engine? Is it for learning purposes, if so have I made it easy to understand, and documentated it in a way that allows for an easy learning experience. If it's for other people to make games, will I create the documentation that will make it easier. I know sometimes you need the momentum from interest to make these things happen, but what's the best way to get interest? Like NotNullVoid said, it could be a marketing problem to get people interested.

Who knows where releasing the code could take you, and what might come of it, but I think most importantly you should be excited and feel like I really want to make something of this. If it's more of 'I spent so much time on this, i should release it', maybe that's not the best thing. But go with what your feeling.

Thanks for posting, and I hope something comes of it :)

Edited by Oliver Marsh on
Hi OliverMarsh ...

Thanks for being positive. I received a lot of negativity on a well known Indie gaming forum, too. I think people who are lurking on forums can sometimes be hypercritical or localize their responses to themselves in an esoteric or negative way. It's probably that.

On one hand, I have this code, and it is code that I spent over a decade not only expanding but also hardening. However, it's for 32-bit Windows, with some areas portable to Linux. I have started to port the code to 64-bit Qt-based OpenGL/crossplatform-desktop/C++ but already losing some features and functionality (mainly audio related so far) ... also its OpenGL, which "for now" is still used but may disappear by 2030.

Its value is not so much learning as it is to use it.

I like your advice and I am still considering what to do next. I am interested in keeping the port private for now, but may release the source code for the "legacy 32 bit" version that has expansive features. However, the 2GB limit in most public repos is a factor I'm still considering.

It already _is_ something, the question is what will it become if it is released? In the 1990s, I released some other source code and I've watched what's happened to it in the open source community -- the code has travelled around the world and at some point my name was taken off it and replaced with someone else's today. Someone sold the source code to someone yet it was not permitted by its license. It's something I think about -- what does it mean to release open source -- and how to release it in a way to protect the IP's identity at the source, and yet empower/enable people.

It would be helpful if it could find a community like Handmade, but I'm not sure if anyone will let it fly here. I'm also not sure what else is out there. I used to be part of a place called NonLogic.org and it was a great little group of loose philosophies. Unfortunately that became its downfall when they let the wrong person into the wrong areas and the site/channel/irc/etc went poof.

Edited by Lost Astronaut Studios on