Sign in

Bret Hudson

@brethudson.com
725 followers 505 following 740 posts

🧑‍🦱 He/They • AuDHD • Goofball 🕹️ Interactive Software Engineer: web, desktop, games, & mobile 🏢 Formerly Vercel, Manticore Games, indie(Function); 🧠 Opinions are mine – feel free to make them your own

PostsRepliesMedia
Bret Hudson @brethudson.com · 18/09/2026
Last night I hooked up animations via JavaScript generators to start iterating on various effects Trying to explore the space to see what's possible, what looks good, and what isn't too complicated to manage in code 😛
010
Bret Hudson @brethudson.com · 17/09/2026
With my conference travels over, I've been able to focus on game dev again Ethan's been crushing it on the art front! Plugging his sprites into my rendering pipeline has me super giddy
Screenshot of a monster attacking. Text: Eye swings left!! You defend left!! No damage!Screenshot of a monster attacking, palette swapped. Text: Eye swings left!! You defend left!! No damage!
110
Bret Hudson @brethudson.com · 14/09/2026
Making a thread for me & @efan.me's #gbjam 14 game We participated in GBJam #2 back in 2013, and are teaming up once again 13 years later! To start, I've built a lil' rendering pipeline in WebGPU that takes a grayscale image, limits it to 4 colors, and then applies a color palette
A Game Boy-inspired handheld console rendered in HTML and CSS, with a WebGPU canvas embedded for the screen. Along the bottom of the console, three previews of each step in the rendering pipeline are shown. The stages are "raw grayscale", "posterized", and "colorized".
263
Bret Hudson @brethudson.com · 10/09/2026
After 10 years, I'm back!
Google Fi notification saying "Welcome to Canada"
020
Bret Hudson @brethudson.com · 13/08/2026
And a special thanks to @kenney.nl for the fantastic Voxel Pack & Blocky Characters assets!
020
Bret Hudson @brethudson.com · 13/08/2026
Over the course of July, I coded up a voxel engine inspired after Minecraft from scratch in JavaScript & WebGPU, for Game-Like Jam #10. Yesterday, the results came out, and I'm super proud to have won "most like the original"
A screenshot of the winning entries, including NANA (most creative twist on the original), Voxel Kingdom (Overall winner) and my entry, Pickblock (Most like the original)
120
Bret Hudson @brethudson.com · 04/06/2026
Just started up my Discord bot for the first time in 3 months. It's very obedient
A screenshot of two Discord messages. I sent a gif from Megamind with the caption "Rise, my glorious creation. Rise!" to which my bot replied with "no"
120
Bret Hudson @brethudson.com · 27/05/2026
[Back to the current Pixelscapes hardware shuffle] And would you look at that 😍 We have vertex SSBOs!! It was 99% visually identical to the other rendering modes - all that was needed was to add the container's scroll offset to the camera
Terminal with clipped text, reading "max vertex SSBOs: 4"A new text element in settings reading "Render mode: SSBO"
110
Bret Hudson @brethudson.com · 27/05/2026
"Why do you keep all your old tech??" - people when they see my collection of phones and laptops Looking up specs, it turns out that my old Pixel 3 supports SSBOs AND has OpenGL drivers that play nicely ((Please please please work omg PLEASE))
My collection of Android devices
210
Bret Hudson @brethudson.com · 27/05/2026
I made an edit... and didn't see the change on my device. Confused, I made sure my code was executing the SSBO pipeline Uh oh Despite my Pixel 8 Pro having support for SSBOs, the driver restricts it to compute/fragment shaders in OpenGL. I'd have to switch to Vulcan (😱) for better compatibility
adb logcat output: "max vertex SSBOs: 0"
100
Bret Hudson @brethudson.com · 27/05/2026
What made it so tricky to debug was that I realized that elements were anchored to three different radii: inner, outer, or middle The next step was to add some debug overlays to visualize the alignment of each element. You can see that the notches & handles were center-aligned to the outer radius
Three lines, a yellow, a red, and another yellow, show the outer, middle, and inner radii of where I want my UI elements to draw. Some elements perfectly fit, some elements were centered to the outer radius, and the donut in the middle... not sure what was going on there.
110
Bret Hudson @brethudson.com · 27/05/2026
While the UI is starting to look good, the code behind it... was a mess. Lots of duplicated magic numbers and computations, making it very difficult to refactor But hey, the best part about messing with math in graphics is that you get all sorts of fun bugs! :)
Screenshot of some misaligned UI: the clock dial picker is squished on the y-axis
100
Bret Hudson @brethudson.com · 20/05/2026
The wedges have been replaced with pills (gonna add a three-line icon to indicate drag-ability). I also made the screen responsive for landscape orientations The #Pixelscapes schedule screen is slowly but surely coming together :)
A picture of my Lenovo Android tablet, showing the schedule screen within Pixelscapes settings. On the left there is a radial input with three sections, split by pill-shaped handles. One section is selected, with a form on the right allowing the user to adjust values related to it.
120
Bret Hudson @brethudson.com · 19/05/2026
Lots of refactoring around settings going on, and while I was deep in the trenches, I decided to add an overlay debug menu for #Pixelscapes Gonna post a video tomorrow to show it in action, as pictures don't explain it too well
A new debug overlay menu rendering on top of my Android homescreen. The "landscape" button is active (cyan) and the wallpaper in the background reflects the setting
100
Bret Hudson @brethudson.com · 14/05/2026
Slowly but surely the schedule screen is coming together :) I hooked up a ViewModel to separate the state/logic out of the UI. I'm loving Kotlin and find Jetpack Compose's UI system to be really neat
110
Bret Hudson @brethudson.com · 13/05/2026
MUCH better. There might be an optical illusion that makes it look more vibrant as you scale the image down. Might need to double check this later to make sure my math is right
100
Bret Hudson @brethudson.com · 13/05/2026
Sometimes you get pretty far before realizing that your scaling ratio is inverted 😛
Two previews of a red box outline with a thin white circle within it. The smaller version features thicker lines, suggesting that my scaling ratio is inverted.Two previews of a red box outline with a thin white circle within it. Unlike the first image, the scaling ratio is correct
210
Bret Hudson @brethudson.com · 13/05/2026
Here's what it looks like with sRGB, for comparison. You can see the colors are more muted/washed out. This effect gets more visible when the start/end colors are less similar
A screenshot of the same input, but with the color space for gradients changed to sRGB. Radial 24 hour schedule input. There are three slots, each with a radial gradient, representing the background of the wallpaper that slot is associated with. The adjustment handles between each slot are a light gray
100
Bret Hudson @brethudson.com · 13/05/2026
It's starting to look presentable! Using the gradient backgrounds for each wallpaper looks better than I was anticipating, largely due to Android supporting the Display P3 color space P3 gradients > sRGB gradients by a loooong shot
Radial 24 hour schedule input. There are three slots, each with a radial gradient, representing the background of the wallpaper that slot is associated with. The adjustment handles between each slot are a light gray
110
Bret Hudson @brethudson.com · 13/05/2026
Today's #Pixelscapes update: a very WIP radial input for scheduling wallpapers Prior to this addition, you were either stuck with a single wallpaper or beholden to the hardcoded schedule built into the app Now, users can customize which wallpapers render when
A radial input showing three equal sections (yellow, green, and blue) with red handles in-between slots. Beneath this is a form, with a dropdown to select a wallpaper, as well as two buttons, to either split or delete the selected slot. Pixelscapes is also rendering in the background of the screenshot
130
Bret Hudson @brethudson.com · 12/05/2026
I am amazed at how much time I spent (literally all day) on what looks like so little 😛 This screenshot is the start of the settings update for Pixelscapes 2.0, allowing folks to adjust values with a real-time preview Next post details why this took me all day
Pixelscapes rendering within an Android Activity. At the bottom of the screen, there is a slider with the text "Speed: 100%" and "Slider: 0.5".
130
Bret Hudson @brethudson.com · 06/05/2026
Ship it
The wallpaper rendering with its center at the bottom left corner, causing only the upper right fourth of the wallpaper to be visible.
020
Bret Hudson @brethudson.com · 03/05/2026
Bluesky supports videos now?? Heck yeah 😎
110
Bret Hudson @brethudson.com · 03/05/2026
That was a lot simpler than anticipated! :)
Screenshot of my home screen, with the wallpaper rendering correctly
120
Bret Hudson @brethudson.com · 03/05/2026
Hooking up texture atlases!! This WIP screenshot makes me smile :)
A screenshot of my lock screen, with my live wallpaper rendering the full texture atlas for each texture.
120
Bret Hudson @brethudson.com · 30/04/2026
...and then you come across things like this, where you understand what it does, but have no idea how this was the solution you came to... or why one of the case groups returns a value directly
A cursed "getWallpaperBasedOnTime" that uses a switch statement to return an index based off of 8-hour intervals
000
Bret Hudson @brethudson.com · 30/04/2026
I moved the vertex & fragment shaders out of Java strings, and into their own files. To ensure the app was using the new files, I edited the shader without thinking twice about it Ten years ago... I barely understood GLSL
A fragment shader hard-coded into a string in Java.
110
Bret Hudson @brethudson.com · 29/04/2026
Here we are! A checklist of extensions So far: - extensions are provided via the user in settings.json - installed extensions are checked on load - extension names are cached in globalState
A preview of my "Extensions Manager" extension for VSCode. It shows two items, Prettier and ESLint, with the first highlighted and checked.
100
Bret Hudson @brethudson.com · 25/04/2026
Fear me
git logs, focusing on `git push origin -f`, a command that force pushes changes, overriding any remote data
130
Bret Hudson @brethudson.com · 17/04/2026
post the best picture you have ever taken of your pet (if you feel like it):
Cute black cat with white socks hugging my hand as we cuddle in some blankets
121
Bret Hudson @brethudson.com · 08/04/2026
Hot tip for git users! Wanna add files (todo lists, notes, images, etc) to your project but don't want to commit them to your repo? 1) create a new folder (I call it `.ignore`) 2) create a global .gitignore with ".ignore" as its content (guide for global .gitignore: stackoverflow.com/a/7335487)
A screenshot of my .ignore folder in VSCode, with all its contents ignored by git
110
Bret Hudson @brethudson.com · 20/03/2026
Before/after making some changes on my mom's bakery's website - border-radius (rounded corners) weren't a thing in 2014 when I first made this site A much needed facelift :)
Screenshot from 2019 showing what the gallery page looked like since 2014. All elements have sharp corners.Screenshot from 2026 showing what the gallery page looks like with rounded corners added. Everything looks softer and more modern.
111
Bret Hudson @brethudson.com · 18/12/2025
I ended up finding AutoSubs, which exists as both a stand-alone editor and a DaVinci Resolve plugin. Thanks for sending me down the right path! github.com/tmoroney/aut...
A table showing 7 lines of subtitles, along with their offsets from the beginning of the audio.
010
Bret Hudson @brethudson.com · 17/12/2025
Throwback to when I was 13 and obsessed with @maddymakesgames.com's An Untitled Story and wanted to make my own
A map of a Metroidvania I was imagining
240
Bret Hudson @brethudson.com · 14/12/2025
Foiled again by text rendering!! There's a lot of fonts out there that don't handle outline strokes well at large values (or in this case, even a width of 10)
A close-up of the edge of some white text on a yellow background, utilizing a dark blue outline to provide contrast. The bottom of the round corner has a rendering artifact jetting out.
010
Bret Hudson @brethudson.com · 27/11/2025
Fun game! I made it to 31 😄
Pac Pac title screen with a high score of 31
000
Bret Hudson @brethudson.com · 16/11/2025
There's a new VSCode update that adds a tab titled "Agent Sessions" at the very top of the sidebar, focused by default I found out you can disable ALL AI-related features by toggling "chat.disableAllFeatures" Source: code.visualstudio.com/docs/copilot...
The new "Agent Sessions" tab in VSCode
1198
Bret Hudson @brethudson.com · 14/11/2025
Sent my device out this past weekend (took me a while to buy a shipping box) and am now restoring my backup image with the refurbished laptop 🥰
Two USB-C items plugged into the side of my silver laptop
000
Bret Hudson @brethudson.com · 21/10/2025
Backing up C:\Projects and C:\xampp\apps separately so I can access them on my other laptop while this one is in repair
WinRAR progress window
100
Bret Hudson @brethudson.com · 21/10/2025
Before backing up my hard drive, I wanted to delete all the node_modules files I simply ran `npx npkill` in my root projects directory and it found every nested folder 14.5 GB recovered 🥰
A screenshot of npkill running in my terminal. It shows a list of all the node_modules I can delete
141
Bret Hudson @brethudson.com · 11/10/2025
Okay, this is more of what I was expecting; my search was also capturing every generated .js file
A search result for "TODO" on only .ts files in my codebase, with 159 results in 42 files
000
Bret Hudson @brethudson.com · 11/10/2025
I wonder how many TODOs I have lying around...
A search result for "TODO" across my codebase, with 447 results in 118 files
130
Bret Hudson @brethudson.com · 06/10/2025
Was kind of quiet yesterday, but here's a new screenshot featuring some of the textures I've added, as well as two robovacs cornering the player
100
Bret Hudson @brethudson.com · 05/10/2025
This afternoon has devolved into a good amount of refactoring & adding attributes to guns. Projectiles now spawn from the edge of the barrel (the black dot) rather than the player's position
100
Bret Hudson @brethudson.com · 05/10/2025
Y'all like throwing rocks at mouse traps? No? Me neither. They're pretty slow
100
Bret Hudson @brethudson.com · 04/10/2025
A game idea is starting to come together! (well, beyond "I want to make a roguelite")
A cyan mouse is situated between four mousetraps, each in a diagonal direction
100
Bret Hudson @brethudson.com · 04/10/2025
It's lunchtime and I haven't posted an update today. Oops! Here's what's new: - HUD - Invincibility powerup - Enemy drops - Gun stats (bullets have a spread radius) - A bug fix in my game engine when you accidentally remove an entity twice 🤦 After lunch I'm going to continue my work on the shotgun
110
Bret Hudson @brethudson.com · 04/10/2025
Room bounds & walls! I also got some sound effects hooked up, as well as flashing characters white when they've been hit. I think that's it for today, time to sleep!!
100
Bret Hudson @brethudson.com · 04/10/2025
We have items to pick up! The blue one is a speed-up powerup and the red one replenishes health. Rudimentary camera following has also been added
100
Bret Hudson @brethudson.com · 04/10/2025
Weapon/bullet types added, gonna take a break for dinner Happy with the progress so far 😄
100