Skip to content
Apr 28 10

How to bind a nested enumerated control from an ObjectDataSource

by Wayne Denier

If you have multiple levels of enumerated controls (ie. Repeaters, ListViews) that need to be databound to properties of a bound DataItem, use the below DataSource property on the nested control…

DataSource='<%#  DataBinder.Eval(Container.DataItem, "Tags")%>'

This can be required if you have some sort of hierarchical data. My example came up while loading article posts that contained a list of tags.

Apr 9 10

Who’s Line is it in the Mad World of Star Wars?… Greg Proops!

by Wayne Denier

It took a while to finally pop in the disk for Mad World on the Nintendo Wii. I bought it off of Amazon for quite a steal, the price has dropped like a rock since it’s release.

So what do I hear after a few minutes of play in this title? A really familar voice! Hmmm. well I could tell right away that it sounded like the pod race announcer from Star wars: Episode I. So a few searches later I tracked it all down. The voice of both characters was played by none other than Greg Proops of the popular improv show ‘Who’s Line is it Anyway?”

It’s a small, mad world!

Mar 27 10

Glorious Toys versus Empathic Storytelling

by Wayne Denier

Two years ago I picked up the pre-acclaimed PC game, Spore. This was after downloading the sample Creature Creator, listening to over a year of evangelizing from Electronic Arts, and dealing with their intrusive DRM. When I finally inserted the disk and got my hands dirty, I was underwhelmed. As a long-time gamer, I could easily point out the product’s influences. In fact, I often felt my time could be better spent playing it’s inspiring works; flOw, World of Warcraft, Age of Empires and Civilization to name a few. It found it’s way into a box of loose disks where it sits as we speak.

Despite my experience, to hear Will Wright talk about his creation is quite an eye opener. Having grown up in a Montessori school, Will expresses a game development philosophy based loosely on the Montessori method. This approach unlocks the potential of the audience by providing them with ‘high-leverage tools’ to allow the player to be ‘building this world in their imagination and extract it from them with the least amount of pain’. He is presenting the game as a toy which the player can play with, and be empowered by.

Hearing his justification, I feel like I’m a little more connected to the game and I can experience it the way it was intended. He created a game that does not drive the player, but let’s the player drive themselves through curiosity. Moreover his use of the term ‘high-leverage’ tools is something I appreciate and agree with. The interface should be intuitive and empowering.

Still, I felt after a few days of playing that I was not engaged. Inversely to Spore’s ideal, other games may introduce a protagonist, or some relatable character that the player can empathize with. This is something the game lacks. Spore creates investment by allowing the player to personalize many, many details of the organisms they represent. But there’s always a level of separation provided by the ‘God’ complex granted by the game. Without a compelling goal paired with a sense of mortal investment, you’re left with the very feeling Mr. Wright was pursuing… the feeling of playing with a toy.

I can’t whole-heartedly condemn his philosophy, especially since I have an invigorated desire to play with Will Wright’s bright and well-intentioned toy once again. On the other hand, as a consumer I often seek an empathy and connectedness. To me, it is very important to give a game the staying power to live on in my memory, and I think this is the sort of thing that comes to mind for many gamers.

Mar 21 10

The Art of Launch Day

by Wayne Denier

The defining moment of a first-party video game company is when their brand new system hits the shelves. Years of research go into developing a vessel of the hottest technology; a platform to drive half a decade or more of revenue.

It’s easy to look at a piece of hardware like the Sega Genesis and judge it as a sum of it’s parts, but far more decides the console’s validity in the market. This system in particular had a complete plan of attack devised by Sega to knock the incumbent game baron Nintendo out of the top spot. It had a two-pronged marketing strategy, obtain licenses with popular sports personalities and break down Nintendo in a slash campaign, painting the Genesis as the mature gaming system.

Morality comes into play when you look at Sega here, was it right for them to take such an aggressive position? There was some truth in Sega’s ‘mature’ platform, since Nintendo’s review process at the time really cracked down hard on mature content. However, big name sports licenses do not ensure good games. In fact, in recent years expensive licenses have been a detractor. This helped grow an audience for the system, but I question if the ends justified the means. The trend of celebrity-endorsed video games could be attributed to this moment and I don’t know if it is a good thing.

Thereafter the Genesis enjoyed a slow boom, and it is in no small part to negligence on the part of Nintendo. They never really took the Genesis seriously, and allowed Sega the room to correct another mistake they made with the system, create a killer app and a mascot that fans will love. In 1991 Sega released a game, and a personality, named Sonic the Hedgehog. To that point, Genesis’s stable of games had amounted to experimental titles, endorsed sports games and a select few arcade ports. But with that release, the Genesis had a face and a reason to buy the system.

The same year, the Super Nintendo Entertainment System hit the market with Super Mario World as a pack-in. So then did the brutal battle truly begin between Nintendo and Sega, but this is a battle that may never have been fought. Nintendo gave them a head start on the 16-bit market, and this afforded Sega a great many things. Genesis had a two-year head start, a 50-dollar difference in price, and a killer app that was still fresh from a release earlier that year by the time SNES saw light on store shelves. Objectively, I’m glad Nintendo dropped the ball, because it created a spirit of competition that birthed great games.

Mar 14 10

A Picture Worth a $1000 in Wasted Research

by Wayne Denier

In 1980, Ralph Baer, inventor of the Magnavox Odyssey, birthed an invention to personalize video games – a camera that could shoot pictures of players’ faces, digitize them, and load the images into games. He thought that arcade manufacturers could place the camera in the marquee of their cabinets and paste player’s faces on characters in their games. The camera could also snap a photograph of a high-scoring player and post it next to his score.

-       The Ultimate History of Video Games, Page 173

Amazing that such a concept was available before many of today’s gamers were even a twinkle in their daddy’s eye. Today we take for granted the ability to publish our accomplishments on our blogs via achievements and trophies. To link our high scores into our Facebook profiles and query top leaderboards from players across the world. Players can even be rewarded for their exploits, gaining prizes and recognition from the developers or special content for the games themselves.

Of course back in the 70s and 80s the most one could boast of is a three-digit set of initials emblazoned into the high-scores list of your favorite arcade machine. This lacked credibility as many people could have the same initial, and many machines dump their high scores when the machine is rebooted, erasing your achievement till you can return. The idea of the camera to immortalize players was fantastic, since while the high score might still be reset when unplugged, real concrete validation of your high score would be possible. Heck, random patrons of the local pizza joint might even recognize you on the street!

This did not come to pass though; the idea was tossed out after a single test run. The reason? Obvious, the second day of the test a high scoring player ‘flashed’ the camera. Done.

This issue still plagues modern games, as on many platforms players can use cameras to see other players or take their personal profile photos, with explicit content being a possibility in both. With time, the restrictions on such features have loosened up, allowing some lewd content. In other cases, the content must pass a review process before being ‘approved’ for the public. Had Baer added a feature to allow arcade owners to review the photos before being attached to their high score and released for the general public, this idea might have caught hold much sooner in the history of games. One thing Baer did not take into account; you can never underestimate the ability of players to find ways to abuse your technology. It is, in fact, a game of it’s own!

Mar 7 10

Where’s Your IP?

by Wayne Denier

Securing your intellectual property is an important yet ambiguous aspect of being a fledgling creator. It’s hard enough developing your skills and finding inspiration, the last thing on your mind is making sure that you’ve meticulously filed away the legal rights to your own, barely existing creative notions.

In June of 1972, Nolan Bushnell founded the company which would come to be a household name, Atari. By September, he would begin marketing the game Pong. After a shockingly positive test run of the game in a local bar named Andy Capps’s Tavern, Nolan was ready to take the country by storm and begin mass producing the game. But being a free spirit, he ignored some of the finer points of securing his intellectual property… namely all of them.

The first speed-bump came immediately, when Atari was taken to court by Magnavox. Magnavox had created a gaming system for the home named Odyssey, which played a game extremely similar to Pong. The matter was settled out of court, and involved Atari paying a hefty license sum to keep Pong on it’s path to greatness. Part of this interaction could just be chalked up to an industry leader kicking a small start-up, but the facts came down to Magnavox’s attention to the ownership and patents surrounding their product. Bushnell, a driven and talented creator/entrepreneur, was focused more on the creating. In the time following the launch of the game, he overlook filing patents for Pong. By the time the patents were validated, over two-thirds of the market was saturated with Pong imitators.

Was Nolan well off? Yes. Was Atari a successful company despite the missteps? Absolutely. But Nolan was in a lucky position, the market was non-existent. While competitors could pirate his innovations, Atari’s ideas were a step ahead of the curve. They would have the next big idea in the works by the time the market was oversaturated with the last. This approach was effective for the time, and you could even say that the knockoffs were good to the industry, as it increased the visibility. Also, arcade machines were sold in an era of more personal communication, will sales representatives approaching reputable brick-and-mortar locations to sell their machines with a handshake.

In this time, of an established games industry however, it’s not advisable to go in so haphazardly. As you put effort into divining inspiration and honing your skills, you should research what you can do to protect your work. In the digital age where ‘page views’ and total downloads are valued, it’s easy to watch your bottom line disappear. A consumer can just as easily get your product from a competitor that is only a click away. Marketing your work to become the most prevalent and connected, and challenging imitators will keep your inspired creations attached to you and allow your passion and creativity to continue unhindered.

Jan 25 10

Script controls may not be registered before PreRender

by Wayne Denier

This ended up being really simple. The page had a few UpdatePanels and a master page containing the ScriptManager. I went to add an UpdateProgress control and got the error…

Script controls may not be registered before PreRender

If you’ve gotten this error, before you go to explore the other possibilities, check to see if you’ve overridden the OnPreRender method for your page. If so, make sure that you’ve included base.OnPreRender(e); up in the method somewhere. If this didn’t help, there are a number of other scenarios where this could happen and article about them on the internets.

Dec 5 09

When did they make a Farcry movie?

by Wayne Denier

A book can feel very much like a memory of your own story.

A movie can feel like watching or being told a great story.

A video game can feel like experiencing a story being written.

So browsing through the newest arrivals into the Netflix Instant movie stables on my 360, I saw Farcry. It should be no surprise that the title was directed by the imfamous Uwe Boll.

The opening scene only lasts about 5 minutes, watching a team of vanilla ‘solider dudes’ encounter ‘something bad’ and they all die. Within a few seconds I was treated to the line, “I’ve got a bad feeling about this.”

Funny enough though, after a moment I could almost imagine what it would be like to witness these events portrayed with polygons. I imagined creating my own point of view by adjusting the right joystick. I imagined waiting for longer than 5 minutes, like 15 minutes, letting the terror set in.

Then it seemed okay! The cheesy cliche lines, improper casting and predictable plot lines all made sense as a game. Should it have stayed that way? Probably yea.

The battle of the mediums has birthed some funny children, games that want to be as vidid and poetic as movies and books, books that try to adapt big movies and video game universes, and of course movies that try to cash in on the high install base of the rabid video game/book fan.

Movies are quick, but visual. Games are immersive and lengthy. Books are full of granular detail and require the largest commitment of time. Translating these factors is not an easy thing, and requires real adaptation and thought. Think about it.

This movie is just bad.

Nov 25 09

Details: The Zombie Island of Dr. Ned

by Wayne Denier

I’ll keep this spoiler free as much as possible and stick to the important things. I played a few hours and have explored three of the available areas in the DLC.

  • To access the DLC, you have to gain access to the Fast Travel feature, and then select ‘Jakob’s Cove’ from the Fast Travel menu.
  • The missions and enemies begin at level 25 in the first Playthrough. During second playthrough, they start at level 42.
  • No vehicles so far and no fast travel within Jakob’s cove, similar to Fyrestone.
  • No increase in level cap (still max 50 for now)
  • No more sand! The environments are all rich (sometimes dank) swamplands.
  • The brain gathering quest is very irritating. Brains collected before you accept the quest do not apply, and there’s no way to fast travel once you’ve reached the quota, you just have to hoof it. Could have been alot more fun.

So far, I think the environments are really pretty, and the zombies angle while not a NEW idea is a refreshing contrast to the standard Borderlands gameplay. Try to play with a character appropriate to the level target (either 25 or 42). I started with a 35 and a 50 and I was trouncing everything, and the missions are all marked trivial so far.

[EDIT] It’s perfectly fine to start at 25, not 30. Expect to be level 30-31 when all the content is complete. Also added the part about the ‘Brains’ quest above.

Nov 19 09

How to Trim Hierarchical Data Without Breaking It

by Wayne Denier

We’ve got a Hierarchical list of nodes that make up a tree where users can expand/collapse and select different nodes. The nodes however come in two distinct types, and I needed to come up with a way of trimming the list on the fly to display one type or another. I came up with the following code.

private static List<Node> FilterList(List<Node> list, Utilities.TypeRequired type)
{
	List<Node> returnList = new List<Node>();

	// Go through each node of the full list and run the FilterNode recursive method
	foreach (Node item in list)
		returnList.AddRange(FilterNode(item, type));

	return returnList;
}

private static List<Node> FilterNode(Node item, Utilities.TypeRequired type)
{
	// Prep return list
	List<Node> list = new List<Node>();

	// call this same method on each of the children of this node, store in list
	foreach (var child in item.Children)
		list.AddRange(FilterNode(child, type));

	if (item.TypeId == (int)type)
	{
		// if the node is of the correct type, set it's current children to the
		// results from above and return the item within a list
		item.Children.Clear();
		item.Children.AddRange(list);
		return new List<Node>() { item };
	}
	else
		// if not, just return the children without the parent
		return list;
}

The FilterList() method accepts a list of nodes, this is considered to be the first level of children under the root node (in this case there is no root node). It also takes an object that I’ve called TypeRequired, really it can be any kind of data you’d like to use to evaluate the differences between one node and another. The method self-references on the children of the current node and so works through the whole tree.

The real trick here is that in cases where a parent node is not a match to the desired type, the children are promoted to it’s place in the hierarchy before the parent is removed. This way qualifying children stay in the list organized in the proper fashion.