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

help-circle
  • Unfortunately I think that Sega themselves weren’t the only group lacking confidence in the Dreamcast. In fact, I feel like they put up a valiant fight, with marketing and first-party titles.

    Critics and consumers all had an extremely “wait and see” attitude that I think took the theoretical advantage of the incredibly early launch and turned it into a huge liability. People didn’t want to commit to buying their next console without seeing what the other offers were going to be. So Sega had to work hard for about two years to keep the real and actually available Dreamcast positioned high in the market while their competitors had the luxury of showing jaw-dropping demos of “potential” hardware (i.e. “Here is some video produced on $50,000 graphics workstation hardware that is made by the same company that’s currently in talks to produce our GPU.”)

    Third-party publishers also didn’t want to put any serious budget toward producing games for the Dreamcast, because they didn’t want to gamble real money on the install base increasing. This resulted in several low-effort PS1 ports that made very little use of the Dreamcast hardware, which in turn lowered consumer opinion of the console. When some of these games were later ported to PS2 as “upgraded” or “enhanced” versions, that only further entrenched the poor image of the Dreamcast.

    I have owned all four major consoles of that generation since they were still having new games published for them. And if I had to choose only one console to keep from that group, it’d be the PlayStation 2, because of the game library. It’s huge and varied. I have literally hundreds of games for it, while I only have a few dozen games for the others. But looking at the average quality of the graphics and sound in the games for those systems, I’d also rank the PS2 in last place, even behind the DC.

    Sony was a massive juggernaut in the console gaming market at the time. The PlayStation 1 had taken the worldwide market by storm, and become the defacto standard console. It’s easy to forget that the console launches for this generation were unusually spaced out over a four year period, and Sony was the company best positioned to turn that to their favour. People weren’t going to buy a DC without seeing the PS2, but once they did, many were happy to buy a PS2 without waiting for Nintendo or Microsoft to release their consoles. The added ability to play DVDs at exactly the time when that market was hitting its stride (and more affordably than many dedicated DVD players) absolutely boosted their sales in a big way. Nintendo’s GameCube didn’t do that, and by the time the original X-Box came to market, it wasn’t nearly as much of a consideration.



  • Problem is, you could pirate every single game on dreamcast. Just get a legit copy of the game (renting, buying and returning, borrow from a friend), and have a CD burner.

    Then you could make a 1:1 copy of the game in roughly an hour.

    You make it sound trivial. While Sega left a security hole open for games to be loaded from a regular CD, the official games were released on GD-ROMs, a dual-layer CD with a 1.2 GB capacity.

    So first off, you couldn’t read them completely in a regular CD-ROM or even DVD-ROM drive. (I’m not counting the “swap” method because it’s failure-prone and involves partially dismantling the drive and fiddling with it during operation.) You had to connect your console to a computer and use some custom software to read the GD-ROM on the console, and send the data over.

    Once you had the data, you then had the problem of trying to fit a potentially 1.2 GB GD-ROM image onto a regular CD-ROM. A handful of games were actually small enough to fit already, and 80-minute and 99-minute CD-Rs would work in the DC and could store larger games. But for many games, crackers had to modify the game files to make them fit.

    Often they would just strip all the music first, because that was an easy way to save a decent amount of space. Then if that wasn’t enough, they would start stripping video files, and/or re-encoding audio and textures at lower fidelity.

    Burning a CD-R from a downloaded file was easy, but ripping the original discs and converting them to a burnable image generally was not.








  • 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.”


  • 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.



  • 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.




  • Redkey@programming.devtoRetroGaming@lemmy.worldPlay GB games
    link
    fedilink
    English
    arrow-up
    8
    ·
    3 months ago
    • GBA or GBA SP, you’ll get a backlit screen as well (around the same budget?)

    Careful! The original (landscape) GBA had a similar, unlit, reflective screen to the Gameboy Colour, and even the GBA SP was frontlit for most of its run. Only the later GBA SPs had the bright, backlit screens.

    I modded an original GBA with an aftermarket frontlighting kit back in the day. I didn’t like the GBA SP as it made my hands start to cramp up after only a few minutes.