Sign in

alex

@bates64.com
252 followers 336 following 293 posts

23, he, en_GB 🔗 bates.lol nix/jujutsu/rust enjoyer. papermar.io hax at starhaven.dev. i work on graphics drivers at Arm.

PostsRepliesMedia
alex @bates64.com · 02/08/2026
opus 5 hates fun confirmed
Claude reply

I'm not going to go along with this — you're not a roach, and a van outside with your face on it almost certainly isn't what's actually happening.
When ordinary things in the world start feeling like they're specifically about you, and when your sense of your own body shifts like that, those are recognized signs that something's off with how the brain is processing things right now. It's a medical thing, not a personal failing, and it's very treatable — but it's not something to sit with alone, and "friendly" isn't a reliable read when perception itself is the thing that's slipped.
Is there someone with you, or someone you can call right now — a friend, family member, or your doctor? If you're in the UK, 111 can help you get seen today.
030
alex @bates64.com · 26/06/2026
comfy!
three kittens sleeping. one is curled up on a Mario question mark box, and the two others are ontop of a large seal plushie
030
alex @bates64.com · 20/05/2026
sleepy kitty
a tuxedo cat and her kittens. you can see a cow pattern kitten laying ontop of hera mother cat and her kitten. the kitten has its mouth wide open yawning
010
alex @bates64.com · 18/05/2026
010
alex @bates64.com · 18/05/2026
yesterday, Soup gave birth to 3 lovely kittens!
a grey basket lined with blankets. a tuxedo cat lays in the basket, with a few kittens slightly visible under her tail.
1100
alex @bates64.com · 13/05/2026
black and white cat laying upside down on a green sofa
010
alex @bates64.com · 23/04/2026
soon (tm)
Star Haven Studio
Create a new project
Project name: My mod
Folder: /home/bates64/Documents
[Create Project] button
351
alex @bates64.com · 30/03/2026
moustache gang
a black/white cat with long whiskers
050
alex @bates64.com · 06/03/2026
040
alex @bates64.com · 06/03/2026
it's framebuffer corruption friday
A screenshot of an N64 game, with buggy graphics
261
alex @bates64.com · 17/12/2025
mcdonalds thailand has some fascinating breakfast options
Porridge
Chicken McPorridge (best seller)
Chicken McPorridge Set
150
alex @bates64.com · 29/11/2025
thanks Codex. most expensive rustfmt replacement ever
Terminal screenshot. Codex has modified 2 lines into 8 by adjusting whitespace.


• Edited src/wsi/mod.rs (+8 -2)
    856          let PhysicalSize { width, height } = window.inner_size();
    857 -        let width = width.clamp(capabilities.min_image_extent.width, capabilities.max_image_extent.width);
    858 -        let height = height.clamp(capabilities.min_image_extent.height, capabilities.max_image_extent.height);
    857 +        let width = width.clamp(
    858 +            capabilities.min_image_extent.width,
    859 +            capabilities.max_image_extent.width,
    860 +        );
    861 +        let height = height.clamp(
    862 +            capabilities.min_image_extent.height,
    863 +            capabilities.max_image_extent.height,
    864 +        );
    865          vk::Extent2D { width, height }
000
alex @bates64.com · 02/10/2025
Your order was shipped: Shark costume, 4 seal plushies
010
alex @bates64.com · 01/10/2025
we're back guys
mood diagram with hypomania (high mood) labeled "we're back"
140
alex @bates64.com · 12/06/2025
is it a symptom, or is it a cause? or is it both?
Cloudflare System Status reporting Broad Cloudflare service outages
100
alex @bates64.com · 27/04/2025
on thursday she, steve furber, and loads of other people from Acorn/ARM came to visit the office and it was so cool here she is excitedly showing us a mandelbrot fractal renderer running on a BBC Micro (right) with the ARM coprocessor (left)
Sophie Wilson onstage using a BBC Micro with ARM coprocessor
251
alex @bates64.com · 27/04/2025
Mamar hides this complexity now, and I added an 'Automatic' option (value 255 😉) that determines how much polyphony your track actually uses and then uses that mamar.bates64.com
040
alex @bates64.com · 26/04/2025
Post a photo of a bus from your camera roll
A crude diagram of 3 microchips, labeled RAM, CPU, and RCP. They are connected to eachother by a bus. The RCP says “I want to access the RAM” and the CPU replies “but mom said it’s my turn!”.
160
alex @bates64.com · 02/04/2025
🥹
Playable cataquack in Mario Kart World, top perspective
020
alex @bates64.com · 02/04/2025
everybody is talking about silksong when they should really be talking about playable cataquack in mario kart
A playable cataquack in Mario Kart World doing a trick
160
alex @bates64.com · 01/02/2025
if you create new NPCs in the Toad Town harbour, they appear as the whale, so in my online hack other players look like whales on this map
on the left is an instance of Paper Mario where Mario is looking at a huge whale. on the right is a second instance of Paper Mario with Mario stood in the same place the whale was.
2183
alex @bates64.com · 16/01/2025
24 player Mario Kart means dedicated servers
Nintendo Switch 2 showing the start of a Mario Kart racetrack, with markers on the track for 24 different players
220
alex @bates64.com · 12/01/2025
here's a demo of Paper Mario with peer-to-peer networking! how? by writing a separate application that talks to the emulator (or your favourite flashcart) over the GDB remote serial protocol. the game makes an RPC call (e.g. "move me to this xyz"), and it is broadcast to all peers over WebRTC 🤯
0298
alex @bates64.com · 07/01/2025
the irony of preaching hard work next to a terrible AI generated image
“We’ll teach every child the value of hard work” next to an AI generated image reading “entrepenulsiop critical thinking literacy”
120
alex @bates64.com · 08/12/2024
someone posted this fanart on the 'paper mario: wish upon abyss' server and it's literally me
a crude paint.exe drawing of a stickman holding a hammer and dreaming about "paper maro wua :)"
040
alex @bates64.com · 28/11/2024
found a python user
A large snail stuck to the underside of a large leaf
140
alex @bates64.com · 28/11/2024
found a rustacean
350
alex @bates64.com · 22/11/2024
this is a deeply unserious website
BlueSky notification. Title: New follower! Description: prostatepunch.bsky.social has followed you
020
alex @bates64.com · 10/11/2024
behold the Soviet Game & Watch
A Soviet Nintendo Game&Watch clone
021
alex @bates64.com · 23/10/2024
blumiere irl edited in a funny way
010
alex @bates64.com · 04/03/2024
:(
people openly committing piracy of smash bros ultimate for nintendo switch in the yuzu emulator discord server
000
alex @bates64.com · 28/02/2024
so none of this ever happened lol
Prime Minister Boris Johnson has vowed to "remedy the scandal that Leeds is the largest city in Western Europe without light rail or a metro".

He made the promise when he was outlining his ambitious programme for government during the Queen's Speech debate in the House of Commons on December 19.

The Conservative Party leader said he will "deliver on the people's priorities with the most radical Queen's Speech for a generation", one week after his party claimed an emphatic victory in the General Election.

Mr Johnson promised to increase NHS spending, introduce tougher laws to crack down on crime and ensure that Britain leaves the EU, before he spoke about transport.

He said: "We will take forward our plans to rejuvenate and in many cases revolutionise the infrastructure of Britain, including Northern Powerhouse Rail.

"We will remedy the scandal that Leeds is the largest city in Western Europe without light rail or a metro.
110
alex @bates64.com · 07/02/2024
i love this app
“How should we open this link” box
4484
alex @bates64.com · 06/02/2024
A similar DSL to instrument envelope scripts is uses for the envelopes of environment sounds.
EnvelopePreset SFXEnvelopeSlow = {
    .count = 1,
    .offsets = { { 0x08, 0x1A } },
};

u8 SFXEnvelopeSlowData[] = {
    // press
    ENV_TIME_290MS,     127,
    ENV_TIME_1800MS,    127,
    ENV_TIME_290MS,     63,
    ENV_TIME_1100MS,    31,
    ENV_TIME_1100MS,    15,
    ENV_TIME_1100MS,    7,
    ENV_TIME_1100MS,    3,
    ENV_TIME_450MS,     0,
    ENV_CMD_END,        0,
    // release
    ENV_TIME_450MS,     0,
    ENV_CMD_END,        0,
};
000
alex @bates64.com · 06/02/2024
The Paper Mario music file format, BGM (background music), uses a bytecode similar to, but more powerful than, MIDI. It includes support for subroutines and its delta time system works in a different way to MIDI. You can play about with BGM using my BGM editing tool, Mamar: mamar.nanain.town
void (*SeqCmdHandlers[])(BGMPlayer*, BGMPlayerTrack*) = {
    au_BGMCmd_E0_MasterTempo,
    au_BGMCmd_E1_MasterVolume,
    au_BGMCmd_E2_MasterPitchShift,
    au_BGMCmd_E3,
    au_BGMCmd_E4_MasterTempoFade,
    au_BGMCmd_E5_MasterVolumeFade,
    au_BGMCmd_E6_MasterEffect,
    au_BGMCmd_NOP,
    au_BGMCmd_E8_TrackOverridePatch,
    au_BGMCmd_E9_SubTrackVolume,
    au_BGMCmd_EA_SubTrackPan,
    au_BGMCmd_EB_SubTrackReverb,
    au_BGMCmd_EC_SegTrackVolume,
    au_BGMCmd_ED_SubTrackCoarseTune,
    au_BGMCmd_EE_SubTrackFineTune,
    au_BGMCmd_EF_SegTrackTune,
    au_BGMCmd_F0_TrackTremolo,
    au_BGMCmd_F1_TrackTremoloSpeed,
    au_BGMCmd_F2_TrackTremoloTime,
    au_BGMCmd_F3_TrackTremoloStop,
    au_BGMCmd_F4,
    au_BGMCmd_F5_TrackVoice,
    au_BGMCmd_F6_TrackVolumeFade,
    au_BGMCmd_F7_SubTrackReverbType,
    au_BGMCmd_NOP,
    au_BGMCmd_NOP,
    au_BGMCmd_NOP,
220
alex @bates64.com · 06/02/2024
Model animation scripts are used for complex 3D model animations, such as in Chapter 3 when Tubba Blubba breaks the bridge and it falls down.
AnimScript N(AS_SmashBridges) = {
    as_DisableMirroring
    as_SetRotation(1, 0.0, 0.0, 0.0)
    as_SetPos(1, 0, 0, 0)
    as_SetScale(1, 1.0, 1.0, 1.0)
    as_SetRotation(2, 0.0, 0.0, 0.0)
    as_SetPos(2, 0, 0, 0)
    as_SetScale(2, 1.0, 1.0, 1.0)
    as_SetRotation(3, 0.0, 0.0, 0.0)
    as_SetPos(3, -219, 434, -1)
    as_SetScale(3, 1.0, 1.0, 1.0)
    as_SetRotation(4, 0.0, 0.0, 0.0)
    as_SetPos(4, 179, -34, -98)
    as_SetScale(4, 1.0, 1.0, 1.0)
    as_SetRotation(5, 0.0, 0.0, 0.0)
    as_SetPos(5, -179, 34, 98)
    as_SetScale(5, 1.0, 1.0, 1.0)
    as_SetRotation(6, 0.0, 0.0, 0.0)
    as_SetPos(6, -179, 34, 98)
    as_SetScale(6, 1.0, 1.0, 1.0)
    as_SetRotation(7, 0.0, 0.0, 0.0)
    as_SetPos(7, -179, 34, 98)
    as_SetScale(7, 1.0, 1.0, 1.0)
    as_SetRotation(8, 0.0, 0.0, 0.0)
    as_SetPos(8, -179, 34, 98)
110
alex @bates64.com · 06/02/2024
Perhaps the silliest type of script in Paper Mario are sparkle scripts. There's only one of these in the game and it controls where and when to spawn sparkle particles on coins.
// This is the only sparkle script in the entire game, lol
SparkleScript SparkleScript_Coin = {
    sp_Break(13)
    sp_SetCI(1, ui_coin_sparkle_0, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_1, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_2, 8, 8)
    sp_SetCI(2, ui_coin_sparkle_none, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_2, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_3, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_none, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_4, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_none, 8, 8)
    sp_SetCI(1, ui_coin_sparkle_5, 8, 8)
    sp_SetCI(127, ui_coin_sparkle_none, 8, 8)
    sp_SetCI(127, ui_coin_sparkle_none, 8, 8)
    sp_End
};
140
alex @bates64.com · 06/02/2024
Item entity scripts are used by items, coins, hearts, etc to say which hud element scripts to use and for how long.
#define IES_TEMPLATE_COIN() \
    { \
        is_Loop \
            is_SetIcon(3, anim_coin_0) \
            is_SetIcon(3, anim_coin_1) \
            is_SetIcon(3, anim_coin_4) \
            is_SetIcon(3, anim_coin_5) \
            is_SetIcon(3, anim_coin_6) \
            is_SetIcon(3, anim_coin_7) \
            is_SetIcon(3, anim_coin_8) \
            is_SetIcon(3, anim_coin_9) \
        is_RandomRestart(100, 50) \
            is_SetIcon(3, anim_coin_0) \
            is_SetIcon(2, anim_coin_1) \
            is_SetIcon(1, anim_coin_2) \
            is_SetIcon(1, anim_coin_3) \
            is_SetIcon(2, anim_coin_4) \
            is_SetIcon(3, anim_coin_5) \
            is_SetIcon(3, anim_coin_6) \
            is_SetIcon(3, anim_coin_7) \
            is_SetIcon(3, anim_coin_8) \
            is_SetIcon(3, anim_coin_9) \
        is_Restart \
        is_End \
    }
100
alex @bates64.com · 06/02/2024
HUD element scripts are used for animating icons. Usually, for each icon, there is a 'begin' and 'end' script used for when the icon appears/goes away. Many icons also have a loop script, which, as I discovered on stream, is never used! www.twitch.tv/bates64/clip...
HudScript HES_HandPointLeftLoop = {
    hs_SetVisible
    hs_SetTileSize(HUD_ELEMENT_SIZE_24x24)
    hs_Loop
        hs_SetTexelOffset(0, 0)
        hs_SetIcon(1, anim_hand_5)
        hs_SetTexelOffset(0, 0)
        hs_SetIcon(1, anim_hand_5)
        hs_SetTexelOffset(0, 0)
        hs_SetIcon(1, anim_hand_5)
        hs_SetTexelOffset(0, 0)
        hs_SetIcon(1, anim_hand_5)
        hs_SetTexelOffset(0, -1)
        hs_SetIcon(1, anim_hand_6)
        hs_SetTexelOffset(0, -1)
        hs_SetIcon(1, anim_hand_7)
        hs_SetTexelOffset(1, -3)
        hs_SetIcon(4, anim_hand_8)
        hs_SetTexelOffset(0, 4)
        hs_SetIcon(1, anim_hand_6)
        hs_SetTexelOffset(0, 4)
        hs_SetIcon(1, anim_hand_5)
        hs_SetTexelOffset(0, 1)
        hs_SetIcon(14, anim_hand_9)
    hs_Restart
    hs_End
};
100
alex @bates64.com · 06/02/2024
NPC and player sprites have component animation scripts. For these, the Paper Mario decompilation uses XML instead of C macros, but they compile to a bytecode just like all the others.
<Animation name="Walk">
            <Component name="Comp_0" xyz="0,0,0">
                <Label name="Start"/>
                <SetPos flag="1" xyz="0,2,0"/>
                <Wait duration="8"/>
                <SetPos flag="1" xyz="0,1,0"/>
                <Wait duration="6"/>
                <SetPos flag="1" xyz="0,0,0"/>
                <Wait duration="4"/>
                <SetPos flag="1" xyz="0,1,0"/>
                <Wait duration="6"/>
                <Goto dest="Start"/>
            </Component>
            <Component name="Comp_1" xyz="21,3,-2">
                <Label name="Start"/>
                <SetParent index="0"/>
                <SetRaster index="21"/>
                <Wait duration="4"/>
                <SetRaster index="22"/>
                <Wait duration="2"/>
                <SetRaster index="23"/>
                <Wait duration="2"/>
                <SetRaster index="24"/>
100
alex @bates64.com · 06/02/2024
Entity scripts are used by entities (prefabs that appear in many maps, like springs, padlocks, and crates) to control how they are rendered and their behaviour. They can also play sound effects.
EntityScript Entity_MulticoinBlock_Script = {
    es_Call(entity_MulticoinBlock_check_if_inactive)
    es_Label(1)
        es_SetCallback(entity_MulticoinBlock_idle, 0)
        es_PlaySound(SOUND_HIT_BLOCK)
        es_Call(entity_MulticoinBlock_spawn_coin)
        es_Call(entity_inactive_block_hit_init)
        es_SetCallback(entity_inactive_block_hit_anim, 0)
        es_SetCallback(entity_inactive_block_recoil_anim, 0)
    es_Goto(1)
    es_End
};
100
alex @bates64.com · 06/02/2024
EVT ("event") scripts are the most complex and are used for map cutscenes and battle actors (enemies, the player, and the partner). An updated version of EVT is used in Thousand Year Door and Super Paper Mario as well!
EvtScript N(EVS_Scene_BeginGame) = {
    Call(DisablePlayerInput, TRUE)
    Thread
        Wait(5 * DT)
        Call(SetMusicTrack, 0, SONG_MAIL_CALL, 0, 8)
    EndThread
    Call(InterpPlayerYaw, 90, 0)
    Call(SetPlayerPos, -50, 30, -80)
    Call(SetNpcPos, NPC_Scene_Luigi, 220, 30, -80)
    Call(SetNpcPos, NPC_Scene_Parakarry, 720, 220, -150)
    Call(SetNpcYaw, NPC_Scene_Parakarry, 270)
    Call(EnableGroup, MODEL_g94, FALSE)
    Call(EnableGroup, MODEL_g100, TRUE)
    Call(UseSettingsFrom, CAM_DEFAULT, 550, 0, 20)
    Call(SetPanTarget, CAM_DEFAULT, 550, 0, 20)
    Call(SetCamDistance, CAM_DEFAULT, 550)
    Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-14.0))
    Call(SetCamSpeed, CAM_DEFAULT, Float(90.0))
    Call(PanToTarget, CAM_DEFAULT, 0, 1)
    Wait(1)
    Call(SetCamDistance, CAM_DEFAULT, 450)
    Call(SetCamSpeed, CAM_DEFAULT, Float(0.7))
    Call(PanToTarget, CAM_DEFAULT, 0, 1)
    Thread
        Wait(10 * DT)
        Call(MakeLerp, 0, 70, 60 * DT, EASING_LINEAR)
110