I think the next 10 years or so are going to see a chucklefuck of games reversed thanks to LLMs, which can easily pattern match and operate on contrivedely optimized assembly and output reasonably accurate C/C++ code. I’m one of many right now using Ghidra + LLM workflow. It’s doing the thing it needs to and I’ve helped several communities revive and port their games this way. It is a huge time saver. While I’d personally prefer an actual source code leak, a working reverse job is good enough, even if it’s partial as long as it’s accurate.
I wonder if we’ll get to a situation where a new game is reversed in the first few months by a team effort. Right now it’s mostly solo devs, but a technical team that’s capable without LLMs is unstoppable with them, and given the nature of modding communities, the only thing they are missing is an LLM to grind away at the details of the game that would otherwise take years to find out.
jsiepkes 9 hours ago [-]
If you think this port is related to tour point; The source code for Command and Conquer generals (and other C&C games) was released a while back. This port uses that source code. So this port is not based on reverse engineering. The port even states someone else (manually) already did the hard work of porting it to macOS and Linux (so not an LLM):
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes
port11 9 hours ago [-]
Then the title is incorrect. Generals has been on the macOS App Store for years.
embedding-shape 9 hours ago [-]
> Then the title is incorrect. Generals has been on the macOS App Store for years.
Neither the HN submission or GitHub repository says it's first or novel though? Just that it's (another) port of it?
flohofwoe 5 hours ago [-]
The HN title makes it sound like Fable did the port from the original code base to macOS and iOS, but this is very wrong (the project's readme does a much better job). It's merely enhanching an existing macOS version to also run on iOS, which tbh is very trivial and not at all impressive for any LLM.
The actually important work (of making the original code release portable and then create Linux and macOS ports) had already been done in https://github.com/fbraz3/GeneralsX. There is really not much to see here.
embedding-shape 5 hours ago [-]
> > It's merely enhanching an existing macOS version to also run on iOS, which tbh is very trivial and not at all impressive for any LLM.
It's so crazy to remember sitting in front of W3Schools after school trying to learn PHP to create a website, and hear people today saying it isn't very impressive a fucking machine can automatically translate/port code from one platform to another, even a machine doing that with PHP3 > PHP4 code back then would have been cool but nope, "not at all impressive" just because things improved so much, so quickly, everyone got quickly used to the status quo.
I agree with you in general though, the title does make it sound like more was done than what was done in actuality, as it was just a iOS port. Still, I'd wager it seems interesting enough, given it's on the front page right now.
flohofwoe 5 hours ago [-]
> Still, I'd wager it seems interesting enough, given it's on the front page right now.
It's a good example of AI psychosis I guess, people reading things into a headline which they want to be true, no matter what reality says ;)
When you look at the commit history, the actual changes come down to a few dozen lines of code, all of them absolutely trivial, and most of those code changes seem to be cherry-picked bugfixes from the original project.
embedding-shape 5 hours ago [-]
> It's a good example of AI psychosis at work ;)
More like "wisdom of the crowds" (for better or worse) unless you're trying to argue that everyone who upvotes/downvotes on HN suffers from AI psychosis ;)
sarchertech 4 hours ago [-]
> everyone who upvotes/downvotes
You can’t downvote articles,
so a relatively small amount of enthusiastic people slamming upvote will do it.
I added several quality-of-life features / UX improvements to a very old game, “Deadlock: Planetary Conquest”[0]
I had no idea how to do any of this. I let GPT-5.5 download Ghidra + MCP connectors, start the project, and do all the work. I gave it my vision and gave it iterative user testing feedback.
10 years is far too pessimistic for this being a routine task, I think 2 years max. As you mentioned, you can already do this today by just giving GPT 5.5/Opus 4.8 an IDA/Ghidra tooling (a CLI or MCP, I have a custom CLI for it). You can start with the LLM going from the string anchors and renaming functions/globals, then when you have enough functions, the LLM can start working on typing - IDA has a very powerful typing API for HexRays-decompiled code, you can even type locals and it all persists in a DB.
My custom IDA CLI is just a simple thing on top of IDA Python's integration + ida-domain + some higher-level helpers, and works as a daemon with workers, so a stale/bad request doesn't corrupt an IDA DB (an issue I had when I was using idasql).
A bit offtopic, but: do you have any links to your efforts? I'm curious to see what other people do in this area.
swiftcoder 10 hours ago [-]
Have you published your IDA CLI anywhere? I'd be interested to see what that looks like
Tiberium 10 hours ago [-]
Not yet, unfortunately, but I might in the future. To be honest, it's nothing unique. I got inspired by https://github.com/allthingsida/idasql which I initially used, but it had a lot of bugs, a big codebase size, and IDA's C++ API is really easy to misuse and corrupt a DB, so I had GPT 5.4/5.5 make a new one for itself based on IDA's Python SDK, which is official and doesn't need weird SQL hacks.
Then recently I found https://github.com/bkerler/ida_rpc which seems to be ~60% the same thing as the one I have, the only big difference is that I do not give any special commands to LLMs, they just have to write Python in scripts/inline heredocs to interact with IDA. This lets them do a lot more interesting things since they get a full programming language.
This is an example of how LLMs work with idagent (`ida` is implicitly imported, ida.types, ida.comments is helper's own wrappers): https://paste.debian.net/hidden/cf46a122
More interesting example that was used to let the LLM/me track the rename progress for the initial function renames + gaps (code-looking like bytes that weren't inside of functions, IDA's autoanalysis missed some real functions). Although the game turned out to be small enough with only ~1500 real game functions that needed renames, which was done in ~10 hours of agent time total I think (I didn't parallelize with multiple agents).
https://paste.debian.net/hidden/bf458b3a
To be honest, you can probably have an agent vibecode a similar MVP tool to the one I have in about an hour-two :)
PaulRobinson 7 hours ago [-]
The mild alarm for me is that this won't be limited to just games.
I've spent almost 30 years building applications for the web. I've been switching my attention to different models of distribution in part because I see a desire for people to not be paying monthly seat subscriptions, but also because it can simplify my own operations - I want to move to a solo indie dev model, and giving you an executable you run means you look after "operations", and I don't. Desktop applications in particular have the potential for you to integrate them with your agent workflows.
But if I put effort into building some secret sauce into an application, and there is then a risk that by distributing it, it gets reverse engineered and then rebuilt by competitors, malicious actors, whoever, there is now the same economic risk to software distribution as there is to DRM-free media distribution. As a result, I might just not do it.
Now, some people will argue software wants to be free - build on the F/LOSS economic model, this becomes less of an issue - but there isn't really a viable F/LOSS economic model for most developers.
Per seat monthly subscriptions with remote access seems like the way we need to be, then...
tyingq 7 hours ago [-]
One area I think is really going to get slaughtered by LLMs are marketplace plugins. Those monthly fee plugins people release for things like Jira, Shopify, Salesforce, etc. There's a subset of those that don't have some backend that's hard to replicate, and asking an LLM to reverse engineer and make your own plugin is trivial.
RussianCow 9 minutes ago [-]
> asking an LLM to reverse engineer and make your own plugin is trivial.
If you already have engineers on staff, a few tens (or even hundreds) of dollars per month per plugin is likely a rounding error budget-wise. If you don't have your own engineers, you're probably not going to be able to produce something as good (reliable, well thought out, etc) as a commercial offering.
I had the same gut reaction as you, but the reality is much more subtle. We work with several clients who are bought into at least one of these ecosystems, and there's no way the math ever works out in favor of building an in-house solution.
xpct 5 hours ago [-]
I can see it both ways. Paying 5 bucks for an add-on that's reputable and not having to think about it again may be preferable to shipping your own. It's not evident to me that one-shot-esque LLM programs will ever work as expected, since they're limited by the amount you have to specify, and then maintain as new issues arise. It's the type of work that a lot of people will be unwilling to put in.
That said, I also think that public reviews will start getting recalibrated by the users themselves. People will start noticing that programs are unreliable or lack features which are seemingly simple to implement with an LLM. The quality of an app may very well depend on how hard it is to replicate, otherwise, why not ship your own?
MetaWhirledPeas 2 hours ago [-]
The games industry will push us even harder toward streaming everything.
dalleh 11 hours ago [-]
Would you please explain more your Ghidra+LLM workflow? What you are doing and how does the LLM help you? Thanks!
tonyarkles 11 hours ago [-]
Not the person you asked but I frequently use Claude (Opus primarily) to reverse engineer embedded hardware. It uses a mix of Ghidra, Radare2, and just the arm-none-* tools. I can’t say I have a particular workflow though, I just say “we’re reverse engineering foo.bin. It’s the firmware for a servomotor. We talk to the servo over RS485 and it seems that if I send it command X it will sometimes silently reject the command. Can you dig into the data reception and command parsing layers to see if there’s an explanation. Let’s keep notes in @20260704-reverse-engineer-foo-motor.qmd”
It works great just like that.
bornfreddy 7 hours ago [-]
> Let’s keep notes in @20260704-reverse-engineer-foo-motor.qmd
Curious - why like this? I usually tell it to write down the analysis once all is clear, so I'm wondering if your approach is better.
tonyarkles 4 hours ago [-]
Often it ends up being multi-session for this particular kind of work. We’ll get to a point where I have to go actually test some stuff out with hardware to provide some answers back, or in the case of this servo in particular… I end up having different questions a few days later.
These notes files do end up being more of a “how we got here” messy journal and less of a real report but they’re full of useful breadcrumbs that make it quick to pick things back up in a fresh context. Having it write a summary report on a topic based on the raw notes works out pretty good.
Another useful thing with these (not RE) is that sometimes I end up starting to debug a problem and I (or Claude) realize that it might be related to a different problem and being able to then cross-reference between the two raw notes files while pulling that thread seems to work well.
Whether or not it’s the “right” approach, I overall tend to treat sessions/context as ephemeral and need some kind of more solid WIP artifact. I do work in an industry that tends to trigger safeguards (unmanned/autonomous agricultural aviation) as well, and have occasionally gotten Claude to a point where I can’t get a session to continue but Codex will pick it up and finish.
gf263 12 hours ago [-]
I hope we get Skyblivion soon
tangenter 12 hours ago [-]
Completely unrelated but I find it amusing in a good way that Oblivion is recognized more favorably now. I never understood the disregard for it (horse armor nonsense aside), as it has a very compelling, unique atmosphere and a not so terrible storyline/writing.
wqaatwt 9 hours ago [-]
All Bethesda’s game generally suck without mods to a bigger or lesser extent. So it takes a while for a community of enthusiasts to appear but something like Oblivion or Skyrim were a much better experience 5-10 years after release than initially.
Of course then you have Starfield which is so unimaginable uninspiring that nothing can really be done to save it..
Auracle 10 hours ago [-]
To me, the level scaling just completely annihilates the game. Why even have a leveling system if practically everything just stays leveled with you?
somenameforme 10 hours ago [-]
Exactly what I was going to say. Oblivion was the first Elder Scrolls game that had level scaling. It's just extremely lazy design that ruins any sense of progress/immersion. In Oblivion/Skyrim there are plenty of mods that remove the scaling, and end up with worlds that are vastly more interesting and immersive. I highly recommend Requiem.
danielbln 9 hours ago [-]
I hate hate hate level scaling. I believe they also introduced it to WoW, which ruins the power fantasy of going back to a lower level area and kicking butt, or the fear of venturing in a higher level area and hauling ass out of there. I agree, lazy game design.
prerok 3 hours ago [-]
I agree, I don't like it either. But... how would they then implement a world where you can wander everywhere? What it brings to the table is that you can wander across the world and not become terribly outmatched as soon as you wander "too soon" to an area.
My gaming preference is to go to an area as per game design, so the fact that I would be outmatched does not bother me and would prefer it that way. I do, however, understand why the game designers chose level scaling for what they wanted to achieve.
klibertp 1 minutes ago [-]
As you note, being constrained in where you can go at level 1 is not a bad thing in itself, but it is a trade-off. Yes, as much as I personally don't mind it, I see how some players/designers might find such a limitation unfit for their game or not working for their playstyle.
You can still work around this without resorting to level scaling. You can give players an exploration option that avoids fighting, but sacrifices something else (ie., you can explore as a ghost, but can't take any loot with you). You can give low-level players some kind of newbie buff that will keep them alive (but won't allow them to win). You could make the perception of the world level dependent. You could also just scale locations or regions once, so that if a player reaches it at a low level, it'll become easier, and if you get there at a high level, it'll become the de facto endgame area. You could also just not implement leveling at all: The Bard's Tale (remake) was a bit like this.
Leveling up is not fun if it doesn't have an impact on how your character interacts with the world. If you're going to use level scaling to make leveling a no-op, it's often better to just go the action-adventure route and not pretend the game is an RPG. Seriously: what's the point of pumping my Strength stat if Villager A always has enough vitality to offset any gains on my part? It's especially grating if it's the same village and the same villager, revisited 40 hours later, and it still takes 3/4 of your health in a hit.
I don't think naive level scaling (Oblivion/Skyrim-style) is the right solution for "let the player go anywhere they want from the start". It's certainly a solution, but not a good one. A more nuanced mix of story justification, natural movement limitations (distance, special skills needed to get somewhere), level/area design (make areas with harder enemies less likely to be visited first), some non-combat exploration options, etc. all seem like a better way of letting the player experience open-world freedom without taking away the RPG progression "from zero to hero" from them.
I played a lot of Might and Magic VII back in the day (a few years before Morrowind IIRC). It was a huge world and you could go anywhere after getting off the tutorial island. Some endgame areas were gated behind lengthy quests, some areas were inaccessible without reaching them "the hard way" for the first time, others were impossible to reach without special skills or items, and there were skills/spells (invisibility, fly) that allowed safe passage through high-level areas if needed. Taken as a whole, it gave you a lot of options in terms of where to go at any given time, protected you to some extent from getting insta-killed because you made a wrong turn, but didn't make exploration trivial or level progression pointless. When you give players freedom, you should also allow them to commit suicide by charging at a horde of dragons while underleveled and underprepared. Trying to make the whole world immediately accessible is the kind of handholding that is actually limiting in the long run, and takes away an important part of the RPG experience. I don't think there are many CRPGs outside of TES that use level scaling - personally, I only experienced one in Wizardry 8, and it was way less absurd than Oblivion (areas had level ranges - you won't get an endgame area mob to be level 1 if you happen to reach it at that level yourself, and Villager A in starting area won't ever get to level 20 if you revisit it later).
So, between some limited/partial scaling and all the other design choices you could make, using Oblivion-like level scaling to "make the world accessible" is just bad, lazy design to me.
klibertp 4 hours ago [-]
I hate level scaling in games with passion. An argument in favor I heard is that it's supposed to make it easier for the player to go anywhere from the start. Maybe, but coming from classic CRPGs and some TRPG background, I just can't bring myself to understand that impulse: you see a world-ending dragon god destroying a castle, and you think it's a good idea to chase it to its lair... at level 1?? With a plank in hand and with a shirt as your armor??? It's absurd!
Then there's the "level up by doing" mechanic, which is a mixed bag. It can be done well, but in Oblivion, it only resulted in putting a book on the spacebar. Voila, my character literally jumps around and looks utterly idiotic, but Acrobatics levels rise.
Being unable to just go fight a dragon at level 1, and then progressing to routinely curbstomping dragons (Baldur's Gate 2 - solo Sorcerer run is my favorite example: "I see, you're resistant to magic. Let me introduce you to the Magic Sequencer with Lower Resistance x4. Time stop. Horrid wilting. Wish rest. Oh, I didn't need to, you're dead already.") by the end. It's not the only selling point of RPGs, and it can sometimes be omitted entirely (e.g., Disco Elysium). But if there is a classic leveling system, I expect it to work, from zero to hero. It's not as fun if the numbers going up don't translate into real changes in how your character interacts with the world.
brendoelfrendo 11 hours ago [-]
I think Oblivion's reception was mostly in relation to how people felt about Morrowind. Oblivion simplified a lot of what Morrowind did, which drew some ire. Atmospherically, though, people weren't happy that they moved from Morrowind's much more unique fantasy setting, full of massive fungi and swamp-striding bugs and weird demigods, and moved to a much more generic looking medieval countryside. That said, I also appreciate the game's reassessment, because I think some of the factions quest lines are among the best in the series.
fullstackwife 11 hours ago [-]
Your take is very interesting, but please do not forget that pirating games is a crime.
swiftcoder 10 hours ago [-]
Reverse engineering and pirating are not the same thing (although the former may certainly be used as a means to achieve the latter). As long as you aren't distributing the game, distributing code that legitimate owners of the game can use to run their game on more platforms is not a crime.
Quothling 9 hours ago [-]
In systems engineering this was proven in court when you have one engineer writing specs and another implementing the "samish" system from those specs, but I'm not sure that would relate to any of the art assets made by the original authors of a game. I'd imagine any art, narrative writing or sound would still be considered IP, and without those things you don't have much of a game.
I suspect it won't stop people, and that it won't be much of an issue in a lot of cases. I wouldn't want to be the one to test it in any sort of court though. Not even on the other side of things, where it'll become even more of a nightmare to protect your indie IP on any form of platform which doesn't heavily regulate things.
charcircuit 7 hours ago [-]
>distributing code
The code is also copyrighted and owning a license for a game does not make you safe from being sued for pirating that game or its code. It's fine in this case only because the engine was open sourced.
Fnoord 5 hours ago [-]
> The code is also copyrighted and owning a license for a game does not make you safe from being sued for pirating that game or its code. It's fine in this case only because the engine was open sourced.
Nothing makes you safe from getting sued.
See also: [1]. You could also reverse engineer in a solid jurisdiction.
I ran C&C Generals in Wine on Linux back in the days. More stable than Windows XP.
You may run afoul of DCMA rules around circumventing copy protection measures, and you are most likely going to be violating the EULA on any recent games. But you aren't necessarily violating any copyrights - several high-profile cases in the US have been fought about this, such as Sony vs Connectix, and its generally fallen on the side of reverse-engineering for interoperability being within the bounds of fair use
(as always, IANAL)
charcircuit 6 hours ago [-]
Computer Associates International, Inc. v. Altai, Inc. establishes the Abstraction-Filtration-Comparison test for determining if a program is infringing on another program. Reverse engineered code of a nontrivial portion of the original program will have substantial similarity to the original program and will fail this test.
Interoperability falls under what gets filtered out in the filtration step of the test.
onion2k 10 hours ago [-]
I don't think the "it's piracy to use the code generated by an LLM because it closely resembles the code the LLM was trained on" argument has been fought in court yet.
wqaatwt 9 hours ago [-]
Depends on the jurisdiction? However usually it is a civil matter not an actual crime..
huflungdung 11 hours ago [-]
[dead]
Eufrat 20 hours ago [-]
IMHO, this is an actual good use of what sounds like a person guiding a model to do a mass conversion. Although, I wish the porting docs were a little wordsmithed by a human, the AI generated text style is grating.
The stakes are low, it’s mostly for fun and you can iterate on it. Compare this with Bun which was just like, “hey we converted everything to Bun to Rust from Zig, of course it works, what could possibly go wrong, I’ll totally write up a blogpost (that still doesn’t exist) explaining what we did, you can put this into your production environment soon!”
johnfn 20 hours ago [-]
I don't really get the Bun thing. Bun is running Claude Code which is probably the single most actively used development app there is. You say this was a bad use of LLMs, but it's been in production for a while and I haven't heard of any evidence that Claude Code has increased a significantly larger quantity of errors, segfaults, etc, than before.
Eufrat 20 hours ago [-]
Some people, myself included, think that announcing a conversion from Rust to Zig as an experiment then jumping to putting it in the alpha train for public testing/consumption without any real explanation in the span of around 2 weeks is irresponsible and reckless.
Blogposts were promised, details were hinted, but no, it’s just full steam ahead because the AI worked so well. The converted unit tests all worked, all the synthetic tests are okay, so what are you complaining about?
At some point, it’s less about the technical questions and more about getting that pesky human buy-in.
nine_k 16 hours ago [-]
They are looking for a different human buy-in.
"Yes, the AI rewrote the code. No, we do not pretend that we've scrutinized the code, or that we understand it. It works, tests pass, so we don't care, and so shouldn't you."
The "recklessness" is offered as the new normal. Because it kinda, well, works for them.
notpushkin 12 hours ago [-]
The recklessness kinda works for everybody until some point. Go fast and break things... then cash out before investors realize, unless you manage to capture the market so you can keep breaking things because people will swallow.
gwerbin 13 hours ago [-]
What's working for them is having a huge amount of resources and very good people to design a cutting edge agent harness, RLHF the hell out of their models, and build out a tremendous amount of inference capacity. I'm sure their process for making code changes in any of their client apps is very fast, but a TUI built around a chatbot is also not a particularly complicated application. So yes it's working for them, but the vibecoding that they are selling is clearly not what they are doing in practice.
notpushkin 12 hours ago [-]
They’re not talking about the chatbot TUI. The chatbot TUI was and is in JavaScript. They’ve ported the JavaScript runtime.
yard2010 10 hours ago [-]
Not GP but the js runtime has a long tail of case edges you simply can't emulate with a single app.
notpushkin 10 hours ago [-]
It surely does. I’m also extremely worried about the way they’ve decided to go with the port.
johncolanduoni 19 hours ago [-]
What does Bun’s governance look like? Now that Anthropic bought the company are there significant external contributors that would expected to have input on a decision like this?
peteyycz 19 hours ago [-]
And why buy it when they could have just called it Run and do the Rust conversion anyways? The license prohibits it, they don’t need the team’s expertise anymore, since they’re running full AI vibecode mode. Makes no sense to me
gpm 18 hours ago [-]
Seems pretty clear that they do need the team, to direct the LLM effectively.
Also they're probably interested in the team just as an acqui-hire of good developers, and they're probably interested in the marketing value of converting the actual bun to rust via LLMs. But mostly I'd assume it was about needing the team to effectively direct the LLMs.
sharts 18 hours ago [-]
IMO it’s reckless to not pin down ones dependencies. No need to pull the latest experimental hotness
Eufrat 18 hours ago [-]
I get that and I can see an argument that they didn’t really put it as stable, but I suspect the reason it is not the stable version right now is from the massive pushback as other projects and companies started pulling support for Bun because of the loss of confidence rather than any other reason.
burnte 17 hours ago [-]
How about testing the output? Seems like the ultimate test. If the output's still good, I guess the rewrite didn't hurt.
rgoulter 14 hours ago [-]
Kindof.
The problem is: quickly fixing problems (or preventing problems) benefits from having a good understanding of what the code is doing.
If you do have a suite of automated checks that's comprehensive enough that if it passes, no one will have any problems with the result, I think I'd agree. -- I don't think we're quite there at the point where "programming" is coming up with that suite of automated checks and then just not regarding the source code of the program itself.
layer8 9 hours ago [-]
Testing can expose errors, but it can’t prove correctness.
qsort 20 hours ago [-]
I agree that the Bun rewrite is much more reasonable than knee-jerk reactions imply, however:
- I don't think Claude Code is using the Rust version yet in their official build
- Claude Code is not a particularly complicated piece of software from an engineering perspective (nor it's particularly well-engineered, at least at the moment).
So in my book "it runs Claude Code" would be pretty weak evidence that the rewrite is going to be successful (the tests they've done are much better evidence, but that's a topic for another time).
Wowfunhappy 19 hours ago [-]
> - I don't think Claude Code is using the Rust version yet in their official build
No, I'm pretty sure it is, actually, since June 17:
Now, Bun 1.4 doesn't seem to officially exist on https://bun.com/blog or https://github.com/oven-sh/bun/releases, so I can't be 100% sure this is the Rust version. However, I have to do some patching of the Claude Code binary to get it to run on my OS, and version 2.1.181 coincided with some changes that make suspect it's using Rust now.
> 13,044 unsafe blocks in the resulting Rust code (hand-written Rust projects of similar size average ~73)
Grok is this true?
I've heard the meme that AI written rust code is absurdly full and safe blocks but... that's pretty funny.
Hang on. A claim like that can be verified with a single grep! Give me a minute...
$ rg -U "unsafe\s+\{" . | wc -l
10551
Hey, that's progress!
gpm 12 hours ago [-]
> I've heard the meme that AI written rust code is absurdly full and safe blocks but... that's pretty funny.
If I understand what happened here correctly this isn't really a case of any such meme, but the result of the porters (heh) telling the LLM to directly convert zig code using unsafe to match the previous code "exactly".
I.e. more like using the LLM as a fancy version of c2rust [1] (which would result in just as much unsafe) than a result of LLMs reaching for escape hatches too liberally.
It's unironically a good practice when you port from an unsafe language (C/Zig) to Rust. Porting isn't refactoring. One should keep the logic mapping one-to-one as much as possible.
The high number of unsafe blocks is a good sign.
LtdJorge 12 hours ago [-]
Counting instances of "unsafe {" is pretty useless. Unsafe is needed in "safe" code. What it allows is to create a boundary where the caller is the one that uphelds the contract. If the unsafe is in an internal library, it’s much more difficult to misuse.
baq 10 hours ago [-]
This is ironically a skill issue in prompting, especially if they had Fable access - or, more likely, they just really, truly don’t care.
Wowfunhappy 5 hours ago [-]
...but isn't Zig code entirely unsafe?
I've never understood why people make fun of Rust code that has lots of unsafe blocks. Obviously, the goal is to reduce those blocks, but consider also the number of safe blocks!
meowface 19 hours ago [-]
I agree Claude Code is seemingly (currently) not very well-engineered but I think you may be moderately underestimating how complicated it is/necessarily has to be.
hatefulheart 12 hours ago [-]
What are those complications?
Last I heard Claude Code devs were trying to compare their app to a game engine or rendering system.
This was summarily ridiculed. Are you saying that writing a game engine is easier than writing Claude Code?
gpm 20 hours ago [-]
> it's been in production for a while
Huh... it looks to me like bun has yet to cut a release post Zig->Rust port (the latest one on github is still on a branch that says it's written in zig in the readme). I assume that nothing is using the rust version yet...
Which also cuts against the complaints about "of course it works [...] you can put this into your production environment soon!" since they don't seem to be asserting either of those things.
Eufrat 19 hours ago [-]
The real problem is they explained nothing and just caused a lot of mistrust. The lead developer at Bun working on this project does post here from time to time and I have never seen him answer any of this. I admire his enthusiasm, but this was badly handled mostly from Bun’s side which lead to a bunch of dogpiling.
When someone on another social media platform commented expressed some concern, his response was to ask him what the explicit bug he was talking about was and that he would generate a fix. That sound you hear is the woosh as the point flies by. And in general, this just feels like a consistent problem with Bun.
johnfn 10 hours ago [-]
When you hear a woosh as the point flies by, I see someone attacking a project for using AI rather than any concrete technical reason. Jared's question is to disentangle an actual Rust-related bug report from someone who likes to complain about AI.
burnte 17 hours ago [-]
I have yet to hear any evidence that the Rust rewrite was harmful. I have no emotional investment in Bun (which I'd never heard of before the rewrite), or Zig (which I also didn't know about), or Rust (which I think is neat and that's about it), so I'm about as unbiased as you can get and from what I saw the conversion was done well, and I haven't heard of massive bugs resulting from the rewrite.
GuB-42 14 hours ago [-]
It is probably fine, it is kind of a best case scenario: porting a good code base with lots of unit tests, all hand-written. Not much can go wrong here as the LLM is kept in check by the original code, the tests, and the fact that the topic (a JS engine) is well documented.
The problem is what comes next. They now have code that they don't understand, and they are likely to work on it with AI in the future, but the new features they may introduce later will not have the luxury of hand-written tests and a reference code. So, unless they undertake the massive effort needed to fully understand the Rust code and deal with all these "unsafe", quality is very likely to go down, Microslop style.
baq 10 hours ago [-]
It’s always been a fallacy to think that large organizations have code which is understood. There are people somewhere understanding small parts up until the next round of layoffs.
esailija 9 hours ago [-]
Millions were invested in this project where they fired the expensive experts (me included) and replaced with a small army of cheap devs (which was actually more expensive and less productive than just retaining even one of the experts would have been). Couple years later the inevitable happened and the whole thing was thrown into trash. Code without anyone who understands it is just a liability.
nozzlegear 16 hours ago [-]
> which is probably the single most actively used development app there is
Seems doubtful, I'd put money on it being something like Visual Studio or Visual Studio Code. Maybe CC could claim the (odious) title of most actively used vibe-coded development app, though.
MuffinFlavored 20 hours ago [-]
> Yes, Claude Code uses Bun. In fact, Claude Code relies on it as a core dependency and ships as a self-contained Bun executable.
I... somehow did not know that.
stymaar 20 hours ago [-]
You missed the day when they had their bun build misconfigured which ended up leaking the entirety of Claude Code's codebase? (I wish I was joking)
baq 10 hours ago [-]
The best part is how little it mattered. Everyone just shrugged.
johnfn 13 hours ago [-]
Pretty sure the author of Bun stated this was not related to Bun here on HN.
stymaar 7 hours ago [-]
It was due to Anthropic's misconfiguration of Bun so you can argue it's not Bun's fault. IIRC it's the default config though, so maybe it's a little bit of Bun's fault but I didn't check that.
andai 17 hours ago [-]
Wait is the new CC running on the vibe coded Bun?
pathartl 15 hours ago [-]
I have a port of BuildGDX in the project backlog that was basically just throwing Claude at it to go from Java to .NET. The only thing it really got hung up on was Java's byte being signed.
What I ended up with was a port of Duke 3D that uses half the allocated RAM as DukeGDX.
aussieguy1234 17 hours ago [-]
The model did the work, probably has it all in its context window, so it may actually be better placed here to write the docs.
general_reveal 17 hours ago [-]
IMHO, this is an actual good use of what sounds like a person guiding a model to do a mass conversion.
This is quite the understatement. Actually, it's probably the understatement of the year.
"Pretty good, not bad, great use case".
Dude. Fable fucking did what?
didibus 12 hours ago [-]
It added iOS support, the upstream repo had already ported the game to Linux and MacOS.
NamlchakKhandro 15 hours ago [-]
It hallucinated that people play games on Apple products.
latexr 7 hours ago [-]
I recommend you do even some basic cursory search on the size of the iOS gaming market VS consoles and desktops. You’ll find out your snark is embarrassingly misplaced. Look at the dates of the articles you find, too. Some will be almost fifteen years old.
That is really not a lot. A human could have easily done this.
How much did it cost / how many tokens were spent?
didibus 12 hours ago [-]
Ya, because the upstream repos already did the majority of the work to port the game to Linux and MacOS. This fork used Fable to add iOS support with touch controls.
This is another "AI-ism" I noticed, mostly in coding agents - they seem to be very fond of making up new "compound nouns" (and occasionally verbs) to sum up relatively complex and specific concepts into single noun phrases. I wasn't sure if it's to save tokens or if the AI uses this to get a concise "identifier" for a concept that it can refer back to later, but I found it very noticeable.
I find the resulting sentences hard to read, though it does get better if you're aware of that tendency and make a conscious effort to parse the noun phrases. But I guess since it's just intermediate output from coding agents and not text for essays or blog posts, it's fine.
marginalia_nu 20 hours ago [-]
Haha, I do that too sometimes.
It's a thing in some Germanic languages. Instinct is to merge nouns into word, e.g. 'lawnchair', but that gives you a red squiggly line, but 'lawn chair' also looks wrong, so 'lawn-chair' is the middle ground.
ben_w 19 hours ago [-]
First time I realised this was GCSE History lessons, looking at first world war posters like this one and going "huh, to-day with a hyphen…"
Badnami is Persian and literally means bad-name (like defamation of character).
English word origins are a fascinating rabbit hole.
ben_w 18 hours ago [-]
> English word origins are a fascinating rabbit hole.
My favourite example of which is Northern Ireland's Orange Order.
The colour is orange, because that was the Royal colour of the family of the monarch it was named after, William of Orange, who was Dutch, titled after the principality of Orange which is named after the city of Orange which is French which got its name from the Celtic word for forehead or temple.
The colour is named after the fruit, the fruit's name is a corruption "a norange" -> "an orange", which goes back to naranja which goes to Arabic which goes to Classical Persian which goes to Sanskrit.
Meanwhile, the dutch word for the fruit is sinaasappel, Chinese apple, compare with the English word "mandarin" used for many different Chinese things.
trentor 20 hours ago [-]
Maybe LLMs are just Germans.
Rexxar 20 hours ago [-]
That's the G in AGI.
sscaryterry 20 hours ago [-]
Artificial German Ingenieurwerk
lacy_tinpot 20 hours ago [-]
This isn't good news...
shibel 19 hours ago [-]
I’m (sorry for the lack of humbleness) a very fluent non-native speaker and writer, and this is by far my biggest challenge with Claude. It stitches together 2-4 advanced concepts into one or two words and I always have to ask it to “unpack”.
I don’t think it’s easy on native speakers when it happens, but it’s even harder when you’re not.
gregoryl 18 hours ago [-]
Its hard for native speakers. Information density makes for rough reading.
causal 13 hours ago [-]
Still debating whether these are actually information dense or not. Complexity
gives the appearance of density, but these sentences always come in whole pages at a time while often failing to deliver the needed information.
Obscurity4340 6 hours ago [-]
It honestly feels more like chunking to me
f3408fh 20 hours ago [-]
Yes! It's infuriating. I've tried prohibiting them in my AGENTS.md but it's not 100% effective.
--- AGENTS.md ---
## Plain words, not jargon
Don't use jargon-as-shorthand. Say what you actually mean.
- Don't say "load-bearing assumptions". Say "the assumptions the xyz depends on".
- Don't say "cross-service". Name both services, e.g. "whether the X
service can derive duration without calling the Y service". "Cross-X" is
confusing because it hides which things are involved.
- Don't deliver verdicts as abstract noun-phrases like "Cross-RCA
double-counting is unfounded". Say it plainly: "I checked whether the same
root cause gets counted twice across RCA runs, and it doesn't."
## No earth-shattering declarations
Don't hype findings. Skip "a critical finding changes everything", "now I have
the full picture", "this changes the game", etc. Just state what you found
plainly. Most findings are ordinary; report them that way.
## Don't reflexively hedge a "yes"
When the answer is yes, say yes. Don't soften every positive answer with a
caveat: it erodes confidence in the "yes". Only add a caveat when there's a
genuine, specific uncertainty worth flagging.
godot 16 hours ago [-]
Is "jargon-as-shorthand" not exactly that?
On another note, I find AI instructions like this (e.g. "Don't hype findings. Skip "a critical finding changes everything",...") more harm than good in my own uses. It changes behavior in subtle ways that makes it less predictable to me. I'd rather it has its own AI-isms and quirks, that I've fully gotten used to, and I know what to expect. I know when it says certain things, in certain ways, that's what I think it means. Quirks and AI-isms don't annoy me, I get used to how it states things.
f3408fh 16 hours ago [-]
Lol! Good point. I did use Claude to write the rule, and it ironically wrote the exact thing I asked it to avoid. I agree that it might be best to use the model as-is, to get the intended experience.
gitaarik 16 hours ago [-]
Also I find it interesting to learn the jargon. It basically compacts information in fewer words, although more complex words. But when you are familiar with the jargon, you can unpack the sentences in your mind. And like that, you need less text to read and write prompts. So less reading, writing, and tokens!
xg15 20 hours ago [-]
Yeah, I wonder if part of the reasoning is built around those phrases, and therefore it can't get rid of them easily.
> "now I have the full picture"
I always interpreted that phrase as a sort of marker to delimit the phase in which it explores the codebase and gathers information from the phase in which it implements the changes.
Not sure if it's still done, but I think some months ago there was discussion that some of the phrases are injected by the inference loop to "steer" the model - e.g. "But wait" if a thought block was too short etc. Obviously such phrases couldn't be influenced by the prompt.
Sinidir 16 hours ago [-]
Yes these things happen as part of RL Training. Same way that you can see the "But wait ..." phrases in thinking traces. They get rewarded.
f3408fh 16 hours ago [-]
Out of curiosity, how does something like "But wait..." get rewarded?
skerit 20 hours ago [-]
I thought it was just Opus 4.7 and 4.8 that did this. Do other models do this too?
Anyway: in my case Opus absolutely did not follow a similar instruction in the CLAUDE.md file. (But then again: it hardly followed _any_ CLAUDE.md instruction properly)
embedding-shape 20 hours ago [-]
It's stupid, but have you tried telling it to follow it? "Make sure to follow the guidelines from AGENTS/CLAUDE.md" etc, seems to (sadly) make some difference in most harnesses and models.
futuraperdita 19 hours ago [-]
For me, Opus 4.8's thinking traces for the chatbot will sometimes willingly ignore instructions, saying something along the lines of "I've noticed an instruction in the system instructions that states I shouldn't do this, but if I don't do this, I'll not provide the answer the user is looking for. I will ignore that instruction."
mikeryan 20 hours ago [-]
In all my CLAUDE.md and AGENTS.md files I have a line to fix pre-existing issues. I don’t know what it is but every agent I’ve tried through Claude code (including deepseek and GLM) will actively try to avoid fixing pre-existing issues. I even added hooks to Claude and git to try to get them fixed. If I leave a bailout for myself agents will find it sit and ask if it can push with no-verify or an environment variable in the case of Claude hooks instead of trying to fix an issue it didn’t cause.
manmal 13 hours ago [-]
I’d recommend to instead write a de-slop skill that instructs to launch a sub agent with fresh context, and analyze for such phrases in the new commits, and remove those. Find -> fix just works better than preemptive instructions, in my experience.
And if you manage to do this automatically before committing, you’ve built the backpressure everybody is talking about.
smejmoon 11 hours ago [-]
Can you point to some examples? Also I wonder if this needs to be very model/harness specific? Like even model version, subversion.
And probably that should be run in different harness or with custom system prompt? Since they introduce quirks and glitches as well.
(somehow this motivated me to resurrect HN account)
spudlyo 18 hours ago [-]
NO DEFORMED FINGERS!!!
lostlogin 20 hours ago [-]
> Yes! It's infuriating.
No, it’s good. When they stop doing this, it’ll be harder spot the machine slop.
wonnage 18 hours ago [-]
It’s crazy that straightforward rules like this can’t be followed and yet they think they can gate Fable
arcanemachiner 18 hours ago [-]
That rule can be followed, but it gets a little tricky when mixed up with the other ten thousand rules that it's following at any given time.
blharr 13 hours ago [-]
"The model refuses to follow my specific word detail prompts" and "The model refuses to perform hacking attempts" are on the same side of the model refusing to do something baked into it though.
jorl17 20 hours ago [-]
Excessive-hyphenization is ai-hyperfixation
topgrain2 20 hours ago [-]
That’s… about how I might have written that.
rossant 19 hours ago [-]
That, and also the very long comma-separated lists with sometimes 10+ items.
mikeryan 20 hours ago [-]
That and finishing a statement with an em dash — that’s what AI does.
daveguy 20 hours ago [-]
FYI, AI isn't fond of a goddamn thing. They have token prediction quirks that don't follow typical English.
ben_w 19 hours ago [-]
Few ever cared. Find one non-pedant who would object to the personification that follows:
"The evening settled over the city, drawing the light out of the streets one corner at a time. Windows blinked awake with lamplight, and the wind moved through the alleys restlessly, leaves brushing against walls before gathering themselves along the pavement. In the distance, the river kept its steady argument with the stone embankments. When the night pressed in, the weather became increasingly angry, until it was a raging storm."
In the affective sense, evenings don't settle, and street lights are not drawn out, windows don't blink, and wind isn't restless. Weather can neither be angry, nor rage.
But such personification is a natural part of how the English speak.
folkrav 17 hours ago [-]
Personification =/= anthropomorphization
sawjet 19 hours ago [-]
Personification is a figure of speech. What you say is technically correct but we don't need to declare this every time humans discuss how LLMs work.
lazy_moderator1 11 hours ago [-]
clickbait, right? it did not port it to macos, that was already done. all fable did (and it might've been opus for all we know) is adding the last few commits for ios/ipados support after all of the heavy lifting was done
still cool but the title makes it sound like it was done from scratch
flohofwoe 6 hours ago [-]
TL;DR: nothing to see here, HN title is extremely misleading
Ok, *this* is a bit weird. Why create such a jenga tower of indirections instead of directly letting the LLM port the rendering code from D3D8 to Metal either through a D3D8-to-Metal shim or even better by creating a new Metal-based render layer beneath the higher level game specific rendering code? I would expect that the LLM can 'see through' all those redundant shims and collapse them into the equivalent Metal code.
Also the readme says 'no emulation', but then goes on to describe the rendering layer as emulating D3D8 on top of Vulkan on top of Metal ;)
(also why are both Meson and CMake required)
PS: after reading more, it can be explained by what this project does (and it's not what the HN title says): it's not a port from the original C&C Generals code release to macOS/iOS, instead all the heavy lifting (of making the original code base portable, and providing example ports to Linux and macOS) was all already done by an existing project (https://github.com/fbraz3/GeneralsX), all that this project did was slightly enhance the existing macOS version so that it also runs on iOS.
Suddenly this is much less impressive and could probably have been done just as well with older and simpler models (or tbh, a few hours or at most a few evenings of manual coding - macOS and iOS code is nearly identical for this type of application).
namuol 21 hours ago [-]
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes).
asronline 21 hours ago [-]
I have a Renegade one going that does all of this from scratch (different engine) so it's def more than capable!
ozyschmozy 12 hours ago [-]
Regardless of other ongoing work, title seems inaccurate? Doesn't sound like fable did any porting to macos
ilteris 13 hours ago [-]
Old renegade? Damn that was one of the first app.I played on a pc.bqck when I had 8086 hercules graphics card. Bring it back please!
bananaboy 12 hours ago [-]
I assume he means Command and Conquer: Renegade
risyachka 18 hours ago [-]
Right? All Fable did was a ported an already cross platform project to ios. Does not look like any sort of heavy lifting there, opus 4.6 would do just fine
bearjaws 13 hours ago [-]
I read this and laugh a bit because just 7 months ago the bar was so much lower and now we go "well duh of course it was able to make a working ios app from a game made 20 years ago... a game that was made 3 years before the first iPhone"
MrPowerGamerBR 12 hours ago [-]
Was the bar that much lower, or is that some people on this thread are misrepresenting what the project actually is?
EA Games open sourced the original C&C Generals source code a year ago.
GeneralsX is a fork of the original source code. The fork changes the code to be easier to be ported to other platforms, which GeneralsX provides native Linux and macOS builds.
This project adds a iOS target for the GeneralsX project, the iOS port was made using Claude Fable.
It is cool that a LLM was able to create a iOS port? Yes, but saying like if it was something that was hard or that it would take too much time to do before LLMs is a bit disingenuous in my opinion, especially because the GeneralsX had already done the bulk of the effort of making the code portable in the first place, and that there was already a macOS port.
For reference, the iOS port only needed to add 2,179 lines of code on files that already existed on GeneralsX, and that's not excluding comments, which Claude loves to add some LARGE comments, and things that are iOS app specific, like the app's Info.plist.
lelandfe 12 hours ago [-]
"it was able to get a macOS port of a 20 year old game to run on iOS"
still very cool, and sci fi not long ago
risyachka 7 hours ago [-]
Its not 20 years old, GeneralsX was updated like a day ago.
So the game in question is very modern and cross platform.
risyachka 7 hours ago [-]
>> well duh of course it was able to make a working ios app from a game made 20 years ago
But it didn't, thats the whole point. The game in question was updated like a day ago, not 20 years.
Fable added few config files for iOS and a gesture mapping to mouse events. It did not do any of the hard stuff.
The title is so misleading that it is probably the single reason why this made to the front page with people assuming it actually did anything hard here.
If anyone deserves the recognition - its the upstream projects that made the game modern and cross platform in the first place.
hypercube33 19 hours ago [-]
This needs a backport to Winx64 since this game runs like crap on modern windows
Aurornis 11 hours ago [-]
The title is contradicted by the README:
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes)
It’s cool that someone took the extra steps to run it on iPad and iOS, but if the README is correct then it was already ported to macOS? Going from Mac to iPad isn’t trivial, but it’s a much smaller jump than porting into the Apple world the first time.
evanjrowley 21 hours ago [-]
I wanna know if these techniques would be useful for Emperor: Battle for Dune (2001). It's the first 3D RTS by Westwood Studios, predating C&C Generals by just a couple years. It's popularity was hampered by intellectual property disputes and a introduction of a new faction that diverged from the book series lore. The gameplay, soundtrack, and campaign missions were awesome.
satvikpendem 20 hours ago [-]
Try it before July 7 when Fable disappears from Claude Code subscription pricing.
e40 18 hours ago [-]
Where's it go after that?
arcanemachiner 18 hours ago [-]
Billed at unsubsidized (and very expensive) API rates.
farseer 20 hours ago [-]
This was one of the best RTS of the era. Still holds up today. The music was also very good.
rudcodex 9 hours ago [-]
I remember that game! Cinematics! and some units had dune realistic shields so when hit with laser, both attacker and defender died. I don't think i've finished it, ending had some worm timer mission i couldn't get to in time.
asronline 21 hours ago [-]
Let me give it a go :)
DANmode 20 hours ago [-]
Legend in the pub.
gb2d_hn 20 hours ago [-]
Came here to see if anyone mentioned Dune Emperor. Would love to see someone succeed
1123581321 13 hours ago [-]
Emperor was a great game. My only real complaint was the five sub-factions seemed to be imbalanced. I’d like to revisit to see if the was missing something.
no way fable did this. It would have stopped after the words "command and conquer" and nerfed you to opus (while also landing you on some nsa watch list)
throwaway314155 14 hours ago [-]
I’ve been using it to use Ghidra to do reverse engineering for modding Zelda: Tears of the Kingdom. Pre-ban it would flag immediately, post-ban it _rarely_ flagged anything and when it did I realized I could just make a memory telling it to convert reverse engineering speech into game development speech, not mentioning pointers, memory, addresses and decompiling. Then the flags mostly went away.
You can sidestep flags by just compacting and then changing the model back at any rate.
winrid 13 hours ago [-]
post-ban I've even had Opus 4.8 say it cannot let me continue (I was analyzing a nodejs heap dump)
cogman10 18 hours ago [-]
lol, I'd expect that as it starts reading of sections of code dealing with the chinese and terrorist factions.
lostlogin 18 hours ago [-]
For any fellow idiot following behind, the below error means you haven't paid for the game in Steam.
> "ERROR! Failed to install app '2732960' (No subscription)"
Am I reading that right? It makes API calls that go through 5 different layers before actually getting rendered? That's kind of crazy. I'm surprised it works, although I guess the underlying libraries are solid enough that it shouldn't be unexpected.
etra0 18 hours ago [-]
Apple never released a driver that supports Vulkan out of the box, therefore MoltenVK was born, which translates Vulkan IR to Metal source then recompiles to Metal shaders.
This was the pipeline in Proton for macOS (I'm not sure if it's still is the case, been quite a while since I checked).
debugnik 7 hours ago [-]
Proton itself doesn't exist for macOS, but CrossOver already existed instead, which is mostly the same tech, and indeed supports D3D either through DXVK over MoltenVK, or through Apple's D3DMetal.
debugnik 10 hours ago [-]
Technically there're just 3 layers: DXVK over MoltenVK over Metal. D3D8 and Vulkan here are just the APIs implemented by those adapter layers.
There're some D3D implementations over Metal that could skip the Vulkan layer but none implement the old D3D8 so you'd still need another layer that implements e.g. D3D8 over D3D9-11. Also, DXVK and MoltenVK have got a lot of traction and fixes on their own, so they're probably the most accurate pipeline for D3D on Metal.
dools 20 hours ago [-]
How is it done "using Fable" when the first commit was Feb last year??
debugnik 19 hours ago [-]
He forked GeneralsX and added just the last few commits.
dawnerd 18 hours ago [-]
Still seems weird to give fable credit when the heavy lifting was already done.
debugnik 9 hours ago [-]
Fable should take credit for porting to iOS with a touch UI. But that's about it, looks like the renderer and macOS port were already done, in which case I agree that OP is paltering.
OsrsNeedsf2P 17 hours ago [-]
The port was done by Fable.
Dfiesl 20 hours ago [-]
Probably not exclusively using Fable.
dools 20 hours ago [-]
Yeah which is a bit underhanded. Because the implication of "using Fable" is that it was done in under ... a week? So it's just a bit of click bait.
janalsncm 19 hours ago [-]
For that to be click bait it implies people wouldn’t have clicked on it if any other model were used. IMO the more interesting fact is they ported a game over to iOS.
dools 19 hours ago [-]
I dunno... Command and Conquer ported to macOS/iPad in 18 months using AI coding agents probably wouldn't have the same ring to it
didibus 12 hours ago [-]
The port to MacOS is from the parent upstream repo, which also has it working on Linux, this fork added iOS support.
Madmallard 20 hours ago [-]
That's nearly every single article on the front page of HN nowadays that talks about AI related stuff
20 hours ago [-]
bakugo 18 hours ago [-]
It wasn't, this is just another free marketing piece for Anthropic.
momocowcow 7 hours ago [-]
I recently threw an llm at porting an old title I had published more than 25 years ago. 150 loc in a very modular codebase. It's not easy. I got rendering and a few modules working within a week. There's a reason why the heavy lifting for this C&C port had already been done by humans.
I've been doing something similar for some of my favourite older games. But the "byte for byte" claim has me worried. Isn't simply decompiling the sourcecode from the binary and releasing that problematic?
It's not the "clean room" approach and companies could still claim it violates some kind of copyright and get it taken down.
kevinmchugh 14 hours ago [-]
That's my understanding. Decompilation is legally protected in the US, and you can do a reimplementation based on a decompilation. Sony v connectix is aiui the precedent.
Theoretically you could clean room by having different agents/models/context windows to do both decompilation and reimplementation. This is untested in court afaik and I don't think anyone wants to spend money to find out.
There was a non-clean room reimplementation of gta3 a few years ago. The gta publisher DMCAd and of course the fans who did it didn't have any money to fight in court (and probably couldn't find anyone who would take a big complicated case on such bad facts pro bono). https://www.gamingonlinux.com/2021/02/take-two-interactive-h...
asronline 21 hours ago [-]
Sweet!!
amcoastal 21 hours ago [-]
[dead]
bel8 19 hours ago [-]
Title is click bait.
This started back in February and looking at commits, Fable did only a small part of the latest commits. 19 commits out of 2000:
And maybe it wasn't even Fable, they might have downgraded to Opus.
This is the kind of frequent misinformation that makes me skeptical of Anthropic LLM claims. Whenever I compare them to GPT 5.5 on my web dev workflows, they seem to trade blows, even Fable, which I started testing since it was re-enabled.
Also I bet any decent LLM could have done such port. Think GLM 5.2 or similar which would probably work better because it doesn't constantly try to guess if I'm a terrorist trying to hack goverments or develop some biological weapon.
People just don't have the resources to compare LLMs and imply whatever they used is the best thing ever and unlocked some new workflow.
I have seen little improvement since Opus 4.6.
varenc 19 hours ago [-]
This project is a fork and all it does is add iOS support. Commits by the repo fork owner begin 19 hours ago, so very plausible those are done with Fable. But I agree it's very unclear to me if adding iOS support was some task only Fable could accomplish over prior models.
IgorPartola 10 hours ago [-]
Amazing. I have always maintained that Fallout 1 and 2 have nearly perfect UI for mobile. RTS games are hard to port directly while turn based games seem like a very natural fit, as long as they aren’t very reliant on full keyboard control. Fallout does not!
joehabeebs 16 hours ago [-]
I spent countless hours on this game as a kid and as I got older I found that trying to go back and play the game got more and more difficult as the technology scaled beyond the platform it was originally intended for.
A great use for what AI can help with, especially in the hands of dedicated fans. Maybe I will find some time to try and experiment with custom maps or units, the modding scene of C&C Generals was always pretty lively.
Aperocky 11 hours ago [-]
The issue with these kind of porting is edge case bugs - far smaller project/physic simulation has hit the same thing especially when original code isn't exactly clean, or sometimes only worked because of a logic bug.
This means you can play for maybe 10 minutes on the happy path but just as you are getting into the zone either a CTD or some strange event would make the game/simulation unplayable.
And while debugging is made easier, it's much more effort than telling the model to convert the code. Hence it's usually not done in these demos.
captn3m0 11 hours ago [-]
This is a OS port (iOS) of an existing functional and maintained fork (MacOS) of the official release (Windows).
Most of these low-hanging bugs would have been caught upstream by now.
AltruisticGapHN 7 hours ago [-]
Completely misleading title.
simonebrunozzi 10 hours ago [-]
All right, when someone will do this for Railroad Tycoon Deluxe, Master of Magic, Master of Orion II, I will have to waste hundreds of hours playing these again... And it will hopefully be much more fun, because the computer "AI" will most likely be stronger / more interesting.
Tiberium 10 hours ago [-]
You can do this yourself with LLMs, but I admit that it's still not a trivial process. For the actual best results and the highest chance of progressing quickly, you really need a $200 OpenAI/Anthropic sub and a lot of free time. I seriously recommend OpenAI over Anthropic for this, as in my experience GPT 5.5 is far more thorough in reverse engineering and makes mistakes less often.
Then, you first need some tooling, either Ghidra (open-source) or IDA (paid), and some tooling to expose them to an LLM. I have a custom IDA Python-based CLI that lets LLMs trivially call into IDA's Python APIs from CLI, but there are tens of different Ghidra/IDA MCP/CLI/SQL projects out there.
After that, it becomes more mechanical, you just let the agent (or multiple agents) explore and start renaming (easier to start with functions + globals), better if it's something that's directly applied to the suite you're using, so that all names show up everywhere. This is actually quite a quick process, especially for older/smaller games. After you have enough function names, you need to instruct and have LLMs add actual types, so that the decompile doesn't have raw casts and offsets, but real fields + types. They will also need to apply types to globals and functions.
Afterwards comes the hardest part - you can export this very well named/annotated decompile, and do one of:
1) Have the LLM try to directly polish the code enough to be compilable. Despite of the decompile quality, this isn't as hard as it sounds.
2) Have the LLM recreate the project from scratch in another language, something like https://banteg.xyz/posts/crimsonland/. This can be easier to get initial results, but you're sure to hit tons of bugs due to the differences in implementations.
The 1st approach is more thorough, especially because you can find a matching C/C++ compiler and start doing actual decomp.dev-like work - binary matching functions so your source code compiles down to the exact bytes as in the original binary. This is the longest, hardest part, human community projects take years to complete, and LLMs still struggle with getting matches for 100%, so you might spend weeks-months, and tons of LLM usage - an agent can take like an hour to match a single 1000-byte function in worst case.
As a small note - you do not need to binary match 100% to have the game be absolutely playable. Compilers are often very tricky to lead, so you might already have the code that does exactly the same thing, but just a different local variable layout might make the compiler use different registers.
rswail 11 hours ago [-]
No one seems to be worried about the fact that a vibe-coded app or conversion or rewrite is not copyright-able. It is not a derivative, it's a machine translation, without a human author.
So if that is released to the public, it's in the public domain, no license is applicable.
tjpnz 8 hours ago [-]
If they're using the same graphical assets they're violating copyright. Even if it's a reimagining of said assets it's probably still grounds for takedown.
Ericson2314 11 hours ago [-]
Good job, but the parent fork already did macOS, so this wasn't too hard.
HaloZero 21 hours ago [-]
Is there any hope for Red Alert 2?
HaloZero 21 hours ago [-]
Looks like EA did open source the game (only the first maybe)
I wish they open sourced RA2 - I love that game, I heard they lost the source code :/
swat535 20 hours ago [-]
Yes, they have also lost Tiberian Sun and Firestorm I think.. very unfortunate.
freedomben 19 hours ago [-]
That's wild. How does that happen?
cogman10 18 hours ago [-]
Red alert 2 was released in 2000, which means it was developed probably in 1998->1999.
Life was different back then. Source control systems were a LOT worse (this is CVS era for open source development). We certainly weren't in the current era where everyone wants to play these old games on their phones now.
What almost certainly happened is all copies of the source were simply lost. They may have sat on someone's hard drive, a team server hard drive, or somewhere else. It's possible they didn't have more than a few copies while development was ongoing.
wmf 18 hours ago [-]
Everything will be lost unless it's somebody's job to preserve it. It's pretty common to close game studios or lay off the entire development team while simultaneously scolding them about "stealing" IP so the predictable result is the code being lost.
they lost the original assets so afaik they arent gonna make a remaster
cnc-ddraw i think would get it to run fine on a steam deck though, so you should be able to play it without much issue
de6u99er 10 hours ago [-]
>No game assets are included or distributed. You need your own copy (Steam, ~$5 on sale).
Damn, I still have the CD in one of my unopened boxes from our last move.
delichon 19 hours ago [-]
I was bitching here the other day about GTA VI being locked down so I can't pass it on like a favorite book. But maybe if I just archive the whole package, a not-so-distant-future-ai will be able to rehydrate it onto any handy future platform at low cost.
apetresc 19 hours ago [-]
Assuming nothing like DRM goes out of its way to prevent it, I’d be willing to bet significant money that by the time GTA6 is retro enough to require porting to “modern” platforms, precisely that sort of porting will not only be possible, it’ll be so commonplace that it won’t even merit an HN post when it happens.
feverzsj 8 hours ago [-]
Pretty much a clickbait.
8note 20 hours ago [-]
ive had opus try movin Merlin's revenge up from director/shockwave.
reasonably it works quite close to the lingo, but this is way difficult, and not just from being rusty. steve had most things triggered on the animation frame, which opus hasnt quite figured out by looking at the code and pulling stuff out of the .dir
i do remember that playing at double scale was a lot harder in general, but theres a really clear cooldown missing between attackes
ChrisMarshallNY 20 hours ago [-]
Very cool.
One big caveat with iPad and mobile, though, is battery usage. I strongly suspect that power consumption is the reason that a number of games made it to Mac, but not iPad.
dawnerd 18 hours ago [-]
Well interface on mobile devices vs traditional computers is a bit different. Game devs can’t even have consistent controller support. Supporting touch is almost never worth it.
ChrisMarshallNY 17 hours ago [-]
I have wireless game controllers for both Mac and mobile. They do support them.
jayzer01 17 hours ago [-]
Generals. I never played this one. 2003? So you have to buy it on steam then this installer will allow you to play it on iPad?
nkrisc 17 hours ago [-]
It needs the assets from the original game. The creator of this project can’t legally redistribute those assets, so you have to provide them yourself.
jayzer01 17 hours ago [-]
Got it. Think I understand. Wow so retro.
pjmlp 20 hours ago [-]
In the old days this would have required a proper team...
lelanthran 50 minutes ago [-]
> In the old days this would have required a proper team...
Fable contributed 19 commits; that's well within a solo effort.
110bpm 17 hours ago [-]
The code appears to be based on other people's forks:
> The naive plan (port EA's raw source) is a multi-month job. The actual job was "port the best community fork," which was a one-session job.
I tell folks there's a chance GTA6 will be ported to PC before it's officially released to PC.
AussieWog93 17 hours ago [-]
Does this work with Generals Online (Zero Hour mod)?
wewewedxfgdf 19 hours ago [-]
This is one of the best of Command and Conquer games.
vaygr 20 hours ago [-]
Tiberian Sun next.
indyjo 9 hours ago [-]
Absolutely not to be confused with the equally AI-assisted recent port of Command&Conquer (1995) to the Atari ST. https://indyjo.itch.io/commandconquer
arikrahman 19 hours ago [-]
Finally, I can play Zero Hour everywhere
advenn 21 hours ago [-]
someone do it for debian, omg.
i use debian family, it has been years, i haven't played this gem
asronline 21 hours ago [-]
I can't tell you how many new hours I've poured in it since bringing it to my iPad
akho 21 hours ago [-]
fbraz3/GeneralsX
gigatree 21 hours ago [-]
This is an actual dream come true
asronline 20 hours ago [-]
Right!!
Quitschquat 11 hours ago [-]
I vibe code myself to sleep and implemented a rewrite of civ1 in Common Lisp. It works well, has all the DOS nostalgia I wanted (uses the same sprites etc.) 10/10 will continue doing this kind of shit.
bel8 8 hours ago [-]
Kudos to you.
Every time I try to vibe code myself to sleep I blink once and it's 5am. Creating is too much fun.
Any tips?
Quitschquat 44 minutes ago [-]
worktrees I suppose. That was a speedup when I learned about them.
ziofill 16 hours ago [-]
Do homeworld next *_*
ellis0n 19 hours ago [-]
AI is a data Xerox you can copy and transform anything with it (c)
zuzululu 13 hours ago [-]
Absolutely insane that Fable 5 was able to pull this off although I'm curious how much it cost
didibus 12 hours ago [-]
It seems it didn't:
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes)
Fable added 19 commits on top of the parent fork, which did not use AI.
> Long sessions on iPad can be killed by iOS for memory (~3 GB+ resident); the app exits to the home screen with no dialog. Session logs (current + previous) are in the Files app under the game's folder. Under investigation.
Wait. It's a port from a game from 2003. I don't think PC had 4 GB of memory back then (unless my memory is fuzzy, ah!): I mean, maybe some had that, but not the majority. I doubt the requirements for the original C&C Generals were 4 GB of memory.
OK, I just checked on a box of C&C Generals on eBay: requirement 128 MB of RAM (I know I could have asked a LLM, but checking a picture of an actual box is kinda fun).
I understand the need for a bit more graphics etc. but that's still a big jump: if the reqs were 128 MB or RAM for the PC, the game wasn't using that.
So we're talking something like a 32x inflation in RAM usage during the port (unless I didn't understand the caveat).
Why can't a game requiring 128 MB in 2003 run on machine 20 years more recent without using all the RAM?
Is there a plausible reason or are we to consider that when porting using Fable, we can expect the RAM usage of a program to go up by 32x?
EDIT: the original game has more asset than I would have guessed, skimming through the port's docs I found this:
> the game requires .big archive files (INIZH.big, MapsZH.big, etc.) totaling 4-5 GB. These files cannot be committed to repository due to copyright (EA Games property).
4 / 5 GB is not nothing. I wonder if the memory issue could be related to the way these are loaded?
gyomu 10 hours ago [-]
32x memory isn't that big of a jump if you go from storing a bunch of low res, low color count textures to a bunch of high res, high color count ones. I don't know if that's what's going on here but given the advertised "DirectX 8 → DXVK → Vulkan → MoltenVK → Metal" rendering pipeline I could easily see some leaky abstractions there that end up consuming a bit more memory than originally.
20 hours ago [-]
Madmallard 20 hours ago [-]
Does it actually play identically or is there going to be weird bugs all over the place?
Seems like an impossible ask to verify if you don't have an immense test suite that covers everything.
oynqr 10 hours ago [-]
The parent of the parent project has ground truth replays, which get compared to new PRs. The game uses lockstep networking, so this is required to prevent desyncs.
Madmallard 8 hours ago [-]
That sounds nowhere near adequate
asronline 21 hours ago [-]
EA released the Generals source under GPL v3, the GeneralsX project got it running on macOS/Linux, and I've taken it the rest of the way: native iOS and iPadOS builds of Zero Hour, plus Apple Silicon macOS.
What works (all verified on a real iPad and iPhone):
Campaign, Skirmish, and Generals Challenge: full missions, objectives, cutscenes, saves
All audio: music, unit voices, EVA announcements, Challenge taunts, briefing FMVs
Touch controls built for RTS: tap select, drag a selection box, long-press deselect, two-finger camera pan, pinch zoom
Self-contained install: game data ships inside the app bundle
It's the real engine: unmodified game logic compiled for ARM64, rendering DirectX 8 → DXVK → Vulkan → MoltenVK → Metal. Not emulation, not streaming.
No game assets are included or distributed. You need your own copy (Steam sells Zero Hour) and a script pulls the data from your own account. Code is GPL v3.
Building: macOS is about four commands; iPhone/iPad needs Xcode and a free Apple developer account since you sideload your own build. Known issues (long-session memory on iPad, a rare backgrounding crash) are documented in the README.
Credit: fbraz3/GeneralsX did the heavy macOS/Linux lifting, TheSuperHackers keep the community codebase alive, and EA did a genuinely good thing releasing the source. The engine fixes I found are heading upstream so every platform benefits.
(And of course, not affiliated with or endorsed by EA, and sorry China had to deal with all of those particle cannons in that demo video)
debugnik 19 hours ago [-]
You take credit for porting it to "Apple Silicon" macOS, both here and in the title, but that already seems to work upstream? On a quick look I didn't see any commit message of yours addressing macOS rather than iOS. What exactly did you add there?
digitalbase 21 hours ago [-]
Great stuff
I found the bundle scripts already prefer VULKAN_SDK/VULKAN_SDK_ROOT, but the build script only scans ~/VulkanSDK
When someone ported pylint to rust this place was full of ‘who will maintain this’ and met with blank stares when the answer was ‘what do you mean’ or ‘it’ll maintain itself’.
Good job. It was inevitable, but still someone had to, please excuse me, say the words.
fnordpiglet 20 hours ago [-]
Given the game is stable and the changes would be at the integration points, and Fable was able to do the direct integration, why would the answer not be “it’ll maintain itself” at some abstract level. The decision to maintain open source is up to the maintainers and I think the answer is “no one” 99.99% of the time, but I’ll wager if someone is willing to spend the tokens on it, a CI reintegration agent would do just fine in keeping it working as the underlying dependencies have required changes (which would really be only major changes in apple apis that aren’t backwards compatible.”
Pylint is different because it’s working against a necessarily dynamic wavefront that it has to keep parity with as it advances. All python changes, ecosystem adaptations, etc - and maintaining that with an AI harness in CI would never work. It would require a concerted effort and thought along the way.
So it’s sort of a different beast all together. In fact I think this is a great demonstration of using AI to resurrect technology built for X to work with Y, where X is dead and Y is current. Automating this feels like a net positive and because the original software is “finished” there isn’t decision making and strategy required.
arjie 20 hours ago [-]
These LLMs are remarkable. I used Opus to revive for myself abandoned software and bring it up to date with the latest versions of the frameworks so I could add some features. And there's other software which I vendor and merge in upstream changes and self-manage. This would have been a near-impossibility in the past.
"Who will maintain this?" appears to be "Me with an agent". And it's great.
I wonder if we’ll get to a situation where a new game is reversed in the first few months by a team effort. Right now it’s mostly solo devs, but a technical team that’s capable without LLMs is unstoppable with them, and given the nature of modding communities, the only thing they are missing is an LLM to grind away at the details of the game that would otherwise take years to find out.
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes
Neither the HN submission or GitHub repository says it's first or novel though? Just that it's (another) port of it?
The actually important work (of making the original code release portable and then create Linux and macOS ports) had already been done in https://github.com/fbraz3/GeneralsX. There is really not much to see here.
It's so crazy to remember sitting in front of W3Schools after school trying to learn PHP to create a website, and hear people today saying it isn't very impressive a fucking machine can automatically translate/port code from one platform to another, even a machine doing that with PHP3 > PHP4 code back then would have been cool but nope, "not at all impressive" just because things improved so much, so quickly, everyone got quickly used to the status quo.
I agree with you in general though, the title does make it sound like more was done than what was done in actuality, as it was just a iOS port. Still, I'd wager it seems interesting enough, given it's on the front page right now.
It's a good example of AI psychosis I guess, people reading things into a headline which they want to be true, no matter what reality says ;)
When you look at the commit history, the actual changes come down to a few dozen lines of code, all of them absolutely trivial, and most of those code changes seem to be cherry-picked bugfixes from the original project.
More like "wisdom of the crowds" (for better or worse) unless you're trying to argue that everyone who upvotes/downvotes on HN suffers from AI psychosis ;)
You can’t downvote articles, so a relatively small amount of enthusiastic people slamming upvote will do it.
1983 will seem like nothing by comparison.
I had no idea how to do any of this. I let GPT-5.5 download Ghidra + MCP connectors, start the project, and do all the work. I gave it my vision and gave it iterative user testing feedback.
Now I have a MUCH more playable UX.
O: https://store.steampowered.com/app/328440/Deadlock_Planetary...
My custom IDA CLI is just a simple thing on top of IDA Python's integration + ida-domain + some higher-level helpers, and works as a daemon with workers, so a stale/bad request doesn't corrupt an IDA DB (an issue I had when I was using idasql).
A bit offtopic, but: do you have any links to your efforts? I'm curious to see what other people do in this area.
Then recently I found https://github.com/bkerler/ida_rpc which seems to be ~60% the same thing as the one I have, the only big difference is that I do not give any special commands to LLMs, they just have to write Python in scripts/inline heredocs to interact with IDA. This lets them do a lot more interesting things since they get a full programming language.
This is an example of how LLMs work with idagent (`ida` is implicitly imported, ida.types, ida.comments is helper's own wrappers): https://paste.debian.net/hidden/cf46a122
More interesting example that was used to let the LLM/me track the rename progress for the initial function renames + gaps (code-looking like bytes that weren't inside of functions, IDA's autoanalysis missed some real functions). Although the game turned out to be small enough with only ~1500 real game functions that needed renames, which was done in ~10 hours of agent time total I think (I didn't parallelize with multiple agents). https://paste.debian.net/hidden/bf458b3a
To be honest, you can probably have an agent vibecode a similar MVP tool to the one I have in about an hour-two :)
I've spent almost 30 years building applications for the web. I've been switching my attention to different models of distribution in part because I see a desire for people to not be paying monthly seat subscriptions, but also because it can simplify my own operations - I want to move to a solo indie dev model, and giving you an executable you run means you look after "operations", and I don't. Desktop applications in particular have the potential for you to integrate them with your agent workflows.
But if I put effort into building some secret sauce into an application, and there is then a risk that by distributing it, it gets reverse engineered and then rebuilt by competitors, malicious actors, whoever, there is now the same economic risk to software distribution as there is to DRM-free media distribution. As a result, I might just not do it.
Now, some people will argue software wants to be free - build on the F/LOSS economic model, this becomes less of an issue - but there isn't really a viable F/LOSS economic model for most developers.
Per seat monthly subscriptions with remote access seems like the way we need to be, then...
If you already have engineers on staff, a few tens (or even hundreds) of dollars per month per plugin is likely a rounding error budget-wise. If you don't have your own engineers, you're probably not going to be able to produce something as good (reliable, well thought out, etc) as a commercial offering.
I had the same gut reaction as you, but the reality is much more subtle. We work with several clients who are bought into at least one of these ecosystems, and there's no way the math ever works out in favor of building an in-house solution.
That said, I also think that public reviews will start getting recalibrated by the users themselves. People will start noticing that programs are unreliable or lack features which are seemingly simple to implement with an LLM. The quality of an app may very well depend on how hard it is to replicate, otherwise, why not ship your own?
It works great just like that.
Curious - why like this? I usually tell it to write down the analysis once all is clear, so I'm wondering if your approach is better.
These notes files do end up being more of a “how we got here” messy journal and less of a real report but they’re full of useful breadcrumbs that make it quick to pick things back up in a fresh context. Having it write a summary report on a topic based on the raw notes works out pretty good.
Another useful thing with these (not RE) is that sometimes I end up starting to debug a problem and I (or Claude) realize that it might be related to a different problem and being able to then cross-reference between the two raw notes files while pulling that thread seems to work well.
Whether or not it’s the “right” approach, I overall tend to treat sessions/context as ephemeral and need some kind of more solid WIP artifact. I do work in an industry that tends to trigger safeguards (unmanned/autonomous agricultural aviation) as well, and have occasionally gotten Claude to a point where I can’t get a session to continue but Codex will pick it up and finish.
Of course then you have Starfield which is so unimaginable uninspiring that nothing can really be done to save it..
My gaming preference is to go to an area as per game design, so the fact that I would be outmatched does not bother me and would prefer it that way. I do, however, understand why the game designers chose level scaling for what they wanted to achieve.
You can still work around this without resorting to level scaling. You can give players an exploration option that avoids fighting, but sacrifices something else (ie., you can explore as a ghost, but can't take any loot with you). You can give low-level players some kind of newbie buff that will keep them alive (but won't allow them to win). You could make the perception of the world level dependent. You could also just scale locations or regions once, so that if a player reaches it at a low level, it'll become easier, and if you get there at a high level, it'll become the de facto endgame area. You could also just not implement leveling at all: The Bard's Tale (remake) was a bit like this.
Leveling up is not fun if it doesn't have an impact on how your character interacts with the world. If you're going to use level scaling to make leveling a no-op, it's often better to just go the action-adventure route and not pretend the game is an RPG. Seriously: what's the point of pumping my Strength stat if Villager A always has enough vitality to offset any gains on my part? It's especially grating if it's the same village and the same villager, revisited 40 hours later, and it still takes 3/4 of your health in a hit.
I don't think naive level scaling (Oblivion/Skyrim-style) is the right solution for "let the player go anywhere they want from the start". It's certainly a solution, but not a good one. A more nuanced mix of story justification, natural movement limitations (distance, special skills needed to get somewhere), level/area design (make areas with harder enemies less likely to be visited first), some non-combat exploration options, etc. all seem like a better way of letting the player experience open-world freedom without taking away the RPG progression "from zero to hero" from them.
I played a lot of Might and Magic VII back in the day (a few years before Morrowind IIRC). It was a huge world and you could go anywhere after getting off the tutorial island. Some endgame areas were gated behind lengthy quests, some areas were inaccessible without reaching them "the hard way" for the first time, others were impossible to reach without special skills or items, and there were skills/spells (invisibility, fly) that allowed safe passage through high-level areas if needed. Taken as a whole, it gave you a lot of options in terms of where to go at any given time, protected you to some extent from getting insta-killed because you made a wrong turn, but didn't make exploration trivial or level progression pointless. When you give players freedom, you should also allow them to commit suicide by charging at a horde of dragons while underleveled and underprepared. Trying to make the whole world immediately accessible is the kind of handholding that is actually limiting in the long run, and takes away an important part of the RPG experience. I don't think there are many CRPGs outside of TES that use level scaling - personally, I only experienced one in Wizardry 8, and it was way less absurd than Oblivion (areas had level ranges - you won't get an endgame area mob to be level 1 if you happen to reach it at that level yourself, and Villager A in starting area won't ever get to level 20 if you revisit it later).
So, between some limited/partial scaling and all the other design choices you could make, using Oblivion-like level scaling to "make the world accessible" is just bad, lazy design to me.
Then there's the "level up by doing" mechanic, which is a mixed bag. It can be done well, but in Oblivion, it only resulted in putting a book on the spacebar. Voila, my character literally jumps around and looks utterly idiotic, but Acrobatics levels rise.
Being unable to just go fight a dragon at level 1, and then progressing to routinely curbstomping dragons (Baldur's Gate 2 - solo Sorcerer run is my favorite example: "I see, you're resistant to magic. Let me introduce you to the Magic Sequencer with Lower Resistance x4. Time stop. Horrid wilting. Wish rest. Oh, I didn't need to, you're dead already.") by the end. It's not the only selling point of RPGs, and it can sometimes be omitted entirely (e.g., Disco Elysium). But if there is a classic leveling system, I expect it to work, from zero to hero. It's not as fun if the numbers going up don't translate into real changes in how your character interacts with the world.
I suspect it won't stop people, and that it won't be much of an issue in a lot of cases. I wouldn't want to be the one to test it in any sort of court though. Not even on the other side of things, where it'll become even more of a nightmare to protect your indie IP on any form of platform which doesn't heavily regulate things.
The code is also copyrighted and owning a license for a game does not make you safe from being sued for pirating that game or its code. It's fine in this case only because the engine was open sourced.
Nothing makes you safe from getting sued.
See also: [1]. You could also reverse engineer in a solid jurisdiction.
I ran C&C Generals in Wine on Linux back in the days. More stable than Windows XP.
[1] https://en.wikipedia.org/wiki/Clean-room_design
(as always, IANAL)
Interoperability falls under what gets filtered out in the filtration step of the test.
The stakes are low, it’s mostly for fun and you can iterate on it. Compare this with Bun which was just like, “hey we converted everything to Bun to Rust from Zig, of course it works, what could possibly go wrong, I’ll totally write up a blogpost (that still doesn’t exist) explaining what we did, you can put this into your production environment soon!”
Blogposts were promised, details were hinted, but no, it’s just full steam ahead because the AI worked so well. The converted unit tests all worked, all the synthetic tests are okay, so what are you complaining about?
At some point, it’s less about the technical questions and more about getting that pesky human buy-in.
"Yes, the AI rewrote the code. No, we do not pretend that we've scrutinized the code, or that we understand it. It works, tests pass, so we don't care, and so shouldn't you."
The "recklessness" is offered as the new normal. Because it kinda, well, works for them.
Also they're probably interested in the team just as an acqui-hire of good developers, and they're probably interested in the marketing value of converting the actual bun to rust via LLMs. But mostly I'd assume it was about needing the team to effectively direct the LLMs.
The problem is: quickly fixing problems (or preventing problems) benefits from having a good understanding of what the code is doing.
If you do have a suite of automated checks that's comprehensive enough that if it passes, no one will have any problems with the result, I think I'd agree. -- I don't think we're quite there at the point where "programming" is coming up with that suite of automated checks and then just not regarding the source code of the program itself.
- I don't think Claude Code is using the Rust version yet in their official build
- Claude Code is not a particularly complicated piece of software from an engineering perspective (nor it's particularly well-engineered, at least at the moment).
So in my book "it runs Claude Code" would be pretty weak evidence that the rewrite is going to be successful (the tests they've done are much better evidence, but that's a topic for another time).
No, I'm pretty sure it is, actually, since June 17:
https://code.claude.com/docs/en/changelog#2-1-181
>> Upgraded the bundled Bun runtime to 1.4
Now, Bun 1.4 doesn't seem to officially exist on https://bun.com/blog or https://github.com/oven-sh/bun/releases, so I can't be 100% sure this is the Rust version. However, I have to do some patching of the Claude Code binary to get it to run on my OS, and version 2.1.181 coincided with some changes that make suspect it's using Rust now.
https://grigio.org/bun-1-4-the-controversial-ai-driven-rewri...
> 13,044 unsafe blocks in the resulting Rust code (hand-written Rust projects of similar size average ~73)
Grok is this true?
I've heard the meme that AI written rust code is absurdly full and safe blocks but... that's pretty funny.
Hang on. A claim like that can be verified with a single grep! Give me a minute...
Hey, that's progress!If I understand what happened here correctly this isn't really a case of any such meme, but the result of the porters (heh) telling the LLM to directly convert zig code using unsafe to match the previous code "exactly".
I.e. more like using the LLM as a fancy version of c2rust [1] (which would result in just as much unsafe) than a result of LLMs reaching for escape hatches too liberally.
[1] https://github.com/immunant/c2rust
The high number of unsafe blocks is a good sign.
I've never understood why people make fun of Rust code that has lots of unsafe blocks. Obviously, the goal is to reduce those blocks, but consider also the number of safe blocks!
Last I heard Claude Code devs were trying to compare their app to a game engine or rendering system.
This was summarily ridiculed. Are you saying that writing a game engine is easier than writing Claude Code?
Huh... it looks to me like bun has yet to cut a release post Zig->Rust port (the latest one on github is still on a branch that says it's written in zig in the readme). I assume that nothing is using the rust version yet...
Which also cuts against the complaints about "of course it works [...] you can put this into your production environment soon!" since they don't seem to be asserting either of those things.
When someone on another social media platform commented expressed some concern, his response was to ask him what the explicit bug he was talking about was and that he would generate a fix. That sound you hear is the woosh as the point flies by. And in general, this just feels like a consistent problem with Bun.
The problem is what comes next. They now have code that they don't understand, and they are likely to work on it with AI in the future, but the new features they may introduce later will not have the luxury of hand-written tests and a reference code. So, unless they undertake the massive effort needed to fully understand the Rust code and deal with all these "unsafe", quality is very likely to go down, Microslop style.
Seems doubtful, I'd put money on it being something like Visual Studio or Visual Studio Code. Maybe CC could claim the (odious) title of most actively used vibe-coded development app, though.
I... somehow did not know that.
What I ended up with was a port of Duke 3D that uses half the allocated RAM as DukeGDX.
This is quite the understatement. Actually, it's probably the understatement of the year.
"Pretty good, not bad, great use case".
Dude. Fable fucking did what?
This is another "AI-ism" I noticed, mostly in coding agents - they seem to be very fond of making up new "compound nouns" (and occasionally verbs) to sum up relatively complex and specific concepts into single noun phrases. I wasn't sure if it's to save tokens or if the AI uses this to get a concise "identifier" for a concept that it can refer back to later, but I found it very noticeable.
I find the resulting sentences hard to read, though it does get better if you're aware of that tendency and make a conscious effort to parse the noun phrases. But I guess since it's just intermediate output from coding agents and not text for essays or blog posts, it's fine.
It's a thing in some Germanic languages. Instinct is to merge nouns into word, e.g. 'lawnchair', but that gives you a red squiggly line, but 'lawn chair' also looks wrong, so 'lawn-chair' is the middle ground.
https://www.iwm.org.uk/collections/item/object/27774
English word origins are a fascinating rabbit hole.
My favourite example of which is Northern Ireland's Orange Order.
The colour is orange, because that was the Royal colour of the family of the monarch it was named after, William of Orange, who was Dutch, titled after the principality of Orange which is named after the city of Orange which is French which got its name from the Celtic word for forehead or temple.
The colour is named after the fruit, the fruit's name is a corruption "a norange" -> "an orange", which goes back to naranja which goes to Arabic which goes to Classical Persian which goes to Sanskrit.
Meanwhile, the dutch word for the fruit is sinaasappel, Chinese apple, compare with the English word "mandarin" used for many different Chinese things.
I don’t think it’s easy on native speakers when it happens, but it’s even harder when you’re not.
--- AGENTS.md ---
## Plain words, not jargon
Don't use jargon-as-shorthand. Say what you actually mean.
- Don't say "load-bearing assumptions". Say "the assumptions the xyz depends on".
- Don't say "cross-service". Name both services, e.g. "whether the X service can derive duration without calling the Y service". "Cross-X" is confusing because it hides which things are involved.
- Don't deliver verdicts as abstract noun-phrases like "Cross-RCA double-counting is unfounded". Say it plainly: "I checked whether the same root cause gets counted twice across RCA runs, and it doesn't."
## No earth-shattering declarations
Don't hype findings. Skip "a critical finding changes everything", "now I have the full picture", "this changes the game", etc. Just state what you found plainly. Most findings are ordinary; report them that way.
## Don't reflexively hedge a "yes"
When the answer is yes, say yes. Don't soften every positive answer with a caveat: it erodes confidence in the "yes". Only add a caveat when there's a genuine, specific uncertainty worth flagging.
On another note, I find AI instructions like this (e.g. "Don't hype findings. Skip "a critical finding changes everything",...") more harm than good in my own uses. It changes behavior in subtle ways that makes it less predictable to me. I'd rather it has its own AI-isms and quirks, that I've fully gotten used to, and I know what to expect. I know when it says certain things, in certain ways, that's what I think it means. Quirks and AI-isms don't annoy me, I get used to how it states things.
> "now I have the full picture"
I always interpreted that phrase as a sort of marker to delimit the phase in which it explores the codebase and gathers information from the phase in which it implements the changes.
Not sure if it's still done, but I think some months ago there was discussion that some of the phrases are injected by the inference loop to "steer" the model - e.g. "But wait" if a thought block was too short etc. Obviously such phrases couldn't be influenced by the prompt.
Anyway: in my case Opus absolutely did not follow a similar instruction in the CLAUDE.md file. (But then again: it hardly followed _any_ CLAUDE.md instruction properly)
And if you manage to do this automatically before committing, you’ve built the backpressure everybody is talking about.
And probably that should be run in different harness or with custom system prompt? Since they introduce quirks and glitches as well.
(somehow this motivated me to resurrect HN account)
No, it’s good. When they stop doing this, it’ll be harder spot the machine slop.
But such personification is a natural part of how the English speak.
still cool but the title makes it sound like it was done from scratch
> rendering DirectX 8 → DXVK → Vulkan → MoltenVK → Metal.
Ok, *this* is a bit weird. Why create such a jenga tower of indirections instead of directly letting the LLM port the rendering code from D3D8 to Metal either through a D3D8-to-Metal shim or even better by creating a new Metal-based render layer beneath the higher level game specific rendering code? I would expect that the LLM can 'see through' all those redundant shims and collapse them into the equivalent Metal code.
Also the readme says 'no emulation', but then goes on to describe the rendering layer as emulating D3D8 on top of Vulkan on top of Metal ;)
(also why are both Meson and CMake required)
PS: after reading more, it can be explained by what this project does (and it's not what the HN title says): it's not a port from the original C&C Generals code release to macOS/iOS, instead all the heavy lifting (of making the original code base portable, and providing example ports to Linux and macOS) was all already done by an existing project (https://github.com/fbraz3/GeneralsX), all that this project did was slightly enhance the existing macOS version so that it also runs on iOS.
Suddenly this is much less impressive and could probably have been done just as well with older and simpler models (or tbh, a few hours or at most a few evenings of manual coding - macOS and iOS code is nearly identical for this type of application).
EA Games open sourced the original C&C Generals source code a year ago.
GeneralsX is a fork of the original source code. The fork changes the code to be easier to be ported to other platforms, which GeneralsX provides native Linux and macOS builds.
This project adds a iOS target for the GeneralsX project, the iOS port was made using Claude Fable.
It is cool that a LLM was able to create a iOS port? Yes, but saying like if it was something that was hard or that it would take too much time to do before LLMs is a bit disingenuous in my opinion, especially because the GeneralsX had already done the bulk of the effort of making the code portable in the first place, and that there was already a macOS port.
For reference, the iOS port only needed to add 2,179 lines of code on files that already existed on GeneralsX, and that's not excluding comments, which Claude loves to add some LARGE comments, and things that are iOS app specific, like the app's Info.plist.
still very cool, and sci fi not long ago
But it didn't, thats the whole point. The game in question was updated like a day ago, not 20 years.
Fable added few config files for iOS and a gesture mapping to mouse events. It did not do any of the hard stuff.
The title is so misleading that it is probably the single reason why this made to the front page with people assuming it actually did anything hard here.
If anyone deserves the recognition - its the upstream projects that made the game modern and cross platform in the first place.
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes)
It’s cool that someone took the extra steps to run it on iPad and iOS, but if the README is correct then it was already ported to macOS? Going from Mac to iPad isn’t trivial, but it’s a much smaller jump than porting into the Apple world the first time.
You can sidestep flags by just compacting and then changing the model back at any rate.
> "ERROR! Failed to install app '2732960' (No subscription)"
This is of course mentioned in the read me.
Am I reading that right? It makes API calls that go through 5 different layers before actually getting rendered? That's kind of crazy. I'm surprised it works, although I guess the underlying libraries are solid enough that it shouldn't be unexpected.
This was the pipeline in Proton for macOS (I'm not sure if it's still is the case, been quite a while since I checked).
There're some D3D implementations over Metal that could skip the Vulkan layer but none implement the old D3D8 so you'd still need another layer that implements e.g. D3D8 over D3D9-11. Also, DXVK and MoltenVK have got a lot of traction and fixes on their own, so they're probably the most accurate pipeline for D3D on Metal.
It's not the "clean room" approach and companies could still claim it violates some kind of copyright and get it taken down.
Theoretically you could clean room by having different agents/models/context windows to do both decompilation and reimplementation. This is untested in court afaik and I don't think anyone wants to spend money to find out.
There was a non-clean room reimplementation of gta3 a few years ago. The gta publisher DMCAd and of course the fans who did it didn't have any money to fight in court (and probably couldn't find anyone who would take a big complicated case on such bad facts pro bono). https://www.gamingonlinux.com/2021/02/take-two-interactive-h...
This started back in February and looking at commits, Fable did only a small part of the latest commits. 19 commits out of 2000:
https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
And maybe it wasn't even Fable, they might have downgraded to Opus.
This is the kind of frequent misinformation that makes me skeptical of Anthropic LLM claims. Whenever I compare them to GPT 5.5 on my web dev workflows, they seem to trade blows, even Fable, which I started testing since it was re-enabled.
Also I bet any decent LLM could have done such port. Think GLM 5.2 or similar which would probably work better because it doesn't constantly try to guess if I'm a terrorist trying to hack goverments or develop some biological weapon.
People just don't have the resources to compare LLMs and imply whatever they used is the best thing ever and unlocked some new workflow.
I have seen little improvement since Opus 4.6.
A great use for what AI can help with, especially in the hands of dedicated fans. Maybe I will find some time to try and experiment with custom maps or units, the modding scene of C&C Generals was always pretty lively.
This means you can play for maybe 10 minutes on the happy path but just as you are getting into the zone either a CTD or some strange event would make the game/simulation unplayable.
And while debugging is made easier, it's much more effort than telling the model to convert the code. Hence it's usually not done in these demos.
Most of these low-hanging bugs would have been caught upstream by now.
Then, you first need some tooling, either Ghidra (open-source) or IDA (paid), and some tooling to expose them to an LLM. I have a custom IDA Python-based CLI that lets LLMs trivially call into IDA's Python APIs from CLI, but there are tens of different Ghidra/IDA MCP/CLI/SQL projects out there.
After that, it becomes more mechanical, you just let the agent (or multiple agents) explore and start renaming (easier to start with functions + globals), better if it's something that's directly applied to the suite you're using, so that all names show up everywhere. This is actually quite a quick process, especially for older/smaller games. After you have enough function names, you need to instruct and have LLMs add actual types, so that the decompile doesn't have raw casts and offsets, but real fields + types. They will also need to apply types to globals and functions.
Afterwards comes the hardest part - you can export this very well named/annotated decompile, and do one of:
1) Have the LLM try to directly polish the code enough to be compilable. Despite of the decompile quality, this isn't as hard as it sounds.
2) Have the LLM recreate the project from scratch in another language, something like https://banteg.xyz/posts/crimsonland/. This can be easier to get initial results, but you're sure to hit tons of bugs due to the differences in implementations.
The 1st approach is more thorough, especially because you can find a matching C/C++ compiler and start doing actual decomp.dev-like work - binary matching functions so your source code compiles down to the exact bytes as in the original binary. This is the longest, hardest part, human community projects take years to complete, and LLMs still struggle with getting matches for 100%, so you might spend weeks-months, and tons of LLM usage - an agent can take like an hour to match a single 1000-byte function in worst case.
As a small note - you do not need to binary match 100% to have the game be absolutely playable. Compilers are often very tricky to lead, so you might already have the code that does exactly the same thing, but just a different local variable layout might make the compiler use different registers.
So if that is released to the public, it's in the public domain, no license is applicable.
https://github.com/electronicarts/CnC_Red_Alert
This seems to be the most active port saying it works on a Mac/Linux https://github.com/Daft-Freak/CnC_and_Red_Alert
Life was different back then. Source control systems were a LOT worse (this is CVS era for open source development). We certainly weren't in the current era where everyone wants to play these old games on their phones now.
What almost certainly happened is all copies of the source were simply lost. They may have sat on someone's hard drive, a team server hard drive, or somewhere else. It's possible they didn't have more than a few copies while development was ongoing.
cnc-ddraw i think would get it to run fine on a steam deck though, so you should be able to play it without much issue
Damn, I still have the CD in one of my unopened boxes from our last move.
the result: http://jhedin.github.io/merlin-s-revenge/
reasonably it works quite close to the lingo, but this is way difficult, and not just from being rusty. steve had most things triggered on the animation frame, which opus hasnt quite figured out by looking at the code and pulling stuff out of the .dir
i do remember that playing at double scale was a lot harder in general, but theres a really clear cooldown missing between attackes
One big caveat with iPad and mobile, though, is battery usage. I strongly suspect that power consumption is the reason that a number of games made it to Mac, but not iPad.
Fable contributed 19 commits; that's well within a solo effort.
> The naive plan (port EA's raw source) is a multi-month job. The actual job was "port the best community fork," which was a one-session job.
https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/blob/ma...
Still, it represents a possible way how AI gets rid of team members.
Another great case study in why native Vulkan drivers would be a boon for Apple's mobile computing. That's quite the render pipeline...
Every time I try to vibe code myself to sleep I blink once and it's 5am. Creating is too much fun.
Any tips?
> Built on EA's GPL v3 source release via fbraz3/GeneralsX (which did the heavy lifting of the macOS/Linux port — this fork adds the iOS/iPadOS port and a set of engine fixes)
Fable added 19 commits on top of the parent fork, which did not use AI.
You can see the diff of what Fable added here: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/compare...
Wait. It's a port from a game from 2003. I don't think PC had 4 GB of memory back then (unless my memory is fuzzy, ah!): I mean, maybe some had that, but not the majority. I doubt the requirements for the original C&C Generals were 4 GB of memory.
OK, I just checked on a box of C&C Generals on eBay: requirement 128 MB of RAM (I know I could have asked a LLM, but checking a picture of an actual box is kinda fun).
I understand the need for a bit more graphics etc. but that's still a big jump: if the reqs were 128 MB or RAM for the PC, the game wasn't using that.
So we're talking something like a 32x inflation in RAM usage during the port (unless I didn't understand the caveat).
Why can't a game requiring 128 MB in 2003 run on machine 20 years more recent without using all the RAM?
Is there a plausible reason or are we to consider that when porting using Fable, we can expect the RAM usage of a program to go up by 32x?
EDIT: the original game has more asset than I would have guessed, skimming through the port's docs I found this:
> the game requires .big archive files (INIZH.big, MapsZH.big, etc.) totaling 4-5 GB. These files cannot be committed to repository due to copyright (EA Games property).
4 / 5 GB is not nothing. I wonder if the memory issue could be related to the way these are loaded?
Seems like an impossible ask to verify if you don't have an immense test suite that covers everything.
What works (all verified on a real iPad and iPhone):
Campaign, Skirmish, and Generals Challenge: full missions, objectives, cutscenes, saves All audio: music, unit voices, EVA announcements, Challenge taunts, briefing FMVs Touch controls built for RTS: tap select, drag a selection box, long-press deselect, two-finger camera pan, pinch zoom Self-contained install: game data ships inside the app bundle It's the real engine: unmodified game logic compiled for ARM64, rendering DirectX 8 → DXVK → Vulkan → MoltenVK → Metal. Not emulation, not streaming.
No game assets are included or distributed. You need your own copy (Steam sells Zero Hour) and a script pulls the data from your own account. Code is GPL v3.
Repo, with a full engineering log of every bug and fix (the black-minimap one is a 2003 texture-format fallback that ate the alpha channel; worth a read if you like archaeology): https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/blob/ma...
Building: macOS is about four commands; iPhone/iPad needs Xcode and a free Apple developer account since you sideload your own build. Known issues (long-session memory on iPad, a rare backgrounding crash) are documented in the README.
Credit: fbraz3/GeneralsX did the heavy macOS/Linux lifting, TheSuperHackers keep the community codebase alive, and EA did a genuinely good thing releasing the source. The engine fixes I found are heading upstream so every platform benefits.
(And of course, not affiliated with or endorsed by EA, and sorry China had to deal with all of those particle cannons in that demo video)
I found the bundle scripts already prefer VULKAN_SDK/VULKAN_SDK_ROOT, but the build script only scans ~/VulkanSDK
https://youtu.be/WqWFYOxjZ54?si=1pH6Z1D33TOT4Qmg&t=453
Good job. It was inevitable, but still someone had to, please excuse me, say the words.
Pylint is different because it’s working against a necessarily dynamic wavefront that it has to keep parity with as it advances. All python changes, ecosystem adaptations, etc - and maintaining that with an AI harness in CI would never work. It would require a concerted effort and thought along the way.
So it’s sort of a different beast all together. In fact I think this is a great demonstration of using AI to resurrect technology built for X to work with Y, where X is dead and Y is current. Automating this feels like a net positive and because the original software is “finished” there isn’t decision making and strategy required.
"Who will maintain this?" appears to be "Me with an agent". And it's great.