<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Charles Solar &#187; Games</title>
	<atom:link href="http://charlessolar.com/post/tag/games/feed" rel="self" type="application/rss+xml" />
	<link>http://charlessolar.com</link>
	<description></description>
	<lastBuildDate>Fri, 29 Apr 2011 04:38:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PAX Wrap Up</title>
		<link>http://charlessolar.com/post/192</link>
		<comments>http://charlessolar.com/post/192#comments</comments>
		<pubDate>Mon, 07 Sep 2009 04:55:47 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[series]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=192</guid>
		<description><![CDATA[Sadly, Pax is over, fellow gamers are packing up, and exhibitors are leaving before the cleaning crew shows up. There was a lot of SWAG, a lot of people, and a lot of games. I mentioned a few booths in my first post, so this time I am going to try and cover some notable [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/masseffect.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/masseffect-300x224.jpg" alt="masseffect" title="masseffect" width="300" height="224" class="alignleft size-medium wp-image-189" /></a>Sadly, Pax is over, fellow gamers are packing up, and exhibitors are leaving before the cleaning crew shows up.  There was a lot of SWAG, a lot of people, and a lot of games.  I mentioned a few booths in my first post, so this time I am going to try and cover some notable booths I did not mention or did not get a picture of the first time around.  I am trying to cover some of the major features here, but this is by no means a complete feature list.</p>
<p><span id="more-192"></span></p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars1.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars1-300x224.jpg" alt="starwars1" title="starwars1" width="300" height="224" class="alignright size-medium wp-image-190" /></a>The Star Wars the Old Republic people were at pax demoing their game during one of two very packed events in the main hall.  Most attendees (including myself) waited 2 hours or more to get into the theater for the show.  My main attraction to TOR is directly connected to my love of the original KOTOR.  I expect Bioware to put out a decent game, but I am worried about the direction of this new mmo.  The producers on the stage were very proud to label their mmo kotor 3 and 4 and 5 and 6 all in one package.  The team recently announced that the game will have fully voiced dialog and a story driven game play experience.  This sounds great for a single player game but I am concerned about how they will connect the dots.  Single player mmo&#8217;s have been tried, as well as mmo&#8217;s for single players; how does Bioware expect to succeed where others have failed?<br />
They also made the announcement that Coruscant will be a playable zone, which was apparently PAX exclusive news.  They also had a video clip of the zone but its not worth talking about.<br />
All in all I was a bit disappointed in the presentation.  I liked getting updated on some of the features of the classes, but nothing they presented or talked about could not have taken place in a booth with a PLAYABLE DEMO.  Oh, all the attendees received a free steam copy of KOTOR; I do not wish to knock the game, but come on guys, how about a raffle for beta access or something other than a free copy of a six year old game.<br />
<a href="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars2.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars2-300x224.jpg" alt="starwars2" title="starwars2" width="300" height="224" class="alignleft size-medium wp-image-191" /></a>Also, back to the story.  The original kotor was great because it felt like the developers told LucasArts to sit in a corner and leave the story to Bioware.  The strength of the game was due to the very minor attachment to the movies and thus, to George Lucas.  Unfortunately the designers of this mmo were emphasizing connections to the movies and original story, which goes against the very foundation of the original KOTOR game.  While I am a Star Wars fan for the most part, I feel that having as little to do with George Lucas these days is a strength.  So while they were standing up there announcing all this back story as connected to the movies, I was sitting very uncomfortably praying they really do know what they are doing.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/3dwow.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/3dwow-300x224.jpg" alt="3dwow" title="3dwow" width="300" height="224" class="alignright size-medium wp-image-186" /></a>Something else that was really big this year were the 3d glasses from nVidia.  Honestly I find the glasses fun, but rather pointless.  I have a couple of major gripes with this technology.  Firstly, in order for a game to be supported a profile must be made for it by an nVidia dev.  Now, the library of supported games is huge, and since its nVidia you probably will not have to worry about any AAA titles shipping without 3d support, but its still a drawback that the device cannot simply work with all games.  I realize I am asking the impossible, which is why I do not expect 3d glasses to take off anytime soon.  My other problem is with the obvious viewing problems.  Not for the person playing the game, I mean for the people watching.  A major thing that makes some games fun is the party aspect.  Where other people can watch you being a badass.  They cannot watch your screen unless they too have 3d specs; I somehow do not expect every gamer to invest in 3-4 pairs of glasses just so they can show off to their friends when no glasses and no 3d works just as well.<br />
In the end its just a gimmick.  A very nicely executed and kinda interesting gimmick, but developers cannot use the tech to build game play elements into their games, and thus it fails to have any appeal outside of the cool kid gamer crowd.<br />
Another thing that was at pax was a gamer suit that would provide feedback to the player when punched, hurt, thrown around, whatever.  Again, a cool gimmick but nothing more.  When I think of these things I picture some form of uber gamer sitting around with 3d glasses, gaming vest, feedback chair, climate feedback; It is not to big of a jump to just say &#8216;virtual reality.&#8217;  While I do hope that all these little pieces to eventually contribute to the eventual realization of true VR, by themselves they are not worth the sometimes very large investment.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock1.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock1-300x224.jpg" alt="bioshock" title="bioshock" width="300" height="224" class="alignleft size-medium wp-image-187" /></a>I just have a couple more pictures to post so here is my wrap up.  The picture here is one an artist took all three days at pax to finish and as you can see it is very well realized.  Speaking with a little bit of experience with pastels I greatly respect this man for having the stamina to not only endure all three days surrounded by really big nerds asking questions all the time, but also to do great work with what has to be one of the messiest drawing materials in existence.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/dndtable.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/dndtable-300x224.jpg" alt="dndtable" title="dndtable" width="300" height="224" class="alignright size-medium wp-image-188" /></a>My final pic is of one of the table at the <a href="http://www.geekchichq.com/">Geek Chic</a> booth, where I would say they have perfected the ultimate table top for paper game players.  Each table is multifunction, multiuse, the tables themselves come with addons, designs for every style of game, tons of utility features, and much more.  As a consumer you are looking at a cost of $1500 or more for the basic table so a bit out of the price range of the standard gamer but I think they are doing some neat stuff over there.</p>
<p>On a side note, I am not sure how long this video will last, but I filmed a friend of mine playing Dragon Age: Origins at the Intel booth on a PC.  The video is here <a href="http://www.youtube.com/watch?v=TuQWQVZU--E">http://www.youtube.com/watch?v=TuQWQVZU&#8211;E</a></p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/192/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PAX Day 1</title>
		<link>http://charlessolar.com/post/175</link>
		<comments>http://charlessolar.com/post/175#comments</comments>
		<pubDate>Sat, 05 Sep 2009 05:48:31 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[expo]]></category>
		<category><![CDATA[series]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=175</guid>
		<description><![CDATA[Day one of the PAX expo is officially over and I have some pictures and information about the exhibitions to talk about. The day started harmlessly enough, we queued in the queue room to wait for the exhibition hall to open. While we waited the enforcers made sure we were not bored by entertaining us [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/line.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/line-300x225.jpg" alt="pax line" title="pax line" width="300" height="225" class="alignleft size-medium wp-image-177" /></a>Day one of the PAX expo is officially over and I have some pictures and information about the exhibitions to talk about.  The day started harmlessly enough, we queued in the queue room to wait for the exhibition hall to open.  While we waited the enforcers made sure we were not bored by entertaining us with internet memes and blow up beach balls.<br />
<span id="more-175"></span><br />
<a href="http://www.mrlwork.com/wp-content/uploads/2009/09/dragonage.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/dragonage-300x224.jpg" alt="dragon age" title="dragon age" width="300" height="224" class="alignright size-medium wp-image-181" /></a>The exhibition hall was absolutely packed with game companies, attendees, and people handing out free stuff.  One of the first places I stopped at was the Dragon Age booth to play the game demo.  I am really looking forward to this game.  I was a fan before attending pax and after playing the demo my feelings have not changed for better or worse.  We had to use the xbox 360 controller to play the game and while the interface was decent bordering good, Dragon Age might be a bit technical for a standard console controller.  I was told that the pc version will have a much different ui centered around the keyboard and mouse which has always been my favorite controller.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/blizard.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/blizard-300x224.jpg" alt="blizzard" title="blizzard" width="300" height="224" class="alignleft size-medium wp-image-180" /></a>Blizzard wins the award for best booth in my opinion.  They did not do anything too fancy, they just setup twenty or so computers with playable demos for Starcraft 2, Diablo 3 and World of Warcraft Cataclysm.  Even though Blizzard can easily afford to have three major games in development their booth was both simple and to the point.  The line for each computer was at least 4 people long all throughout the day; as such I did not actually play any of the games.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/wizards.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/wizards-300x224.jpg" alt="wizards" title="wizards" width="300" height="224" class="alignright size-medium wp-image-178" /></a>Other notable booths include Wizards of the Coast and Bioshock 2.  I enjoyed WoC&#8217;s booth because they had gm&#8217;s running participants through dungeons in dnd 4.  They had computers setup to generate characters which you would then use to participate in a short session right there in the exhibition hall.  The noise in the hall must have made it really hard to hear the gm for the most part; but I thought it was a neat idea.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock-300x224.jpg" alt="bioshock" title="bioshock" width="300" height="224" class="alignright size-medium wp-image-179" /></a>Bioshock 2&#8242;s booth wins the award for most creative.  They put a movie set up with old fashioned furnishings complete with radio, typewriter, etc.  The room was messy, papers and books all over the place.  There were clues written on papers and letters; all in all it was a very unique booth and I am afraid my picture does not quite do it justice.  The actually footage of the game available at the show was no different than what is available online.</p>
<p>There are panels at pax, where experts talk to a crowded room about certain things; I went to a couple today but I will hold off on writing about those until later.  Some of the data or ideas they present are interesting so I want to write a review and critique of all the panels I go to in one article.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternative to Unique Character Names in MMOs</title>
		<link>http://charlessolar.com/post/137</link>
		<comments>http://charlessolar.com/post/137#comments</comments>
		<pubDate>Mon, 17 Aug 2009 17:11:14 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[mmo]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=137</guid>
		<description><![CDATA[Unique character names in MMOs have long been a pet peeve of mine.  I am sure most of you have experienced the frustration when your favorite character name ends up taken by some else, and if you are like me it might take as many as 20 tries to get an available name.  Well, here [...]]]></description>
			<content:encoded><![CDATA[<p>Unique character names in MMOs have long been a pet peeve of mine.  I am sure most of you have experienced the frustration when your favorite character name ends up taken by some else, and if you are like me it might take as many as 20 tries to get an available name.  Well, here is a question for all you MMO programmers, why the hell are you still using character names as a unique identifier?  There are so many better options to identify players in the world, every name does not need to be unique.  In fact I frequently find that running across players entitled &#8216;FancyPants12&#8242; or &#8216;Moooo4me&#8217; does more damage to game play than a simple change would.  When I am in the process of being adsorbed into an MMO through very nicely executed immersion techniques, stumbling onto these players breaks flow, <a title="ScreenShot_071107_195300" href="http://www.flickr.com/photos/9248805@N04/3760387724/" target="_blank"><img class="alignleft" style="border: 0pt none; margin: 10px;" src="http://farm4.static.flickr.com/3436/3760387724_e785982fb8_m.jpg" border="0" alt="ScreenShot_071107_195300" width="240" height="160" /></a>disrupts my concentration and I find it harder to follow the story line (or even care about it).</p>
<p><small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img class="alignleft" style="border: 0pt none;" src="../wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="Idhren" href="http://www.flickr.com/photos/9248805@N04/3760387724/" target="_blank">Idhren</a></small></p>
<p><small></small>I bring this up because this last weekend I started playing Aion.  A very nice game that I have high hopes for, but its probably the first MMO that I am actually interested in a bit of the lore; I even went so far as to read some of the important quest text.  Its shocking yes, but they really did do a good job making the player feel like they are not just a drop of water in an ocean; which is worthy of recognition in itself.  Unfortunately, Aion suffers from the unique name dilemma so while I am trying to rescue the damsel from a horde of black winged bandits I am constantly running into &#8216;XXSlayerXX&#8217; or &#8216;RoGeGardian&#8217; and that is just terrible from an immersion perspective.</p>
<p>But what can be done about it?  After all, a lot depends on character names.  PMs, brokers, mail, friend lists, etc etc.  Obviously a new system has to enhance game play, not restrict it.  I propose a system where each character is assigned a unique number, not a name, which can be used for all these means of communication with just a little extra effort on the programmers side.</p>
<p><span id="more-137"></span></p>
<p>To illustrate my concept I will run through a few normal MMO actions and highlight how this idea works in comparison to the character name.</p>
<p><strong>Auctions</strong></p>
<p>This is the easiest, when a character posts an item you simply register the item with the character id instead of the character name.  All transactions, searches, bids, use the character id instead of the name.  A really simple swap out in this instance.</p>
<p><strong>PMs</strong></p>
<p>Probably the first problem that would come to your mind.  Obviously having to type /tell 00283023 to talk to a player would be murder on your player base.  PMs can be handled nicely, it just takes a little more work and polish out of the box.  For instance, to talk to someone who made a comment in the chat window, just click on their name and reply.  The reply would pull the character number from the chat window so the player would see the character name but actually be replying using his number.  Now, if you want to type up a pm to someone you met in an instance but did not befriend, things get a little more complicated.  Lets say for the sake of argument that you remember his character name and you wish to send him a message.</p>
<p>There are two solutions I can think of off the top of my head.  First, typing /tell William will bring up a list of all &#8216;Williams&#8217; in the world sorted by last interaction.  Meaning if he met William during a live event the previous night, that William would be listed above a William he met out in the plains last week.  For this to work players would need to keep record of the players they meet and timestamps, not impossible but not very practical.</p>
<p>My next solution would be to improve the friend system to be more intelligent.  Instead of storing a list of people the player manually types in, it could store a list of acquaintances that the player has met over time.  It could list people he met, ordered by zones, time spent with the person, number of interactions with the person, etc.  This way the player would build a network of contacts in the world without having to manually type in their names or numbers.  These two systems not only improve the experience for the player, but also improve immersion since this is normally how people relate to each other.  I can think of five different &#8216;Chris&#8217;s I know, but when attempting to address one I use the social path that has been created between us.  My social network determines the means to communicate.</p>
<p><strong>Mail</strong></p>
<p>Another tricky problem which can be gracefully solved by an expansion on the friend list concept I wrote about above.  When the player tries to send mail he can browse his social network for a contact to send mail to.  This is a good time to mention that chatting with another player would make a new network with that person.  This includes someone chatting in general, city, trade, whatever.  To model those interactions a network of recent chat messages would be displayed for the player to pick out the appropriate recipient.</p>
<p><strong>Groups / Raids</strong></p>
<p>Most groups and raids are formed by pm messages or chat window invites.  Since we have already established that in the chat window a name is really a character id handing invite requests is as easy as opening a new pm.</p>
<p>A final note about the new social system.  Updating and management does not need to be left completely to the program.  With a new friends system comes a completely different way of interacting with players in the world.  Players should be able to modify their networks, add people to groups, tag communities of links.  I have more than once wished to have a system where I could tag players or organize relationships by specific words.  Not wishing to come off as an elitist but I am sure more than one of you have wanted to tag someone &#8216;noob&#8217;, &#8216;idiot&#8217;, or  &#8216;can&#8217;t play his class.&#8217;  With a more friendly social network system you could organize your contacts, including all the people you no longer want to interact with into a group.  Then when they say something in chat, send you a pm, invite you to a raid, you will have fair warning.</p>
<p>When all is said and done I am really advocating a new type of system for interacting with players in an online world.  One built on networks of links instead of a simple one dimensional friends list.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/137/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pax 2009</title>
		<link>http://charlessolar.com/post/131</link>
		<comments>http://charlessolar.com/post/131#comments</comments>
		<pubDate>Mon, 10 Aug 2009 15:24:52 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[filler]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=131</guid>
		<description><![CDATA[So a few things happened and it appears that I will be attending Pax West 2009.  Being someone who did not know the convention existed until about a week ago I like to consider my position at PAX as &#8216;complete noob.&#8217; Anyway why I am I posting this?  Well I have nothing to say about [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.paxsite.com/"><img class="alignleft size-full wp-image-132" style="margin: 5px 10px;" title="pax10" src="http://www.mrlwork.com/wp-content/uploads/2009/08/pax10.png" alt="pax10" width="118" height="105" /></a>So a few things happened and it appears that I will be attending Pax West 2009.  Being someone who did not know the convention existed until about a week ago I like to consider my position at PAX as &#8216;complete noob.&#8217;</p>
<p>Anyway why I am I posting this?  Well I have nothing to say about Pax in particular, like I said I have never been there and my general understanding is its like an E3 only good and open to the public.  I was roped into taking this trip by a friend and we plan to spend a week along the west coast.  That being said Pax started out as only a minor side attraction for us, as we had already planned on traveling out there.  It was not until I started reading about community events and enthusiasm that a lot of people seem to have that I started to seriously look forward to attending the conference.</p>
<p><span id="more-131"></span>First off, Pax is a convention where all sorts of game company&#8217;s get together to show their stuff.  It is from the <a href="http://www.penny-arcade.com/">Penny Arcade</a> people so that was +1 in my book right away.  Now, I have also attended <a href="http://en.wikipedia.org/wiki/Cyberathlete_Professional_League">CPL</a> which was fun, but I was disappointed with the sponsor turnout and activities.  I did not attend to compete, I was only there to have fun and promote <a href="http://developer.valvesoftware.com/wiki/Prodod">Prodod</a>.</p>
<p>Recently, the exhibitor list was published <a href="http://www.joystiq.com/2009/08/06/pax-exhibitors-revealed-star-wars-fans-should-start-lining-up-n/">here</a> and I am quite pleased with the turnout.  First off I just want to say that Knights of the Old Republic is my favorite RPG of all time.  Of course I am excited about <a href="http://www.swtor.com/">Bioware&#8217;s new MMO</a>; I am even more excited to see it at PAX.  I have sort of gotten off track here let me back up.</p>
<p>What has struck me most during these last few days is the amount of fan participation in the event.  There are pre-pax events, post-pax events, during-pax events, and each and every one of them sound like a ton of fun.  Need to travel to PAX?  If you go by <a href="http://forums.penny-arcade.com/showthread.php?t=79555">car</a> or <a href="http://forums.penny-arcade.com/showthread.php?t=86726">train</a> there is a group for you.  During the event there will be several games going on between groups of attendees including <a href="http://forums.penny-arcade.com/showthread.php?t=84166">Pax-Prank</a>, <a href="http://forums.penny-arcade.com/showthread.php?t=86965">Assassins</a>, and <a href="http://forums.penny-arcade.com/showthread.php?t=83266">Pax Buttoneers</a>.  All these events got me thinking about the substantial amount of time that volunteers are spending on an event they are paying for themselves.</p>
<p>There was a point in there somewhere but I seem to have misplaced it.  Truth be told I just felt like writing another article and I had nothing else to write about.  My current projects are on hold while I get accustomed to working full time and I have had no design revelations as of late.  I am trying to keep this site free of political sway so I cannot comment on recent events.</p>
<p>I will be taking a camera so expect a &#8216;Pics&#8217; thread in a month or so.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/131/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Audiosurf</title>
		<link>http://charlessolar.com/post/23</link>
		<comments>http://charlessolar.com/post/23#comments</comments>
		<pubDate>Thu, 10 Jul 2008 00:57:25 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=23</guid>
		<description><![CDATA[Ever want to get more out of your music? Feel like your relationship is entirely one sided? Then you probably have not played Audiosurf yet. In a nutshell this program turns you music into a game that you play for points and against other people if you so wish. There are quite a number of [...]]]></description>
			<content:encoded><![CDATA[<p>Ever want to get more out of your music?  Feel like your relation<a href="http://www.mrlwork.com/images/sshot-1.png"><img src="http://www.mrlwork.com/images/sshot-1_thumb.jpg" border="0" alt="audiosurf" hspace="10" vspace="10" align="right" /></a>ship is entirely one sided?  Then you probably have not played Audiosurf yet.  In a nutshell this program turns you music into a game that you play for points and against other people if you so wish.  There are quite a number of cool features in Audiosurf but they are easily discovered while playing or researching the game.  Instead I wish to make this post about a problem Audiosurf has, which is that tracks can be inconsistent across operating systems.</p>
<p>If you have ever seriously tried to play Audiosurf with someone or maybe a group of people you might discover that another person’s track is different then yours, in both congestion and block positioning.  It so happens that me and my friends have setup a mini competition where we get scored for points and positions in several weekly songs.  For full details: <a href="http://surfoff.blogspot.com/">http://surfoff.blogspot.com/</a></p>
<p>Back to the main purpose of this article, yes, tracks do differ between operating systems, most common are windows xp to windows vista.  The problem seems to be with the mp3 decoders, or so they say.</p>
<p>Here is how to fix this problem, simply use an open source audio editor like <a href="http://audacity.sourceforge.net/">audacity</a> and export the mp3 as a wav file.  Then distribute and surf the wav file.  You might want to use a good compressor, like <a href="http://www.rarsoft.com/">winrar</a>, for the file however, as it will be big.</p>
<p><strong>Why does this work?</strong></p>
<p>Audiosurf must first decode an mp3 before it can process it for block positions and colors.  This process can differ between operating systems as previously discussed.  So what we do here is decode the mp3 once on one machine and distribute the song uncompressed.  This way Audiosurf does not need to decode anything, which in turn means it is not operating system sensitive.</p>
<p>Happy surfing</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/23/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>World of Warcraft</title>
		<link>http://charlessolar.com/post/22</link>
		<comments>http://charlessolar.com/post/22#comments</comments>
		<pubDate>Wed, 09 Jul 2008 05:10:05 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[filler]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[mmo]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=22</guid>
		<description><![CDATA[Last semester I was unceremoniously captured and tormented by the game we all know as World of Warcraft. During my adventures as a mage in this game I progressed as far as the first boss in black temple before wow-quiting. As I am sure many fellow gamers can understand, one day the game finally clicked [...]]]></description>
			<content:encoded><![CDATA[<p>Last semester I was unceremoniously captured and tormented by the game we all know as World of Warcraft.  During my adventures as a mage in this game I progressed as far as the first boss in black temple before wow-quiting.  As I am sure many fellow gamers can understand, one day the game finally clicked for me and I did not sign on it for weeks, only to be destroyed when I reformatted last week.</p>
<p>But enough about that, I learned quite a few things from this game, and I would like to share some of the more practical lessons.  I have compiled a mage ‘guide’ that I believe might just be the most comprehensive on the internet, concerning addons, macros, and gear tips anyway.  You will still have to read elitistjerks to learn how to play your class.</p>
<p>I was the mage officer for my guild and so I had a big thread that detailed what I expected each mage to do, and various tips and tricks I had picked up.  So without further delay, here is quite possibly the longest post I will ever make in one sitting.</p>
<p><strong><font size="3">Raiding</font></strong></p>
<p>In order to raid you must first have the appropriate gear and stats. As a general rule of thumb, mages should have around 8k hp unbuffed. Usually that number is 8.5k, however mages do have a lot of survivability so I lowered it a bit. If you want to raid please get the appropriate gear either through badge loot or a few lucky heroic/kara/gruul runs. When picking who I will take to a raid you can follow this list.</p>
<ul>
<li>Have the time</li>
<li>Know your class</li>
<li>Know the fight</li>
<li>Have the gear</li>
</ul>
<p>I consider all these when choosing who to bring to a raid, please be aware of how you score and how you can improve.</p>
<p><strong>Mage Sweet Information Thread<br />
</strong><a href="http://elitistjerks.com/f31/t18441-mage_sweet_informational_thread/">http://elitistjerks.com/f31/t18441-mage_sweet_informational_thread/</a></p>
<p><strong><font size="3">Consumables</font></strong></p>
<p><strong>Flasks<br />
</strong><font color="#0000ff">[Flask of Pure Death]</font> +43 dps<br />
<font color="#0000ff">[Flask of Blinding Light]</font> +43 dps<br />
<font color="#0000ff">[Flask of Supreme Power]</font> +38 dps<br />
<font color="#0000ff">[Flask of Distilled Wisdom]</font> Acceptable for arcane mage use, 1125 mana, 1% to crit<br />
<font color="#0000ff">[Shattrath Flask of Supreme Power]</font> +38 dps</p>
<p><font color="#0000ff">[Unstable Flask of the Sorcerer]</font> Only for gruuls</p>
<p><strong>Elixers</strong><br />
<font color="#0000ff">[Adept's Elixir]</font> BATTLE ~+20 dps<br />
<font color="#0000ff">[Elixir of Major Firepower]</font> BATTLE +30 dps<br />
<font color="#0000ff">[Elixir of Major Frost Power]</font> BATTLE +30 dps<br />
<font color="#0000ff">[Greater Arcane Elixir]</font> BATTLE straight up damage, no crit</p>
<p><font color="#0000ff">[Elixir of Draenic Wisdom]</font> GUARDIAN<br />
<font color="#0000ff">[Elixir of Major Mageblood]</font> GUARDIAN +16 mp5<br />
<font color="#0000ff">[Elixir of Major Fortitude]</font> GUARDIAN If you need a little extra hp</p>
<p><strong>Oils</strong><br />
<font color="#0000ff">[Superior Wizard Oil]</font> Cheapest and easiest<br />
<font color="#0000ff">[Superior Mana Oil]</font> If you need the mp5<br />
<font color="#0000ff">[Brilliant Wizard Oil]</font> Damage and crit</p>
<p><strong>Food</strong><br />
<font color="#0000ff">[Blackened Basilisk]<br />
[Crunchy Serpent]<br />
[Poached Bluefish]</font><br />
<font color="#0000ff">[Skullfish Soup]</font></p>
<p><strong>Potions<br />
</strong><font color="#0000ff">[Super Rejuvenation Potion]<br />
[Major Dreamless Sleep Potion]</font></p>
<p><font color="#0000ff">[Destruction Potion]<br />
[Flame Cap]</font></p>
<p><strong><font size="3">Spec</font></strong></p>
<p>Mages have 3 possible specs</p>
<p align="left"> 2/48/11<br />
<a href="http://www.wowhead.com/?talent=obZxgRzfcIoeRtVhM0o">http://www.wowhead.com/?talent=obZxgRzfcIoeRtVhM0o</a><br />
40/0/21<br />
<a href="http://www.wowhead.com/?talent=oi0ic0czxIziZZVA0coc0o">http://www.wowhead.com/?talent=oi0ic0czxIziZZVA0coc0o</a><br />
10/0/51<br />
<a href="http://www.wowhead.com/?talent=obhVZZVAGcofLoiqt">http://www.wowhead.com/?talent=obhVZZVAGcofLoiqt</a></p>
<p><strong><font size="3">Macros</font></strong><br />
There are a lot of things that help a mage get max dps and macros are one the top ones. Here are some handy macros I use, consider integrating them into your ui if you have not already.</p>
<p>Firstly, the most important,</p>
<p>/cast [COOLDOWN]<br />
/stopcasting</p>
<p>Make a macro for all cooldowns you pop, including trinkets and gems. You might notice that when you use a cooldown you get global cooldown. This is not suppose to happen and can severely cut your dps. When you use stopcasting it will cancel the global cooldown. For example, as 40/0/21 I keep this macro</p>
<p>/cast Icy Veins<br />
/stopcasting<br />
/cast Cold Snap<br />
/stopcasting</p>
<p>This pops both cooldowns at the same time and I can immediately follow up with a spell and save myself 3 seconds of global cooldown.</p>
<p>Second most important, <strong>focus targeting</strong></p>
<p>Every mage should use these macros for cc. The command is simple, its just /focus<br />
That will set a target as your focus. For those unfamiliar with focus targeting, think of the focus as a second target. You have your main target (the skull) and your cc target (star) both targeted at the same time. In this way you can easily see the timer on your sheep AND you can easily resheep without changing targets. Obviously this is a big deal, so use it. Here are the macros</p>
<p>/focus mouseover</p>
<p>then</p>
<p>/cast [target=focus] Polymorph</p>
<p>I bind the mouseover focus to mouse 3, or the middle button. When I click that on a mob I set my focus target. When it comes to cc I have polymorph target set to F and polymorph focus set to ctrl+F. I highly recommend the use of the modifier key, that way you can have one &#8216;sheep&#8217; button, but it can do 2 different things.<br />
If you have any questions about this please talk to me in game.</p>
<p>This handy little macro will delete any Mana Emeralds you have in your inventory and conjure a new one. Good if you want to replace the one that only has 1 or 2 charges left.</p>
<p>/run for x=0,4 do for y=1,GetContainerNumSlots(x) do l=GetContainerItemLink(x,y) if l then if GetItemInfo(l)==&#8221;Mana Emerald&#8221; then PickupContainerItem(x,y) DeleteCursorItem() return end end end end<br />
/cast Conjure Mana Emerald</p>
<p><strong><font size="3">Addons</font></strong></p>
<p><a href="http://files.wowace.com/scorchio/scorchio.zip">http://files.wowace.com/scorchio/scorchio.zip</a><br />
Lets you know how long the scorch debuff has left, regardless of who owns the stack</p>
<p>Aloft<br />
- Better overhead enemy health bars. There is also an option to include a sheep timer and cast bar</p>
<p>Banzai Alert<br />
- This addon will tell you the second you pull agro or are targeted by an unfriendly mob/player</p>
<p>BigBrother<br />
- This addon will tell you who breaks your sheeps, and has an optional announcement feature for parties and raids</p>
<p>Bongos<br />
- Very customizable action bars, and easy to use key bind system.</p>
<p>Distance2<br />
- Addon that scans your talents and displays an approximation of how far you are away from a mob</p>
<p>DrDamage<br />
- Calculates your expected and effective dps given your talents, gear, etc. Displays damage for spells on your action bars, and much more</p>
<p>ElkBuffBars<br />
- Very nice and clean buff bars</p>
<p>ErrorMonster<br />
- If you are tired of all the &#8216;You Cannot Use That Item&#8217; blah blah error messages, use this addon to filter them out.</p>
<p>FreeRefills<br />
- Auto buy stacks of reagents</p>
<p>Grid + Click2Cast<br />
- I use grid for my raid frames and love it. You can also combine grid with an addon called Click2Cast and effectively make decursive, removing an extra addon you dont really need. You will need some prowess in order to set it up but it is worth the trouble.</p>
<p>ag_UnitFrames + MobHealth<br />
- ag_unitframes will replace blizzard&#8217;s default ui with a much cleaner and nicer ui. I combine it with mobhealth so that I can get really good approximations at how much health the boss really has.</p>
<p>OmniCC<br />
- Will place a countdown on your action bar for your cooldowns.</p>
<p>SCT + SCTD<br />
- Scrolling combat text and more importantly, scrolling combat damage. Can be easily configured to show you when you are taking damage and such.</p>
<p>Talented<br />
- Allows you to store templates for other specs and even will respec for you. Combine this addon with Talented_DrDamage, and DrDamage will tell you expected dps with whichever spec you have open in talented</p>
<p>WitchHunt<br />
- Will display a message when an enemy within range casts something, anything.</p>
<p>You might notice that a lot of these addons are ACE addons. I did this on purpose for if you download the ACE Updater you can easily update the majority of your addons in 1 click. Its just my preference though. Happy tweaking.</p>
<p><strong><font size="3">Gear (Mainly badges)</font></strong></p>
<p><font color="#0000ff">[Scryer's Blade of Focus]</font> : 150 Badges</p>
<p><font color="#0000ff">[Chronicle of Dark Secrets]</font> : Rage Winterchill</p>
<p><font color="#0000ff">[Wand of the Forgotten Star]</font> : High Astromancer Solarian</p>
<p><font color="#0000ff">[Cowl of Tirisfal]</font> : Lady Vashj<br />
- <font color="#0000ff">[Chaotic Skyfire Diamond]<br />
</font>- <font color="#0000ff">[Runed Crimson Spinel]</font></p>
<p><font color="#0000ff">[Adornment of Stolen Souls]</font> : Prince Malchezaar<br />
<font color="#0000ff">[Loop of Cursed Bones]</font> : Zul&#8217;jin</p>
<p><font color="#0000ff">[Mantle of Tirisfal]</font> : Void Reaver<br />
- <font color="#0000ff">[Potent Noble Topaz]<br />
</font>- <font color="#0000ff">[Infused Amethyst]</font></p>
<p><font color="#0000ff">[Brute Cloak of the Ogre-Magi]</font> : Maulgar</p>
<p><font color="#0000ff">[Tormented Demonsoul Robes]</font> : 100 Badges<br />
- <font color="#0000ff">[Brilliant Dawnstone]</font></p>
<p><font color="#0000ff">[Cuffs of Devastation]</font> : Rage Winterchill<br />
- <font color="#0000ff">[Runed Living Ruby]</font></p>
<p><font color="#0000ff">[Enslaved Doomguard Soulgrips]</font> : 75 Badges<br />
- <font color="#0000ff">[Brilliant Dawnstone]</font></p>
<p><font color="#0000ff">[Belt of Blasting]</font> : Crafted<br />
- <font color="#0000ff">[Glowing Nightseye]</font><br />
- <font color="#0000ff">[Veiled Noble Topaz]</font></p>
<p><font color="#0000ff">[Corrupted Soulcloth Pantaloons]</font> : 100 Badges<br />
- <font color="#0000ff">[Runed Living Ruby]</font><br />
- <font color="#0000ff">[Runed Living Ruby]</font></p>
<p><font color="#0000ff">[Boots of Incantations]</font> : 75 Badges<br />
- <font color="#0000ff">[Potent Noble Topaz]</font></p>
<p><font color="#0000ff">[Band of the Eternal Sage]</font> : Exalted: The Scale of the Sands</p>
<p><font color="#0000ff">[Fused Nethergon Band]</font> : 60 Badges</p>
<p><font color="#0000ff">[Hex Shrunken Head]</font> : Hex Lord Malacrass</p>
<p><font color="#0000ff">[Serpent-Coil Braid]</font> : Morogrim TideWalker<br />
<font color="#0000ff">[Sextant of Unstable Currents]</font> : Fathom Lord Karathress</p>
<p>When all is said and done, according to thise nice dps calculator you should end up with about 1920.64 dps fully buffed.<br />
Obviously this gear is geared more towards an arcane mage, so get to know and love the arcane mage rotation. I suggest occasionally spec&#8217;ing 40/0/21 and doing 5 mans to get the hang of it.</p>
<p>Stats in this gear (unbuffed)<br />
7933 hp / 10691 mana<br />
30% crit / 10% hit (3% off cap [buffs increase this])<br />
1249 Spell Damage</p>
<p>Stats (buffed)<br />
8603 hp / 13226 mana<br />
40.51% crit / 13% hit<br />
1481 Spell Damage</p>
<p>Buffed stats assume a shaman and moonkin in the group</p>
<p><strong>Total Badge Count:<font color="#ff0000"> 560</font></strong></p>
<p><strong><font size="3">Gear (PVE [aka lazy])</font></strong></p>
<p><font color="#0000ff">[The Maelstrom's Fury]</font> : High Warlord Naj&#8217;entus</p>
<p><font color="#0000ff">[Chronicle of Dark Secrets]</font> : Rage Winterchill</p>
<p><font color="#0000ff">[Wand of the Forgotten Star]</font> : High Astromancer Solarian</p>
<p><font color="#0000ff">[Cowl of Tirisfal]</font> : Lady Vashj<br />
- <font color="#0000ff">[Chaotic Skyfire Diamond]<br />
</font>- <font color="#0000ff">[Runed Crimson Spinel]</font></p>
<p><font color="#0000ff">[Adornment of Stolen Souls]</font> : Prince Malchezaar<br />
<font color="#0000ff">[Loop of Cursed Bones]</font> : Zul&#8217;jin</p>
<p><font color="#0000ff">[Mantle of Tirisfal]</font> : Void Reaver<br />
- <font color="#0000ff">[Potent Noble Topaz]</font><br />
- <font color="#0000ff">[Infused Amethyst]</font></p>
<p><font color="#0000ff">[Brute Cloak of the Ogre-Magi]</font> : Maulgar</p>
<p><font color="#0000ff">[Tormented Demonsoul Robes]</font> : 100 Badges<br />
- <font color="#0000ff">[Brilliant Dawnstone]</font></p>
<p><font color="#0000ff">[Cuffs of Devastation]</font> : Rage Winterchill<br />
- <font color="#0000ff">[Runed Living Ruby]</font></p>
<p><font color="#0000ff">[Enslaved Doomguard Soulgrips]</font> : 75 Badges<br />
- <font color="#0000ff">[Brilliant Dawnstone]</font></p>
<p><font color="#0000ff">[Belt of Blasting]</font> : Crafted<br />
- <font color="#0000ff">[Glowing Nightseye]</font><br />
- <font color="#0000ff">[Veiled Noble Topaz]</font></p>
<p><font color="#0000ff">[Leggings of Channeled Elements]</font> : Kaz&#8217;rogal<br />
- <font color="#0000ff">[Runed Living Ruby]</font><br />
- <font color="#0000ff">[Runed Living Ruby]<br />
</font>- <font color="#0000ff">[Runed Living Ruby]</font></p>
<p><font color="#0000ff">[Slippers of the Seacaller]</font> : High Warlock Naj&#8217;entus<br />
- <font color="#0000ff">[Runed Living Ruby]</font><br />
- <font color="#0000ff">[Runed Living Ruby]</font></p>
<p><font color="#0000ff">[Band of the Eternal Sage]</font> : Exalted: The Scale of the Sands</p>
<p><font color="#0000ff">[Ring of Captured Storms]</font> : High Warlord Naj&#8217;entus</p>
<p><font color="#0000ff">[Hex Shrunken Head]</font> : Hex Lord Malacrass</p>
<p><font color="#0000ff">[Serpent-Coil Braid]</font> : Morogrim TideWalker<br />
<font color="#0000ff">[Sextant of Unstable Currents]</font> : Fathom Lord Karathress</p>
<p>When all is said and done, according to thise nice dps calculator you should end up with about 1810.60 dps fully buffed.<br />
Obviously this gear is geared more towards an arcane mage, so get to know and love the arcane mage rotation. I suggest occasionally spec&#8217;ing 40/0/21 and doing 5 mans to get the hang of it.</p>
<p>Stats in this gear (unbuffed)<br />
7173 hp / 9791 mana<br />
32.5% crit / 11% hit<br />
1289 Spell Damage</p>
<p>Stats (buffed)<br />
7763 hp / 12251 mana<br />
43.69% crit / 14% hit<br />
1566 Spell Damage</p>
<p>Buffed stats assume a shaman and moonkin in the group</p>
<p><strong>Total Badge Count:<font color="#800000"> 175</font></strong></p>
<p>Tools and Resources</p>
<p>There are quite a lot of tools and such mages can use to figure out how they can be better. Here are some of the programs and web sites I use to keep tabs on everyone.</p>
<p>Rawr<br />
<a href="http://www.codeplex.com/Rawr/Release/ProjectReleases.aspx?ReleaseId=12354">http://www.codeplex.com/Rawr/Release/ProjectReleases.aspx?ReleaseId=12354</a><br />
Gear comparison, dps calculator, spec inspection, this is by far the BEST mage program</p>
<p>Loot Rank<br />
<a href="http://www.lootrank.com/wow/rank.asp">http://www.lootrank.com/wow/rank.asp</a><br />
Does almost the same thing as Rawr but provides a bit more info and easier to use in a certain respect. The thing with loot rank is you have to assign numbers to stats for it to choose the best gear for you. These numbers can be tweaked a bit depending on how you feel, but here are some example builds.</p>
<p><a href="http://www.lootrank.com/wow/rank.asp?Cla=128&amp;j1=1&amp;s7=1&amp;s8=4&amp;Art=0&amp;j2=1&amp;s1=1&amp;s2=4&amp;Slot=0&amp;i2=1&amp;j4=1&amp;s3=1&amp;s4=4&amp;Max=10&amp;i8=1&amp;k1=1&amp;s5=1&amp;s6=4&amp;Gem=3&amp;i3=1&amp;j5=1&amp;i4=1&amp;j6=1&amp;i5=1&amp;i6=1&amp;j3=1&amp;Str=0&amp;Arm=0&amp;Exp=0&amp;mp5=0&amp;Sta=250&amp;Def=0&amp;mcr=0&amp;heal=0&amp;Agi=0&amp;Dod=0&amp;mhit=0&amp;spc=592&amp;Int=313&amp;blv=0&amp;map=0&amp;sph=254&amp;Spi=0&amp;blr=0&amp;fap=0&amp;spd=1000&amp;par=0&amp;arp=0&amp;fid=0&amp;Sckm=0&amp;res=0&amp;mh=0&amp;frd=0&amp;dps=0&amp;ard=0&amp;odps=0&amp;nad=0&amp;rdps=0&amp;shd=0&amp;has=1234&amp;spp=0&amp;Ver=2">High priority on stam and haste, not the best for all of us atm.</a></p>
<p><a href="http://www.lootrank.com/wow/rank.asp?Cla=128&amp;j1=1&amp;s7=1&amp;s8=4&amp;Art=0&amp;j2=1&amp;s1=1&amp;s2=4&amp;Slot=0&amp;i2=1&amp;j4=1&amp;s3=1&amp;s4=4&amp;Max=10&amp;i8=1&amp;k1=1&amp;s5=1&amp;s6=4&amp;Gem=3&amp;i3=1&amp;j5=1&amp;i4=1&amp;j6=1&amp;i5=1&amp;i6=1&amp;j3=1&amp;Str=0&amp;Arm=0&amp;Exp=0&amp;mp5=0&amp;Sta=250&amp;Def=0&amp;mcr=0&amp;heal=0&amp;Agi=0&amp;Dod=0&amp;mhit=0&amp;spc=500&amp;Int=313&amp;blv=0&amp;map=0&amp;sph=254&amp;Spi=0&amp;blr=0&amp;fap=0&amp;spd=645&amp;par=0&amp;arp=0&amp;fid=0&amp;Sckm=0&amp;res=0&amp;mh=0&amp;frd=0&amp;dps=0&amp;ard=0&amp;odps=0&amp;nad=0&amp;rdps=0&amp;shd=0&amp;has=100&amp;spp=0&amp;Ver=2">This weighting is more suited for our mages at the current moment. Check it out.</a></p>
<p>I might make some tweaks based on layout here or there but this guide is not going to change much so consider it current to today’s post date.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/22/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Team Fortress 2 Critical Hits</title>
		<link>http://charlessolar.com/post/19</link>
		<comments>http://charlessolar.com/post/19#comments</comments>
		<pubDate>Sat, 08 Dec 2007 22:00:15 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=19</guid>
		<description><![CDATA[A little while ago, Valve had been quoted as saying that critical hits in Team Fortress 2 are skill dependent. That the chance to get a critical hit increases the better you do. A couple of weeks ago I made up an experiment to test these statements out in game. First off, I should explain [...]]]></description>
			<content:encoded><![CDATA[<p>A little while ago, Valve had been quoted as saying that critical hits in Team Fortress 2 are skill dependent.  That the chance to get a critical hit increases the better you do.  A couple of weeks ago I made up an experiment to test these statements out in game.</p>
<p>First off, I should explain that I wrote a plugin for Team Fortress 2 called TFTrue.  This plugin maintains critical chance and damage for server owners wishing to change the default settings.  To make the plugin I had to study the take damage function in the game to figure out where the percentages were coming from ( which if you are curious, default you have a 5% chance to crit with weapons and 15% chance to crit with melee ).  I thought this statement was weird because after all my searching I never came up with any &#8216;skill&#8217; variable that increased or decreased the crit chance.  I setup my test to work out all the unknown variables in the game code and find out whether or not score has an impact on your crit chance.  I will summarize my data here, if you want to refer to the hard data, see the end of this article.</p>
<p>I setup a private server with TFTrue installed and crit chance set to 50%.  I made a test map with 1 spawn point and set the respawn time to 0.  This made my bots all spawn in the same place with little death delay.  I expended 80 rounds of rocket ammo at a wall and observed my critical count.  For my control test I ended up with exactly 50% critical chance, so far so good.  Next I stepped it up, introducing 7 bots on the opposing team to test the idea that being out numbered helps.  After firing all 80 rounds, my crit chance still remained 50%.</p>
<p>Next test involved killing the bots enough to achieve the &#8216;domination&#8217; status with all of them.  With my high score and high skill (according to the game), I fired 80 more rounds at the wall.  Still 50% crit chance.  What does this mean?  It means being consistently better than the other players will not increase your crit chance.</p>
<p>The final test I did was tacked on as a side note when I noticed something interesting while killing the bots.  It appeared that  I was getting all crits when constantly killing the bots as they spawned right in front of me.  So on a hunch I started firing constantly into the crowd of bots and low and behold, 100% crits for all 80 rounds.  Upon further investigation I found that after killing 2 players in quick succession increased your crit chance about 4 times.  Meaning default crit chance would become 20%.  This effect lasted a variable amount of time depending on the weapon type.  I timed the demoman&#8217;s sticky grenades to last for a bout 20 seconds, however the rockets only lasted about 5.  To figure out what specifically influences this behavior we must look back at our code.</p>
<p>Before the Nov. 7th patch, Valve had kept private critical chance variables in the game.  Namely, tf_crit_chance, tf_rapid_crit_chance, tf_melee_crit_chance.  The first and last variable are pretty much self explanatory, however, what is rapid crit chance I wondered.  Back then I decided that it was the chance to crit while firing rapidly.  However after reviewing my test results I now believe that maybe this rapid chance is what determines critical chance when killing players rapidly.  This is all theory and I have not tested it, but I do think that while playing if you kill a player the game rolls a number to compare to the rapid chance and turns crits on for you if you are lucky.  After the Nov. 7 patch the TFTrue plugin treats both those numbers the same, they are both controlled by tftrue_crit_chance.  And after further reviewing the code it supports this idea.  So if we do work with this theory lets walk through a typical game.</p>
<blockquote><p>Player Spawns<br />
Player Shoots gun at wall (5% chance to crit)<br />
Player runs to enemy territory<br />
Player kills enemy player (5% chance to start &#8220;crit chain,&#8221; if the player if lucky he will now shoot crits for X seconds)<br />
Player kills another enemy (5% chance to start &#8220;crit chain,&#8221; regardless if they are in one or not)<br />
Player shoots (5% crit chance, unless in crit chain, then its 20%)<br />
Player Dies.</p></blockquote>
<p>I think if you are a hard core tf2 player you can easily identify with this result, just remember that this senerio is purely hypothetical.  I have not done any tests modifying rapid crit chance.  Like I said earlier however, the code supports this situation.</p>
<p>Now we must turn back to our original hypothesis.   Does the critical hit chance get bigger the better you do? In one word, no.  However I think we can easily see how Valve would mix up this system with a skill reward.  In this system you can be a complete noob and get 1 kill to put you in a crit chain.  Your skill as a player has no bearing on the crit chance.  How you get more crits in tf2 is to kill more people.  The more people you kill, the more shots you have at hitting that 5% chance on the nose.</p>
<p>Test Data:</p>
<p>Test 1:  15 / 40 crits | 24 / 40 crits<br />
Test 2: 18 / 40 crits | 20 / 40 crits<br />
Test 3: 22 / 40 crits | 18 / 40 crits<br />
Test4:  39 / 40 crits | 40 / 40 crits</p>
<blockquote></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/19/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Dynamic NPC Actions</title>
		<link>http://charlessolar.com/post/16</link>
		<comments>http://charlessolar.com/post/16#comments</comments>
		<pubDate>Sat, 27 Oct 2007 04:30:20 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=16</guid>
		<description><![CDATA[The true cornerstone of a project such as this will be dynamic and human like actions. I have spent the last two weeks thinking of a system that would allow the development and evolution of dynamic actions, searching the internet, writing down ideas, and finally come up with a design I feel confident enough to [...]]]></description>
			<content:encoded><![CDATA[<p>The true cornerstone of a project such as this will be dynamic and human like actions.  I have spent the last two weeks thinking of a system that would allow the development and evolution of dynamic actions, searching the internet, writing down ideas, and finally come up with a design I feel confident enough to post about.   I am writing this down for my benefit as well as anyone who is curious, so the train of thought it going to be random and probably hard to understand.  For that I apologize, I will have more solid implementation details ready when I have a working system written.</p>
<p>I started by defining what I would be given, and what I would need to produce, and I decided to start with nothing but basic preprogrammed controllers attached to the actor&#8217;s to control everything about it.  Rotation, position, scale, etc.  For an npc, he would have controllers on all his bone joints, for an example.  These controllers will have a predefined range of accepted values and know how to move around those ranges.  What I wanted to end up with was a high level action, something that will ultimately be composed of hundreds of controller movements over time.  And I needed a nice system to wrap up all this data into a structure the npc can store and build off of.</p>
<p>To start off, picture a flat plain of controllers.  Each controller knows what it can do, but there are no existing actions yet so this npc is stupid as a brick.  During training, actions will start simple, something along the lines of, &#8216;bend index finger&#8217; works.  The npc would look at its action graph and see only the flat plain of controllers, so then its asks each controller if it can accomplish the task of  moving the finger&#8217;s x position by 1.  The controller(s) that respond will have already been defined as able to do this so the npc builds a new action that connects directly with the controllers found previously.  Now if the game asks to bend a finger, this action will say &#8216;I can do that&#8217; and use the correct controller to chance the finger&#8217;s position.  Its worth noting how the action knows it can do this, so I will explain that a bit.  Each action has a function that reads the actor&#8217;s current state and determines if it has actions or controllers in its collection to handle that state in any way.  If it does, it says yes.</p>
<p>So as the npc adds more and more actions it builds it&#8217;s web of linked actions, the process looks a lot like building a neural network.  Actions have many actions linked to it, and many actions linked to.  I cannot go to much farther without showing you the action class definition so here you go:</p>
<pre class="cpp">class Action
{
Action();
Action( Action* next );

bool validStart( Actor* );
bool validEnd( Actor* );

void AddNext( Action* );
void RemoveNext( Action* );

private:

std::set&lt;Action*&gt; actionList;  // Each entry in this action array represents a start state.
// What about actions that have many independant start actions?
};</pre>
<p>When designing this class I thought it was going to be some monster from hell, but after I thought about it, added some recursion, and trimmed it down I think it ended up rather nice.  Its simple and works well.   Each action will hold links to one or more actions.  Each action link represents a valid start state, so when validStart is called the class should call each of it&#8217;s start states validState functions and return the OR of their return.  This design is very recursive, a next link could be another action or a controller at the very basic level.  Therefore chains of actions will form in neural network fashion with proper training.  When the npc wants to change his state (execute an action) he simple needs to figure out what state he wants to be in, call validEnd( endState ) on each of his higher level actions that match his start state and if one matches, execute the action.</p>
<p>Only problem here is the tremendous overhead of using the brain.  Take an example actor with just three levels of actions, when the game asks to do an action on the third level that action asks for valid start on all level 2 actions linked to it, and in turn those level 2 actions call valid state for all level 1 actions linked to it, which in turn call validstart for all controllers that are linked with it. We could be looking at thosands of function calls with a simple 4 or 5 level npc.  And the growth is<br />
exponential.<br />
For now we will just have to deal with it since I believe this to be the best way to describe dynamic actions however in the future tremendous effort will be required to optimize this code.</p>
<p>I will be working on integrating this design into my demo project so if my explanation is way off I will have sample code sometime soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/16/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>COF Plugin: Part 5</title>
		<link>http://charlessolar.com/post/13</link>
		<comments>http://charlessolar.com/post/13#comments</comments>
		<pubDate>Thu, 16 Aug 2007 18:45:09 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[disassemble]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=13</guid>
		<description><![CDATA[Continuing from part 4, I will be explaining about the detour I use in the cof plugin for day of defeat source. Basically, a detour is just what you would expect. When the actual game code reaches a certain part in the program, it will jump into one of your own newly coded functions to [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing from part 4, I will be explaining about the detour I use in the cof plugin for day of defeat source.  Basically, a detour is just what you would expect.  When the actual game code reaches a certain part in the program, it will jump into one of your own newly coded functions to execute some code, then jump back to the original program.  When we return control to the original program we can either return at the same place we jumped from, or we can return somewhere later in the program.</p>
<p>In the cof plugin, I setup a detour to replace the original bullet spread code with my own.  I did this by setting a jump instruction right before the original jump code, and I returned just after the original shot code.  I will illustrate this with a picture.</p>
<p><img src="http://www.mrlwork.com/images/detour.jpg" height="204" width="363" /></p>
<p>Basically what we are doing here is substituting  our own code for the original.  If you look at the cof plugin source from part 3, the code that adds this detour is found in the addCof function.  I will explain the parts of it now.</p>
<p>First off we set the starting offset in the binary.  This was mostly for optimization, instead of having the scanner search the entire binary image, I have it starting at a specific offset.  This offset is far enough in the image to save some time while not going over the area the cone of fire code is likely to reside.  Unless you know for a fact that the location will always be beyond this point, I do not suggest this for many projects.  You will also notice I set two different values for win32 and linux.  In linux I simply use a function to give me the address of a symbol in the file so that becomes my offset.  After some experimentation I noticed that linux elf files did not take as kindly to the hard coded offset like windows did.</p>
<p>The next bit of code simply scans the binary for the shot code.   After some error checking I offset the address a bit according to OS to run over the mov instruction right before the push -1 instruction (see cof plugin: part 4).</p>
<p>I then make a copy of the memory in that address space to allow for a simple &#8216;undo&#8217; of the detour, should the server want to turn it off or an error occurs.</p>
<p>Immediately after that I proceed to write my detour.  In this case I write it at the exact same point as the push -1 instruction from the last post.</p>
<p>What I ended up doing is moving the address I was going to jump to into a register and then calling a jump on that register.  Something similar to:</p>
<blockquote><p>mov eax, 0&#215;11223344<br />
jmp eax</p></blockquote>
<p>My memory is a little fuzzy but that is basically what I did.  You might be wondering why I did it this way and not just a &#8216;jmp 0&#215;11223344,&#8217; which is a very good question.  See, the jmp instruction itself can only travel x number of bytes away.  It can&#8217;t go anywhere in memory, across segments for instance.  the &#8216;jmp far&#8217; instruction can, but writing that function on the fly is a pain in the butt.  I found an example of this kind of jump on the game deception forums.  It allows me to jump where I need to go.</p>
<p>So after we write the jump into memory the legitimate bullet shot code will be sent directly to the address the myCOF() symbol points to.  Two versions of this function exists, one for windows and another for linux.</p>
<p>Unfortunately this is where I have to end today so next time I will explain the assembly code, the stamp code, and how to setup the return jump.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/13/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>COF Plugin: Part 4</title>
		<link>http://charlessolar.com/post/8</link>
		<comments>http://charlessolar.com/post/8#comments</comments>
		<pubDate>Fri, 08 Jun 2007 02:08:51 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[disassemble]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=8</guid>
		<description><![CDATA[So hopefully by now you have a working source plugin that will make your server&#8217;s cone of fire a straight line. Today I am going to explain a bit about sigs, and show you the signature needed to find the correct location of the shot code. A signature, in this case, is a string of [...]]]></description>
			<content:encoded><![CDATA[<p>So hopefully by now you have a working source plugin that will make your server&#8217;s cone of fire a straight line.  Today I am going to explain a bit about sigs, and show you the signature needed to find the correct location of the shot code.</p>
<p>A signature, in this case, is a string of bytes that (hopefully) only occur once in a program.  This bytes should be very close, if not on top of the location you are trying to edit.  For example, the signature I used in my cof plugin to find the correct location is this:</p>
<blockquote><p>8B0D207454228B01680000803F68000080BFFF5004D95C24108B0D<br />
207454228B11680000803F68000080BFFF5204D9542414D84C2414</p></blockquote>
<p>If I remember correctly, this string will point my program at the exact location that the code prepares to call the random function from COF Plugin Part 1.   Now if you are reading he source code you will see that I actually set many different sigs, one for the shot code, one for the return address, and 2 more for linux.  In linux, the code looks a bit different so I needed 2 different sigs.</p>
<p>Now a sig like this, by itself is no more safe then using direct address manipulation.  Lets say that 2 months from now a program update comes out and jump locations are changed to accommodate the new code.  Lets say, 1000 more bytes of code were added in front of this location, now all of a sudden an address that pointed to the right location in the old version is now different.</p>
<p>There would be no way for our simple program to decide this or not (easily), and the sig scan would pass over the correct location without even knowing it.</p>
<blockquote><p>By the way, sig scanning is what you use this sig for.  What you basically do is start at the beginning of a binary in memory and scan through all the code looking for bytes that match your sig completely.   I will post code to do this later.</p></blockquote>
<p>So, how we improve our simple sig is to add a mask to it.  A mask is a wondering thing, it tells the scanner to ignore certain parts of the sig, but still verify that its the correct <strong>order</strong> of instructions.  If you are looking at my source code, you see I setup masks for each of the sigs, in fact, I made the mask and sig one in the same data structure to avoid confusion.  I will not bother posting the mask, but here is the sig with the mask overlay to show what the scanning is actually searching for.</p>
<blockquote><p>8B0D????????????680000803F68000080BF???????????????????????<br />
???????680000803F68000080BFFF????D9??????D8??????</p></blockquote>
<p>And this, translated into sudo assembly is</p>
<blockquote><p> mov ???????????<br />
???????<br />
push 1<br />
push -1<br />
????????<br />
????????<br />
????????<br />
????????<br />
????????<br />
push 1<br />
push -1<br />
call ???<br />
fst ????<br />
fmul ????</p></blockquote>
<p>The question marks represent the bytes the scanner will not look at.  In this way, the scanner will only search for this specific sequence of commands, not dealing with any data that can be changing by a recompile.</p>
<p>Technically speaking, the order of instructions can also change each recompile, especially if they make changes to the specific cpp file that hold FX_FireBullets.  That would force the compiler to recompile the file and possibly alter the order of these commands.  However I never said this was a fool proof way to scan, its just the one of the simplest and best ways.  The chances of the instructions moving are very low, and if you plan to support this project in any way shape or form during its lifetime its an easy fix to change the sig a bit.  In fact, if you have to change it often it is a good thing, you will learn how to make good sigs.  So far I have not had to edit this sig since day of defeat source has not had an update since I made the plugin, but its always a possibility.  Just remember, if you ever have to reconfigure a sig, make sure to keep it working for the older version as well, that way you can learn what you need to scan for and what you can skip.</p>
<p>So now that you know all about sigs I will post the sig scanner</p>
<blockquote><p>bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)<br />
{<br />
for(;*szMask;++szMask,++pData,++bMask)<br />
if(*szMask==&#8217;x&#8217; &amp;&amp; *pData!=*bMask )<br />
return false;<br />
return (*szMask) == NULL;<br />
}</p>
<p>DWORD dwFindPattern( DWORD dwAddress, DWORD dwLen, BYTE* bMask, char* szMask)<br />
{<br />
for(DWORD i=0; i &lt; dwLen; i++)<br />
{<br />
if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )<br />
return (DWORD)(dwAddress+i);<br />
}</p>
<p>return 0;<br />
}</p></blockquote>
<p>Fairly simple really, which is why sig scanning is the best cheap form of address retrieval.  At each address we run the sig through the data comparer to see if this address matches the sig, if not, we forward to the next address.  Not to efficient, but the scans are only done once as the program starts.</p>
<p>After the sig scanning we (hopefully) have the right addresses, if the sig was not found, then we print an error, if the sig was found in another location and we write there, then we break the program and the server crashes.  Hopefully neither happen, but once we have the address its just a simple matter of writing our detour, which I will explain next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/8/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

