Based on the title, I thought this was gonna be something like each spinda pattern corresponding with a string of numbers to turn into inputs to eventually beat a level of doom using the right series of spindas. Needless to say I was incorrect in the best way possible.
Doom minimun requirements: _Have a screen(optional) _Have a CPU(optional) _Human player(optional, someone teached a rat how to play) _Being real(also optional, apparently)
"Bad Apple" is the non-interactive equivalent of "Can it run Doom?" It's a music video based on the Touhou video game series, and it is entirely black-and-white. Which means that any kind of display or visualization that can distinguish between two colors (which is to say, all of them) can be used to display Bad Apple. The Touhou community recreated Bad Apple in r/place - just random people placing pixels onto a communal grid recreated the music video with a shocking amount of accuracy once the replay was sped up.
Its not random people. Its all coordinated. Any and all images on r/place was coordinated or it wouldve been utter chaos (probably why Canada couldnt draw a leaf)
@@mimisezlolspecifically the osuplace and touhou place discords. I was actually the person who did a large amount of the manual cleanup of the animation frames (after running it through downscaling tools) Devs from osuplace developed the overlay scripts that we used to automatically display which frame we were on so real humans could see what needed to be placed and when. It was over 6000 frames, resolution was 40x30px and framerate was something like 40seconds per frame for over 3 days straight
You think this is bad, Spinda has effectively made the personality value system a black box of pokemon's code. In theory, you could rip a pokemon out of the current personality value system and into a new one that kept certain traits instact. Except Spinda, who says actually you can't
Doom and Bad Apple are both rules of the internet, they go hand in hand. If it has a screen; it can play doom If it can exist in at least two states, it can play bad apple. Bad Apple is a boss theme from TouHou and got a remix on a CD that was released some time after the game it was featured it came out. This remix got used in a 3D animated music video that was quite ahead of its time for an indie animator making in his free time. And since that video took the internet by storm, a lot of people sought to recreated it on whatever they could. Including Minecraft Sheep, Rubik's Cubes, Super Mario 64, RGB keyboards, and many many more.
I have to bring up GTA San Andreas as well. Any game as long as it can be modded will eventually have at least the main character replaced by CJ at some point lmao.
Calls it a boss theme instead of a stage theme. I looked at the comments to see this man get corrected about the anime statement only to see that apparently the comments can't get it quite right either.
When you asked if I had a favourite Spinda pattern I, like a normal person of course, thought "why yes, it's the one where the dots cover its eyes" SO IMAGINE MY SURPRISE
@@PirocoLouco bald spinda's underrated I also have a VERY ugly boy where all four dots kinda lined up horizontally on his head so it looks like a bad wig :']
This "optional homework" challenge reminds me so much of this video from a channel called Stand-up Maths. Basically, he tried to find the perfect set of five five-letter words to use for Wordle, all of which had unique letters from each other. His proof-of-concept code took 32 days to run... and after submitting the idea to his viewer base, they got it down to less than 3.5 milliseconds. Have fun, Mr. adef :)
I went right there, too. And audibly groaned when the genetic algorithm was wheeled out. The guaranteed way to eat up compute when you don't wanna solve the underlying puzzle.
if you let an infinite numbers of Spindas roam in an infinite room at random an infinite amount of times, eventually the spindas will form the entire walkthrough of Doom.
Using a genetic algorithm to solve this problem is wild and almost certainly something Jakob did as a learning exercise. A realtime Spinda matrix screen (never thought I'd write that in my life but here we are) is definitely possible using image masking and bit manipulation, since the x and y coordinates of the dots are made by splitting the 32bit PID into four 8bit numbers. I might take a stab at this myself. Thank you for another incredible video on a topic I would never expect
Another easy optimization win would be only running whatever search algorithm on grid cells that contain both white and black. The totally white and totally black cells have fixed patterns. Could also run a dilate filter first to get rid of noise.
@@jabelsjabels Exactly, the ceiling in the Doom video was displayed by identical spindas throughout pretty much the entire video. That should save a lot of work. Any spindxel displaying a value darker than X or brighter than Y should automatically display a set spinda pattern. So, what you said, but interpreted by a layman.
Using a compiled language instead of Python would also speed it up hundredfold. With that and a better algorithm it should take a couple milliseconds at most. This is a nice proof of concept though.
I'll propose an algorithm that would be much faster. The reason the algorithm takes so long is because you actually care about tracking the PID of the Spinda, which leads you to generating a random Spinda and checking its fit. You ended up using enough Spinda faces to consider them "pixels" on a screen anyway, so you can skip all of that computation by just deciding where, within the possible bounds of each Spinda, you should draw the 4 dots, and then place them there, without bothering to know what the PID that would produce that Spinda is. For example, you could take the black-and-white frame of DOOM, divide it into a sub-image for each Spinda, then divide each sub image into the 4 bounded squares that each dot can occur, and simply find the center of the "red" pixels, and place the dot centered there. The computational complexity of rendering a 40x30 Spinda image would therefore be 4800 times the complexity of whatever algorithm you use to determine the location of the dot. A simple center-of-mass algorithm is O(n) with respect to the number of pixels, so that works out to being O(n) with respect to the total number of pixels in the original image. A rendering algorithm that is O(n) with respect to the number of pixels on the screen is actually insanely fast for a video game. You should reach real-time rendering speed with no issues. You might even have enough computation left to reverse-engineer the PID of each Spinda you just rendered, if you really want to.
Since PIDs for Spinda face are literally the coordinates of the dots, then reverse-engineering is just displaying the coordinates you got as hex, taking pretty much no computing power.
@@BanD1t8 In that case, the algorithm would be just find the center of mass of each of the 4 sub-images, and from there you know the PID, so generate that Spinda.
I can't speak to actually rendering doom on spinda's face but I've been thinking about how we could encode the source code of doom on spinda. If all a spinda face does is encode a 32 bit unsigned integer we can turn those 32 bits back into a store of other information. According to a quick google search the original doom is about 2.39 megabytes or 2,390,000 bytes. As notes spinda encodes 32 bits which is 4 bytes so quick division suggests that one could store all the information in doom on 597,500 which is a totally reasonable number of spinda. I wonder what it would take to catch a Doom's worth of spinda. With some RNG manip and a server farm's worth of gameboys could you catch these spinda and store spinda in the boxes of some copies of sapphire? Bulbapedia tells me that one copy of saphire can store 420 pokemon in the PC ( plus 6 in the party I imagine) so with a very reasonable 1403 gameboys you could encode all of Doom's source code on spinda, ordered within your boxes and parties. Now actually catching them would be an insane challenge in its own right but should be atleast theoretically possible. But I wonder how long it would take. This was a fun video and the genetic algo is really cool, thanks for fun spinda thought experiments adef!
I believe you can add 2 Spinda to the Day care in addition to the 426 in boxes/the party, taking us down to a much more manageable 1397 copies of Sapphire. The save file also stores the last 50 teams* you beat the Champion with in the Hall of Fame option on the PC, allowing for up to 50x6 = 300 extra Spinda per cartridge for a total of 728, assuming you don't mind those 300 being released after entering the Hall of Fame to catch new ones (And beating the E4 + Champion 50 times with nothing but Spinda, of course). This takes us down to 821 copies of Sapphire, which is essentially just one copy and a few spares. *The HOF doesn't store all info on each Pokemon, but it does store the PID, which is all we need for this concept.
Honestly this is how I feel a lot of the time when it comes to my “projects”, where I end up requesting so much help from others that it might as well not be my work at all. But, something to keep in mind is that without your desire, without your requesting, it still wouldn’t exist, so that has to count for something.
Good lord, an evolutionary algorithm for picking out for individual spots in a mosaic pattern?! No wonder it took dozens of hours of computational time
For anyone who wants to optimise, I think we could reduce the phase-space of Spinda patterns significantly. For a start it seems to be that although there are 4 billions unique personality values, it looks like there aren’t 4 billion unique designs. Sometimes one of the dots is entirely off the face of Spinda so won’t affect the pattern. I’d say, 10% of the time the top left dot is off Spinda‘s face, all of those patterns can be collapsed into one since they aren’t visually distinct. Similarly, overlapping dots may cause patterns to look identical. But by far the easiest would be to accept a lower resolution of dot placement. If you allow each hex digit to take only even values, you’ve halved the resolution at which you can place dots, but reduced the number of distinct values to consider to only 16.8m from 4b In fact, I reckon you could probably precompose around 256 different patterns showing a different density and pattern and you’d get a result comparable to the footage, but available muvh quicker.
I've never seen any youtube video talking about Spinda that actually incorporates how lots of Spinda patterns are identical due to the spot not being on the face
Might even be possible to narrow it down so each spindxel only has 10 options: Completely beige. "Completely" red. Red dots located on only one of the sides. (Up, left, down, right.) Red dots covering a diagonal half. (UL, UR, DL, DR.) Should only be slightly less readable than the result in the video, but much faster to process.
Considering that the hexadecimal represents coordinates, I feel like it would be more efficient to just rank the most important pixels within spinda's face's bounding box (based on brightness probably?) then convert that into coords, which can be directly converted into spinda hex.
Super cool and savvy thoughts. Some comments suggest narrowing down this number even further, though personally, I feel like it's in the spirit of Spinda to try and have as many different visual variants as possible. You're correct though that there's no need to replicate visually identical results. I don't really know my stuff, but with the above informaiton, would it be more or less crunchy for the system to 'preload' what Spinda pattern corresponds to a given possible configuration of pixels? Assuming the Doom footage already needs to be converted to black and white, and Spinda are already representing a small part of the screen (say, 64x64 pixels each), well - 64 x 64 is 4096, a fairly manageable number of different possibilities. Would it be more efficient to create a program which could pre-calculate which Spinda best fits each possible 64x64 pixel possibility, then use the results of that to perform a simple substitution for the Doom game itself?
there is NO way that after hearing about spinda for the first time ever i managed to not only imagine what a cute pattern would look like but also to HAVE THAT PATTERN BE YOUR FAVOURITE TOO. i just thought about pandas having dots on their eyes and then the symmetry about the two extra dots on their ears
The results were kind of a disaster, but the video’s so well put together that I learned a fair amount about programming and had a good refresher on hexadecimal values from college. Great video!
I see two immediate adventures for improvements: 1) lookup tables. The rendering power is massive, but most of your spindas are pure black or pure white; this is redundant processing 2) it'll likely be strange, but I think the way spindas dot placement works can likely be described or approximated as linear on the "sub bits" of the pid, which would allow linear least squares to be used to solve the problem, drastically speeding up computation time.
This video feels like it came out in 2011 and I mean that in the best and most flattering way possible. It's weirdly nostalgic in a way I can't explain.
“What’s your favorite spinda pattern” Probably one with dots that fit perfectly over the eyes. “This is mine” *_shows the exact spinda I was thinking of_* Ok.
This video is my introduction to your channel, and I just want to thank you from the bottom of my heart for being one of the rare few to pronounce "pokémon" correctly.
Idk if this has already been implemented, but I feel like it would reduce computation time by a lot if you had a set spinda for an “all white” or “all black” pixel and automatically used those for sections that are like 90% one color.
2:30 i actually do. i dont know its ID but if 2 dots are close enough together and positioned the right way it looks like a heart. ive spent many an hour looking for spinda like this
Touhou is primarily not an anime series. Any animated creation in the form of a video is fan-made. The backing track for the Bad Apple Music video is a remix of a song from the Touhou Project franchise, which is primarily a bullet hell shooter with an emphasis on character, music, and lore. The original games sort of function as a template that fans can use as inspiration, building on top of the original ideas present. Touhou Project is a big rabbit hole that is 100% worth your while diving into.
the first thought that comes to mind for optimization is hashing your spindas; basically, for each sub image, you first check if you've already seen it before (or even just something close enough if you build the hash right), and if so just use that spinda that you've already spent the time calculating. all the frames of sub images that are made up of solid chunks of pure white or pure black come to mind, and a hash search is definitely quicker than your genetic algorithm so it's worth the little overhead. loved the video!
I'm only 3 minutes in and I've audibly laughed 3 times. This is hands down THE best channel on the platform. Everything from the scripting to the editing to the comedy to the whole subject is always a 10/10 on every adef video. This was well worth canceling lunch with my mom over.
I hope you did the optimisations of fully black sub-images being naked spinda and fully white sub-images being almost fully covered spinda, I feel like that would speed it up a lot.
The real question is how long until Keizaron decides to play this version of Doom or maybe like Pokemon Red or Blue with the spinda tile display? Also I'm not a programmer myself, but, conceptually I would probably switch from genetic algorithms to some sort of AI that's pre-trained to minimize the visual loss function for the assigned pixels that a given spinda is supposed to replicate in the mosaic grid array. Maybe this would speed up the frame render times?
the suggestion has been made elsewhere that it's probably best to start precomposing a certain number of shades of spinda (say, 256, to work with 256 shade black and white) and just assigning them to matrix regions based on luminance instead of doing a genetic algorithm. Attempting to use any kind of AI here is really just a way to make the computer optimise itself with the task already being done, rather than a fundamentally different approach.
2:43 never played a Pokemon game with spinda in it, and I said "The one with dots on its eyes and ears." Low and behold: One with dots on its eyes and ears
Well you animated a doom clip with spinda patterns, but you did not play doom only using spinda patterns. Clickbait title tbh. You would not say I played doom on a sausage if you made a stop motion animation of doom using only sausages
a lot of "[X device] running doom" videos are actually just videos of doom being played on X device. this video is not an exception, but it does go in a lot of detail as to why it wouldn't be currently physically possible to do something like this for real. just thought you should know
Imagine being the only person on the planet to code an algorithm to generate animation on a spinda, and then out of nowhere some fuckin guy DMs you like "hey you dont happen to have that spinda algorithm do you?"
definitely could've atleast premade some max and minimum brightness spindas to reduce the computational power by a bit, considering a lot of the screen is pure white/pure black
Amazing video! One thing i'd have done is to encode all pixels replaced by a single face to a int16 number (so 4x4 bits). Then, i'd map each number to a generated spinda if and only if it is not yet generated. That way, once you've found a pattern, you don't need to re-compute it Didn't you have a fitness function already
First obvious way to optimize that I thought of would be a rewrite in (well, something other than python, but specifically) CUDA, allowing each segment of the image to be processed by the GPU simultaneously rather than in sequence by the CPU. Welp I guess I know what I'm gonna be doing for the next week or so
yeah this is definitely a display test and not a gameplay test, the video title is kinda misleading. I don't strictly think there's anything wrong with using doom footage as a display test, but the title should really be "I displayed DOOM using only spinda patterns" or something
The US Federal Budget for 2024 requires 1513.4 Spinda pattern possibility ranges in dollars. I don't know why but that was the example that came to mind when trying to quantify this.
Maybe looking over at dithering algorithms would've helped(you could have increase the spinda density because each spinda would be faster, though iono if real time is possible)... But either way great video as always
Doom and Bad Apple have this special relationship as they have the shared goal of being played and displayed on every medium possible. Where Bad Apple goes, Doom is sure to follow closely behind.
oh, I loved this. not only was the premise intriguing, and the result immensely satisfying, the presentation was masterful. all adjectives aside, I adore your vibes -- easy sub.
So if we wanted to do it real time, would it be better to hand pick a sort of dithered pattern ranging from "white" to "black", then use that limited range of 2 to 16 spindas to represent the game? Alternatively, would it be more readable and less spinda intensive to instead tie it into the game itself and instead only highlight entities or walls at close range using variables already in the game (Distance variables primarily due to how Doom turns top-down into First Person), something something Lidar (Light Detection and Ranging)? Also, shocked by low sub count so far, you absolutely have the vibes of a 500k-2M mad scientist e-celeb (Michael Reeves being a popular example due to his particularly violent strain of mad science)
Based on the title, I thought this was gonna be something like each spinda pattern corresponding with a string of numbers to turn into inputs to eventually beat a level of doom using the right series of spindas. Needless to say I was incorrect in the best way possible.
I thought the exact same thing
No you have your sequel video adef
What if we did both? Use Spinda patterns to for inputs, visualized next to a screen of Spindas that run Doom!
Actually it would be rather simple, that's just a TA(S?) with extra steps
I thought it would be this too
Doom minimun requirements:
_Have a screen(optional)
_Have a CPU(optional)
_Human player(optional, someone teached a rat how to play)
_Being real(also optional, apparently)
Doom minimal requirements: Optional
Hotel: Trivago
Doom minimum requirements: Doom
what does - "_Being real(also optional, apparently)" mean?
@@megandavis3372 spinda aren't real
@@mohawkmaster5728 **sniffle** don't... don't say that...
Missed opportunity at 5:40 to refer to it as a “spin-database”
Spinda-tabase
spindabase @@Apollo-._
greatest comment in youtube history
Just letting you know, the touhou fanbase isn't exactly sane. There was a 50% chance they might have picked each frame by hand. You got lucky.
What the flippers is a touhou?
Bullet hell
@@Aleph_Solortusthe game series that the bad apple animation is from. Bad apple is on everything like doom
"You can't let yourself be held back by common sense in Gensokyo" - Sanae Kochiya, Touhou Subterranean Animism
@@Cassieniemann2541 ok mog btw what type of cheese do you like?
The best way to play doom, when it takes literal weeks to play 10 seconds.
Turning Doom into a play-by-email game
It's like old chess games when people would mail their moves to eachother
Someone made doom on a gut bacteria and it takes like a day to render each frame iirc
Edit: only takes 9 hours apparently
@@sax0catOh my GOD XD
@@sax0catsir, you've been diagnosed with doom.
"Bad Apple" is the non-interactive equivalent of "Can it run Doom?" It's a music video based on the Touhou video game series, and it is entirely black-and-white. Which means that any kind of display or visualization that can distinguish between two colors (which is to say, all of them) can be used to display Bad Apple. The Touhou community recreated Bad Apple in r/place - just random people placing pixels onto a communal grid recreated the music video with a shocking amount of accuracy once the replay was sped up.
And Megalovania is the audio equivalent.
The r/place bad apple image was actually coordinated by a discord and was carefully planned
@@Dingghis_Khaanthat would be the lick.
Its not random people. Its all coordinated. Any and all images on r/place was coordinated or it wouldve been utter chaos (probably why Canada couldnt draw a leaf)
@@mimisezlolspecifically the osuplace and touhou place discords. I was actually the person who did a large amount of the manual cleanup of the animation frames (after running it through downscaling tools)
Devs from osuplace developed the overlay scripts that we used to automatically display which frame we were on so real humans could see what needed to be placed and when.
It was over 6000 frames, resolution was 40x30px and framerate was something like 40seconds per frame for over 3 days straight
I wonder how Spinda's designer would feel about this. All of the chaos that this simple spot algorithm unleashed on something with a 360 BST.
vladimir pokemondesigner wpuld be proud
@@y2k.channelI KNOW THE REFERENCE WHAT THE FUCK?????????
@@y2k.channel is panda. is spinny. are you a jokester?
You think this is bad, Spinda has effectively made the personality value system a black box of pokemon's code.
In theory, you could rip a pokemon out of the current personality value system and into a new one that kept certain traits instact.
Except Spinda, who says actually you can't
Doom and Bad Apple are both rules of the internet, they go hand in hand.
If it has a screen; it can play doom
If it can exist in at least two states, it can play bad apple.
Bad Apple is a boss theme from TouHou and got a remix on a CD that was released some time after the game it was featured it came out. This remix got used in a 3D animated music video that was quite ahead of its time for an indie animator making in his free time. And since that video took the internet by storm, a lot of people sought to recreated it on whatever they could. Including Minecraft Sheep, Rubik's Cubes, Super Mario 64, RGB keyboards, and many many more.
Light correction, but the original Bad Apple is a stage theme for Touhou 4: Lotus Land Story. Not a boss theme.
I have to bring up GTA San Andreas as well.
Any game as long as it can be modded will eventually have at least the main character replaced by CJ at some point lmao.
Calls it a boss theme instead of a stage theme. I looked at the comments to see this man get corrected about the anime statement only to see that apparently the comments can't get it quite right either.
@@omegaotaku1342 don't mess with us toohoe fans
We never played the games
You have summoned the horde (I LOVE OLD AND VIOLENT WOMEN!!)
saying the words "Please enjoy" before showing me one of the most nightmarish creations to have ever existed. it's almost cruel
I felt like I was thrown into a vortex when it started playing, an assault on the senses
into the spindaverse
When you asked if I had a favourite Spinda pattern I, like a normal person of course, thought "why yes, it's the one where the dots cover its eyes" SO IMAGINE MY SURPRISE
I like him bald.
"yup, the dots perfectly covering the eyes and tipping the ears, right? .... YOOOOOO"
@@PirocoLouco bald spinda's underrated
I also have a VERY ugly boy where all four dots kinda lined up horizontally on his head so it looks like a bad wig :']
"Spinda of best fit" was not something I thought I would hear today, but I'm here for it!
me neither with "spindification genetic algorithm" LOL
This "optional homework" challenge reminds me so much of this video from a channel called Stand-up Maths. Basically, he tried to find the perfect set of five five-letter words to use for Wordle, all of which had unique letters from each other. His proof-of-concept code took 32 days to run... and after submitting the idea to his viewer base, they got it down to less than 3.5 milliseconds.
Have fun, Mr. adef :)
Left as an exercise to the reader. A great way to get people to do work that's ultimately not that important, but often very challenging and fun
I went right there, too. And audibly groaned when the genetic algorithm was wheeled out. The guaranteed way to eat up compute when you don't wanna solve the underlying puzzle.
Programming and math are 2 different skill sets.
You could program something with literally no math knowledge if you wanted.
@@rompevuevitos222 or as Matt parker often proves, you can badly program something with a shit load of maths knowledge...
@@rompevuevitos222I have dyscalcula and I'm currently learning programming
It's nice to make something do the math for me
if you let an infinite numbers of Spindas roam in an infinite room at random an infinite amount of times, eventually the spindas will form the entire walkthrough of Doom.
Using a genetic algorithm to solve this problem is wild and almost certainly something Jakob did as a learning exercise. A realtime Spinda matrix screen (never thought I'd write that in my life but here we are) is definitely possible using image masking and bit manipulation, since the x and y coordinates of the dots are made by splitting the 32bit PID into four 8bit numbers. I might take a stab at this myself. Thank you for another incredible video on a topic I would never expect
Another easy optimization win would be only running whatever search algorithm on grid cells that contain both white and black. The totally white and totally black cells have fixed patterns. Could also run a dilate filter first to get rid of noise.
@@jabelsjabels Exactly, the ceiling in the Doom video was displayed by identical spindas throughout pretty much the entire video. That should save a lot of work. Any spindxel displaying a value darker than X or brighter than Y should automatically display a set spinda pattern.
So, what you said, but interpreted by a layman.
@@jabelsjabels thats what i was thinking
Using a compiled language instead of Python would also speed it up hundredfold. With that and a better algorithm it should take a couple milliseconds at most. This is a nice proof of concept though.
Think you could introduce Shiny Spindas?
Congrats on pregananant
Preganté
@@ahorseofcourse7283 gregnant?
@@dylanodonnell-weatherup680 Pragent!
Pageant?
Paranargent?
Bad Apple started as a meme but is now the go-to animation for testing any black-and-white display method.
or apparently, fluid simulations too?
with dithering, any array of bits represented on a two-dimensional plane can do the trick.
Since you know how any given spinda pattern is generated and that consecutive spinda are nearly identical, you could write a much faster search tree.
Naturally, the next step is to play Pokémon Sapphire on a Spinda and beat the game with Spinda
Spindaception
Dope
Yes!
spinception
Now I will play doom on a cell wall
Play Doom on a hydrogen atom
@@-handlenotavailableyou could probably play it on a cluster of them
how about the mitochondria, powerhouse of the cell?
@@Local-Kirby-Enthusiast not as good
But can it run Kenosis?
use shinys for more colour depth
Don't mess with Touhou fans, all of us are insane in at least one fashion.
More seriously, this is super cool!
I was very ready for him to say Spinda Bad Apple was made by an insane person by hand. It just isn't out of the question with the community around it
And also neurodivergent.
RIP adef's power bill. Here's to a real one carrying the weight of the world on their back (also really really cool video)
perfect timing, I was JUST telling someone about my personal favourite way I've seen someone play DOOM (on gut bacteria)!
My favorite was when my friend got it running on a car dashboard
I loved it when one of my colleagues got it running on a U.S military satellite.
I'll propose an algorithm that would be much faster.
The reason the algorithm takes so long is because you actually care about tracking the PID of the Spinda, which leads you to generating a random Spinda and checking its fit.
You ended up using enough Spinda faces to consider them "pixels" on a screen anyway, so you can skip all of that computation by just deciding where, within the possible bounds of each Spinda, you should draw the 4 dots, and then place them there, without bothering to know what the PID that would produce that Spinda is.
For example, you could take the black-and-white frame of DOOM, divide it into a sub-image for each Spinda, then divide each sub image into the 4 bounded squares that each dot can occur, and simply find the center of the "red" pixels, and place the dot centered there.
The computational complexity of rendering a 40x30 Spinda image would therefore be 4800 times the complexity of whatever algorithm you use to determine the location of the dot. A simple center-of-mass algorithm is O(n) with respect to the number of pixels, so that works out to being O(n) with respect to the total number of pixels in the original image.
A rendering algorithm that is O(n) with respect to the number of pixels on the screen is actually insanely fast for a video game. You should reach real-time rendering speed with no issues. You might even have enough computation left to reverse-engineer the PID of each Spinda you just rendered, if you really want to.
Prebaked. Nice touch.
interesting
Since PIDs for Spinda face are literally the coordinates of the dots, then reverse-engineering is just displaying the coordinates you got as hex, taking pretty much no computing power.
@@BanD1t8 In that case, the algorithm would be just find the center of mass of each of the 4 sub-images, and from there you know the PID, so generate that Spinda.
OH THIS IS FANTASTIC
I can't speak to actually rendering doom on spinda's face but I've been thinking about how we could encode the source code of doom on spinda. If all a spinda face does is encode a 32 bit unsigned integer we can turn those 32 bits back into a store of other information. According to a quick google search the original doom is about 2.39 megabytes or 2,390,000 bytes. As notes spinda encodes 32 bits which is 4 bytes so quick division suggests that one could store all the information in doom on 597,500 which is a totally reasonable number of spinda. I wonder what it would take to catch a Doom's worth of spinda. With some RNG manip and a server farm's worth of gameboys could you catch these spinda and store spinda in the boxes of some copies of sapphire? Bulbapedia tells me that one copy of saphire can store 420 pokemon in the PC ( plus 6 in the party I imagine) so with a very reasonable 1403 gameboys you could encode all of Doom's source code on spinda, ordered within your boxes and parties. Now actually catching them would be an insane challenge in its own right but should be atleast theoretically possible. But I wonder how long it would take.
This was a fun video and the genetic algo is really cool, thanks for fun spinda thought experiments adef!
I believe you can add 2 Spinda to the Day care in addition to the 426 in boxes/the party, taking us down to a much more manageable 1397 copies of Sapphire.
The save file also stores the last 50 teams* you beat the Champion with in the Hall of Fame option on the PC, allowing for up to 50x6 = 300 extra Spinda per cartridge for a total of 728, assuming you don't mind those 300 being released after entering the Hall of Fame to catch new ones (And beating the E4 + Champion 50 times with nothing but Spinda, of course). This takes us down to 821 copies of Sapphire, which is essentially just one copy and a few spares.
*The HOF doesn't store all info on each Pokemon, but it does store the PID, which is all we need for this concept.
Ooh good catch!
Bad Apple 🤜🤛 Doom
Having surprisingly similiar overlap of maniacs running them on things you're not supposed to run them on
This is insane, you and Jakob are legends for this. Now we just need a billonare with a supercomputer gaming laptop to do it in real-time.
Honestly this is how I feel a lot of the time when it comes to my “projects”, where I end up requesting so much help from others that it might as well not be my work at all.
But, something to keep in mind is that without your desire, without your requesting, it still wouldn’t exist, so that has to count for something.
Good lord, an evolutionary algorithm for picking out for individual spots in a mosaic pattern?! No wonder it took dozens of hours of computational time
>"A meme... about, anime?"
Ah, so you've chosen death by pissed-off videogame fandom.
For anyone who wants to optimise, I think we could reduce the phase-space of Spinda patterns significantly.
For a start it seems to be that although there are 4 billions unique personality values, it looks like there aren’t 4 billion unique designs. Sometimes one of the dots is entirely off the face of Spinda so won’t affect the pattern. I’d say, 10% of the time the top left dot is off Spinda‘s face, all of those patterns can be collapsed into one since they aren’t visually distinct. Similarly, overlapping dots may cause patterns to look identical.
But by far the easiest would be to accept a lower resolution of dot placement. If you allow each hex digit to take only even values, you’ve halved the resolution at which you can place dots, but reduced the number of distinct values to consider to only 16.8m from 4b
In fact, I reckon you could probably precompose around 256 different patterns showing a different density and pattern and you’d get a result comparable to the footage, but available muvh quicker.
Adding to this, a genetic algorithm is 100% unnecessary for this. I'm fairly sure simple modeling would be possible here.
I've never seen any youtube video talking about Spinda that actually incorporates how lots of Spinda patterns are identical due to the spot not being on the face
Might even be possible to narrow it down so each spindxel only has 10 options:
Completely beige.
"Completely" red.
Red dots located on only one of the sides. (Up, left, down, right.)
Red dots covering a diagonal half. (UL, UR, DL, DR.)
Should only be slightly less readable than the result in the video, but much faster to process.
Considering that the hexadecimal represents coordinates, I feel like it would be more efficient to just rank the most important pixels within spinda's face's bounding box (based on brightness probably?) then convert that into coords, which can be directly converted into spinda hex.
Super cool and savvy thoughts. Some comments suggest narrowing down this number even further, though personally, I feel like it's in the spirit of Spinda to try and have as many different visual variants as possible. You're correct though that there's no need to replicate visually identical results.
I don't really know my stuff, but with the above informaiton, would it be more or less crunchy for the system to 'preload' what Spinda pattern corresponds to a given possible configuration of pixels? Assuming the Doom footage already needs to be converted to black and white, and Spinda are already representing a small part of the screen (say, 64x64 pixels each), well - 64 x 64 is 4096, a fairly manageable number of different possibilities. Would it be more efficient to create a program which could pre-calculate which Spinda best fits each possible 64x64 pixel possibility, then use the results of that to perform a simple substitution for the Doom game itself?
I once managed to play Doom on a cash register. It becomes less impressive when you realize the cash register just ran windows.
there is NO way that after hearing about spinda for the first time ever i managed to not only imagine what a cute pattern would look like but also to HAVE THAT PATTERN BE YOUR FAVOURITE TOO.
i just thought about pandas having dots on their eyes and then the symmetry about the two extra dots on their ears
You’re absolutely giving MatPat vibes, man. I love it I hope I get to see you get huge and cover a billion different things instead of just Pokemon
The results were kind of a disaster, but the video’s so well put together that I learned a fair amount about programming and had a good refresher on hexadecimal values from college. Great video!
I see two immediate adventures for improvements:
1) lookup tables. The rendering power is massive, but most of your spindas are pure black or pure white; this is redundant processing
2) it'll likely be strange, but I think the way spindas dot placement works can likely be described or approximated as linear on the "sub bits" of the pid, which would allow linear least squares to be used to solve the problem, drastically speeding up computation time.
spinDOOM
This video feels like it came out in 2011 and I mean that in the best and most flattering way possible. It's weirdly nostalgic in a way I can't explain.
To paraphrase several generations of small-town wise men: "Technology is incredible!"
“What’s your favorite spinda pattern”
Probably one with dots that fit perfectly over the eyes.
“This is mine”
*_shows the exact spinda I was thinking of_*
Ok.
This video is my introduction to your channel, and I just want to thank you from the bottom of my heart for being one of the rare few to pronounce "pokémon" correctly.
I like how expressive you are!
Good Spinda Content!
You could technically have multiple spindas that are shiny to make a second color
Adef, you are criminally underrated. The amount of work you put into all of your videos is insane, and I love every second of it.
that final image mosaic shit feels like it could be one of those weird illusion books where if you look at it the right way it looks 3-D
5:45
a Spindatabase
New Gen 10 spinda evo: Spindisplay
Now instead of just 4 randomly located spots, you get a full 360p monitor with randomly lit pixels
Idk if this has already been implemented, but I feel like it would reduce computation time by a lot if you had a set spinda for an “all white” or “all black” pixel and automatically used those for sections that are like 90% one color.
Tbh, you could make an equivalent to ascii art. Pick 16 spinda of gradient spottedness and use them as 16-bit monochrome pixels
2:30 i actually do. i dont know its ID but if 2 dots are close enough together and positioned the right way it looks like a heart. ive spent many an hour looking for spinda like this
Fantastic video. You know what would make it even better? If I could watch it on a mosaic of Spinda.
Touhou is primarily not an anime series. Any animated creation in the form of a video is fan-made. The backing track for the Bad Apple Music video is a remix of a song from the Touhou Project franchise, which is primarily a bullet hell shooter with an emphasis on character, music, and lore. The original games sort of function as a template that fans can use as inspiration, building on top of the original ideas present. Touhou Project is a big rabbit hole that is 100% worth your while diving into.
adef that's crazy
It never fails to amaze me how far DOOM can go. There really shouldn't be much further than a potato powered calculator, and yet here we are.
i' mpregnant
whate's the gedner
dooom
This is, without a shadow of a doubt, simultaneously the most Doom video and the most Pokemon video on the internet.
I mean this in the highest praise possible:
You are the BDG's Unraveled of Pokemon.
the first thought that comes to mind for optimization is hashing your spindas; basically, for each sub image, you first check if you've already seen it before (or even just something close enough if you build the hash right), and if so just use that spinda that you've already spent the time calculating. all the frames of sub images that are made up of solid chunks of pure white or pure black come to mind, and a hash search is definitely quicker than your genetic algorithm so it's worth the little overhead. loved the video!
Video starts at 15:19
Love your editing style! Also the final product was so cursed, but glad you accomplished it!
I'm only 3 minutes in and I've audibly laughed 3 times. This is hands down THE best channel on the platform. Everything from the scripting to the editing to the comedy to the whole subject is always a 10/10 on every adef video. This was well worth canceling lunch with my mom over.
How fitting that the method for this came from a bad apple animation.
I've never been this early to a man losing his mind before, nice.
*several thousand spinda were harmed in the making of this video
Best reply😂
Babe wake up new adef video
I hope you did the optimisations of fully black sub-images being naked spinda and fully white sub-images being almost fully covered spinda, I feel like that would speed it up a lot.
This is such a cool video!!! Incredible work from both you and Jakob
2:42 that spinda pattern feels so right
Babe wake up, new adef video dropped
As someone who’s had to explain genetic algorithms to many people before… the daycare analogy is kind of genius
The real question is how long until Keizaron decides to play this version of Doom or maybe like Pokemon Red or Blue with the spinda tile display?
Also I'm not a programmer myself, but, conceptually I would probably switch from genetic algorithms to some sort of AI that's pre-trained to minimize the visual loss function for the assigned pixels that a given spinda is supposed to replicate in the mosaic grid array. Maybe this would speed up the frame render times?
the suggestion has been made elsewhere that it's probably best to start precomposing a certain number of shades of spinda (say, 256, to work with 256 shade black and white) and just assigning them to matrix regions based on luminance instead of doing a genetic algorithm. Attempting to use any kind of AI here is really just a way to make the computer optimise itself with the task already being done, rather than a fundamentally different approach.
2:43 never played a Pokemon game with spinda in it, and I said "The one with dots on its eyes and ears." Low and behold: One with dots on its eyes and ears
Preggo
The breeding thing you did reminds me of how someone turned the entirety of shrek into a geometry dash level using that same method
Well you animated a doom clip with spinda patterns, but you did not play doom only using spinda patterns. Clickbait title tbh. You would not say I played doom on a sausage if you made a stop motion animation of doom using only sausages
a lot of "[X device] running doom" videos are actually just videos of doom being played on X device. this video is not an exception, but it does go in a lot of detail as to why it wouldn't be currently physically possible to do something like this for real. just thought you should know
He played the video on the Spinda. The title isnt clickbate you're just wrong
You have a sitcom personality. But in the best way. Like it's actually entertaining to watch, but I probably wouldn't want to talk to you irl.
i really like the the concepts in your videos, but the way you presnt yourself is just too annoying
2:36 I'm not kidding when I say this is the pattern that popped into my head when he said that. Though I think we all did XD
Imagine being the only person on the planet to code an algorithm to generate animation on a spinda, and then out of nowhere some fuckin guy DMs you like "hey you dont happen to have that spinda algorithm do you?"
Your favourite spinda pattern, now that I have seen it, is also my favourite spinda pattern.
Okay I’m back this video gave me SUCH a new appreciation for Spinda. Amazing and UNIQUE stuff as always man! Keep it up 😎
definitely could've atleast premade some max and minimum brightness spindas to reduce the computational power by a bit, considering a lot of the screen is pure white/pure black
So you’re saying…
SPINDA CAN RUN DOOM!
Amazing video!
One thing i'd have done is to encode all pixels replaced by a single face to a int16 number (so 4x4 bits). Then, i'd map each number to a generated spinda if and only if it is not yet generated.
That way, once you've found a pattern, you don't need to re-compute it
Didn't you have a fitness function already
First obvious way to optimize that I thought of would be a rewrite in (well, something other than python, but specifically) CUDA, allowing each segment of the image to be processed by the GPU simultaneously rather than in sequence by the CPU.
Welp I guess I know what I'm gonna be doing for the next week or so
clay, as a software engineer, this video was both terrifying and breathtaking to watch! amazing work!!!
the thing is:
using a screen of some sort, no inputs, you play bad apple
using a processor of some sort, with inputs, you play doom
yeah this is definitely a display test and not a gameplay test, the video title is kinda misleading. I don't strictly think there's anything wrong with using doom footage as a display test, but the title should really be "I displayed DOOM using only spinda patterns" or something
The US Federal Budget for 2024 requires 1513.4 Spinda pattern possibility ranges in dollars. I don't know why but that was the example that came to mind when trying to quantify this.
Maybe looking over at dithering algorithms would've helped(you could have increase the spinda density because each spinda would be faster, though iono if real time is possible)... But either way great video as always
I don't know enough about doom porting and graphics to try it out though...
You missed an opportunity to use shiny spinda to replicate the terrible green of the original gameboy for an even more retro feel!
Your favorite Spinda pattern is PID: 88889898 too!?!?
kudos to you both! that ten second clip is insane, especially seeing how difficult the process was!
This is why I'm scared of engineers
I love how he let someone else the most work. youtubers just out here trying to make vids instead of learning for themselfs....
Your videos are always so fascinating and neato! Never would have guessed to see Doom on a Spinda today but it was totally impressive!
in year 2077, we will all be playing doom using spinda patterns in real time
i didnt know spindas even had different patterns 💀
When I saw the title I was like... this feels like something somebody would play Bad apple on. I am glad I wasn't wrong.
Doom and Bad Apple have this special relationship as they have the shared goal of being played and displayed on every medium possible.
Where Bad Apple goes, Doom is sure to follow closely behind.
oh, I loved this. not only was the premise intriguing, and the result immensely satisfying, the presentation was masterful. all adjectives aside, I adore your vibes -- easy sub.
So if we wanted to do it real time, would it be better to hand pick a sort of dithered pattern ranging from "white" to "black", then use that limited range of 2 to 16 spindas to represent the game? Alternatively, would it be more readable and less spinda intensive to instead tie it into the game itself and instead only highlight entities or walls at close range using variables already in the game (Distance variables primarily due to how Doom turns top-down into First Person), something something Lidar (Light Detection and Ranging)?
Also, shocked by low sub count so far, you absolutely have the vibes of a 500k-2M mad scientist e-celeb (Michael Reeves being a popular example due to his particularly violent strain of mad science)