Gigantic Javascript WTF: DispHTMLElementCollection

April 22nd, 2009 blakeyrat No comments

I don’t normally post about boring work topics, but I wanted to talk about this because it’s a gigantic WTF, and because it might come in handy for someone else who’s stuck on a Javascript project.

It turns out that the thing getElementsByName and getElementsByTagName returns isn’t actually an array. It looks like an array, it walks like an array, and it quacks like a duck, but it’s not actually an array at all. It’s actually a “dispHTMLElementCollection”.

I’ve been doing tons and tons of Javascript work for years, and I’ve actually never come up against this particular quirk before. The only reason I figured it out is that I tried to push() an element into a dispHTMLElementCollection, and it turns out that dispHTMLElementCollections don’t have a push() method. Why doesn’t it have a push() method? Who knows.

Oh, and to make it worse: it’s not documented. Anywhere. This forum post is all MSDN (Microsoft’s developer site, maker of the most popular web browser on Earth) has. Mozilla (makers of the second-most popular web browser on Earth) has absolutely nothing on it, or at least nothing Google’s indexed. Nor does w3.org, the maintainers of the DOM standards (most relevant to this issue.)

What. The. Fuck.

Here’s a test page to demonstrate the issue:

<html> <head> <title>Test</title> </head> <body> <p>h</p> <p>e</p> <hr /> <p>l</p> <p>l</p> <hr /> <p>o</p> <script type="text/javascript"> // Call the "broken" version of CombinedElementList // This function fails in both IE and Firefox, even // though at first glance it looks fine. Reason? // getElementsByTagName *doesn't* return an array, // instead it returns a "dispHTMLElementCollection" // which looks and acts exactly like an array, but // has no .push() method. //var combo = CombinedElementListBroken(); // The "fixed" version uses a Javascript array to // store the results of the two // getElementsByTagName calls. var combo = CombinedElementListWorks(); alert(combo.length); // Expect: 7 function CombinedElementListBroken() { // Create two "arrays" of HTML elements var paras = document.getElementsByTagName('P'); var hrs = document.getElementsByTagName('HR'); // Attempt to combine the two using a simple FOR loop for (var i = 0; i < hrs.length; i++) { // IE: Object doesn't support this property or method // Firefox: paras.push is not a function paras.push(hrs[i]); } return (paras); } function CombinedElementListWorks() { // Create two "arrays" of HTML elements var paras = document.getElementsByTagName('P'); var hrs = document.getElementsByTagName('HR'); // Create a third, blank, array to store the combined list var combinedArr = new Array(); // Puts elements from the first "array" into the combined array for (var i = 0; i < paras.length; i++) { combinedArr.push(paras[i]); } // And the second for (var i = 0; i < hrs.length; i++) { combinedArr.push(hrs[i]); } return (combinedArr); } </script> </body> </html>


Ok, so I posted this to TheDailyWTF, thinking it’d be a laugh: it’s not. Don’t do that, ever. You’d never know it from the frontpage, but the WTF forums are full, apparently, of programmers with psychic or telekinetic powers. To them, it’s my own fault that I couldn’t tell with only my mind that a dispHTMLElementCollection is actually the same thing as a NodeList as documented in the DOM2 standards.

Read the thread if you like.

One useful piece of information I did glean from this, though, the reason that getElementsByTagName (and similar functions) return something other than an array: the list they return is “live”, meaning they can update as elements are added or removed from the page. I don’t see this as being particularly useful, but, hey, at least it explains why it’s not an array.

Several non-useful pieces of information I received: link after link after link to documentation that doesn’t have the terms “dispHTMLElementCollection” and “NodeList” on the same page, and thus have absolutely nothing to do with the WTF I reported.

Apparently, to the WTF posters, this is all “common knowledge” that I should have gotten based on vague comments in a Javascript library I don’t even use. Or I was supposed to look up getElementsByTagName in the DOM, then assume that the type returned (NodeList) just happens to be the same thing as a dispHTMLElementCollection even though there’s nothing to indicate that that is the case.

To the WTF posters, writing a simple page on either Mozilla or Microsoft’s site saying, “oh BTW, dispHTMLElementCollection is the interface we use to DOM2’s NodeList, here’s a link” is a horrible burden that should be never be inflicted on anybody.

BTW, kudos to tgape who not only agrees with me that the lack of documentation is a WTF, but who wasn’t a jerk about it.

Anyway, some good came out of all of this: the next person to search for this completely undocumented class (or interface, or whatever the hell it is) will find either the WTF post or this one, and hopefully won’t waste as much time and energy on it as I have.


It brings up a question, though, that I’m too lazy to test on a Sunday morning (but maybe I will tomorrow): Since the DOM NodeList can be a different class in a different browser, how the holy hell are you supposed to use typeof(x) to find whether something is a NodeList in a cross-browser way? Alternatively, if it’s represented internally to IE as a dispHTMLElementCollection, but typeof(x) returns NodeList (which is what I suspect happens), then why the holy hell would the debugger show dispHTMLElementCollection instead of NodeList?

There’s WTFs all around.

Categories: Tech, Web Tags:

Database Collations Piss Me Off

April 15th, 2009 blakeyrat No comments

I just moved this blog onto another host, and of course in the process you have to move your database to another host. Of course, this couldn’t be an easy task:

  • First, MySQL changed the default collation on their database server installs from latin1 to UTF8. UTF8 is by far a superior choice, but it’s the change that causes the pain since all older databases are latin1.
  • To make things worse, it turns out WordPress (the software running this blog) shoves UTF8 into the database regardless of what the database collation is set to. Christ.
  • To make things more worse, when you have a latin1 database table with UTF8 in it, phpmyadmin can’t export it without filling in those UTF8 entries with junk characters.
  • And just to top it off, I have a whole blog posting based around the word “piƱata.”

Anyway, after database export after export after export, and with the help of a WordPress plug-in designed specifically to fix this dumbness, I think I have it all finally straightened-out. Everything’s moved over to the new host, and working exactly how it did on the old host. (With one exception: the backup plug-in I was using isn’t compatible with Windows servers because it uses hard-coded path separators.)

Joy.

If you see any problems with anything, please let me know in the comments. Unless comments aren’t working, then send me a singing telegram.

Categories: Tech, Web Tags:

Mini Superhero Movie Reviews: Jumper

April 12th, 2009 blakeyrat No comments

Jumper

It’s really hard to like this movie. It’s not that it’s not well-made or interesting; it’s that the “heroes” of this movie are such complete and total jackasses. Who, in fact, almost certainly cause more death and destruction than the “bad guys.” Including at least three out-right murders, one of them cold-blooded.

The story follows Anakin Skywalker- er, David Rice- as he unnecessarily narrates how he discovered his ability to teleport. Apparently, a tiny fraction of people are born with the ability to teleport themselves and objects they’re touching (up to a certain size) anywhere in the world instantly. At least if they come from broken homes, all the jumpers seem to have. Naturally, Anakin uses his gifts to rob banks, go on constant trips to tropical vacation spots, and ignore people who he could potentially save if he wasn’t such a self-absorbed jackass.

Samuel L Jackson plays Roland, an NSA agent who is also in a secret society of “Paladins” who hunt jumpers and also the most likeable character in the movie. After investigating one of Anakin’s bank robberies, Roland manages to track him down and hit him with an industrial-strength taser, which inhibits his ability to jump. Unless it’s important to the plot. Unfortunately for us, Anakin manages to escape, thus making the movie longer than half an hour.

Now knowing that he’s being pursued by the secret society, Anakin decides to lay low by going back to his home-town and the only people in the entire world who can positively ID him. Brilliant thinking there, buddy. Meeting up with his ex-girlfriend, Millie, he takes her to Rome. The conventional, airliner, way. Apparently he pays for the trip using a huge wad of cash in his backpack, and buys the tickets the day of the flight, which proves the TSA is as effective in the movie world is about the same as the real world.

In Rome, Anakin encounters another jumper, Griffin, who proceeds to murder several government agents before explaining to Anakin that the paladins have been hunting jumpers for thousands of years. How hunting down a person who can teleport anywhere on Earth instantly, and can only be stopped by tasers, was accomplished long before satellite communications was invented is not explained.

When Anakin’s carelessness leads the paladins to Griffin’s hideout, and they subsequently kidnap Millie, he must find a way to get her back and prevent Griffin from setting off a bomb… blah, blah, blah it’s really not that interesting.

But enough of the plot and plot holes. The movie is well-produced, has good special effects (especially during the world-spanning fights sequences), and the acting is passable. If you can get past the fact that every single character in it is a complete asshole, and the ending that is nothing but 5 minutes of setup for the sequel, give this one a rent. But you’re not missing much if you don’t.

Categories: Movies Tags:

The Wen Jiabao Brady Bunch

March 13th, 2009 blakeyrat No comments

Inspired by this article in The Guardian, I present:

The Wen Jiabao Brady Bunch

wen_jiabao_brady_bunch

Categories: Humor, Media, News Tags:

YouTube DOT Pages: A Comparative Study

March 9th, 2009 blakeyrat 1 comment
Categories: Humor, YouTube Tags:

Stupid Slashdot Exchange

February 27th, 2009 blakeyrat 5 comments

I have no idea why I visit or post to Slashdot.

There was an article up a couple days ago about a new open source multiplayer FPS game. I like multiplayer FPS games, and I like free things, so I thought I’d give it a try. Big mistake.

After one of the game developers (“qreeves”) received a lot of negative comments about the game, he posted a plea for fair treatment. So here it is.

The game was actually not that bad, but the website was abysmal. Anyway, after struggling for over 15 minutes just to figure out how to download the game, there was the following exchange:

 

My Challenge to Slashdot Users (Score:2, Insightful)
by qreeves (1363277) Alter Relationship on 09:31 AM February 26th, 2009 (#27000285) Homepage

I’ve noticed quite alot of misinformation and negativity from the users of Slashdot, and I must say that I am quite disappointed by it. Geeks are supposed to be intelligent people with thought out answers and responses, and it seems to me everyone who comments either did not bother to try the game at all, or find some other off-topic fault to complain about.

I have worked in Open Source for a decade now, and this is the reason most developers become jaded and rude to their users – nothing else. You all want Free and Open Source Software, but where is your empathy? What do we get out of it other than an earful of crap? Please wake up to yourselves and do something to benefit the community for once, rather than idly making rude remarks to inflate your own sense of ego.

My challenge to you all is this: Actually play the game and come up with some constructive criticism. Otherwise, please just ignore this post and move along.

 

Re:My Challenge to Slashdot Users (Score:2)
by Blakey Rat (99501) on 12:12 PM February 26th, 2009 (#27002825)

The download link on the website doesn’t work. It took me 15 minutes to find how to download the game, and that’s only because I was deconstructing how terrible the website actually was (so I could talk about it to some co-workers.)

In short, what did you expect would happen? You couldn’t be bothered to test whether your own website works, and it’s *our* fault you’re seeing negativity.

 

Re:My Challenge to Slashdot Users (Score:1)
by qreeves (1363277) Alter Relationship on 06:46 PM February 26th, 2009 (#27007683) Homepage

You’re still not providing any useful feedback. I can only test it on so many configurations considering my limited access to everything under the sun.

 

Re:My Challenge to Slashdot Users (Score:2)
by Blakey Rat (99501) on 08:40 PM February 26th, 2009 (#27008305)

Dude.

The download link, on the website, does not work. The website. It’s HTML, it’s the same for every platform. It doesn’t work. Does. Not. Work. Clicking it does not begin a download, instead it takes you to the release notes. Every platform’s download link does this. If you think the download link works, you’re living in some bizarre fantasy-land full of flowers and daisies. How is that not useful feedback?

It took me something like 15 minutes to figure out how to download the game. But since I did, WTF, here we go:

1) Is the name of the game “Blood Frontier” or “BloodFrontier?” The website has it one way, my Windows Start menu the other way.
2) On first startup, the game sets the resolution of my main monitor to … something, and also blanks out my secondary monitor for no reason whatsoever. Despite changing the resolution, it still runs in a letterbox, which prompts me to ask what the hell the point of changing the resolution was. Kudos on it correctly handling Alt-Tab, however.
3) When I’m typing in my username, and I press shift to capitalize a letter, my “character” seems to duck down, even though I’m typing in a username and not actually playing… WTF?
4) When I’m done typing in my username, nothing happens? I think I’m in a game, but there’s no other players, and no way of figuring out how to get to the menu. (Turns out escape, or walking up to the bank of monitors, does it. If I were new to the world of FPS games, I’d have no idea either of those two options existed.)
5) The font used for menus is almost unreadable on my monitor. It has some kind of shadow effect, and it’s really tiny.
6) Turning off “fullscreen” in options/display does nothing. (Although the option stays unchecked.)
7) Changing the game resolution in options/”gfx” does nothing. The resolution you check doesn’t even stay checked. 8) Some quality settings are in “gfx”, others are in “display” with no apparent rhyme or reason.
9) You can’t simply set all options to “slow and pretty” by clicking the text that says “slow and pretty” in options/”gfx”. That would be too easy. So would auto-detecting what my hardware is capable of, apparently, since it’s running at 120+ FPS in the default configuration.
10) The radio buttons in options/mouse are backwards. For some reason, the COLUMNS are labeled “fixed, panned, free” yet the rows are labeled as the specific mouse mode you’re setting. Actually, this might make sense if it were presented as a single table of radios instead of three columns next to each other, but as-is it’s pretty unusable. (You also have to ask: how many people will change this? Seriously? I doubt it’s enough to warrant the code to support it.)
11) While speaking about options, the tabs at the top don’t give any sort of mouse “grace period”, therefore it takes very deliberate mouse movements (vertically straight down, then left) to interact with the options. If you move your mouse quickly, like a normal rational person does, the tab will be accidentally changed before your mouse pointer reaches the option you want to change.
12) Also, there’s no tooltip telling me what the hell some of these options are. “Absolute mouse?” “Mumble positional audio?” “stencil bits?” … uh, WTF are those? “Yes, please, I’d like the positional audio to mumble. I hate it when it’s too clear.”
13) Autoexec.cfg? Seriously? Did I go back in time 15 years to when this crap was acceptable?
14) To start a bot match, I go to “Game” and click “Vote?” WTF.
15) And why is there a “mystery map” in the middle of the maps list? Does this mean randomly select a map? If so, why is there a text field next to it? What do I type in the text field? “Yes, I would like a random map please!” was my guess, but it did nothing.
16) The “Get online support” option under “Help” does… some… confusing… thing. I suppose this is the IRC interface? (It’s hard to tell because I can’t read the damned font.)
17) It says “if you do not agree please part now.” Part what? Do you mean DEpart? Also, how do I do that? There’s no X button or any visible way of closing the IRC window. (Although escape seemed to work. For all I know, that just hides it and doesn’t exit it.) … Oh wait, I’m still seeing people’s chat, presumably in IRC, so I guess “escape” didn’t exit it.
18) My game is still in the intro/menu level, and the message says: “Please Wait, Ready to respawn.” Ok, but how? Left-clicking does nothing. Right-clicking does nothing. Space does nothing. What would be the point of respawning in an empty map anyway, except to walk up to the monitors to see the menu again? (Also, how did I die on an empty map with no enemies?)
19) While I’m in observer mode, I can pass the camera though solid objects. (Possibly intentional, but it looks like crap on screen because of the clipping.) If you’re going to let the camera pass through solid objects, follow the example of most games and make the object translucent proportionally to how close the camera is, then entirely transparent when the camera “enters” it.
20) While I’m in observer mode, the menu no longer opens when I bring the camera close to the monitors.
21) Opening the “Servers” menu doesn’t ping the servers by default. What the hell else are people going to open this menu for? It should just do it.
22) Of the 5 servers running, one is me. One is labelled “v156 != v157″ which I assume is a version mismatch error, but who the hell knows. 3 are empty.
23) 1 player. The server has 1 player, and that’s it. And it’s me. Hard to play-test a multiplayer game when there’s nobody playing! Shadowrun has a more active community, and it sucks.
24) So I join an empty server, other than my own. There’s a map marker named “base” which is off-screen, apparently. No matter which way I turn, it’s always stuck against the top or bottom of the screen.
25) Grenades fly in a straight line, apparently not subject to gravity.

There, 25 pieces of feedback, and I didn’t even play against an actual human. Happy?

 

Re:My Challenge to Slashdot Users (Score:1)
by qreeves (1363277) Alter Relationship on 12:21 AM February 27th, 2009 (#27009313) Homepage

14:17.19 * Blakeyrat (n=Blakeyra@pool-71-113-17-244.sttlwa.dsl-w.verizon.net) joined
14:24.31 [+bfbot] Blakeyrat has joined the game
14:28.36 [+bfbot] Blakeyrat has left the game
14:28.36 * Blakeyrat (n=Blakeyra@pool-71-113-17-244.sttlwa.dsl-w.verizon.net) quit (“Blood Frontier, It’s bloody fun! www.bloodfrontier.com”)

Yeah buddy, you really gave it a chance.. So no, I am not happy; your feedback is done with malice and spite. While you make valid points; for a beta you are just nitpicking. You made no attempt to talk to us or work out how to do things, you’re just too self involved to care. I’m not afraid to say these truthful things either; people like you, we do not need – people who are helpful; they’re more than welcome.

 

Re:My Challenge to Slashdot Users (Score:2)
by Blakey Rat (99501) on 06:14 AM February 27th, 2009 (#27011083)

Wait, I played, according to your IRC log, 11 minutes on an EMPTY SERVER (a server with NO OTHER PLAYERS), and I didn’t give it a chance? What’s the typical user behavior when joining empty servers? Sticking around for an hour? Three hours? What’s the cutoff for me having “given it a chance?”

Look, I’m trying to test a multiplayer game, there’s no players. It took me 15 minutes to figure out how to download the damned thing. As pointed out in the issues I brought up, which you apparently don’t care about despite (most of them) being valid bugs, the usability of your game is abysmal. Arguably the two most important functions for a game (changing to Windowed mode, and changing the game resolution) simply *do not work.* The menu text is impossible to read. Maybe I’m an old fogey with bad eyes, but it’s impossible to read.

We’re talking about a game that is, supposedly, in beta and you don’t even know what the NAME of it is. (“BloodFrontier?” or “Blood Frontier?”)

I think I’ve jumped through about a dozen more hoops than anybody should EVER have to jump through to test a beta product, and you just come back with: “oh well you only played for 11 minutes.” Dude, 11 minutes of this shitty game with no players is an ETERNITY.

Oh well, just like every experience with open source, it just encourages me to never, ever help open source programmers. You simply do not give a crap about the quality of your product. Someone points out tons of low-hanging-fruit bugs, and you just reply with “oh well you weren’t serious.” Screw that.

 

Do I come across as a jerk? Yah. I am a jerk most of the time. But that list of bugs, they’re all valid. And people who will get Slashdot to post an article to thousands of people before even checking that their own website works, those people piss me off. What a colossal waste of time.

Categories: Games, Tech, Web Tags:

Weird Google Quirk

February 16th, 2009 blakeyrat No comments

I did a Google search for the acronym “FFA” today to figure out what it means other than Future Farmers of America, and I noticed something really weird about the results.

Take a look at page 3 of the results:

ffa_results_page_3

Notice the bottom-most entry on page 3 is Football Federation Australia. Fair enough. But when I kept clicking on, I noticed that Football Federation Australia was also the bottom-most result on page 4, and 5, and 6, and 7, and 10:

ffa_results_page_10

and 20:

ffa_results_page_20

and 29:

ffa_results_page_29

but not 30:

ffa_results_page_30

The bottom-most result on every page of results from page 3 to page 29 is Football Federation Australia.

What’s going on here? Is the bottom-most entry on each page actually a sponsored link? (It’s not labeled as one on the page at all, if so!) Is this some weird bug having to do with the SearchWiki feature? Or maybe it’s a plain ol’ bug that’s been around for ages.

Categories: Tech, Web Tags:

My attempt at a Bacon Explosion

February 1st, 2009 blakeyrat 1 comment

Behold: the Bacon Explosion.

Here’s the changes I made from the recipe:

  • I substituted Mexican chorizo for Italian sausage.
  • I used pre-cooked bacon pieces from the grocery store for the center of the explosion, instead of cooking my own bacon. Due to lazy.

bacon_01
The ingredients! I didn’t end up using the BBQ sauce, since the chorizo didn’t lend itself to BBQ-ing up.

bacon_02
My first ever bacon weave.

bacon_03
Bacon weave with seasoning.

bacon_04
And covered in chorizo sausage.

bacon_05
Then the layer of bacon pieces in the middle.

bacon_06
The sausage rolled-up.

bacon_07
And the bacon rolled around it.

bacon_08
In my little baking sheet. Note to self: use bigger sheet next time.

bacon_09
Thermometer to make sure I don’t kill myself and others with bacteria. (The alarm was set to 175 degrees, not the 132 shown in the photo!)

bacon_10
The explosion lying in a giant pool of chorizo grease.

bacon_11
The left end cut off and put on a bun. I had to eat a slice right away, as it didn’t fit on the plate otherwise. The end piece in the photo is 80% bacon.

How’d it come out? Let’s just say: mistakes were made. The bacon isn’t weaved tight enough, the chorizo is too spicy and overpowers the bacon taste, and it never really solidified the way I’d have liked.

But, hey, nothing’s perfect on the first attempt, and it’s more than edible on a bun. And it’s without a doubt the most fattening and disgusting thing I’ve ever put in my oven. So that’s a bonus. And the bacon was on sale.

Categories: Food Tags:

Patrick McGoohan: Be Seeing You

January 14th, 2009 blakeyrat No comments

I won’t gush on and on about what a genius, mind-bending, ahead-of-its-time series Patrick McGoohan’s “The Prisoner” was. It’s available on the web, please watch it if you haven’t before, it’s truly amazing and deserves your attention.

Patrick McGoohan’s death is a tremendous loss. Be seeing you, Number Six.

the_prisoner

Categories: News, Television Tags:

Prince of Persia Review

January 14th, 2009 blakeyrat 1 comment

Much like Sonic the Hedgehog in 2007, Prince of Persia shares a name with the 20-year-old original. I suppose that means it’s a “reboot” of the series although (full disclosure here) I haven’t played any Prince of Persia games since Sands of Time on the old school Xbox. (That said, I have played both of the original 2D games, so I got street cred.) It’s not just a reboot, it seems to actively taunt the player by actually making fun of Sands of Time—Farah is a donkey in this game! Bastards.

Prince of Persia also discards Sands of Time’s “rewind” mechanic in exchange for a pretty interesting variation: you can’t die. Whenever the Prince falls off a ledge, or gets struck too many times in combat, Eilka restores him back to life as good as new. When jumping and climbing, this means you’re reset to the last piece of solid ground you were standing on before you died. If you were in combat, you and the enemy reset back to your original positions and the enemy regains some health.
Oh, in addition to not being able to die, there’s no health meter in the game. Instead, powerful hits from enemies will make you vulnerable for a short period of time, indicated by a red glow on the edges of the screen. If you’re hit while you’re vulnerable, that’s when the combat resets.

These two factors lead to an extremely uncluttered appearance to the game: there’s no UI at all to ruin your immersion. With only one huge, huge, exception. Some of the bosses spit what I can only assume is tobacco juice, not at the Prince, but at the camera of the game. This obscures the camera, making it hard to see what the hell’s going on, which I suppose was the point. More to the point, though, it makes the player aware of the camera, effectively breaking the fourth wall. Boo.

(Back in “the day” when 3D games were still a pretty new and crazy invention, one of the selling features of many games was that their graphics were so good, the game engine would actually render lens flares when the camera was aimed at a bright light source. It’s a great graphics demo; lens flares require multiple transparent layers and lots of math to draw correctly. And, if you don’t think too hard about it, it makes the scene look more “real.” The problem is that if you do think about it, it doesn’t make the scene more “real” at all; it just makes it look as if it’s being recorded by some non-existent lens in some non-existent camera. In fact, the programmers of these game engines were expending massive effort simulating something that actual photographers try to avoid. Crazy.)

Gameplay consists of 70% running, jumping, climbing, etc. about 20% fighting stuff with a sword and about 10% solving moronic puzzles you’ve solved 500 times before in every game you’ve ever played. Environments consist of a lot of cliffs, columns, hooks, magical rocket-y things that I think they stole from Sonic the Hedgehog, and ladders. And of course, no floors. This Prince has more moves than the Sands of Time one, including one where he can run upside-down along a roof which makes no goddamned sense at all. Oh and he has some claw thing on his hand he can use to slide safely down vertical surfaces.

Combat consists of four basic moves: sword, gauntlet, acrobatic, and magic (performed by Elika), which can be used in various combinations to defeat enemies. The general tactic harks back to the original 2D Prince of Persia, where you block the opponent’s attacks until you have an opening to hit him, then string together as many moves as you can. The gauntlet can be used to toss enemies in the air, allowing you to hit them with another type of attack on the way down. In addition to attacking monsters directly, you can force them off platforms and laugh manically as they fall to their deaths, which frankly is a real time-saver.

The puzzles are moronic, and you’ve solved them 500 times before in every game you’ve ever played.

Prince of Persia takes place in an open map, and you have more-or-less complete freedom to go where you like in it. There are a bunch of fertile grounds, which can be tackled in (almost) any order, so if you’re stuck on one boss, just take off and move to another one. You can also fast-travel between fertile grounds you’ve completed. The one exception is that some of the fertile grounds are “locked” until you collect enough glowy-things for Elika to magically unlock them, but you’ll come across more than enough glowy-things during normal play and you shouldn’t have to spend any time grinding for them.

Now to the story: it sucks on toast. The Prince sounds like a total douche, partly because his voice was recorded by a total douche (or at least a voice actor who is very good at emulating a total douche), but mostly because his dialog was written by a total douche. And to make things worse, he jabbers on constantly. Not only that, but the game nags you if you don’t trigger the horrible dialog on a regular basis. Supposedly, listening to Prince Douchebag can reveal tricks or tactics to use on the next boss, but in practice you’ll either purposefully never trigger the dialog, or you’ll be too busy shoving scissors in your ear canal Uzumaki-style to listen. Even his scarf pisses me off.

(The voice actress who does Elika’s voice is fine. No offense intended towards her.)

If you’ve been exposed to virtually any media whatsoever, you already know the story of the game. An ancient evil who’s been snoozing for a thousand years wakes up and starts… well, he doesn’t really do anything I guess, except send minions to guard strategic points. The main character, a thief who is obviously a Prince because although the narration doesn’t say so we’ve all read the title of the goddamned game you idiots, teams up with the attractive young female magic-user who happens to also be a Princess because it’s always a goddamned Princess in any fantasy book, movie, or game ever written ever. Also, it’s always a thousand years, never like 570 years or 834 years.

I’m only about half done with the game, but I can confidently predict the following:

  • There will be a big reveal in which it turns out, gasp, shock, amaze, that the thief is actually a prince.
  • Elika, because she has recently-gained magic abilities, will be possessed by the vaguely evil entity and the Prince will have to fight and defeat her.
  • Even though the entire point of the story is “healing the fertile grounds” as to prevent the vaguely evil thing from waking up from its slumber, you’ll fail towards the end and thus be forced to fight against the vaguely evil thing itself. Because otherwise where the hell would the end boss come from?
  • James Schend will get very bored of this cliche-ridden crap and skip every dialog option possible to skip.

Anyway, to summarize: medium-to-good game, bad story.

Categories: Games Tags: