• 0 Posts
  • 102 Comments
Joined 1 year ago
cake
Cake day: July 5th, 2023

help-circle


  • Let me know if you find one that uses AI to find groupings of my search terms in its catalogues instead of using AI to reduce my search to the nearest common searches made by others, over some arbitrary popularity threshold.

    Theoretical search: “slip banana peel 1980s comedy movie”
    Expected results in 2010: Pages about people slipping on banana peels, mostly in comedy movies, mostly from the 80s.
    Expected results in 2024: More than I ever wanted to know about buying bananas online, the health impacts of eating too many or not enough bananas, and whatever “celebrities” have recently said something about them. Nothing about movies from the 80s.


  • That was my first take as well, coming back to C++ in recent years after a long hiatus. But once I really got into it I realized that those pointer types still exist (conceptually) in C, but they’re undeclared and mostly unmanaged by the compiler. The little bit of automagic management that does happen is hidden from the programmer.

    I feel like most of the complex overhead in modern C++ is actually just explaining in extra detail about what you think is happening. Where a C compiler would make your code work in any way possible, which may or may not be what you intended, a C++ compiler will kick out errors and let you know where you got it wrong. I think it may be a bit like JavaScript vs TypeScript: the issues were always there, we just introduced mechanisms to point them out.

    You’re also mostly free to use those C-style pointers in C++. It’s just generally considered bad practice.



  • As someone who has often been asked for help or advice by other programmers, I know with 100% certainty that I went to university and worked professionally with people who did this, for real.

    “Hey, can you take a look at my code and help me find this bug?”
    (Finding a chunk of code that has a sudden style-shift) “What is this section doing?”
    “Oh that’s doing XYZ.”
    “How does it work?”
    “It calculates XYZ and (does whatever with the result).”
    (Continuing to read and seeing that it actually doesn’t appear to do that) “Yes, but how is it calculating XYZ?”
    “I’m not 100% sure. I found it in the textbook/this ‘teach yourself’ book/on the PQR website.”



  • Back in the olden days, when we used kerosene-powered computers and it took a three day round trip to get IP packets via the local stagecoach mail delivery, we still had games even though Steam didn’t exist yet. :b

    We used to transfer software on these things called disks. Some of them were magnetic, and some of them used lasers (you could tell them apart because for the laser ones it was usually spelled “disc” with a “c”).

    Anyway, those dis(k/c)s mostly still work, and we still have working drives that can read them, and because the brilliant idea of making software contact the publisher to ask if it was OK to run had only just been invented, we can generally still play games from the period that way. Some people kept their old games, but others sell them secondhand, which I believe the publishers still haven’t managed to lobby successfully to be made illegal, unless I missed a news report.

    Even if you can’t get the original physical media for a game, sites like GOG sell legal digital downloads of many old games, which are almost always just the actual old software wrapped in a compatibility layer of some kind that is easy to remove, so you can usually get the games running natively on period hardware/software. Finally, some nicer developers and publishers have officially declared some of their old games as free for everyone to play.

    There are still legal options for playing old games on old systems.


  • Most people use the term “Hungarian Notation” to mean only adding an indicator of type to a variable or function name. While this is one of the ways in which it has been used (and actually made sense in certain old environments, although those days are long, long behind us now), it’s not the only way that it can be used.

    We can use the same concept (prepending or appending an indicator from a standard selection) to denote other, more useful categories that the environment won’t keep straight for us, or won’t warn us about in easy-to-understand ways. In my own projects I usually append a single letter to the ends of my variable names to indicate scope, which helps me stay more modular, and also allows me to choose sensible variable names without fear of clashing with something else I’ve forgotten about.


  • I want to say that I wish I could’ve read this 25 years ago, but really, I wasn’t ready to take it to heart back then. In fact, even though I’ve had a couple of minor successes with free games that I deliberately didn’t get too attached to, I still have extreme difficulty just sitting down and making something–anything–rather than falling into a death spiral of over-thinking and grandiose designs. I might have to re-read this a few times to make it sink in.


  • The Steam Deck is a handheld Linux-based PC with a built-in game controller. The special Steam version of Linux (SteamOS) comes with software (Proton) that lets you run a lot of Windows games, and Valve have put some effort into helping/encouraging developers to get their games working with it.

    The Nintendo Switch is a closed system that can only play official Nintendo-licensed software. Even if you “jailbreak” a Switch, I don’t think that there’s any realistic way to get modern Windows games running on one.


  • I bought this back in the day, and played it through to the end. I vaguely recall somewhat enjoying it overall, but the strongest impression that I have now is of frequently being bombarded with unrepeatable, dense, plot-critical dialogue (usually from teammates via radio) during intense action scenes when I was busy trying to sneak around, evade, beat up, or have a shootout with multiple enemies simultaneously. This often seemed to be by design, with enemies spawning at the same time the dialogue begins. As a passive viewer watching a show, it’s cool when the characters have intense philosophical debates during fights, but as an active player I found it extremely difficult to follow both at the same time. I don’t even remember what the story of the game actually was, because I missed so much vital information that I gave up trying to follow it. That was a real disappoment for a big GitS fan.

    Also, many of the missions can seem very open initially in terms of how the player can approach them, but quite soon I got the feeling that there’s exactly one “right” way through each challenge, and it’s up to the player to find it, sometimes with very few hints.

    I’ve tried several times over the years to give it another go, but somehow I never seem to make it past even the first mission before I put it away again.


  • It is available on mobile BUT I encourage you to get the PC version on Steam because the mobile one doesn’t include the pretty decent voice acting

    That’s odd; I was sure that I played some of this on Android with voice acting, so I searched my records and discovered that I also got it from Humble Bundle. I just downloaded and installed it to check, and aside from a warning that it was written for an older version of Android, it seems to be working fine, full voice acting included. There’s an option to turn it off, but it was on by default for me.

    Maybe there was an issue with your specific device?





  • Perhaps similar to OP, I gravitate toward whatever’s handiest. That’s usually my smartphone or one of a number of old-ish Linux laptops. I have a handful of smartphone games that I play pretty much every day, and I’ve got controllers for both, so there’s also lots of emulation of older games, and also some newer indie games on the laptops. After that I have a “gaming” PC (nothing amazing but it does enough for me) for more current games, although I’m finding that I don’t turn that on as much as I’d like to, lately. Then I have a handful of less-old consoles that my other devices can’t emulate well, but I can’t even remember the last time I used one of those.


  • I watched the video that you linked to, and it was very interesting! I’d never thought about exploiting the possibility of double-dipping the logo. It simply wouldn’t have been practical back in the day. However, there are two important facts that change the situation a bit.

    (EDIT: I’ve left the following discussion of logo checksums intact, but I kept digging and found what is claimed to be a dumped and disassembled copy of the OG GameBoy boot ROM, which does include a byte-for-byte check of the logo data. Colour me surprised! I was interested in GBA homebrew back in the day and I’d swear that I saw a dumped GB boot ROM that only calculated a checksum. Also, those cartridges with the non-standard logos? I own them. Unfortunately I can’t get my hands on them right now, but I saw them with my own eyes. If it wasn’t just fooling a checksum, then I don’t know what the deal was there, especially the carts with “garbage” logos. Not to mention that as I said, I don’t think it was practical to do a bait-and-switch in a retail cartridge back in the day.)

    (EDIT 2: Yes, I’m still reading about this! It seems like the bait-and-switch was feasible back in the day. Some publishers used special mappers, while others apparently redirected address lines with carefully-chosen capacitors, which seems delightfully hackey to me.)

    First, neither the OG nor the Color GameBoy have a complete copy of the Nintendo logo stored in their boot ROM. Instead, the boot code calculates a checksum of the cartridge’s logo data, and compares that to a stored checksum of the official logo. If the checksums match, the check is passed. There are unofficial cartridges which boot just fine by having “garbage” logo data that passes the checksum test. I have even seen one company that took the time to come up with a different recognizable logo that still passed the check. The lettering looked weird, but you can read it.

    By the time the GameBoy Advance came around, ROM was cheap enough to include a complete copy of the official logo and compare it byte-for-byte, so they did.

    Second, Sega tried a similar tactic on some of their consoles: The boot rom contained a routine which would display a screen claiming that the software had been produced by or under license from Sega Enterprises. If the code on the cartridge/disc didn’t call that routine fairly early, the boot ROM would cause the console to lock up. The idea was that if software had to call that routine, Sega could sue unapproved publishers for claiming to be licensed when they weren’t.

    Unfortunately for Sega, the US courts ruled (Sega vs. Accolade, 1992) that since it was impossible to run software on the system (which the court upheld that Sega had no right to block, ah the days before DMCA) without calling this routine, that unlicensed publishers couldn’t be said to be wilfully claiming licensing rights from Sega; they were just calling a routine that was necessary to make the console work. The fact that Sega had attached this licensing screen to it was immaterial.

    No doubt Nintendo’s legal team would go after anyone who tried this on one of their systems, either under DMCA somehow, or even simply on the premise of being able to bankrupt their opponent with requests and delays before ever making it to trial. But I suspect (I am not a lawyer) that technically, anyone putting a Nintendo logo in a GB cartridge could claim the 1992 case as a precedent.