I TRIED TO FIT IN BUT I COULDN'T (I do better with the animals), 8x10, multimedia on canvas panel. This one will need an open frame (one without glass). It's in the shop: http://www.brokentoyland.com/forsale.htm
#art #blackandwhite #outsiderart #nobrow #itried
Long GameDev ramblings
The building blocks I used in the end was, not ideal (*3), but good enough for the use case. Internally the conveyor is represented as a ring buffer, the front representing the item closest to the end of the conveyor belt. When a resource is inserted the tick it was inserted on is recorded. We can then compare that stored tick to the current tick to determine how far it's travelled, and then we use the index of the resource to limit the distance, which allows resources to queue up at a blockage instead of just ghosting through each other. For a 2^32-1 length conveyor it can be updated in just 20ns on my machine (23 on the tiny laptop)
*1 - Circular loops are the worst. That is all. This could also be resolved by making the resource processing graph non-looping, since any such looping in the machines would therefore always lock up.
*2 - I just choose not to worry about this, for now. The issue with starved inputs/saturated outputs is unlikely to be noticed if I'm consistent. However ordering of both inputs and outputs does require some special attention since different construction orders could behave differently.
*3 - Currently the ring buffer is on the heap, uses a lot of memory and requires a bunch of irritating ring buffer management overhead. I've also made a stack version for conveyors of <16 length, which updates in 12ns, but has some issues. Be fastest I've gotten takes the short stack based one and changes it to use SSE bit shifts, from memory that was pushing 6-8ns but still had the same issues. I'll be exploring these more though since my system allows multiple conveyor implementations to coexist.
*Bonus - I also attempted some aggressive multithreading, but whatever synchronisation primitives are being used internally are extremely expensive. I saw gains around 2ns per item across 6+ threads, each processing batches of 1,000,000 conveyors.
Long GameDev ramblings
Ok. Finally. #gamedev #programming post.
I've been playing around with the Bevy game engine in rust. Bevy is a little rough around the edges, but improves daily. I truely believe it's one of the brightest and most promising gems in terms of modern game engines. But that's enough gushing
Started my first project up. Factory building game. What does a factory building game need? Conveyor belts. Given the nature of bevy as a data-oriented engine and the performance demands of factory games needing to process hundreds of thousands of items, I decided to take a more algorithmic approach.
We can represent a factory as a graph structure, the nodes being machines and the conveyor belts forming relationships between nodes. At first I attempted to determine a solution that would analyse the graph to determine the consumption rates of resources entering the graph and the production rates of resources leaving the graph (ie. Enter storage, dead-ends). This proved too difficult for my brain because of needing to resolve circular loops (*1) and managing updates to this network.
My second attempted introduced a limitation, transmission of a resource via conveyor belt is not instant. This effectively eliminates both problems by dissolving the need to build an actual graph. Instead, all I needed to worry about was a list of machines and a list of 1-to-1 connections. This does however introduce ordering issues, for example if I update machines and then conveyors then a machine might receive a required input too late for it to produce a new output or the order of I/O may affect processing (*2).
In implementing this system I went through a variety of implementations and representations. The ideal conveyor belt would require no mutation of data to advance it, occupy contiguous memory without escaping to the heap, and be small.
=== Continued in reply ===
Bird Site, Politics, Transphobia
Really starting to recognise the bird site as a significant source of anguish in my life. Constant trending of transphobia & right wing disinformation campaigns, and I just can't look away because it wells up so much anxiety in me and makes me feel powerless.
Trying to only keep it around for making artist commissions now. This is definitely my new home, y'all are amazing.
YouTube Music Link
Oh siiiick, didn't notice but My Chem released a new song and its great:
https://youtube.com/watch?v=V2kWUJkRvVs
Guess I'm going to be binging MCR for the next couple weeks
Hey again! Been busy, but I have some more free time to post.
Here are some more #PETSCII #PixelArt pieces I made - they are all mockups of text mode #C64 games.
First is The Chaos Engine, second is Prey 2017 (as a dungeon crawler), third is Hades as an isometric roguelike, and last is Pokémon.
One thing I find interesting about PETSCII is drawing the line between what is readable or not, what works symbolically speaking or not, and how I can build meaning with what is quite blocky.
#MastoArt
Hi I'm Natalie! Nice to meet you.
I'll mostly be talking about whichever of my 100 projects I'm working on at the moment. Most of my hobby work is in Rust, and career-wise I work mostly with Typescript/C++. Real passion for game programming, with a particular keeness for engines and low-level game systems.