<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: paavohtl</title><link>https://news.ycombinator.com/user?id=paavohtl</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 29 Oct 2026 16:17:51 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=paavohtl" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by paavohtl in "The HTML-in-Canvas API origin trial"]]></title><description><![CDATA[
<p>You can't solve this with a library without essentially implementing a separate browser engine in JS (or WASM). Doing this directly in the browser engine is far simpler than that.</p>
]]></description><pubDate>Fri, 23 Oct 2026 09:14:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=50206318</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=50206318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50206318</guid></item><item><title><![CDATA[New comment by paavohtl in "AnyPS5: Port PS5 binaries to PC without emulation (87% system libraries mapped)"]]></title><description><![CDATA[
<p>I was specifically referring to PS4 and Xbox One. Power-wise Nintendo platforms since Wii are essentially (at least) one generation behind the other consoles, and generally speaking Nintendo platforms have their own games rather than relying on big multiplats, outside of indie games.</p>
]]></description><pubDate>Wed, 07 Oct 2026 06:47:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=49989209</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49989209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49989209</guid></item><item><title><![CDATA[New comment by paavohtl in "AnyPS5: Port PS5 binaries to PC without emulation (87% system libraries mapped)"]]></title><description><![CDATA[
<p>Power-wise Steam Deck isn't on par with current gen consoles nor even last gen consoles. It can play plenty of games, but we've reached a point that it can't run most new AAA games at an acceptable level of performance regardless of settings. With a console you can buy pretty much any game and assume that it will run at a playable frame rate (though there are of course exceptions).</p>
]]></description><pubDate>Wed, 07 Oct 2026 06:26:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=49989063</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49989063</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49989063</guid></item><item><title><![CDATA[New comment by paavohtl in "We're working on a new RuneScape MMO"]]></title><description><![CDATA[
<p>What I'm talking about is how the game engine represents 3D space, and how engine capabilities enable and constrain game design.<p>> 3D is an illusion in this sense in every game, with the potential exception of space combat simulators.<p>In almost all general-purpose game engines, most game objects are modeled as 3D polygonal meshes and placed in the world using three coordinates. They can be scaled and rotated freely. The world can be viewed from any position and angle and with any projection (disregarding some of the limitations imposed by rasterization). Object movement and physics are continuous and handled uniformly regardless of direction. Whether or not this is an illusion is a question of philosophy, but I can't think of a way this could reasonably be more "real".<p>> And they can only make it work by pretending inertia doesn't exist.<p>This hasn't been true for decades. The Elite series has done this since the 90s, and the latest entry Elite Dangerous implements physics-based space dogfighting with momentum and inertia, though you need to disable Flight Assist to get the full simulation. For a more grounded simulation, Kerbal Space Program implements enough orbital mechanics to support satellites in different orbits, and is realistic enough to enable many real-world spaceflight techniques. And I also have to mention Outer Wilds and its small solar system with simulated spherical explorable planets and moons. All of these games would be fundamentally impossible without 3D.<p>> You can fly in World of Warcraft, but all of the content is on the ground, and the designers keep griping about how they don't want you to fly because it makes them feel bad when you skip their content.<p>This is a statement about Blizzard's game design, rather than anything fundamental about 3D. Yes, giving players the ability to fly requires a different approach to world design. That doesn't make WoW any less 3D. You can have a bridge, and one player can walk on it while another is under it. And a third player could be flying over it with a flying mount.<p>> You can jump in Quake. You can't jump in Doom. This makes no difference. Level layout is the same.<p>Doom levels are 2D with added height information. Quake levels are actually 3D. This imposes many fundamental limitations on Doom level design. You can't build a multi-floor building in Doom where you can see down to the previous floors. You can't have a pit in the middle of a room and leave the pit via a tunnel, because you can't have two walkable surfaces laid vertically on top of each other. You can't walk on top of a building and then enter it, or have floating platforms, walk under a bridge, have a spiral staircase that overlaps itself, etc.<p>> Elevation is real in both games; you can always walk up a ramp. There are three dimensions whether you can jump or not.<p>Doom has heights, but it cannot represent arbitrary 3D geometry, only a very limited subset.<p>RuneScape is somewhere between Doom and Quake, with its own set of limitations. While the game uses actual 3D models and therefore can display any 3D shape, much like Doom the world consists of top-down 2D levels with per-tile & object height information. The game does enable "rooms over rooms" by having up to four floors / layers per tile, used for things like multi-floor buildings. The player can't walk between floors; they must use an object like a ladder, a portal or agility shortcut to teleport to another floor.</p>
]]></description><pubDate>Sun, 04 Oct 2026 10:11:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=49952441</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49952441</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49952441</guid></item><item><title><![CDATA[New comment by paavohtl in "We're working on a new RuneScape MMO"]]></title><description><![CDATA[
<p>They've already confirmed that this is a new game, not a continuation of RS3. New world, different gameplay (WASD movement instead of clicking), different everything.<p>This is also not their first Unreal game, as they just released the 1.0 version of RuneScape Dragonwilds, their survival-crafting multiplayer game that has been both a critical and commercial success. It appears that RS4 is to some extent an expansion of Dragonwilds into a proper MMO.<p>Besides, if they're going to create a brand new big-budget MMO, what else other than Unreal could they realistically use? Graphics aren't the primary reason to replace the RS engine with Unreal - the reason is gameplay.<p>Their internal engine that they use for RS3 (and OSRS) is only suitable for games like current RS. Even RS3 is still fundamentally based on a 1 square meter grid, gameplay-wise 3D is an illusion (no jumping, climbing or flying), and most importantly game logic updates only once every 600ms, which is about one tenth of even World of Warcraft. They've made two pretty good games despite those limitations throughout the decades, but it can't scale to anything that feels more "modern".</p>
]]></description><pubDate>Sun, 04 Oct 2026 07:23:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=49951484</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49951484</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49951484</guid></item><item><title><![CDATA[New comment by paavohtl in "Windows 11½"]]></title><description><![CDATA[
<p>I can tell this is fake from the fact the explorer context menu and the start menu open in under 2 seconds (on a top end Ryzen CPU, nonetheless).</p>
]]></description><pubDate>Mon, 28 Sep 2026 18:30:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=49882343</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49882343</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49882343</guid></item><item><title><![CDATA[New comment by paavohtl in "Pnpm 12.0"]]></title><description><![CDATA[
<p>I was also bothered by this. I don't care if you use LLMs to write most or all of your code, but at least have the courtesy of actually writing your blog posts & readmes, to demonstrate that you at least understand what the LLM generated for you.</p>
]]></description><pubDate>Thu, 27 Aug 2026 06:19:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=49460566</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49460566</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49460566</guid></item><item><title><![CDATA[Rust project goals: Immobile types and guaranteed destructors]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/rust-lang/rust-project-goals/blob/main/src/2026/move-trait.md">https://github.com/rust-lang/rust-project-goals/blob/main/src/2026/move-trait.md</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49152023">https://news.ycombinator.com/item?id=49152023</a></p>
<p>Points: 245</p>
<p># Comments: 109</p>
]]></description><pubDate>Mon, 03 Aug 2026 06:42:00 +0000</pubDate><link>https://github.com/rust-lang/rust-project-goals/blob/main/src/2026/move-trait.md</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=49152023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49152023</guid></item><item><title><![CDATA[New comment by paavohtl in "WebGL Without a GPU"]]></title><description><![CDATA[
<p>Indeed, the post is rather obviously written by Claude. It's just missing a few "load-bearing"s and a "golden", so that I could have the full picture.</p>
]]></description><pubDate>Mon, 29 Jun 2026 15:42:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48720765</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48720765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48720765</guid></item><item><title><![CDATA[New comment by paavohtl in "Show HN: Decomp Academy – Learn to decompile GameCube games into matching C"]]></title><description><![CDATA[
<p>> The source code is theirs, binaries mixed with other copyrighted content is not.<p>Distributing binaries should not matter. If the binary is just compiled from the source code, the binary is just an (non-)infringing as the source code.<p>> They also allegedly violated a EULA<p>Meaningless. EULAs are not the law.</p>
]]></description><pubDate>Sun, 28 Jun 2026 07:47:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48705285</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48705285</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48705285</guid></item><item><title><![CDATA[New comment by paavohtl in "Show HN: Decomp Academy – Learn to decompile GameCube games into matching C"]]></title><description><![CDATA[
<p>Yes, quite easily. It requires some setup, but the basic idea is that you create a DLL and a simple loader program which injects it into your target process. You can then use a hooking library like MinHook to replace individual functions with your own implementations. If the target application is in C++, you can additionally do vtable hooking and replace functions even easier (though it will always be a combination of the two techniques).</p>
]]></description><pubDate>Sun, 28 Jun 2026 07:03:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48705093</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48705093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48705093</guid></item><item><title><![CDATA[New comment by paavohtl in "Linux eliminates the strncpy API after six years of work, 360 patches"]]></title><description><![CDATA[
<p>Rust is a significantly higher level language than C, but it can be used it almost all environments where C is used; provided there's a supported compiler target for it. In (safe) Rust, null is basically a guaranteed compiler optimization. Optional / nullable values are represented via Option<T>, which is a sum type of Some(T) and None. When a reference or other pointer-like value (e.g. Box<T>, an owned heap allocation) is wrapped in Option, the compiler can use the invalid bit patterns of T (such as null) to represent the None variant. This is called niche optimization.<p>So yes, it's nulls underneath, but the developer never has to think about them.</p>
]]></description><pubDate>Sun, 21 Jun 2026 05:53:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48616047</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48616047</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48616047</guid></item><item><title><![CDATA[Bevy 0.19]]></title><description><![CDATA[
<p>Article URL: <a href="https://bevy.org/news/bevy-0-19/">https://bevy.org/news/bevy-0-19/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48606640">https://news.ycombinator.com/item?id=48606640</a></p>
<p>Points: 6</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 20 Jun 2026 05:39:58 +0000</pubDate><link>https://bevy.org/news/bevy-0-19/</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48606640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48606640</guid></item><item><title><![CDATA[New comment by paavohtl in "Port React Compiler to Rust"]]></title><description><![CDATA[
<p>We have used React Compiler in production for a large ecom / media website for about a year. Performance has been fine overall, and we haven't ran into any major bugs attributable to it in that time.</p>
]]></description><pubDate>Wed, 10 Jun 2026 10:15:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48474089</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48474089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48474089</guid></item><item><title><![CDATA[New comment by paavohtl in "SimCity 3k in 4k (2025)"]]></title><description><![CDATA[
<p>I'm the author of said technical analysis! (<a href="https://blog.paavo.me/cities-skylines-2-performance/" rel="nofollow">https://blog.paavo.me/cities-skylines-2-performance/</a>)<p>But yes, at launch Cities Skylines 2 was very heavily GPU bound, due to very unoptimized meshes and a poor culling implementation. I haven't profiled it afterwards, but from what I've read they've optimized it enough that on most systems the limiting factor is now the CPU.</p>
]]></description><pubDate>Thu, 28 May 2026 05:27:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48304944</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48304944</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48304944</guid></item><item><title><![CDATA[New comment by paavohtl in ".NET (OK, C#) finally gets union types"]]></title><description><![CDATA[
<p>More like 25. C# 1.0 already had capabilities Java developers are still dreaming of, like structs / value types, properties and operator overloading. C# 2.0 in 2005 introduced generics, implemented far more competently than Java ever did.</p>
]]></description><pubDate>Sun, 24 May 2026 05:17:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48254615</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48254615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48254615</guid></item><item><title><![CDATA[New comment by paavohtl in "Async Rust never left the MVP state"]]></title><description><![CDATA[
<p>Considering the latest commits and issues in effects-initiative are about 2 years old, the keyword generics initiative seems effectively dead.</p>
]]></description><pubDate>Tue, 05 May 2026 11:23:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48020954</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48020954</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48020954</guid></item><item><title><![CDATA[New comment by paavohtl in "Metal Gear Solid 2's source code has been leaked on 4chan"]]></title><description><![CDATA[
<p>As it happens I do have the habit of writing very long blog posts - though none on OpenWA so far. The OpenWA readme file serves as a bit of an introduction, though it's already a month old.</p>
]]></description><pubDate>Sun, 03 May 2026 20:47:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48001310</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48001310</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48001310</guid></item><item><title><![CDATA[New comment by paavohtl in "Metal Gear Solid 2's source code has been leaked on 4chan"]]></title><description><![CDATA[
<p>I don't think it's impossible, but it would take a lot of time and a lot of money; likely more time than good enough models have been commercially available.<p>I have been working on an incremental decompilation-based reimplementation (basically how OpenRCT2 was done) of Worms Armageddon for the past 2 months with a lot of help from LLM tools; primarily Claude Code and Ghidra MCP. I've worked on it almost every day, reaching Claude Code Max 5x's 5 hour session limit multiple times every day. Suffice to say as a software rendered, sprite-based 90s PC game, Worms Armageddon is several orders of magnitude simpler than MGS2. Despite that, I think it will be 2-3 more months of work before I can compile a fully independent version of the game.<p>This is despite the game being an almost ideal candidate for automated RE, as it uses deterministic game logic with built-in checksum checks in replays and multiplayer. I've downloaded all the speedruns I could find for the game (as replay files) and I've retrofitted the replay system into a massively parallel test framework, which simulates over 600 games in about 30 seconds. So Claude can port all game logic independently without much need for manual testing; the replay tests can almost guarantee perfect correctness.<p>MGS2 doesn't have anything like that, so every ported function requires extensive manual testing. Even with LLM tools, an accurate decomp could take years (unless you're willing spend thousands of $currency per month on it).</p>
]]></description><pubDate>Sun, 03 May 2026 20:15:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48000939</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=48000939</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48000939</guid></item><item><title><![CDATA[New comment by paavohtl in "Every GPU That Mattered"]]></title><description><![CDATA[
<p>I think pairing RX 5700 XT with Control as the "defining game" is an interesting choice, considering the facts 1. AMD cards were incapable of RT at the time and 2. Control was basically the first game with a good, comprehensive RT implementation that had a massive positive impact on the graphics.</p>
]]></description><pubDate>Tue, 07 Apr 2026 09:15:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47672554</link><dc:creator>paavohtl</dc:creator><comments>https://news.ycombinator.com/item?id=47672554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47672554</guid></item></channel></rss>