@awesomekling@jarredsumner Maybe ask for it? The first new Browser since forever being developed with the help of some company's AI would surely be good marketing. /cc @sama?
I would be doing something very similar if I had unlimited tokens for a frontier model tbh.
This seems wild now, but will be normal everyday shit in a year or two.
Great to see @jarredsumner pushing the envelope :)
@PalmerLuckey I don't know man. The N64 is a quirky beast. Yes, it has enough horsepower to decode H264, yet drawing a simple tilemap requires careful consideration of draw order to not overwhelm the memory bandwidth.
It's all possible, but so, so complicated.
One of the real bummers of the N64 software library is that despite being extraordinarily capable as a 2D system, almost all of the effort went into 3D games.
Makes sense, that was the shiny new selling point, but the hardware is capable of so much as a sort of Super-SNES.
@kurriochi@the_randomizer Right, we now have much better tooling and an amazing community, compared to the hushed tones behind closed doors back in the day.
Also, fun fact: what people generally call "GPU microcode" (in N64 context) is just MIPS assembly :)
@phoboslab@the_randomizer Like yeah it's cool that if you carefully construct the game's code in assembly, GPU microcode and other stuff, you can get stuff like ambient occlusion and bloom working. But I'm not sure if any devs could've taken advantage of this stuff back then.
Ever wondered why explosions and other effects looked so much cooler on PSX than on N64? It's additive blending! While the N64 ACKCHYUALLY did support it, it was practically unusable. 🧵
@megatog615 PSX had the opposite problem: no proper multiplicative blending.
What you need is `(src * dst)/255`, but the PSX has no programmable "color combiner" and only allows one of 4 fixed blend modes:
0: (src + dst) / 2
1: src + dst
2: dst - src
3: dst + src/4
@phoboslab unfortunately the PS1's odd multiplicative blending for shadows and other effects like screen dissolves is quite distracting
can you explain why PS1 Looks Like That in this regard?
@the_randomizer And it's no wonder why. SGI famously designed the display processor. They were coming from the movie world where quality was of utmost importance. While doing things "quick and dirty" is often the better approach for games.
@the_randomizer ... and yet, the general look of PSX games has aged much better.
I love the N64, but in hindsight it's undeniably that Nintendo made the wrong tradeoffs deciding for anti alias & texture filter instead of improving memory bandwidth and trivial things such as additive blending.
Still, this whole approach worked out quite nicely and runs fast enough with a few hundred small sprites on the screen. Might use it for a game!
Source is here: github.com/phoboslab/n64_…
Sadly, the N64 struggles hard with memory bandwidth and thus with blending/overdraw: for each pixel the RDP needs to read the framebuffer from RDRAM, compute the output color and write back to RDRAM. With a 32bit buffer this problem gets twice as bad.
@cmuratori@wookash_podcast Apple's JavaScriptCore uses a bytecode interpreter as the first execution stage, followed by three(!) JIT stages, with increasing compile times, for hotter code.
A lot of work went into making JSC's "Low Level Interpreter" fast: wingolog.org/archives/2012/…
@wookash_podcast It says "no JIT" - so, I'm not sure what that means in terms of benchmarking, since presumably nobody else optimizes their unjitted perf?
Had a bit of a light bulb moment, and... here's a Windows export from Construct running as a single .exe file - all resources packed in to a single file, in a way that antivirus tools hopefully won't see as suspicious. Pretty cool! Should be in a future Construct release.
I'm in awe of whoever designed this thing. A true hacker! Also, thanks again to lidnariq and everyone else in the N64Brew discord for figuring this out. You guys are the best <3 17/n
For my N64 game I wanted to support the Rumble Pak and stumbled down a rabbit hole of "not sure if genius or really dumb"-engineering. Libdragon, the system library I'm using, has this very convenient function `joypad_set_rumble_active(port, active)`. Simple, right? 🧵 1/n