Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Angeldust – a fast and efficient video game
716 points by ItsFirefly on Dec 22, 2019 | hide | past | favorite | 193 comments
After years of solo development I'm presenting: Angeldust, an omni-compatible action RPG and building game!

Website: http://angeldu.st

My single server hosts 250+K active players in one giant, dynamic fantasy world. Angeldust's game server is pervasively multithreaded, implementing John Carmack's dream of processing an immutable world state each tick.

Both world handling and network traffic routing uses any number of threads. For networking, a typical game session only uses ~3Kbps of bandwidth, enabling decent play even over 2G/EDGE networks.

The client is programmed in C++ with bits of C, Objective-C, Java and PHP. It runs really well on very low-end and obsolete hardware, all the way up to modern systems with fast GPUs.

Angeldust works perfectly on Windows XP+, even without hardware OpenGL; Mac OS X 10.6+, even on the first 2006 32-bit Intel GMA945 MacBook1,1; Linux 64-bit glibc 2.17+; Android v2.2.3+, supporting Bluetooth game controllers; and iOS 6+, though iTunes App Store forces iOS 8+ (any way around this?).

I live stream weekly on YouTube and Twitch, even right now! Come ask me your development questions! I often see developers playing together with their kids.

YouTube channel: https://www.youtube.com/AngeldustLive

One more thing: the Angeldust website ( https://angeldu.st ) uses plain HTML and CSS to offer interactive, game-related actions. It's fully functional even without JavaScript enabled.

This looks impressive. Can you go into how you implemented the immutable world state each tick a bit more?

I'm developing a game myself, and figuring out a good method of multithreading it took a lot of work. While I am content with the results, I wouldn't say I arrived at a good solution.

It sounds like you went with a purely functional approach? Did you rebuild the entire gamestate each tick, or keep a list of changes you needed to make to the relevant data?

This question was the most asked one during my livestream. It's a good one! Even though it's 01:33 right now after a 7 hour livestream, I'll try to answer it as clearly as possible, building from the foundation up to the high level.

The Angeldust game world is tracked in an "active chunk set". A chunk is a 2D part of the world, 32x32x64 in-game blocks (meters). The active chunk set tracks only the chunks that contain, or are near, players. This chunk set is processed in parallel on any number of threads/cores configured in the server settings file.

Angeldust tracks two states for the data contained in each chunk, kind of like an array of size 2. Each tick, one state in the array is the immutable "read"-state and the other is the mutable "write"-state. Every tick these states ping-pong between the roles.

During processing the server processes the read state and copies over unchanged entity/world data by simply pushing pointers to that data into std::vector<>s in the write state. For things that did change I push a new pointer into the write state and clear up the old pointer in the next tick. Pushing pointers saves memory bandwidth since you don't have to copy all entity data for every tick. And still you can guarantee that the "read"-state will be unmodified so that other CPUs/cores/threads can freely access all of the data and pointers.

On the livestream I discussed a few cases where I do use (largely uncontested) mutexes for data synchronization: for friend chat and private chat I do a lookup of destination hero pointers in the "hero map" and then lock/unlock the hero's mutex for pushing chat messages into a vector.

Does this make sense? Let me know if I should elaborate. I will probably take a nap now, but I'll answer you (and others) tomorrow.

I'll also do another livestream tomorrow, because I feel everyone on HN has very useful questions, feedback and ideas.

Thanks for the explanation! I happened to be thinking of similar multithreading ideas (chunks and ping-ponging states) recently, but was stuck on what happens when computation happens across chunks in multiple threads. e.g. an object move across chunk border, or an object interaction affecting two objects in different chunks. Could you elavorate on your approach about these? I'm really curious

Good follow-up question! As for the read state, you're already golden in the sense that you only read data and don't update it. If a chunk needs world or entity data from a neighboring chunk—or even halfway across the world—you can just follow pointers there and you know the data is available and accurate.

For the write state, you're absolutely right that entities will need to transition between chunks. The server looks up the destination in the "active chunk set" I mentioned and then uses per-chunk std::vector<>s guarded by a mutex to push "migrating" entities. This requires a mutex since multiple CPUs/cores/threads/chunks can be pushing entities to the same destination chunk. These mutexes largely have zero to little contention.

Does that answer your question in an acceptable way?

Thanks! The idea of having a list of migrating entities per chunk is good, and it avoids locking on the list of all entities in a chunk. But I still have some confusion about it:

> The server looks up the destination in the "active chunk set" I mentioned

but what if the entity teleports to an inactive chunk?

> and then uses per-chunk std::vector<>s guarded by a mutex to push "migrating" entities.

Will these migrating entities participate in later calculation within the same tick, or are they excluded? If excluded, what happens when there are two mechanisms that mutates that entity, but the first one put it into the migrating list of another chunk? If included, the thread of which chunk will continue this calculation?

And when some kind of mechanism mutates two entities in different chunks, which thread is chosen to run this mutation? And how does it mutate the state for an entity in the other chunk?

Meanwhile since you mentioned ticks, (just to be sure) are you using a barrier per tick to wait for all threads to finish the same tick? When are the migrating entities merged into the main list, and are you using another barrier for that?

Really getting into the nitty-gritty here. If an entity migrates to an inactive chunk, I keep the entity "on hold" and add a "chunk set mutation" to the active chunk set so that the set is expanded in the next tick. The processing thread for this newly added chunk sees that no data exists yet and synchronizes the state from the backend during the subsequent tick. On this tick the entity gets added to the new chunk write state and disappears quietly from the old chunk in the next tick since it isn't "on hold" or copied anymore.

As for the processing per tick: the entire active chunk set gets semi-randomly processed by threads. You'd be absolutely right that the order of operations isn't always deterministic. An entity not being processed for a tick doesn't happen since the old chunk will still process entities that are "on hold", but only perform a subset of operations. Double-processing does occur and this is sometimes visible while playing with a chat message being duplicated. This happens pretty rarely and I took care to make sure occasional double-processing doesn't interfere with gameplay mechanics.

As for synchronization: yes, each tick all processing threads join together and the server performs minor central processing and scheduling. Then the next tick begins and all threads are started again.

I see. It seems sometimes we do have to live with non-deterministic behaviors or even small errors.

I'm still unsure about the following question from your answers: > when some kind of mechanism mutates two entities in different chunks, which thread is chosen to run this mutation? And how does it mutate the state for the entity in the other chunk? My initial thought was this would require adding locking on every entity, since it might be accessed from another chunk/thread. But that's clearly not ideal. Maybe have a separate list for outside-chunk changes, and merge them with internal changes later?

And regarding having two states: How/when are you sending world state to clients? My thought was to clone the current state periodically and send it to clients (can sending takes less than one tick? I don't have an idea). Sending state to clients seems to be needed if the game needs client side predication, hence this question.

I think your first question is actually supposed to be: what if a single (not two) entity is modified from multiple chunks?

All external effects that can happen to an entity are written to an atomic integer that tracks healing points, damage points and effects like poison and stunning. Angeldust currently runs on CPUs supporting atomic integers everywhere, so this doesn't have to fall back to mutexes. On platforms/compilers without atomic integers I have a software-fallback that uses mutexes for this, but currently it's not used anywhere.

Most world state is compiled into flat byte arrays each tick to save processing time, since many clients can be in the same area at once. The server bundles these world state byte arrays for chunks near a client together and sends them over the network. The client interpolates from these updates. What you see on screen lags behind subtly to make sure animations are smooth. I think this happens in most online games since you don't really want to extrapolate.

Angeldust's game pace and mechanics are designed so that the interpolation doesn't affect your aiming accuracy or game experience too much.

Thank you again for all the explanations!

Thanks for the explanation. It makes perfect sense. I did something very similar, except your system sounds better in that you only copy data that has been changed. I have a double buffer system where I'm copying almost all of the data each tick, and swapping the stacks when the next tick is due.

https://youtu.be/1PhArSujR_A?t=988 was Carmack's presentation on an immutable Haskell game engine. Unfortunately, he doesn't go into too much detail.

https://news.ycombinator.com/item?id=15036591 was the previous HN thread about it.

I'll reply more in depth after my livestream, but it's a very good question. You can hop on YouTube right now to discuss it if you want. There's a bit of banter going on, but I might be able to squeeze in some useful replies in between.

How did you afford taking off years of work to develop this? Did you have a lot of capital / runway? Low cost of living?

Kudos for this extremely well polished project. This is the dream many of us have but can't or won't embark upon. This is very inspirational.

Good question. I started working right after what we call "middle school" in the Netherlands which translates to high school I think. During the daytime I would work my job and in the evening self-study for the "Open University" we have here.

I lived with my parents during this time and could save up money as a buffer. Thanks to that support I could financially bridge these past years of development without worrying too much. Also: keeping expenses as low as possible. My product is old school and so are my computers.

You're killing it!

Great choices, fantastic execution.

You're going to go far. Keep it up!

Thanks! A slight word of warning though, something that also came up during yesterday's livestream:

I've been really lucky to be able to successfully fulfill my childhood dream by making this game. But like Freddie Mercury sung: it's [not always] been a bed of roses or a pleasure cruise. I've sacrificed progress in other areas of my life to see this through to the end. I hope to catch up there starting as early as next year. Nonetheless I definitely wouldn't be the same without having taken on this adventure. I've grown so much as a developer, an entertainer and even as a person by creating Angeldust.

>> I've sacrificed progress in other areas of my life to see this through to the end

>> I've grown so much as [..] and even as a person by creating Angeldust

These are words of wisdom that prove your point, and I think it's a great thing you've posted them here!

Inspiring! Looks awesome. Hope this will go on to become a huge success. All the best!

He hasn't mentioned it, but it's on Steam also. So if you like it:

Steam: https://store.steampowered.com/app/488440/Angeldust/

Android: https://play.google.com/store/apps/details?id=nl.metagaming....

iOS: https://apps.apple.com/us/app/angeldust/id687448635

PS. The author mentioned it was free on Android fyi, because it only has the "Cartoon"-engine currently. If i'm not mistaken.

Thanks so much everyone for all the positivity so far! I'm still streaming right now. After the stream I'll catch up with all questions and comments here, I've had a blast talking about my work so far.

And if any of you can get me in touch with John Carmack that'd be very awesome ;)!

Hes quite active on his facebook

send him e-mail!! worked for me :)

Both you and Exuma: thanks for the down to earth answers! I'll give it my best shot.

For the senior citizens viewing this they might relate the term "AngelDust" with the dissociative PCP, let me assure them though, it hasn't been called AngelDust since the 70s. You'd be much more likely to hear it referred to as "wet" or "sherm". IF you went to the ghetto and tried t buy Angel Dust they'd think you were a cop. It's like calling weed "dope". Just a little disambiguation from a drug name etymologist :)

But that’s my favorite drug name, despite its antiquity. There’s just such a goofy mismatch between something that sounds like magical fairy sparkles from heaven, and a drug that lets you fight six cops at the same time and win.

Your time scale and etymology are wildly off, or else your experience is confined to a very limited geographic region.

> For the senior citizens viewing this they might relate the term "AngelDust" with the dissociative PCP, let me assure them though, it hasn't been called AngelDust since the 70s.

I don't see that connection as an issue with the game or your post. It certainly isn't doing anyone any harm, despite what others suggested in earlier comments.

That said... I'm 21 years old, and I still associate "angel dust" with PCP. The name is still used by popular rappers including Mac Miller [0] and Run the Jewels [1]. It is still defined as PCP in 6 of the top 7 results, vs 5 of the top 7 for "sherm" and 0.3/7 for "wet" on Urban Dictionary [2,8,9]. Angel dust is the most common synonym for PCP on Urban Dictionary [10]. The name "angel dust" was used to refer to PCP in a 2011 episode of Its Always Sunny in Philadelphia [3]. The name is still in common parlance on Reddit [4,5,6]. However, the drug seems to have experienced a decline in popularity, accounting for less than 0.1% of all documented hallucinogenic drug use in the United States in 2017 [7] - suggesting that the term "angel dust" is not well known simply because the drug isn't commonly used, and not because the term has been abandoned.

I just don't want anyone to get into trouble thinking that they can use the phrase "Angel Dust" without it being seen as a reference to hard drugs by the general public.

I am also surprised that this association is being rejected, considering that the creator of the game is going by "Frank Lucas" [11], which is the name of a famous drug trafficker [12].

[0]: https://www.youtube.com/watch?v=rIQqzTNRmoc

[1]: https://www.youtube.com/watch?v=R_esHn4X03U

[2]: https://www.urbandictionary.com/define.php?term=Angel%20Dust

[3]: https://itsalwayssunny.fandom.com/wiki/The_Gang_Goes_to_the_...

[4]: https://www.reddit.com/r/PCP/comments/ba1754/two_dimes_of_pc...

[5]: https://www.reddit.com/r/Drugs/comments/5tru38/what_is_angel...

[6]: https://www.reddit.com/r/serialpodcast/comments/2qove1/how_l...

[7]: https://www.drugabuse.gov/drugs-abuse/hallucinogens

[8]: https://www.urbandictionary.com/define.php?term=sherm

[9]: https://www.urbandictionary.com/define.php?term=Wet

[10]: https://www.urbandictionary.com/define.php?term=PCP

[11]: https://angeldu.st/en/game#play-now-button-3

[12]: https://en.wikipedia.org/wiki/Frank_Lucas

I love your username. Do you follow any particular current of Western Ceremonial Magick?

I do not! (Sorry to disappoint - I’m a run of the mill atheist).

My name was inspired by a Gilfoyle line in Silicon Valley, which references Magick:


(Since you’re on HN there is a good chance you’re familiar with the show - but if you’re not, the Gilfoyle character is a self-proclaimed LaVeyan Satanist)

I don't know if "drug name etymologist" is an official profession or your hobby, but if it's the former I would suggest you seriously reconsider and re-research your conclusion on this term! Just a friendly suggestion :-)

This looks incredible. Gives me vibes of old school Runescape, mixed with Minecraft. Plus the performance as you've detailed it sounds like quite a feat! Also very cool to see a project that supports old hardware--I remember being a kid with hand-me-down computers struggling to play even some Flash games.

Gonna give this a play tonight. Rock on, dude!

Thanks for the feedback, I hope you enjoy playing. I'll be livestreaming again today at 17.00h UTC, feel free to swing by to hunt together, or talk technology!

Do you have any plans to open-source all or parts of the game or underlying platform? Do you plan on developing this into it's own 'game engine' or plan on going further than this initial game? I've been following a few multi-threaded game projects and they are always very interesting to read up on, best of luck!

Yes, open sourcing at least the client part of the game is something that I'm very interested in. I'm not entirely sure when or how this will happen just yet, it will depend greatly on the commercial success of the game. But it's definitely my preferred course of action for the future.

EDIT: I'm not really interested in separating or spinning off the engine, but you will have few problems turning the game into something entirely different.

While I would advise against open sourcing the core of the game, opening the client api may be a good idea - perhaps others can write clients for it, but there may be issuing around people making bots to cheat the game.

I wrote a "bot" myself in the form of a network simulator for general and load testing of the server. If players were to automate the game I'd be more than happy to make a special server where we could show off their work. Making an agent navigate an open 3D space and performing planned tasks would make for an impressive demo for all parties involved.

That might make a good first open source release actually, if it implements a good chunk of the game protocol you might be able to use it to get a rough idea for the types of ideas people would want to run with, and it would also allow people to hit the ground running actually implementing ideas against the engine quickly.

A separate test server would be a very good companion idea.

I hadn't even considered this before, but I see your point! Getting a "core" part of the game's "API" released first allowing players to fiddle around writing a bot sounds like a beautiful gift for the technically inclined players. Because of the small(er) scope it could help iron out wrinkles in the open-sourcing of the client as a whole later on. Thanks!

Would be interesting indeed!

This is the most interesting thing I've seen in a while. Props man. Good work.

Thanks so much! Finally sharing the end result of all my hard work feels really good. And seeing so many visitors swing by on the livestream is insane!

Yeah. I'm definitely going to follow you for more updates. It will be interesting to slowly learn from you via osmosis as I've been interesting in developing browser games for a long time. Seriously impressive to see what today's tools enable creative people like you to do as a team of one.

"Today's tools" do not necessarily allow you to make anything like this. I'd even go as far as to say that an array of ancient hardware and software are the main reason for being able to make a product focusing on compatibility and performance. Not aiming for a moral high ground, but just looking at it practically.

I started Angeldust on my trusty, white MacBook1,1 mentioned in the starting post. Having only an Intel GMA945 for powering a 1280x800 display and trying to get a decent frame rate forces some design decisions. I quickly ran into optimizing for GPU overdraw and resources instead of being bottlenecked by the dual-core Intel CPU.

Then I ported the engine to iPhone 3GS where you get the exact opposite situation: the GPU can push lots of pixels to a 480x320 screen, but the ARM CPU is struggling to keep up. Just this 2006/2009 era combination of hardware alone forced me to be efficient with both CPU and GPU. Eventually I even got the engine running smoothly on a first-gen Raspberry Pi on a 1280x1024 display which is no small feat.

I think if you start from "today's tools" on "today's hardware" it's entirely too easy to consider any older platform inaccessible or obsolete, while if you work the other way around you appreciate the sheer power older devices have when used properly. Then moving onto newer hardware is just icing on the cake and just shows you how ridiculously powerful a modern 6-core Ryzen with an appropriate GPU is.

Your stories are great to listen to. Is there any other place I can follow you other than YouTube channel?

Pick your poison; I also have a Twitch channel:


I'm not a social media user and I currently don't keep a public blog. There are many interesting aspects of Angeldust to talk about and I have many war stories from this and previous projects that would make for an interesting read or listen.

Just this evening I talked on my livestream about my rough introduction to SIGPIPE randomly killing my server processes. I can understand that a YouTube or Twitch livestream isn't the most convenient format for hearing these stories, but it's currently my most warm and entertaining way to share them.

Streaming is a highlight in my life, while writing out stories feels like work. Very faintly I'm crystallizing a plan to share knowledge in a written way, but for now I think the livestream is going to be my preferred way for requesting and telling stories.

> programmed in C++ with bits of C, Objective-C, Java and PHP

I am very curious how and why this happened

On the livestream I detailed this a bit. Angeldust has a single "domain model" containing all item, entity and object properties contained in a PHP code generator that generates C++ source code and header files for use in the client, server and asset tools. It also generates PHP files for use in the interactive and tied-to-the-game website. The website is also in PHP.

The client uses Objective-C to integrate certain platform features into the C++ codebase on iOS and macOS. Java is used for some functionality not provided by the Android NDK.

Seems like the other languages were for the frontends. C++ core, Java for Android, objC for iOS, php for web

Congratulations, amazing work!

I absolutely love how you have opted out for frameworks on the website and that it just work. Kudos!

The same for your considerations for making it work on old hardware and you comments on your live stream today about your old Mac and making it run on Windows XP as well.

More developers need that attitude.

I wish you all the best and I hope this becomes a Minecraft size success!

(Michael Scott:) Finally! Thank you. The "old school" PHP -> HTML + CSS with minimal JavaScript website is a thing of beauty I think. It's heartwarming that HN didn't dismiss my website just because it's not Web 2.0 or 3.0. From a technical perspective it's very much Web 1.0. But I see it as being elegant, functional, very fast and maintainable. It's tied in to the game at a core level as well, with real-time updates of in-game action. Also: I didn't even see a CPU spike during HN's peak hug, so try harder, soldiers!

As for the older hardware and building something for performance: in my dreams this past night I realized that HN as a website closely fits my design philosophy. This website is just completely transparent and gets out of your way. You get a box. You enter text. Boom. It's beautiful. I hadn't posted on here before, but the entire experience has been delightful.

Tangent: sometimes it feels like the home computer I grew up with was faster than any modern device that I use. I'm glad I'm at least able to recreate that feeling of raw performance on older hardware. Computers have always been insanely fast, I'm not sure where we lost sight of that.

Still streaming, sorry, it's a crazy and crazily cool moment for me right now. I promise I'll be back with answers soon! :D

Have you thought about porting this to Nintendo switch? Indie community is huge so many games do well on the platform.

Yes. A lot! Unfortunately I've always considered "the big three" consoles completely out of reach for my project. Many players have asked about a port to the Switch and other consoles. I'm confident I'd be able to pull it off technically without too many issues. But I have zero experience dealing with parties like Nintendo and adhering to their (I imagine) very strict policies for games. Being a mostly-multiplayer cross-platform-play title complicates things too I think.

During my stream yesterday I also discussed Switch compatibility. I think Angeldust is a perfect fit for the Switch. Nintendo's design philosophy very closely matches mine. Angeldust is big, bold, colorful, cheery. Let's get it on there stat I'd say!

If you have pointers on getting started with indie development on the Switch, I'd happily start reading up. Now's a good time as any. And with most things in the game I learned everything by just starting and winging it. Hopefully this'll be another case of being able to quickly internalize things and get going.

These guys help indies port to consoles, maybe they have a few tips?


Thanks, I took a look. They look geared specifically to getting Unity engine projects "ported". Porting my (non-Unity) code is the least of my worries; I'm already maintaining about ten different build toolchains.

I anticipate most problems in the Nintendo Switch platform rules and guidelines that I'm completely unfamiliar with as of yet. And I lack the hardware to test. But now that I'm forced to think more about it, both seem like solvable problems. Thanks for the inspiration :)

I found that company via a gdc talk by the guy who did The First Tree (the talk was called No Time, No Budget or something alike). He used them mostly to get through the hurdles of rules and guidelines. Glad I could inspire good luck with your game!

If you can't afford a proper dev-kit you might be able to find an older switch model that you can exploit, which will allow you to write and run code for it without the need for an official dev kit.

might as well start at the official site https://developer.nintendo.com/the-process

How did you choose the name?

For a native english speaker, the only association I have is with really hard street drugs (specifically PCP), and that association is very strong.

Is there a special meaning for your game?

Since your message popped up right at the top I'm going to reply to it, hopefully summarizing my view on this and addressing the lively discussion about the game's name.

There is a special meaning for the game. The short backstory is included on the game's website. Here's the gist: in the game's lore Violet and Crimson are angel siblings. Violet is the angel of creation, Crimson the angel of destruction. Due to unforeseen circumstances both angels shatter to dust. This dust dwindles towards the planet where the game takes place. Subsequently parts of the game world and its inhabitants have been permanently infused with magical energy. Energy derived from the dust of angels. Angeldust.

"Angeldust" is beautifully fitting and it's a beautiful name in my opinion. I wouldn't want it any other way. There's an entire design language behind the lore, the names and composition of the game world. To a casual observer this might not be apparent or make sense. But everything ties together perfectly.

I've seen discussion and jokes about the name before when reaching a larger audience. It's great that people have an opinion on the name and some of it's (in my view) lesser known historical usages. As far as I'm concerned Angeldust is a pretty cool video game product with unique properties. In no way, shape or form do I want to endorse or conjure connection to other, past uses of "Angeldust". I hope you can appreciate the context, connection and product that "Angeldust" refers to for me.

And then I get there's a bit of confirmation-bias and pattern-matching going on with my name. I wouldn't have expected otherwise from the smart hackers here. I have no good argument against this. I wasn't aware that I share my name with a (for you all, well known?) dude from the past. Given finite first and last names, collisions are bound to happen. Maybe we should start using MD5- or SHA-hashes as names to prevent this in the future.

i like the name and don't associate games with drugs, so for me personally the name, even though used for some drug as a nickname (official name of the drug is obviously not angeldust) doesn't make that click. I think personally plenty of people will not relate it, and for most who do it might just be a bit of a giggle / afterthought if they do.

If it's really related to the in-game content and lore i'm sure players will figure that out and create a new more positive association to the word.

For example, a male donkey is called a "Jack", yet people still name their kids Jack, not relating that to a male donkey... (maybe a little more benign example.)

Personally i wouldn't worry about it too much! it's not like the game is called CrystalMeth or something....

Well, traditionally, Jack was a nickname for John. So they likely named their kids John. Though I guess more often these days people give their children a nickname as their fully-qualified given name.

What are the advantages of using your custom engine instead of unity, unreal engine?

My vision was to make an "all-inclusive" product where people with ancient hardware would be able to enjoy a modern-day product. All existing engines focus on modern specs like OpenGL 3.x, 64-bit processors and operating system versions that I am not even able to run on some of my own devices.

In addition I have complex, dynamic geometry to render. And I wrote a custom, fixed-precision integer math library to prevent rounding errors for the almost infinite game world. Other products have weird rounding errors near the start, the middle or end of their worlds because of inconsistent floating-point accuracy. Moving to doubles only mitigates the problem instead of solving it.

And then it's just efficiency too. I have no idea how or why Unity or Unreal will treat my assets. As demonstrated on the stream: the game instantly switches between visual styles and texture quality. It lazily loads all resources so the main thread is only stalled when doing bulk uploads to the GPU. This makes the game start up in less than a second, something I couldn't pull off with a COTS engine.

Let me know if this answer didn't address your question fully.

How long did the client side engine take to build, if you had been able to do it full time?

It's ridiculously hard to come up with an answer to this seemingly simple question. I've tracked my time usage pretty meticulously by version number, but for most features I had to develop the server-side, client-side, website and network simulator code simultaneously. Developing this (or any) game I think isn't a process where you build the server first, then build the simulator and then build the client. It's building v0.0 for all parts, then v0.1 for all parts and onwards where all parts gain features in lockstep.

For Angeldust I've done dozens of updates, each and every single one building upon the existing base. Looking back it's amazing to see that the product evolved in an almost linear fashion from v0.0 all the way to the current version without ever having to drop or redo features. But because the product evolved as a whole I can not really distill a time estimate for only the "client side engine".

I mean: would you consider testing the client side engine part of client side engine development? For testing you need a working server. For which you "need" a working network simulator. It's dependencies all the way down.

And how about translation work for in-engine strings, updating shared libraries and frameworks, issue tracking, writing the asset conversion toolchain (which needs assets, which need integration). It's very hard to come up with any solid number. Maybe if you can severely limit your question's scope I can come up with an educated guess.

I think all that counts. I guess I’m just tempted to make a game engine as a hobby project. I made an OpenGL renderer in uni once (it was fun), but I don’t really know what the scope would be to extend it substantially - obviously, not to “unreal” levels or anything even close

Go for it! If you already have OpenGL experience—doesn't matter what level—you "only" have to add a bit of basic 3D world math and input handling. I found SDL (http://libsdl.org) to be a very good core framework to build upon regarding input handling.

For the 3D world, start with a checkerboard pattern or so. In fact, this is almost exactly what I did to start Angeldust. I once showed off some early game prototypes on my stream, take a look at this one for example: https://www.youtube.com/watch?v=qMs8YpkSrg0&t=3289

If you keep watching that stream you'll see other in-progress versions so you can see how my product evolved.

Any other resources you would recommend? I read that physics is particularly time consuming for example. Thanks for the replies so far; it’s very fun to see your work

I didn't really use many external resources during development, most of the time I'm just "winging it" and acting towards a goal that I have in my mind. Coming up with a naive solution first, then trying to optimize it a bit in my head, then writing the code for it.

Angeldust's physics are relatively straightforward since it's based on a voxel grid. All game world intersections are approximated using axis-aligned bounding boxes (AABBs). I wrote the physics engine myself from scratch to reduce the number of game world data lookups, because that's pretty much the hot path in the code.

In the YouTube video from my earlier comment you can see that initially I started out with just game world boundary clipping and simple plane physics on the checkerboard. As I expanded my game world model, the physics engine grew along. So my advice would be (again) to start simple and grow from there. You'll do fine!

Lower system requirements is one that's pretty obvious.

performance I guess.

Is there a Mac installer available for download? App store says the game isn't available in my region (USA)

Sorry for taking some time to reply in full, but I wanted to wait for an official answer from Apple support. Apple informed me that:

"[Y]our apps … are available worldwide and functioning as expected. If your customers are reporting issues, they may not meet the requirements for the apps or have some issues on their devices and would need to contact technical support for assistance."

I'm glad you and others reported problems with availability, but it looks to be something outside of my control. If you still want to get Angeldust on your Apple device from the App Store you might have to contact Apple to help diagnose the issue. I'm sorry that I am unable to help you.

Like I posted earlier, Angeldust is available from several other sources besides the iTunes and Mac App Store:

Itch.io (Win, Mac, Linux, Android): https://metagaming.itch.io/angeldust

Steam (Win, Mac, Linux): https://store.steampowered.com/app/488440/

Google Play Store (Android): https://play.google.com/store/apps/details?id=nl.metagaming....

Quick answer—both Steam and Itch.io offer DRM-free, standalone macOS versions:

Itch.io: https://metagaming.itch.io/angeldust

Steam: https://store.steampowered.com/app/488440/

Long answer—you are the fourth hacker to report that the game isn't available for you on one of Apple's App Stores. I've contacted Apple right after my stream yesterday, now waiting for a reply. If anyone can help me diagnose this or get it working, that'd be greatly appreciated. I recently switched from a free tier to a paid tier for the product launch, so I might be messing up something.

It's showing up for me in the App Store, macOS Mojave 10.14.6 (18G1012) from Argentina. Hope it helps with diagnosing somehow, and good luck with the project, looks impressive.

You can buy it on Steam.

Assuming "works perfectly on XP even without hardware OpenGL" means you have a software renderer as backup, can you explain more about how you get performance out of one on modern OSes (where DOS techniques of direct framebuffer access don't apply)?

Windows XP IIRC shipped with a soft OpenGL that'd look like a hardware version. I imagine they's not doing anything special other than not having requirements that a soft renderer can't fulfill.

Right on. Software OpenGL 1.1 works on XP (and other Windowses) and the render engine falls back to minimal features if it detects this.

How long did it take you to reach 250k players, and has there been marketing involved?

This HN post is kind of the first attempt at getting the game out to "the public" aside from passively being present on app stores like Steam, Itch and Google Play.

Sounds good - keep up the good work!

The over 283k accounts that are on AngelDust are not unique players. Many players have 100s accounts, mainly for the purpose of claiming enough land to build towns.

This looks cool!

250K players is impressive. Are those real players or bots?

Interesting to know more about performance too, what is your rate of update per second? How long does it take to process a tick?

Do you have a tech blog? Would be really interesting to learn more.

You might have noticed I already took a looong time to formulate a reply to your questions. And I'm still not sure how to approach them, so I'll reply to the last part first.

Currently I only have my livestreams as a public presence. I find it a very comfortable and pleasant medium for conveying who I am. It lets me share stories and ideas including non-verbal cues and that's a major plus for me. So if you want to learn more, definitely subscribe or follow on YouTube and/or Twitch:



I honestly appreciate talking about technical things a lot, even though I might be playing what appears to be a silly video game. As for streaming: I just did three consecutive days, but will take a short break. I'll be back this Thursday.

Out of the almost 284k accounts, nearly 25k of those accounts have no gold, so probably logged into the game and logged off, without playing the game. And 34k have less than 1,000 gold. Some of the players have 100s of accounts, and those are mainly for claiming land, since each account can only claim 64 plots of land.

Awesome job. I'm working on a game with some similar technical challenges (landscape is based on actual Earth though) and backend is in Java. I'll see if I can get my friends to play.

I read somewhere about doing your project in a "release early, release often" style of development. While developing Angeldust I got others involved and playing after just a few months of part-time development. Getting feedback, ideas and issues early definitely helped me build a rock-solid base on which I could build the overarching gameplay.

So if you have friends (you're already doing great there!), get them playing today! Or tomorrow! It also forces you to have a working build pipeline and packaging process for getting builds out to others instead of toying around on your own machine. Also: don't take my advice as gospel, but judge its merit for yourself.

Hah, I know, I meant to play your game. Thanks!

Is the game similar to something like Terra Mango (https://terramango.com)?

It's similar.

Impressive for a solo indie game dev.

Hello, very impressive project, great job! I have two qestions, somehow related but not fully.

1) How did you handle such big distance draw? Are you using lod and occlusion culling? Was it PVS or rather depth buffer based solution? Did you use bsp or octrees or something else?

2) what data structures did you use to hold the world and it's objects? And how much of it is kept on the server vs client?

Angeldust has practically zero level of detail (LoD) and has no occlusion culling. "Almost zero LoD" means that geometry is always rendered at full resolution, but subtle vertex-shaded effects like the waving of grass are not applied for distant geometry. So you will see grass everywhere, but it won't wave when it's "unnoticeably" far away. Other than that I just push millions of mostly buffered triangles and vertices each frame at high view distance without a hitch. Turns out computers are pretty fast these days.

Note that I'm working on a newer render engine that actually uses more GPU shading capabilities and this engine runs even smoother than the current one, since it balances the workload a lot better between CPU and GPU.

As for data structures: both client- and server-side it's pretty much a simple std::map<coordinate, chunk*>. Its O(log(n)) lookup is adequate and I don't want or need to do complicated things to ensure decent performance. On top of the map I do spatially-aware caching to prevent say 99% of actual map lookups which turns the majority of lookups into O(1) which seems pretty much optimal.

As for keeping data: the server is authoritative in everything. The server keeps the data. You can take any device, install Angeldust and sign in with your credentials and you'll find yourself back in the same world, same friends, same progress, same everything that you had on another device.

Same with game state: the server tells the client everything. The client is basically just a dumb graphical terminal application that renders 3D visuals instead of VT100 text.

Awesome were you inspired by Ace of Spades at all or have heard of it?

I remember that original voxel-based engine and web server list that launched the client using their custom URI.

It was awesome how small the game was and how fun it was the simple concept (Minecraft with guns and no floating blocks).

I once saw a trailer for AoS, but to be honest I don't really play many games myself these days. I find that working on Angeldust is in itself a reward that alleviates the need to play games as escapism or entertainment.

Just curious, what would you say to your customers that are playing you game for the sake of escapism or entertainment?

I'd say: have fun! With Angeldust being a shared, persistent, open online world it's a pretty cool place to make friends and work on building projects together. You can leave a permanent mark in a place where you can be someone else compared to real life.

But I always advise enthusiastic players to keep an eye out on real life. Mind your health and your relationships. Real life, family, friends—they all come first. Of course you can be friends in-game and even build meaningful relationships there, but that's no substitute for living a well-balanced "real" life.

I've been an avid gamer in the past, and right now I'm a very avid developer. I try to balance that in real life by playing sports and exercising three or four times per week. Going out on walks, to the movies, meeting up with friends. "Balance in all things" as a character from Baldur's Gate would say.

This game is not available in the Dutch Apple App Store :(

Is there any way I can diagnose this? As far as I can tell Angeldust is actually available on both the Mac and iTunes App Store. Any feedback or advice is welcome here.

I originally followed your link on your website, which opened App Store and gave me that notice about it not being available in this country.

However, now I just opened App Store, searched for "angeldust", and bought it for less than 5€... so clearly it is available.

So it has something to do with the path a user takes from the link on your website thru the Apple dialog that asks where to open the link [App Store], etc.

Thanks so much for taking the time to follow up. I think you are right on the money with my website-link being stale or outdated. I've contacted Apple to diagnose and fix the issue. If you—or another hacker—knows a good way to link to apps on the iTunes App Store from a website I'd love to hear it. Apple's link builder seems to tie in a regional preference which might not match the user's actual region.

Even though it's 03:06 at midnight local time I just shot Apple a support ticket asking for help. I assure you that Angeldust is/should be available on both the iTunes and Mac App Store.

If you're still interested in trying out the product, can you try manually searching for "Angeldust"? I'm using the Dutch App Store(s) and the product shows up on multiple Macs and with/without being signed in.

Same for the UK.

Sorry for taking a while to reply—I contacted Apple support and it seems like the issue is out of my control. For both you and the GP comment I'd like to refer you to my reply here with background and more information:


Looks fantastic! When did you originally start development?

I'm going to give a sentimental answer instead of a fully accurate one. This also came up during the livestream, so it's a great question!

When I was a five or six years old kid I used to program on our home computer, a Philips P2000. Monochrome green on black CRT, Zilog Z80 CPU, different ROMs for running BASIC or Pascal or whatever you hacked onto it. My very first program drew Christmas trees on screen. Very appropriate to share this story right now. I immediately showed my mom, who wasn't really impressed, because she didn't understand what I had done. I had told my computer what to do—wow!

Then one day I was walking around the schoolyard imagining the world around me being digitized and available as large, 3D blocks inside my computer. "My" P2000 wasn't advanced enough to pull it off and similarly I wasn't advanced enough to program something like that. But the idea of having a coarse, 3D replica of my world and being able to have fun in there with my school buddies always stuck with me.

Many years later, at an intellectual dead-end in my job I took a month-long vacation to regain focus on my life and myself. And I suddenly remembered my childhood dream, or fantasy, of that 3D world. And I realized that computers were now advanced enough and I was advanced enough. So I decided to take on the journey, channelling my inner five-year old.

Some players have joked about this with me. That they're actually investing their time in the figments of a five year old's imagination. And that's not far from the truth. Even though Angeldust is better, more beautiful and more professional that I had ever imagined, it is the actual implementation of my childhood dream.

So the answer to your question is that I started development somewhere between being five years old and now. Hopefully this answer still gives you some joy and insight!

What's your plans for commercialising AngleDust?

Attaching a price tag it (done!) and trying to spread the word through relevant channels (in progress). Posting on Hacker News has been a thoroughly enjoyable process so far and I look forward to meeting more great minds.

I tried to download the game from appstore but it's not available in NZ, maybe you can provide actual package to download without app store.

Of course! I can't distribute iOS apps outside of the iTunes App Store, but I do have DRM-free, standalone versions of Angeldust for macOS here:

Itch.io: https://metagaming.itch.io/angeldust

Steam: https://store.steampowered.com/app/488440/

If anyone nows a way to distribute iOS 6.1+ apps that doesn't violate my agreements with Apple, get in touch with me :D!

Search for it from the store, apparently the link is somehow broken

Is there a way to close an account?

Sure, ping me on the e-mail address listed on the support page.

Wow. It works everywhere. Amazing

Does fast & efficient = fun?

Makes it more likely.

I've noticed a first-pass test for video game quality is to watch the speed of menu transitions -- a slow transition time is indicative of other problems (menus are the least interesting, and very common, interface a game provides you; no one wants to spend any more time in the menu than they have to, except the designers).

Speed correlates highly to quality in game implementations.

Additionally, being a multiplayer game, fun also comes almost for free -- as long as you give decent tools for supporting the social interaction, the players will bring the fun in themselves. (For some reason, a lot of games fear their player base, and strangle the interaction opportunities as much as possible).

No, of course not. But I myself honestly appreciate a well-crafted product way more than a badly crafted one. So I think we can at least say that:

Fast+efficient+"some fun" > Slow+inefficient+"some fun"

What are your server costs?

It of course depends on the demand, but very low in general. During periods where I don't have a lot of player activity even a single vCPU is enough to host about 2.000 simultaneous players.

> It of course depends on the demand

Do you require downtime to scale or is it seamless?

Migrating requires downtime since the game server runs as a monolithic entity. I migrate between dedicated servers and VPSes based on expected demand. Right now we're running on big metal to be able accommodate many players coming while I'm more actively promoting it.

When the hype settles down I'll probably move back to a small VPS. I always joke that Angeldust and the server would even run on your toaster. I bet it would even be able to serve hundreds of simultaneous players before turning into toast.

Not sure how your backend works, but I read a neat technique by I think Second Life, where each actor is in a zone, and a zone is managed by a server.

If a player leaves the zone, their entire code stack and current state is shipped to the next zone (script hand off) without the player noticing. They mentioned because each actor is running in a VM/scripting language, the servers can pause/resume the VM for that actor on any machine they move to - pretty neat.

You can read a bit about the Angeldust backend architecture in this comment chain (I have no idea what to call this): https://news.ycombinator.com/item?id=21858618

The Second Life approach sounds like a very good solution if you're having to, and willing to use multiple servers because of performance reasons. I think Angeldust's architecture is a bit cleaner and more straightforward due to different design goals. I specifically wanted to reduce complexity and keep a simple infrastructure so that I could code, debug and manage everything on my own.

I also have the luxury of using a single, big, many-core server if necessary. When Second Life started I don't think 32+-core servers were a thing, so their scaling model was probably also born out of sheer necessity.

Amazing job man, well done

No OpenBSD support :p.

Don't sweat it! I did get an older version of Angeldust running on OpenBSD with pledge and unveil without problems. It's just not a market I can comfortably cater to at the moment. Kick back and relax for a moment and there'll probably be a binary or source distribution for *BSDs too. Same with Raspberry Pi. Game runs beautifully, but I have no great packaging and distribution process yet.

In addition I also ran Angeldust on Haiku. There is no reason why a product like this wouldn't run everywhere.

(Also shoutout to theo and/or tedu if you're here.)

this looks incredible, thank you for sharing!!

Tried registering, but the password input in the Android app doesn't support pasting text...

Yes, I'm sorry that the UI support on Android is a bit limited. Input support is a bit lowest-common-denominator there to work around keyboard bugs.

I would also add that I get a little ticked off when I have to adjust my password manager's defaults - in this case reducing from 64 to 32 characters.

In the past I have very-often stopped exploring a new thing at this point but this time I am continuing! Looks great and I also eagerly await more details of it's implementation.

Honestly, thanks for the feedback. I never realized / got feedback that players would indeed use a password manager for a game like mine. "It's just a game!" is not the best defense here and the workflow of getting an external password into the game afterwards is also pretty subpar. I'll need to think on this for a good solution.

When you use a password manager, you use it for everything has a password.

How often do you run into trouble with 64 length?

For one password manager, my default length was 16 and at the time I ran into a sites few sites that restricted it to 12 or 14.

Is this less common these days?

Sure, sorry about the password blues. Let me know what you want to hear implementation-wise and I'll get on it after streaming!

"What should service providers do?": https://tomssl.com/2016/10/21/a-sensible-password-strategy/

This is a pretty straightforward set of expectations which should solve most issues.

The inability to use even password manager's keyboard has forced me (and probably more people) to use much weaker passwords then usual. Also, the 32 chars limit...

Thanks for the game.

64 character password: overkill, much?

Do you pay for your passwords by the character or something?

Good point, well made

Same. I actually went through and typed my Lastpass-generated password. That was a painful exercise.

Anther oddity is that the Android version is free while the Steam version costs money. Is there some other kind of monetisation strategies for that version?

Nope. On Google Play I'm limited to a 50 MiB APK size so I can only ship assets for the "Cartoon" visual style. As you don't get the full experience of having both the "Cartoon" and "3D" visual styles available I find that not charging for the product is good option.

Also: my preconception was that Android users are more likely to pirate a product. So to prevent them from downloading a malware-laden pirate APK and getting a poor experience, I'd rather have them play the game for free without hassle and tarnishing my reputation.

That's an incredible attitude, and should be commended. I bought the game on Steam even though it's not really the type of game I usually play. I don't doubt I will get my money's worth.

I hope you enjoy the experience! To be honest I think Angeldust is a video game tailored for non-gamers. Most people playing Angeldust that I know in real life are not gamers by any stretch of the imagination, but they just like the laid-back pacing, welcoming nature and upbeat atmosphere of the game. It's amazing to see random friends and acquaintances with zero interest in gaming have fun in my game.

I've seen some games downloading assets after the application is started. Did you consider implementing it like that?

I considered it, then dropped it. The Google Play Store definitely has a mechanism of adding more data/bundles to your application, but (when I investigated this) you'd need to drag in Google-provided libraries and tie your app to the Google Play Store. I dislike lock-in and do my best to be able to independently develop and distribute my product. So expansion files/bundles didn't look interesting.

To compensate, the Itch.io Android APK is actually pretty much identical to the Google Play Store version, but it just includes all 3D assets too.


It’d be blacktarhero.in.

"Black Tar Hero"



Can you please read the guidelines, especially the part about "shallow dismissals"? https://news.ycombinator.com/newsguidelines.html

How is this not Minecraft without extra steps?

This comment will get downvoted but, dude, you are a GOD tier programmer. How?

Thanks for the kind words! I'm not sure if I can give you a recipe or an answer. I do me like you do you. Everyday I give it my best and eventually you end up with a product like this. Just get started and work on your dreams!

The graphic style - oh, my eyes!!! Please team up with a designer, or with a different designer!

...I don't mean the quality, it's understandable resources are constrained. I mean the actual artistic decisions... it burns your visual cortex with all those colors and textures fighting each other. What's the theme, "kindergardeners on acid meeting Elvis"?! or "South Park but in Fortnite drawn while drunk"?

Oof! I'm the designer and art director myself. Please elaborate a bit as "colors and textures fighting each other" doesn't give me the slightest clue as to what you perceive as problematic. Can you post annotated screenshots so I can learn from this? Then I'll go and fire myself!

I've been playing the game in both the "Cartoon" and "3D" visual style for years and it's been a very pleasant and eye-pleasing experience for me. Please open your world a bit for me. Maybe share some of your design work for inspiration. Thanks in advance for your feedback.

Heh, sorry, I've been to harsh with the comment I guess... it's probably just me personally being "highly allergic" to this particular toony-style. I think it sort of falls in some "uncanny valley" of design, being neither stylized/abstract/low-poly-ish enough, nor realistic enough, nor fully-pixelated/blocky/minecrafty, but just in-between.

In general I like styles that either:

- just go all the way in the stylized direction, like Bad North [1], The Witness [2] or even Clash of Clans [3] (to be honest I also dislike CoC-style popular with mobile games nowadays, but at least it's consistent/harmonious in its candy-plasticky look)

- OR they actually try to do the realistic-style part, like the classic Age of Empires, or toony-ish-ralisticky like more modern Northgard [4]

- OR they fully embrace the blocky style like Minecraft, or the 8-bit/pixelated style of clearly retro-style games

"In between" styles just look... annoying, giving a "sand in your eye" mental sensation of the early 90s games that were too shallow and childish. It lacks some "higher harmony" thing that I can't describe any better. I get this "allergic" reaction also when I see this style in clothing or architecture or whatever.

Anyway, keep up the work if you and others enjoy it, don't be discouraged by people that just prefer smth else!

I'm just a bit sad bc I probably would've liked the game mechanics, but the style totally turns me off.

[1] https://store.steampowered.com/app/688420/Bad_North_Jotunn_E...

[2] https://store.steampowered.com/app/210970/The_Witness/

[3] https://play.google.com/store/apps/details?id=com.supercell....

[4] https://store.steampowered.com/app/466560/Northgard/

Thanks for the elaboration, I get that the design just doesn't do it for you personally. Did you already see that the game's also available in a highly abstract "Cartoon" visual style featuring hand-drawn, 2D animated sprites à la Paper Mario 64? Here's the trailer in the "Cartoon" visual style:


Maybe this style appeals more to you?

Not the commentator, but I say "your game, your rules!"

That said, with the same level of detail I'm brought to mind of the original Xbox Fable game which in my humble opinion had really excellent art direction for its day -- a mixture of cartoon-y, arty, and moody but only only at times, not constantly gloomy like modern games. Consistent lighting and selective contrast in detail.

Actually, even the 360 remake was a step backwards! https://www.youtube.com/watch?v=gib34dN0zXI

Uninstalled. Looks like fun but I let Google choose a hard password and there's no way to paste it into the Android app. I tried typing it but had to swap back and forth between apps to get all the pieces of the password. The game clears the password when I got back. Last chance change password but I don't see how.

Totally valid criticism but kind of dickish delivery. The guy built a game, for free, I think it's worth more than an "Uninstalled."!

Totally justified remark. I was frustrated after trying it. I'll reinstall after the password fix. Thanks for keeping me honest :)

In another thread someone shared their experiences with their password manager too. Even after hundreds of thousands of players coming in I never heard or realized this was a problem. I'll do my best to polish this. Thanks for your time though!

As someone else mentioned I should have been gentler in my comment. Thanks for what looks like a great game can't wait to play it.

Don't worry about a thing. Over the years I've come to appreciate feedback in any shape, way or form. Anyone taking the time to reflect on my product, my work or me as a person is someone who's apparently invested, but possibly didn't get the exact thing they were hoping for. I can only listen and learn from this.

It might also help that I'm Dutch and we're supposedly pretty "direct" by default. I've also learned from dealing with Russian players who are even more versed at that craft.

Culturally speaking getting kids into a game called "Angel Dust" which is street slang for PCP is not going to do society any favors.

It also won’t harm society at all. It might harm the game, but I doubt it.

Tell that to the slightly hard-of-hearing bookstore employee who, when I asked for Minecraft, gave me a copy of Mein Kampf.

I believe that the absence of the connection, would make an intelligent ignorance.

You seriously may want to reconsider the name. ‘Angel Dust’ is a slang for the narcotic PCP - I immediately was confused and only clicked so I could tell what it actually was.

Not sure how this didn’t come up before? At any point in development? O.o

Edit: whoa, downvotes, really? Care to say why? This is a legitimate concern?

> This is a legitimate concern?

Only for those who would confuse a video game for PCP. Thankfully, those seem few.

And honestly? I certainly didn't associate it with the narcotic when I read the headline. I'm not sure I've even heard that particular slang for quite a number of years.

First off his game looks very impressive!

.. but i do not get the extremely heavy downvoting and very angry comments to the people concerned about the name.

Maybe it's no problem but as i said - at least on my Google - PCP the drug comes up as the first result with a complete explanation in quick-view.

And to this someone replied "grow up" to me, like what?

Isn't the whole idea behind showing HN something to get criticism?

If i made an app that had bad connotations i would certainly know. If someone disagrees, fine, a discussion about it without mean comments like "get a life" or "grow up" would be preferable.

> Isn't the whole idea behind showing HN something to get criticism?

Let me categorically say: Hell no.

Some may want critique, but unabated criticism? That's not good for anybody (even if it does feel good to write). They're showing off the work of years of their lives; having that work shit upon is not what it's been shared for.

> If someone disagrees, fine, a discussion about it without mean comments like "get a life" or "grow up" would be preferable.

Just remember, the original post was not a useful critique, it was a disbelieving criticism for the author not doing their research. The comment also conveniently ignores that the title of this post explicitly contains "a fast and efficient video game".

Even taken charitably the original post provides little of real benefit to a discussion about the game being presented. Uncharitably, it comes across as a playground attack based around who knows the street slang for PCP.

>> Isn't the whole idea behind showing HN something to get criticism?

>Let me categorically say: Hell no.

It seemed obvious to me that the GP was referring to constructive criticism (which can be very valuable). I would not say it is "the whole idea" behind "Show HN" posts, but it is definitely one of the primary motivators for most of the posts I've seen.

That being said, I'm sure most don't put up a "Show HN" post to effectively hear "this sucks" with nothing helpful in the response (and that does happen).

Never heard of this. I'm sure 50% of American don't know this word and 95% of non-native speaker don't know it either. The programmer seems to be Dutch and has no reason to know this American slang word.

Who cares? There’s a front page drug positive post on HN weekly. Kids don’t know this; and it doesn’t really matter. It’s like getting up in arms about the group Crystal Method... just silly. Drugs aren’t as bad as the 80s DARE programs brainwashed people into thinking

Minor nit: PCP is a dissociative hallucinogen, not a narcotic.

Narcotic has no real definition. It's a made up cop word.

"Narcotic" has shifted, at least in American vernacular, from meaning drugs that induce sleep to meaning any illegal or Schedule-I drug.

Merriam-Webster: https://www.merriam-webster.com/dictionary/narcotic

Collin's Dictionary: https://www.collinsdictionary.com/dictionary/english/narcoti...

Edit, regarding "no one calls marijuana a narcotic":

Not sure why I was downvoted, considering that we are discussing angel dust rather than marijuana.

The United States Government calls marijuana a narcotic:

[1]: https://www.federalregister.gov/documents/2019/08/29/2019-18...

[2]: https://www.incb.org/incb/en/narcotic-drugs/index.html

As do The UN and the World Health Organization (in process of amendment):

[1]: https://www.healthpolicy-watch.org/who-recommends-cannabis-s...

[2]: https://www.who.int/medicines/access/controlled-substances/U...

And the Australian Government: https://www.legislation.gov.au/Details/F2018L00106

As well as the Swiss Government: https://www.ch.ch/en/cannabis/

And the Government of Singapore: https://www.cnb.gov.sg/

And the European Union: http://www.emcdda.europa.eu/publications/topic-overviews/cla...

It's important to note the apparent legal definition of "narcotic" when discussing drugs, as it drastically differs from the traditional use, and includes a much longer list of substances.

No one calls weed a narcotic.

Cops sure do.

If you search Google for "Angeldust", literally the first 5 results for me are about the drug PCP. I have no idea how on earth you can even deploy something without Googling it first. Or maybe my personalised results are different?

Also i may be wrong about the importance of these results - is it easy to push those down?

Duckduckgo funnily enough has 3 of the top 5 results being this game.

It is and is shared by many other people not commenting. Creating a product targeted at children and then naming it the same as a dangerous addictive street narcotic is not a wise decision.

Not sure why anyone's downvoting you, but I suspect the name is 100% on purpose - it would be quite the coincidence otherwise. I remember a game called Speedball in the 90s, which was very successful - this is nothing new!

Ofc it is on purpose. This guy goes by name Frank Lucas.

Frank Lucas IS a great mind and developer. To make a connection between two people that share the same name and imply similarities on the sole basis of that similarity, doesn't make sense.

Frank Lucas was a notorious USA based heroin dealer/trafficker who died this year.


Comparing the words angeldust and the very common word "speed" is not comparable at all. Also the game looks like it's targeted at smaller kids. It would be like creating a minecraft clone and calling it "meth-heads". Thats 100% not what he is doing and if it is, then it's pretty insane.

I haven't heard the term angeldust before, FWIW.

Not "speed", "speedBALL". It's another example of narcotic slang - I think a combination of heroin and cocaine. Again, it's quite likely whoever picked the name was aware of the meaning.

Oh i should learn how to read then..

Applications are open for YC Summer 2021

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact