Tanuki-Computing

♥Be the Freak you want to see♥

  • They/them

☙Mid twenties, 🇩🇪, White, Bi, Enby, English second language, autistic, actual Tanuki❧.


18+ Only☚. Will be horny on main.


If there’s a post of mine, that you think is missing a tag— don’t hesitate to ask 😊


Also running the account “SuperSonicoOfficial


Pfp sprites taken from here♥.
“Pathetic Man lover” blinkie by @CosmicRot
“Twink Lover” blinkie by @pdf
Xenia button taken from here
Button sources— 1, 2, 3, 4, 5

A red square. Xenia the Linux fox’s face is seen on the left, next to her is the text: “Powered by LINUX”A gif of a shark swimming quickly around a hamburger. The word “Borgor” is written at the topA red square with a smiling face on it. There’s text that says: “I’m gonna eat you”. The image is noticably compressed
··
A black square with a red, blinking outline. Written in the center is: “EVIL AUTISM”
A pink square with a red, blinking outline. Written in the center is: “twink lover”
A gray square. On it is a skull and corssbones with the text: “Piracy Now!”A gray square. On it is the Quake logo spinning, with the text: “Get Quake Now!”A gray square. On it is a spinning cat face from the game Yume Nikki, and the text: “Dream Now!”A gray square. On it is the Copeland OS logo from Serial Experiments Lain, with the text: “copeland os Now!”
A gray square. On it is Hatsune Miku’s face, with the text: “Vocaloid Now!”A gray square. On it is Lilith, from the movie: “End of Evangelion”, with the text: “Third Impact Now!”A gray square. On it is a spinng floppy disk, with the text: “Pass the Shareware please”A gray square. On the right there’s an image of two connected computers, both having a heart on their screens. There’s also text that reads: “Sharing is caring... seed your torents!
A gray square. On it is a graphic of the letter E, with text that reads: “Eat me now!”A gray square. On it is a marijuana leaf, with the text: “Legalize now!”. The image is noticeably compressed.A gray square. On it is a German flag and the text: “This site contains German Blödsinn”.A gray square. On it is a rotating pentagram, to the left is the text: “Google Chrome is evil!”.
I like ComputerA black square. On it are the logos of several diffrent web broswer, with the text: “Best viewed with any Browser”A graphic of a smiley hittting an ape with a hammer. To the left is the text: “No Fucking Thanks”, the first letter of each word is highlighted in red.A gray square. On it is a blue paw print, with the text: “made with my own two paws”
Madotsuki from Yume Nikki, sitting in a field of white flowers. To the right of Madotsuki, the words Yume Nikki are written in hiragana.The words Death Grips, to the left is a figure in a white hoodie.A cat, with the word “Pingus” in the lower left.Bob from Animal Crossing spinning, a happy expression on his face. Next to him are the words: “Powered by Bob”.
A gif of Ralsei from Deltarune smokingA closeup of Lain, from Serial Experiments Lain’s eyes. A TV filter is put over the image.An animation of Kagamine Len rocking his head back and forth.Susie and Kirs from the game Deltarune. At the bottom text reads: “Kris, where tf are we?”
A rainbow flagA bisexuality flag“This User is a Pac-Man Lover”

⚠️This User has the kind of penis autism that causes delusions⚠️


MOOMANiBE
@MOOMANiBE

that video on mario 64 invisible walls is incredibly impressive but also I feel like the sheer amount of "for some reason"s and "this game is soooo glitchy and buggy" comments in the video are going to do a lot of work disguising the fact that every single one of these optimizations are probably the only reason ANY of that shit runs on the n64 hardware to begin with

experienced gamedevs didn't take these shortcuts for fun, they likely were under signifiant time pressure, under a shifting technical landscape, and trying to optimize for complex collision on a processor whose clock speed is significantly outdone by any post-2007 graphing calculator

the fact that by and large ONLY speedrunners see these issues is frankly a real testament to how well they did


MOOMANiBE
@MOOMANiBE

I particularly want to call out the final topic of the video, which is that ground height-sorting in mario 64 is handled by comparing the height of each object's first vertex (in order, which is arbitrary) - which means that in some cases objects can be sorted lower than they should be due to ties or awkward first-vert placement.

I 1000% guarantee you this was a late-in-development optimization addition. They were almost certainly doing some sort of more complex detection and it was eating up too much frame time and so they redesigned it with the two principles that cause the bug in question, which is:

  • only compare two vertices' world locations, total, a single math operation
  • then abort as soon as the check is successful and don't check any other collision anymore

This smells very strongly of frantic optimization. "what platform is below mario" is a check that has to run every frame and it's almost certain that on maps like Tick Tock Clock there are situations where probably 7-10 possible valid ground planes can be underneath mario at any given time. During dev, not knowing the N64's final specs, you set it up to just be a thorough check that compares every possible landing spot, and suddenly you're a month from release and the game needs to ship in time to be a launch title and mario's ground collision check is taking like 400 ms, your manager is like "just make it run! we'll test for any bugs where the vertices cause weird collision" so you do that and you catch and adjust for anything you notice, and the minor remaining ones get left out.

It's extremely telling, IMO, that ALL the places this bug is an issue are minor props and weird unusual collision cases that are very hard to notice in normal play. There were probably way more at first and then they went through and fixed every reported one by hand. "why didn't they just build a tool" you might think, but they were almost certainly working under significant time constraints and sometimes you just say "good enough" and throw testers at it and then move on to the next bug and the next optimization. This is quintessential game development, and not a bit of it lazy. Shit's hard and time is a real thing.


NireBryce
@NireBryce

experienced gamedevs didn't take these shortcuts for fun, they likely were under signifiant time pressure, under a shifting technical landscape, and trying to optimize for complex collision on a processor whose clock speed is significantly outdone by any post-2007 graphing calculator

and the places that weren't shortcuts, or time crunch, well. After you're exposed to the Ubiquitous Internet we now all take for granted, it's hard to really understand just how hard it was to learn how to find anything. Let alone resources to program for platforms or languages that fell outside of the structure of a CS degree. You bought software libraries on floppies. from a store. With many languages, you bought your compiler from the store. Off a shelf. Best Practices was like, four books and a style guide. DooM wasn't open source, quake wasn't open source, hell this was '95ish, open source wasn't even that big of a thing. Debian Stable 1.0 was released in nineteen ninety six. Gentoo was 2002. Mozilla wouldn't release Phoenix until 2002.

consider how much harder finding techniques that aren't in the standard, often techniques that are described with English idiom, would have been if your first language was not English.


amydentata
@amydentata

My experience trying to learn C++ as a kid before the internet was "read through the manual, build fails on simple-ass test code, read the manual again, build fails." And that was the end of it. Nobody where I grew up knew how to code. School could only show you how to move a turtle on an Apple ][. So my coding journey beyond Qbasic ended right there


You must log in to comment.

in reply to @MOOMANiBE's post:

Agreed. Learning how they were doing collision checks for terrain combined with the fact that I genuinely can't remember ever encountering issues with it as a child blew my mind. I really don't love how speedrunners talk about games on a technical level.

I always found it strange, because by all intents, DOOM is "hella buggy" in a lot of the same ways, and even worse in some cases, but the overwhelming majority of DOOM speedplayers, competitive or otherwise, seem to understand the shortcomings as part of the system and not chastise the developers for the choices they made at the time.

maybe partly because the Doom engine is open source so there is a lot of relatively easily accessible information available as to how and why it works the way it does? while Nintendo is very tight lipped about all of their development, and has historically garnered much stronger criticism

have you seen any of the videos from the guy doing the big speedup romhack? kaze emanuar, i think. he's very much on team "look they were doing the best they could as some of the first programmers on this system, and with 30 more years of knowledge of that hardware, that's why i can do this" in a lot of his videos on the subject, and it's incredibly refreshing

I've always appreciated that about Kaze Emanuar; taking the time to implement these incredible optimisations but recognising that a lot of these techniques were just not known at the contemporary moment when M64 was written, and that certain compiler modes were left unused because the trade-off for speed was overall stability. Very informative and you still get the satisfaction of seeing it all blaze along at 60Hz on real hardware!

I'll note, I still remember when CodeWarrior shipped their first "optimizing compiler", and everybody's code broke at first. That was a few years after Mario 64 shipped. Probably SGI's compiler was more mature than CodeWarrior's, and probably Mario 64 could have shipped with the optimizing compiler on, and we don't know whether it being turned off in M64 was intentional or an oversight— but if they'd been for much of development QAing it with the optimizer off, how hard would it have been for QA to determine it was the same when you turned it on?

Well, we know that a source tree that compiles to the same binary could be run with compiler optimizations with no observable issies, and also that they were confident enough to turn them on for the PAL release. I doubt anyone would have even noticed if not for a couple of other errors of the "good enough next task" type.

Yeah, I felt that especially when he was kind of talking shit about "copy and pasting" stuff. Like, why would you design and model four different individual stone platforms or whatever when you can just make one and put it in a few different places?

like it's not lazy, it's CLEVER

https://gamerant.com/halo-3-covenant-level-rocks-all-the-same/

take a look also at the Sea of Clouds in FFXIV; a look at the map reveals where several pieces of level geometry are used in multiple places, rotated and redecorated, but you'd never really notice while you're on the ground (as it were)

Elden Ring doesn't even bother with the redecoration; there's several places in the game where they just flat-out reused the same scenery objects without any real change, but again it only stands out because so much else is unique

I /love/ seeing games broken open by speed running, like Mario 64 or Ocarina of time, but the fact that people will call them "Hella buggy" "glitchy" ect even though 99% of the tricks used would never be encountered by a regular player always bugs me.

I speedrunr Virtual Hydlide at the 'highest level' and I've tried to move away from a model of talking about it like the devs were idiots and fools and blah blah blah. Like, yeah, the framerate is terrible, and it's pretty obvious why, but under constraints, reusing a 3D engine you already have working is not completely silly... except it was a golf engine. sucks air through teeth

honestly, I think they weren't even aware of the case of these floor/wall/ceiling leaks and misalignments - and probably encountered "invisible walls" themselves, but chalked it up to incredibly rare floating point glitches (which is sort of true) and didn't have time to investigate.
had they known that they even existed, they'd have probably had tooling to prevent it.

as it stands, the way they implemented physical/interactible world surfaces is honestly clever and maybe not the best way to do it, but the best way they knew how to for sure, considering they likely invented that technique from first principles.

it reminds me of ppl talking about gen 1 pokemon where its like, "the fact that all of these glitches Do This is actually a testament to how hard it is to just crash pokemon" where its like, the parallel universes from the classic pannenkoek video is like, "its so cool that the game loads in a fake version of the level instead of going "you are in a place that doesnt make sense im going to crash now"

It doesn’t really load or spawn the parallel universes; they’re just a phenomenon created by using short ints (which have a maximum value they can represent) to store coordinate data that’s being used to check for collisions. When given unexpectedly large coordinates as Mario goes far away from the actual level itself, the coordinate values used for collision checking loop around after hitting the max those variables can represent, which then produces a “parallel universe”. None of them really “exist” to the game at all, and nothing is being loaded or spawned or anything.

I don’t think this is even an intentional behavior designed to prevent crashes; they just never expected this case to ever happen since no level is nearly big enough to reach the maximum coordinates that can be stored in short ints.

honestly I've started closing videos when the person making them gets all negative about an old-ass game with optimizations they couldn't even dream of

like, okay bro let's see your ass go back to the 90s and write good games within the limitations of the n64. I'll wait

And this was a launch game! They weren't even totally familiar with the hardware yet, and were probably developing the game on constantly-shifting hardware over the course of development.

yeah like a number of these optimizations smell like late-on additions to me, ESPECIALLY the one where height object sorting is determined by the relative heights of the objects' first vertices; that's the kind of optimization you add because it turns out you can't do something more complex in realtime and then you beg your testers to "tell me if you see anything weird as a result"

Yeah, that would make a lot of sense. Especially given, again, it's a launch game - being tied to the hardware meant they had a release date set in stone, and there comes a point where you're doing whatever you possibly can to get it working in time for a hard deadline you can't move.

Also something reeeaallly worth observing is that it takes an INCREDIBLE amount of what looks like special-casing if you just write out the algorithm to make physical game mechanics feel "natural".

I agree with this real hard about Super Mario World (so many people say it's super buggy but they're doing crazy nonsense that took 30 years to learn, c'mon), but the invisible wall video hit differently for me! I don't play SM64 that often, and I still remember a couple of these hitting me back in the day. Like yeah that actually is buggier than I thought, and now we know why instead of just "this game is broken"! It feels different to me than the parallel universe-level stuff that's totally outside the realm of normal behavior.

I love that they're bugs caused by a physics system cobbled together by people making one of the first 3D games that worked well 99.9% of the time, and then broke horrendously in a few places. I spent half the video thinking "oh god would I have even tried to fix this if I was working on this game and I caught it."

you see this in modding occasionally as well and I've definitely taken part in it before, i think once issues become obvious to you it's very easy to forget these don't come up in normal playthroughs and because "the developers" often become more of a concept than a group of people, and so it's easier to get more toxic about the stuff you get hindsight on (especially since often there's a feeling of "ok these guys got paid to do this stuff, we're doing it for free and we know their game better than they do, they must suck etc etc!)

in reply to @MOOMANiBE's post:

To that final paragraph, I would add:

The QA team at Nintendo almost certainly did know about at least some of these weird collision areas. It's just that the QA manager probably assigned them as shippable bugs (IE bugs that won't prevent you from shipping the game) because, as you mention, they had other, more consequential bugs to fix before release.

On a tangentially related note, I'm curious how many of these invisible walls persisted into the Shindou Edition, which Nintendo treated as a bugfix version of the original.

honestly i'm skeptical that it was even a late addition — most of mario 64 is relatively boxy, and "i guess floors will tend to be pretty flat and also spaced out vertically" seems like the kind of assumption that's very easy to make early on, if you're trying to build 3D collision from scratch under such ludicrous constraints that half of it only uses integers. you'd have a hard time building the game in the first place if finding the horizontal plane took 400ms

if they were aware it was a potential problem at all, it would've been very easy to compare e.g. by highest or lowest or middlest point on each tri, which would've added little overhead but fixed most of the issues that even remain now

re the collision quirks generally, what gets overlooked in a bug-oriented dive like this is the kind of cool property that the player is constrained to the level bounds for free. they don't have to draw walls all around it or whatever, because the engine simply will not let you go somewhere that has no geometry. modern 3d physics definitely does not give you that guarantee

The main reason I suspect it's a late addition is that the majority of bugs stem from situations where vert 1 on a model is at its base, rather than at its peak. This results in situations where props that sit flush with the floor have the same height as the floor and so the floor overwrites their collision completely. There's no way they would have designed those prop models like this if it'd been known that vert 1 was so important - and some symmetrical models have different vert-1 height per side face - thus lending credence to the idea that this wasn't previously an element of concern until after most of them had been made.

hmm compelling, but then why are there several (symmetric) pedestals where only one side is a problem? that looks to me like the vertex order truly being arbitrary and some quirk of the level building tools just leaking through

i guess it's a little hard to gauge since i don't have a sense of how many pedestals there are in the game that don't have collision problems, but given how little decoration there is in mario 64 overall, i suspect it's not many

it's always a weird thing to me, specially with youtubers, where there is all this "for some reason" about bugs and glitches that people only know about because this youtuber has spent lik 200 collective hours jumping against a wall to try to make something happen when 99% of players never saw something like that when playing

SM64: Built in less than 3 years to create essentially the first 3D platformer from scratch with no real previous precedent for a 3D character controller and character collision resolution system. Becomes one of the most successful and lauded games of all time and players rarely encounter any issues in the entire game.

This video: Took 10 months to build out the visualization of categorization of a very rare edge case that is essentially random to trigger, with 28 years of millions of people experiencing the game, and a community functionally dedicated to breaking it in new and unique ways for two whole decades.

Also this video: Lazy programmers

It's an amazing watch but also is so lacking any sort of alternative perspective on the subject.

Yeah. It's kinda odd to me they didn't have a level geometry tool that would reduce some of the issues (just! split the edge!) but only like two of those areas were ever problems for me (the rolling log area and falling off the ceiling in HMC near the rolling rocks).

There's some "I have no idea what they were thinking here" things in SM64 (why is the sub marked dynamic? why does it redo the raycast for shadows so many times?) but all of them are of the "It works next task aaa we only have three days left" type.

in reply to @NireBryce's post:

There's a corollary to this, which is just how much the programming craft has been changed and improved by talking about it en masse, and by writing shit down and passing on knowledge.

A lot of the, for lack of a better word, managerial knowledge I've brought with me from tech has put certain activist teams I've been in on rocket skates. Concepts like blamelessness and past/present/future you and the importance of tracking work still to be done.

Programming/software development/software engineering still has problems, but we have made so much progress. I think it's important to recognize that progress, partly to remind ourselves that improvement is possible, and partly to inspire searching for ways to export and adapt the lessons learned to other professions.

and yeah, like. It's very important to realize, because I think people are still thinking of the industry as the culmination of 70 years of accretion, and not that we've only been able to apply more than 1% of that since like, blogger dropped. Wikiwikiweb was 1996.

We're in our third decade, we just never adopted a new name for the new field.