<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: madmoose</title><link>https://news.ycombinator.com/user?id=madmoose</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 10 May 2026 08:45:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=madmoose" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by madmoose in "The Duodecimal Bulletin, Vol. 55, No. 1, Year 1209 [pdf]"]]></title><description><![CDATA[
<p>There's nothing "natural" about the Fahrenheit scale either. Fahrenheit took the Rømer scale, multiplied it by 4 and rounded it off a bit.</p>
]]></description><pubDate>Tue, 23 Dec 2025 18:22:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46367741</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=46367741</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46367741</guid></item><item><title><![CDATA[New comment by madmoose in "MegaRace, CD-ROM, FMV, and the Multimedia Dream of the 1990s"]]></title><description><![CDATA[
<p>I've been slowly reverse engineering Cryo's Dune, coded by Rémi Herbulot in assembler, and the code is both brilliant and insane.<p>Every function (to the extent that you can call it a function in assembler) is manually tail call optimized, often to the point of just doing fallthrough by placing functions after each other.<p>All arguments and return values are passed in registers and flags. Sometimes I'm investigating where a pointer in the SI or DI register came from and I'll have to trace back through several function layers that just didn't touch those registers to find the place it was set. When you're looking at a function, all registers and flags are potential return values.<p>Everything is hardcoded, all the resource id's are fixed, extracting things from the resources files requires that you know what's where. In the file ATTACK, entries 0–52 are sprites, 53-55 are palettes, and he does math on the id's to find the previous/next one (dec/inc).<p>Some of the resource files are compressed, which you can tell by checksumming the 6 byte header. If the header bytes add to 0xAB and the third byte is zero, it's compressed.<p>In the video decoder, there are chunks for sound that start with SD, chunks for palette updates that start with PL, and chunks for frame data which are identified by them /not/ having a chunk identifer. That saves a whole 2 bytes per frame!<p>The globe renderer is a work of art, the room renderer constructs the game backgrounds from sprites, lines and polygons with randomly dithered coloring – although his implementation of the Bresenham line algorithm is slightly broken :). In the CD version the game has lipsync data embedded in the audio files.<p>I built in 8086 emulator just to help me reverse engineer this game…</p>
]]></description><pubDate>Sat, 06 Sep 2025 08:10:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=45147503</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=45147503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45147503</guid></item><item><title><![CDATA[New comment by madmoose in "A 6-Hour Time-Stretched Version of Brian Eno's Music for Airports"]]></title><description><![CDATA[
<p>Music for Real Airports is one of the albums I put on to block out the world when I’m trying to get work done.</p>
]]></description><pubDate>Wed, 02 Apr 2025 06:44:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43554216</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=43554216</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43554216</guid></item><item><title><![CDATA[New comment by madmoose in "Parsing JSON in 500 lines of Rust"]]></title><description><![CDATA[
<p>> Fortunately `f64::parse` accepts a strict superset of JSON number grammar<p>Just for the sake of completeness, and not to imply that you don't know this, but the JSON spec doesn't limit the size or precision of numbers, although it allows implementations set other limits.<p>I have encountered JSON documents that (annoyingly) required the use of a parser with bigint-support.</p>
]]></description><pubDate>Wed, 19 Feb 2025 08:32:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=43099934</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=43099934</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43099934</guid></item><item><title><![CDATA[New comment by madmoose in "MuPDF WASM Viewer Demo"]]></title><description><![CDATA[
<p>On the other hand, about a decade ago I sent them a feature patch to support multipage tiff images and they sent me a Christmas card for a couple of years, so my impression of them is pretty god.</p>
]]></description><pubDate>Sat, 20 Apr 2024 12:06:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=40096730</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=40096730</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40096730</guid></item><item><title><![CDATA[New comment by madmoose in "Dear Paul Graham, there is no cookie banner law"]]></title><description><![CDATA[
<p>I've stopped going to Ars Technica exactly because their cookie pop-up lets me know that Condé Nast wants to share my data with at least (according to the popup) 159 partners.<p>They have so many "partners" that their cookie popup comes with a search bar.<p>56 of their "partners" want my precise geolocation data!<p>16 "partners" want to actively scan my device!<p>101 "partners" want to "match and combine data from other data sources" (I can't disable or object to this)<p>102 "partners" want to identify my device. I also can't object to this.<p>The only way I can really object is to close the tab, so that's what I do.</p>
]]></description><pubDate>Mon, 18 Mar 2024 12:31:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=39743413</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=39743413</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39743413</guid></item><item><title><![CDATA[New comment by madmoose in "The First Dune Game 32 Years Later: An LGR Retrospective [video]"]]></title><description><![CDATA[
<p>I've been entertaining myself lately by reverse engineering Cryo's Dune. I've got all graphics resources (videos, sprites, rooms) decoded, and I have recreated most of the intro (which exercises a good deal of engine).<p>I also made an interactive Dune globe renderer (in WASM and Rust!): <a href="https://thomas.fach-pedersen.net/dune/globe/" rel="nofollow">https://thomas.fach-pedersen.net/dune/globe/</a><p>It should be pixel accurate to the in-game one, although I haven't validated it lately.<p>It's very slow going though. The original game was coded in highly optimized idiosyncratic 8086 assembly. It's difficult to read, much more so than compiler-generated machine code from the same era.</p>
]]></description><pubDate>Fri, 08 Mar 2024 20:47:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=39646263</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=39646263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39646263</guid></item><item><title><![CDATA[New comment by madmoose in "ScummVM on the App Store"]]></title><description><![CDATA[
<p>There's no general purpose virtualization involved in ScummVM. It's a collection of game engines derived mostly from reverse engineering old games.</p>
]]></description><pubDate>Sat, 30 Dec 2023 16:20:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=38816388</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=38816388</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38816388</guid></item><item><title><![CDATA[New comment by madmoose in "ScummVM on the App Store"]]></title><description><![CDATA[
<p>Most game engines have scripting languages built in.</p>
]]></description><pubDate>Sat, 30 Dec 2023 16:18:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=38816373</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=38816373</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38816373</guid></item><item><title><![CDATA[New comment by madmoose in "ScummVM on the App Store"]]></title><description><![CDATA[
<p>ScummVM isn't an emulator, it's a collection of game engines based on reverse engineering and, on occasion, original source code donations.</p>
]]></description><pubDate>Sat, 30 Dec 2023 16:17:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=38816360</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=38816360</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38816360</guid></item><item><title><![CDATA[New comment by madmoose in "GCC Adopts a Code of Conduct"]]></title><description><![CDATA[
<p>Why do you feel the need to make up nonsense examples about moon-cheese to make the discussion relatable to "common men"?<p>Do "common men" not understand sensible examples or do you not have sensible examples?</p>
]]></description><pubDate>Thu, 22 Jun 2023 13:47:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=36432105</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36432105</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36432105</guid></item><item><title><![CDATA[New comment by madmoose in "A Huawei bid turned into a hunt for a corporate mole"]]></title><description><![CDATA[
<p>TDC has stated to Danish media that they "recognize parts of the story" but have refused to elaborate. They haven't wished to refute any parts either.<p><a href="https://nyheder.tv2.dk/business/2023-06-16-tdc-genkender-dele-af-historie-om-kinesisk-spionage" rel="nofollow noreferrer">https://nyheder.tv2.dk/business/2023-06-16-tdc-genkender-del...</a></p>
]]></description><pubDate>Sat, 17 Jun 2023 06:04:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=36367719</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36367719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36367719</guid></item><item><title><![CDATA[New comment by madmoose in "/r/startrek/ migrates to lemmy"]]></title><description><![CDATA[
<p>Ask reddit, they used to have an API.</p>
]]></description><pubDate>Thu, 15 Jun 2023 14:58:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=36341435</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36341435</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36341435</guid></item><item><title><![CDATA[New comment by madmoose in "Effective Rust (2021)"]]></title><description><![CDATA[
<p>Of course I'm talking about an idiomatic implementation, what else would I be talking about in this context?<p>> The idiomatic way to represent a growable list in C is to make a list (using some implementation) and put it in a structure with bookkeeping data, then using that list by passing it (or a pointer to it) to plain old functions to use it.<p>That sounds like a long-winded way to say "there's no one idiomatic growable list in C".</p>
]]></description><pubDate>Thu, 15 Jun 2023 14:56:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=36341394</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36341394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36341394</guid></item><item><title><![CDATA[New comment by madmoose in "Effective Rust (2021)"]]></title><description><![CDATA[
<p>> For C and Go, there really is only one prevailing idiom on how to write code<p>What’s the one idiomatic idiom in C for a growable list of items? Because I must have a seen a hundred of those in my time.<p>What’s the one idiomatic idiom in C for a hashmap? I’ve seen about a hundred of those too.</p>
]]></description><pubDate>Thu, 15 Jun 2023 14:27:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=36341022</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36341022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36341022</guid></item><item><title><![CDATA[New comment by madmoose in "Speed running Monkey Island"]]></title><description><![CDATA[
<p>There are no original compilers of SCUMM script available online as far as I know, although certainly Ron Gilbert and Aaron Giles and probably some other LucasArts programmers have the originals.<p>I don't think there were even any samples of the original scripts online when ScummC was developed so it can be forgiven for not matching the original format :)</p>
]]></description><pubDate>Fri, 02 Jun 2023 22:11:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=36171469</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36171469</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36171469</guid></item><item><title><![CDATA[New comment by madmoose in "Speed running Monkey Island"]]></title><description><![CDATA[
<p>You can study the reverse engineered code of a lot game engines. ScummVM is a massive collection of reverse engineered game engines, with the occasional donation of original game code from kind developers.</p>
]]></description><pubDate>Fri, 02 Jun 2023 22:06:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=36171431</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36171431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36171431</guid></item><item><title><![CDATA[New comment by madmoose in "Speed running Monkey Island"]]></title><description><![CDATA[
<p>ScummVM is not emulation, it's primarily a collection of reimplementations of game engines based on reverse engineering, with the occasional donation of original source code from the developers.<p>So with ScummVM you can study how the original SCUMM virtual machine worked, but to see the original SCUMM scripts before they were compiled we have to rely on the kindness of Ron Gilbert :)</p>
]]></description><pubDate>Fri, 02 Jun 2023 22:05:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=36171416</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36171416</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36171416</guid></item><item><title><![CDATA[New comment by madmoose in "VanJS (Vanilla JavaScript): smallest reactive UI framework"]]></title><description><![CDATA[
<p>Bash?<p>So VanJS will make the simple things easy and anything else nigh-on impossible?</p>
]]></description><pubDate>Thu, 25 May 2023 10:11:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=36068869</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=36068869</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36068869</guid></item><item><title><![CDATA[New comment by madmoose in "Why are so many young Americans adopting fake British accents?"]]></title><description><![CDATA[
<p>The Wire even has a scene where Dominic West's character puts on a British accent. So a British man pretending to be an American pretending to be a Brit.<p>The Wire is very good.<p>It also features Idris Elba, so it has two British people playing Americans on either side of the law .</p>
]]></description><pubDate>Mon, 15 May 2023 11:36:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=35946575</link><dc:creator>madmoose</dc:creator><comments>https://news.ycombinator.com/item?id=35946575</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35946575</guid></item></channel></rss>