Ah, I figured out why @godotengine appears barely-supported when you look at its Q&A forums: they use Discord, so people post a question, don't get an answer for a while, then go into Discord to get their answer, and the answer is promptly lost to posterity.

This is no way to support software. Use forums so people don't have to keep asking the same questions over and over.

@godotengine Or even better, write some documentation for GDNative so people don't have to guess and then ask questions when their guess is wrong.

Show thread

@godotengine Oh, sorry, you use Discord *and* IRC *and* Reddit *and* Facebook *and* Twitter *and* Github *and* Youtube *and* forums *and* Steam.

If you were actively trying to sabotage the community, I'm not sure what you could do that would be more effective than scattering it so widely.

Show thread

The problem turned out to be that making user-defined reference-counted classes is extremely difficult, so forget doing basic table-stakes stuff that's trivial in Lua, Python, Tcl, Guile, Duktape, and dozens of other existing embeddable interpreters that the Godot team inexplicably decided to bypass in favor of their weird hybrid of Python and C++.

As Alan Perlis said, it's easier to write an incorrect program than to understand a correct one.

Show thread

The way I discovered this was by stumbling across the list of things they want to fix in 4.0, and the inability to make user-defined subclasses of Reference without "dirty hacks" is on the list.

Here's a better idea: dump your toy language in favor of a real one like Lua or Python or even JavaScript (using one of the interpreters that's actually designed for embedding, i.e. not V8 or SpiderMonkey).

Show thread

There is experimental Python support, but it's in the form of a plug-in and you're still stuck dealing with their inconsistent zoo of built-in types.

Example: Array has a slice method, but none of the typed arrays do. Splitting a string gives you a PoolStringArray, so splitting, slicing, and then re-joining requires converting to Array and then back to PoolStringArray. Because apparently they've never heard of interfaces. In Python it's '/'.join(s.split('/')[start:end]).

Show thread
Follow

On the bright side, even though the scripting language and APIs are atrocious, I really like Godot's editor. I suspect this is the main reason it's been more popular than projects like Panda3d.

Second Life's horrible scripting language was a lot of people's first programming language for a very similar reason. Composing scenes in code is extremely hard in any language (except maybe Racket). The logic is mostly just glue, and having a reasonable IDE that works out of the box is a huge help.

Anyway, I'm now able to import MMD (MikuMikuDance) models directly into Godot with textures, using no external dependencies other than my GDNative library. The materials are wrong because I'm using SpatialMaterials for testing, but I don't think making shaders that look right will be too difficult.

After that comes bones, the different kinds of morphs, rigidbodies (for physics), animations, then maybe softbodies.

Show thread

hmm, I thought LSL was not too bad, given the time constraints in which it was created. at that time, it was not so simple to just embed a scripting language in an app.

Godot has no excuses though -- they should be giving you real languages to work with instead o that GDScript thing.

Sign in to participate in the conversation
R E T R O  S O C I A L

A social network for the 19A0s.