radfordhound
banner
radfordhound.bsky.social
radfordhound
@radfordhound.bsky.social
He/Him. I'm a programmer, modder, weeb, dead YouTuber, and insane Sonic fan.
I got to go to SONIC MUSIC EXPERIENCE today in Osaka !!!

It was amazing finally being able to watch both Tomoya Ohtani and Jun Senoue perform live! Those two are childhood heroes of mine! #SonicMusicEXP
November 9, 2025 at 1:27 PM
I knew it! Anime is real!!!
November 2, 2025 at 1:44 AM
someone sent this to me 💀
October 20, 2025 at 12:45 AM
The way I plan for it to work currently is that the Gens 2024 mod loader will allow mods to have both 2011 files and 2024 files.

Anything under the "generations" subfolder will be treated as a 2024 file, and everything outside of it will be treated as a 2011 file.
August 6, 2025 at 7:27 AM
They took the tube out

It's over
June 11, 2025 at 2:46 PM
Ah yes, a truly functional app
May 24, 2025 at 2:22 PM
$201.17 in tariffs on a $110 purchase 😬

who's that guy out there financing his second loan so he can afford merch from his oshi?
May 2, 2025 at 11:37 PM
my score btw

It took me a bit to figure out what I was doing lol

sonicracingcrosswords.com
April 1, 2025 at 7:22 PM
I'm going to achieve **insert life goal here** before Coco 2 comes out
March 21, 2025 at 8:09 PM
NO WAY !??

THEY GOT HIM ON STEAM ?????
March 9, 2025 at 8:25 PM
Also something super fun is that some (usually older) mods, such as Unleashed Project, use cpk redirection to redirect streaming audio to loose aax files.

So this will have to be accounted for, too.

Much fun!

I think I'm going to do what skyth does for slw awb redirection to make these work.
February 28, 2025 at 11:42 PM
ramblings of a madman
February 28, 2025 at 11:33 PM
For some reason, some of the .csb files in Gens 2011 have multiple synths of the same name, which are exact duplicates??

This seems to be a mistake? Weird that their tooling allowed it!

Anyway, it was crashing my csb -> acb conversion code lmao, adding in a check to account for this now.
February 9, 2025 at 12:20 AM
when you accidentally free the wrong pointer
February 2, 2025 at 12:28 AM
They got a lot of backlash for it, so they wrote this article to try to damage control: irdeto.com/blog/denuvo-...

The tl;dr is "We're not trying to kill mods!! Our anti-mod feature is *optional*! Devs don't *HAVE* to use it!"

(But yes, we are developing and trying to sell an anti-mod feature)
February 1, 2025 at 12:14 AM
Yes, it sucks!

They're calling it "Integrity Protection", and spinning it as a security feature.

But it prevents people from modifying game code - it prevents modding.

We need to modify game code to even have a mod loader!

So if Sega ever uses this, we're screwed...

irdeto.com/news/denuvo-...
February 1, 2025 at 12:09 AM
January 31, 2025 at 4:34 AM
January 30, 2025 at 1:17 AM
You can tell which mods are code mods by simply checking if they have any .dll files - any that do are code mods. The rest are not code mods.

(Perhaps it'd make more sense for us to call them "DLL mods" instead, actually?)

I mentioned some examples in an old thread on Twitter:
January 25, 2025 at 3:09 AM
I also started on the GUI CSB editor I talked about as well (ACB will come later)

Though don't expect fast progress on this, because I'm really busy these days, and I want to finish the Gens 2024 stuff first. =)

I envision a DAW-like editor with a timeline you can drag audio clips onto.
January 7, 2025 at 10:50 AM
insane ramblings of a reverse-engineer
December 12, 2024 at 3:36 AM
everything looks pretty normal
November 25, 2024 at 5:08 PM
For comparison, this is what the same code looks like in a debug mode build made with GCC (much better):

Ah yes, a bswap.
November 21, 2024 at 10:44 PM
If it's running in a compile-time context, they just do the endian-swap manually.

Otherwise, if it's running in a run-time context, they do the endian-swap via the intrinsic.

This means in release mode builds you get a bswap, but in debug mode builds, you get ABSOLUTELY HORRIBLE assembly:
November 21, 2024 at 10:31 PM
On x86 there's a "bswap" instruction that just reverses the bytes in a register.

All good compilers have an intrinsic to use this instruction.

MSVC's intrinsic (_byteswap_ulong) is different in that it's not marked constexpr. :(

std::byteswap is constexpr though.

So this is how they implement it
November 21, 2024 at 10:31 PM