Age of Empires II is a real-time strategy game developed by Ensemble Studios and published by Microsoft in 1999. After it came out, it was the standard by which all other RPG games were measured for many years. Some say it still is.
What’s so crazy about this game is that people still play it at LAN parties, over 12 years after it came out. Talk about longevity! Of course, they’re now playing it on Windows 7, instead of Windows 2000.
It’s hard to believe it, but Age of Empires II was originally released for Windows 98 and 2000 — it came out a whole two years before Windows XP existed! Its requirements were a 166 MHz processor, 32 MB memory, and 200 MB disk space. It’s hard to believe that a video game — or any program for that matter — could possibly run with just 32 MB memory! How times have changed…
And four OS releases later, it still runs flawlessly on Windows 7. If Microsoft excels at any aspect of software development it’s definitely backwards compatibility.
I recently received an out-of-the-blue email from the owner of GameHacking.org. He said that he enjoyed an article I wrote about hacking video games for Christine Alfano‘s Stanford Rhetoric of Gaming class.
His email made me realize that I never posted the final version of that research paper here on my blog. My writing style has changed a lot since 2009 when I wrote this paper. I like to think I’m less verbose now. Also, I’m not sure that I still agree with all my main points. Still, it’s a pretty cool paper and definitely a fun read — especially if you’re a gamer.
Tonight, I listened to the San Francisco Symphony Orchestra play, and wow. What an amazing concert! It was called Distant Worlds: Music from FINAL FANTASY. All the music was composed by the Japanese video game composer Nobuo Uematsu and conducted by Grammy award-winner Arnie Roth.
This was my second time attending Distant Worlds (I also went last year), and it was even better than I remembered. Nobuo Uematsu was in attendance again, and as expected, the crowd gave him an extremely warm welcome. At the end of the concert, Uematsu got a 4-minute standing ovation from everyone in the Final Fantasy fan-filled hall.
Check out this little GCC gem that I just discoveredread about.
In GCC 1.17, when the compiler encountered specific forms of undefined behavior (unknown/not implemented #pragmas), here’s the code it executed:
execl("/usr/games/hack", "#pragma", 0); // try to run the game NetHack
execl("/usr/games/rogue", "#pragma", 0); // try to run the game Rogue
// try to run the Tower's of Hanoi simulation in Emacs.
execl("/usr/new/emacs", "-f","hanoi","9","-kill",0);
execl("/usr/local/emacs“,"-f“,"hanoi“,"9“,"-kill“,0); // same as above
fatal("You are in a maze of twisty compiler features, all different");
When GCC identified “bad” C++ code, it tried to start NetHack, Rogue, or Towers of Hanoi. Failing all three, GCC printed out a cryptic error message. Wow.
This just goes to show you that when the official C++ specification talks about undefined behavior, they mean business:
[Undefined behavior is] behavior, such as might arise upon use of an erroneous program construct or erroneous data, for which the Standard imposes no requirements
No requirements indeed.
Update: It turns out this is actually implementation-defined behavior, which is slightly different than undefined behavior. Implementation-defined behavior actually requires the compiler to document what it does, but there are no requirements on what it can do.
Hi, this is Feross. I'm a computer science student at Stanford University. I'm interested in Internet technology, web development, and computer security. I like hacking on cool software projects, running, basketball, retro video games, and shiny gadgets.
You Should Follow Me