Sign in

Seph De Busser

@sephdebusser.bsky.social
176 followers 165 following 523 posts

Anodyne Remaster, PokéPark Wii decomp, general nerd shit

PostsRepliesMedia
Seph De Busser @sephdebusser.bsky.social · 08/10/2026
With me it's the swivel that lost its grip. Creative use of a zip tie to the rescue 😅
Picture of a purse string being held in place with a zip tie
110
Seph De Busser @sephdebusser.bsky.social · 04/10/2026
What I've basically been saying this whole time. Turns out some people figured that out over 40 years ago. I program to formalize my understanding of the problem I'm trying to solve, not to get something out the door as quickly as possible.
Slide from the talk with a quote by P. Naur(1984): "the proper, primary aim of programming is, not to produce programs, but to have the programmer build theories of the manner in which the problem at hand are solved by program execution"
020
Seph De Busser @sephdebusser.bsky.social · 23/09/2026
Male-as-default 😅
Translate of "Verpleegkundige Hanssen? Die heb ik gisteren gezien." to English yields "Nurse Hanssen? I saw her yesterday."
110
Seph De Busser @sephdebusser.bsky.social · 06/09/2026
In short: bad hank McCoy developed a virus that forcefully triggers the X gene, or kills if it can't. This panel at the end of the prologue X-Men issue makes me think the writers do have smth to say with this 😅 Time will tell how it's actually handled though
Cyclops saying "I saw a future where the X-Virus was loosed. I fought my way across a mutant nation built on the bones of the murdered. It makes no difference to me if it's 3K this time rather than Revelation: We are *not* humans. We will *not* gain our homeland at the cost of genocide. "
000
Seph De Busser @sephdebusser.bsky.social · 23/08/2026
Or, hear me out, a giant balloon float!
Screenshot of the start of Rayquaza's Balloon Panic attraction in Pokepark, showing off a giant Rayquaza balloon floating in the sky.
010
Seph De Busser @sephdebusser.bsky.social · 24/07/2026
Here's a sneak preview of the minimal repro: dynamic_cast<Derived*>(Base2*) fails when it shouldn't if Concrete is the concrete type. Downcasting to Derived* from Base1* does work as expected.
Inheritance diagram showing the following hierarchy starting at the concrete class: concrete derives from two classes, called Derived and C respectively. Derived has two bases itself, called Base1 and Base2, while C also inherits from Derived(causing a second copy of that subtree to show up again as well)
020
Seph De Busser @sephdebusser.bsky.social · 19/07/2026
We have this hanging on the wall above our desk. Helpful reminder once in a while
(intentionally) shitty yellow star with off-center text saying "at least its not ai"
060
Seph De Busser @sephdebusser.bsky.social · 08/05/2026
Can someone who's mutals with him quote post this as an answer to @nikpayuk.bsky.social's latest post? (or hopefully he sees it bc of this). The reason west->east flights are faster than east->west is because of the jet stream. Rotation of the earth is too slow on that timescale to matter.
Diagram showing the four main jet streams flowing west->east on the earth.
110
Seph De Busser @sephdebusser.bsky.social · 04/01/2026
Why am I in this 😂
Paragraph of the blog reading: Nor am I alone in this: there's a striking prevalence of trans women who cope in similar ways. We set up self-hosted Gitea servers, we build our own websites and blogs from scratch with a wide variety of different tools, we do strange things with Raspberry Pis and some of us even leak no-fly lists. While this is economically beneficial to an extent, the attachment of trans women to tech seems to go beyond that: we have a moral attachment to the field even when it doesn't reward us externally.
120
Seph De Busser @sephdebusser.bsky.social · 02/11/2025
Description of the Ninja item in Luck Be A Landlord. It's an uncommon item, with base payout 2, but gives 1 less for every other Ninja
121
Seph De Busser @sephdebusser.bsky.social · 18/08/2025
And with that, the decompilation of pokepark wii has officially started 😀 Found the math lib source that matched extremely neatly(only had to patch one function), adding another 16kB of matched code bytes pushing me over the 0.5% treshold. decomp.dev/SephDB/pokep...
Screenshot of decomp.me showing pokepark wii: pikachu's adventure as one of the listed decompilation projects
293
Seph De Busser @sephdebusser.bsky.social · 02/08/2025
those rules at page 106 and ahead just say "or otherwise violate the Standards". "Standards" is defined in the definition section, page 206 as basically anything written by the Corporation(see screenshot), so it includes the NDA'd documents they mention later in the thread.
Standards

The organizational documents, operating rules, regulations, policies, and procedures of the
Corporation, including but not limited to any manuals, guides, announcements or bulletins, as
may be amended from time to time.
110
Seph De Busser @sephdebusser.bsky.social · 31/07/2025
cdn.marvel.com/u/prod/marve...
Cover of the first issue of Marvel's Capwolf and the Howling Commandos, featuring a werewolf captain america standing over a flaming nazi tank
120
Seph De Busser @sephdebusser.bsky.social · 30/06/2025
I was encountering the first pattern a lot in ghidra's decompilation output for pokepark's scripting language, but then I tried to see if simplifying the implementation of the jump instruction used would help, and it gave me the second output. Which is more unreadable, you think? 😂
  if (iVar3 == 3) {
    if (iVar2 == 1) {
      bVar1 = true;
    }
    else {
      bVar1 = false;
    }
  }
  else {
    bVar1 = false;
  }
  if (bVar1) {  bVar1 = iVar3 == 3;
  if ((bVar1) && (bVar1 = iVar2 == 1, bVar1)) {
    bVar1 = true;
  }
  if (bVar1) {
140
Seph De Busser @sephdebusser.bsky.social · 28/06/2025
Turns out that giving ghidra correct stack information is important 😅 (I finally found out how to do so for this bytecode processor that does some weird shit) A loop with a call to another function inside it made analysis go haywire until it knows the calling convention of popping args off the stack
Ghidra's decompilation view showing a near unreadable mess of pointer operations to the stack in a loop. The same window but now all cleaned up, a for loop got detected, and there are no more pointer operations left.
151
Seph De Busser @sephdebusser.bsky.social · 07/05/2025
So, err, about that yak shave of a decompilation project😂 Five layers deep at this point ^^ I'm having fun though.
Screenshot of a local compiler explorer instance using MWCC, the wii and gamecube's compiler to compile a simple c++ snippet.
031
Seph De Busser @sephdebusser.bsky.social · 03/05/2025
so struct A { int a; } struct B : virtual A {int b;} struct C : virtual A {int c;} struct D : B,C {int d;} Looks like this in memory:
Table showing the memory layout of D type described in the post. It starts with a subobject of B having two members, a vbase pointer(which it shares with the overall object D) and the b member. Then follows the C subobject with another vbase pointer and its own c member. Then D's d member, followed by an object of type A with its own a member. Both vbase pointers point to the A object.
000
Seph De Busser @sephdebusser.bsky.social · 27/04/2025
Decided to take a detour and write some scripting for ghidra to automatically recover class hierarchies based on available RTTI information. Here's the player class(the DelegateObserver inheritance is non-virtual, btw). Next up: figuring out ghidra's analysis API so I can automate all of it.
Class hierarchy diagram of the class called nsObject::Player. It inherits from a bunch of subclasses of nsDelegate::DelegateObserver, as well as nsObject::Object, which itself inherits from nsUtility::Nullable
110
Seph De Busser @sephdebusser.bsky.social · 20/04/2025
Making some progress on this again, been busy reverse engineering the types involved engine-side. Just got all 14 main "managers" given their vtables and such! The ones that most likely require a deep-dive are GlobalManager, EventManager and EventScriptInterface.
Screenshot of ghidra's namespace view, showing a bunch of manager classes defined, like BokehManager, EffectManager, GlobalManager, EventManager, etc.
120
Seph De Busser @sephdebusser.bsky.social · 24/03/2025
Working on archipelago(randomizer) integration for Anodyne. Just finished getting co-op synchronization working for quite a few in-game events.
050
Seph De Busser @sephdebusser.bsky.social · 03/02/2025
And with that, a milestone has been reached! I have enough instructions defined to disassemble a simple function. This one is called OPEN, so it probably opens the gate somehow. Need to figure out what all these syscall 0x15 do later ^^'
disassembly view of a function that reserves two spots on the stack, then calls syscall 0x15 5 times with varying arguments.
111
Seph De Busser @sephdebusser.bsky.social · 28/01/2025
And that's the first successfully disassembled instruction! Biggest stumbling block was figuring out bit ordering for the different fields in SLEIGH ^^' Modelling these syscalls in PCode is going to be a challenge not to make them all black box external calls though.
Screenshot showing a disassembled syscall opcode with all arguments decoded.
110
Seph De Busser @sephdebusser.bsky.social · 24/01/2025
And that's an initial loader for the format written(just the header right now, but a bunch of legwork done)! I will eventually get there, Ghidra docs are few and far between though ^^' Pokepark's scripts _will_ get broken open eventually.
Screenshot of ghidra's listing view, showing the first 32 bytes of the script being successfully parsed by the new loader, with pointers to the different file sections and the script name decoded, along with two unused fields.
121
Seph De Busser @sephdebusser.bsky.social · 21/01/2025
Pokepark(Wii) reverse engineering, turns out the game's scripts have their symbol tables encoded in a base 40 string(6 characters for each 4 bytes of data). After some wrangling with Ghidra's API, I now successfully have a custom data type that visualizes the strings correctly!
Table of data shown in Ghidra's disassembly view, with multiple blocks of a successfully decoded string followed by a number
194
Seph De Busser @sephdebusser.bsky.social · 23/11/2024
Pretty happy with how neat this bit of bingo checking code turned out. Web client for the bingo AP world. #screenshotsaturday #gamedev
Code for checking bingo when a new square gets added to the board. Heavily simplifies the actual checks through some helper functions in a functional way.
082