Sunday, March 25, 2012

The Ardat-Yakshi Ate The Ending

Based on Bioware's tacit admission that they are in fact going to be paying attention to posts people make about the Mass Effect 3 ending and where it went wrong I figured I'd throw my hat in the ring.  Initially, I was just going to discuss the pain that is the last 5 minutes of the game, as a separate element but I think it would be appropriate to expand some criticism to the entire final mission, as it laid plenty of ground work for providing closure and context to players but was squandered in a random do-nothing-zone instead.

Against my inclinations, I should probably start at the end itself before doubling back to talk about the lead up.  The key issue for me is the context the ending is provided in.  I've read a large number of books with endings similar  for instance the Evergence series, or any number of Ian M. Banks Culture novels which seem to all end in the death of all of the characters.  However, while these endings can work, they are inherently passive experiences. You are reading a story about a person succeeding in some areas and failing at others, accepting the context of both and continuing with the story, and importantly this story is being told to you, not molded by you.

Video games do this too in many cases.  The ending of DeusEX Human Revolution, which derided by many and I would argue it was a weak ending, is very much a nobody-wins ending.  However DXHR's story gave no pretense that you were molding the outcome, you could do better or worse in the context of telling the story, but you weren't crafting your version of Jensen.  He, for instance, was going to blow up the dock regardless of your personal moral qualms with doing so.  The ending was actually a bit out of character for the rest of the story line, which is why I found it so weird.  I would have preferred if the ending had been purely driven off your successes with manipulating characters throughout using things like the social modification system and the amount of information gathered to determine the outcome.  But I digress, my point here is that DXHR isn't in fact an RPG but an action / adventure game so while it's not a passive experience like reading, it is passive in that your influence on the story line is tangential to your enjoyment of the gameplay.

This ending could also have found a better home in the Assassin's Creed series.  You are effectively along for the ride when you play those games and are literally incapable of making any decisions beyond 'how exotic of a kill should I go for'.  The way that story has been building up, I would not be at all surprised if it ends with all of humanity completely doomed and more questions than answers.  Ironically though, reading the reference codex for that series gives you actual closure on characters whose paths you've crossed throughout the game.

Which brings me to Mass Effect 3 and, more broadly, the Mass Effect trilogy.  The whole idea of the trilogy was that you made 'your' Shepherd.  You could make a paragon of virtue or a total asshole if you wanted to and the characters actions would reflect that in the game play, cut-scenes and conversations.  These choices were lent weight through the deaths of characters, hostages, and species.  The broader decisions could also dog you through all three games, if, for instance, you chose to kill Wrex in the first game, that decision comes back in multiple points throughout the series.  This let you craft 'your' story, in which you expected 'your' ending.  Instead you got the end of their (Bioware's) story, in which they discarded all the work you'd done and boiled your results down to a selection between different pixel colors (see below).



Here's the root of my problem with the endings:  The endings are incredibly lazy.  While it isn't surprising or reasonable to expect every single plot thread presented in the game to be wrapped up, it is reasonable to expect closure.  I don't even object to Sheppard dying, I actually expected to not survive despite having done a near perfect run through the game, accruing allies and never losing any characters due to my choices.  However I did make a number of decisions I would like to see boil out, Thessia is... pretty much doomed, but what happens to the krogan?  And by tangent what happens to the Turians?  If you do exceptionally well and manage to bring the Batarians into the cause, does that save them or are they doomed to extinction?  If you've decided wiping out the Reapers gets rid of the Geth and EDI, explain why.  Is it an basically an EMP?  If so, does it effectively destroy all of galactic civilization's technology?  Why does blowing up all of the Mass Effect relays not cause a galactic purge of all life when it killed every Batarian available when one was blown up in the Arrival DLC in Mass Effect 2?

The ending doesn't have to be one action to wrap up everything, very few things fall together with everything being wrapped up in one action.  Getting to the crucible (don't get me started..) and getting it to work could do almost exactly what it was doing right now: secure galactic hegemony for the Humans, save the galaxy from the Reapers, or fuck up completely and show us the cycle starting over again in 50,000 years with the Yahg kicking ass across the galaxy.  But that only tells the story of the crucible, the catalyst and the Illusive Man (there is no reason why an indoctrinated TIM couldn't have easily stood in for annoying child wonder AI and have been entirely consistent instead of stroke inducing).  It has nothing to do with anybody you've interacted with up to that point.  What I want to see the gravity of my choices, if we fail, and doom the krogan, then show us their sunset.

This brings me to my next point, the pacing at the end is fairly awful.  The games set precedent of knocking you into machinima'd cut scenes when it needs to convey information to you.  This could have been used to tell the ending stories of Jack and her pack of biotic miscreants, do they get turned to paste, or do they save and bolster a contingent of soldiers to help save London?  These don't even have to be long segments, just snippets scattered throughout would have been an excellent way to add texture to a fairly bland last battle area.  Instead, you got a set of conversations you could have with basically an audio update to serve as 'closure'.

I should probably address the changing of the ending by Bioware, which there is at least some indication they are considering doing.  A great number of people have argued that they shouldn't (you will not find me among those people), claiming the ending is fine and they have every right to make the ending whatever they want.  I would remind anyone on that side of the argument that ret-conning endings isn't completely without precedent.  For instance, Superman is not dead, Sherlock Holmes didn't die when he fell over that cliff, and your character is saved if he decided to be a hero in Fallout 3.

Even considering all of this, I'm not sure where Bioware should go from here.  Combining the tone deaf display of 'look forward to DLC!' that dumps your now-dead character back on the bridge of his ship with the fiasco that was the day 1 DLC has been viewed by some to be the worst part of this whole aspect.  Personally, if they hadn't had the combine problems of the ending and the day one DLC of disappointment, I don't think this would be much of a controversy.  In light of it, however, it seems like Bioware's only sane way out is going to be a DLC fix of the ending that is free, or they will burn some of the last bridges of goodwill they have with some of the most die hard fans in the industry.

The Blue Pill:
Ultimately, the ending is under the control of Bioware, or I would suspect more likely under the control of EA Games via their control of Bioware's purse strings.  I find it very difficult to codify exactly what I hate about this ending so much, but the entire experience turns out unfulfilling and sours the rest of the games replay value (though... go die in a fire Kai Leng you annoying literary prop).  However, it was clearly deemed acceptable by somebody in the same way the end of The Evergence novels, the new BSG series, or the Lost series were; it made it to production after all.  This doesn't make it right, it just places it in terrible company.

The Red Pill:
The important part for me with the ending of something like the Mass Effect series vs. the ending of any of the afore mentioned series is the specific story telling approach used in the game.  It invited gamers to get invested in their characters, over 80,000 dollars invested, by selling them on the idea of telling 'their' story in the games world.  To steal this from them at the last moment in a bid to assert your philosophy (as argued by ars's initial coverage and the referenced pop bioethics article) on the masses is a gross abuse of your consumers.  VirtualShackles captures the whole approach better in one picture than I suspect I can do in the entirety of this write up.  For my part this is the nails in a coffin built by Dragon Age 2 (which would require an entire new post to explain) and unless this is fixed, I won't in the forseeable future be purchasing a Bioware game until all DLC are out and the GOTY version has hit the $20 bargain bin.  And that's a shame, considering I've been a fan of the Bioware brand name since my discovery of Baulder's Gate in middle school / early high school which was more than a decade ago.

Tuesday, January 3, 2012

A letter to my cousins: A Suggested Route for Learning Python and Game Programming

So a new year, and a new resolution to write some more articles on this blog.  I thought I would start off by sharing a letter I sent off to a few of my middle school grade cousins who approached me about learning to program games over the holiday week.  I'm the first to admit I've never written a game, but I have written a considerable amount of code and am aware that game programming is no small feat of coding.  Without further blabbering this is what I pulled together for them (and a link to a google docs version for easier reading).


                    Hey there cousins :)
So I've been puzzling over the best way to present this information to you and give you some direction in the mean time.  I've pretty much just opted for the stream of consciousness approach (or, type as I think).
First your going to need some tools.
An archive manager, this will let you open files zipped up in zip, rar, or other formats.  I prefer 7zip for windows, you can get it here:  http://downloads.sourceforge.net/sevenzip/7z920.msi
Next you will eventually need a version control package so you may as well get that, for home projects I'd recommend Mercurial: http://tortoisehg.bitbucket.org/ Make sure you are downloading the 32-bit version of the program.  I would also add the command line program from http://mercurial.selenic.com/wiki/, just grab the latest version and install it(32-bit windows).
It's an installer and free, just run it and your in good shape.
Then I would recommend downloading Python(x,y) which is also free like the above two pieces.  The direct link is: http://ftp.ntua.gr/pub/devel/pythonxy/Python(x,y)-2.7.2.1.exe and you can get more information on the package at: http://code.google.com/p/pythonxy/  It's a package for making scientific applications in python, however it has a full editor suite and includes all the base software you will need to get rolling except pygame itself.
Finally you will need pygame, your going to want this link: http://pygame.org/ftp/pygame-1.9.2a0.win32-py2.7.msi The version of python included with Python(x,y) is version 2.7.2 so this will give you the correct version of this library.  For more information and example projects you can find extra information at http://www.pygame.org/news.html this is the main site of the pygame team.  Once you've developed your skill set the 'cookbook' section of this website will prove invaluable as will the tutorials area.
Now the hard part.
Once you've installed all that stuff, you are ready to go but you have a significant number of hills to climb before you are ready to start writing game engines, game content or things of that nature.  However using python these barriers should be less painful than they could be in other languages and systems.
You have a number of things to learn, and the first among them is how to use your tools.  If you've installed python(x,y) successfully you should find a program called 'spyder2' in your program list.  This is an editor you can use to easily edit python with large amounts of feed back on your code.  It's documentation can be found at http://packages.python.org/spyder/ I would recommend reading at least the overview and the editor sections for now.  You'll also need to know how the consoles work but that's more of an experimentation learning experience.
After you have learned how to open and close files in the spyder editing environment you will be ready to start teaching yourself python.  To this end I'm going to direct you to the book 'learn python the hard way'.  This is not fundamentally more difficult than other ways of learning python, however it is a more classical approach that requires you to type in every line of code in every program you make.  Following through the book and completing all the exercises will go a long way towards teaching you both programming and python.  The HTML (web browser) version of the book can be found here http://learnpythonthehardway.org/book/ or you can buy a copy of the epub book (for reading on a kindle) for 2.99 off the top of the website.  Follow through EVERY lesson, and make sure to read diligently (you can however skip exercise 0 as this tells you how to get python, it may be informative however).  I also strongly recommend you make an honest effort to do any of the 'extra credit' pieces at the end of each example.  This will allow you to explore the functionality the book is teaching you before you move on.  If you do not understand a word in the book, you can find it's definition by going to www.google.com and typing 'define: word you don't know'.  By the end of the book you will be able to generate webpages in python, and make small web based python games.  This is a significant step towards where you need to get to.
After you've completed those exercises and spent sometime manipulating them to change their behavior I would recommend the following articles on a number of topics.  I recommend reading each thoroughly and trying to combine them with some of your developed knowledge of python.  These links are just to get you started but they should be good leaping off points to discover which sections of programming you don't just 'get'.  These are areas you should spend more time researching using tools like www.google.com, http://stackexchange.com/ and Wikipedia.
Version Control Basics (how to use mercurial and why): http://hginit.com/01.html  Start here and go thru the examples, they are excellent.
The Python Style Guide:http://en.wikipedia.org/wiki/Python_syntax_and_semantics and http://www.python.org/dev/peps/pep-0008/  Following this will help make sure your code is readable and correctly commented so others can read it as well
Conditional Statements: http://en.wikipedia.org/wiki/Conditional_(programming)
Boolean Algebra and Logic: http://en.wikipedia.org/wiki/Boolean_algebra_(logic)
Big O Notation: http://en.wikipedia.org/wiki/Big_O_notation
Sorting: http://www.codeproject.com/KB/recipes/SortVisualization.aspx  This provides visualizations into a number of different sort algorithms that will be critical to understand.  I recommend looking up the wikipedia page of each sort type and reading through those articles as well.  Wikipedia is invaluable for this sort of things (IE, http://en.wikipedia.org/wiki/Bubble_sort, http://en.wikipedia.org/wiki/Insertion_sort).

Object Oriented Programming and Software Architecture: http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx
Software Design Patterns: http://en.wikipedia.org/wiki/Software_design_pattern and specific patterns implemented in python: http://www.python.org/workshops/1997-10/proceedings/savikko.html
Python too executable conversion: http://www.py2exe.org/  and a basic tutorial in it's use http://www.py2exe.org/index.cgi/Tutorial.  This will let you turn your python program into a .exe file you can send to your friends more easily than teaching them how to use and run python.
And finally you'll want to read a book that covers end to end game design, this will include a large amount of math as well as subjects like animating objects and rendering to the screen.  A highly recommended book based on python is Invent Your Own Games With Python.  It can be read online here http://inventwithpython.com/chapters/ or you can purchase it off of amazon here http://www.amazon.com/gp/product/0982106017?ie=UTF8&tag=playwithpyth-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0982106017.  NOTE: While this book can be used in place of the 'learn python the hard way' book, it will lack some of the substance and fine detail that book discusses in teaching you individual lessons.  All that aside it is however an excellent beginning programming book as well.
I wish you the best of luck learning programming/python/game writing/computers and hope this turns out useful for you,
-Garrett
ps. Don't forget, working together will not double your learning, but it will help you both develop much faster.  Also, you should probably print this so you don't lose it.
So to the community at large:  Is this helpful / the right direction to go?  What would you suggest or change about this to gear it more at the target audience (middle-school boys that know they want to write games but don't yet appreciate the scope of what they are getting into).

Thursday, June 2, 2011

Making a Konica Minolta DI-5510 work in Windows 7 x64

Up until recently I've considered myself relatively lucky on the hardware compatibility front when it came to working with older hardware on newer OS's.  However that ended the other day when I had to get a KM DI-5510 working on a Windows 7 64bit system.  The reason being that the looking for drivers that would appear to be related to the printer will return a bunch of drivers from 2002 to 2004.  This is all well and good if your installing in Windows XP, but hits a very hard fast wall trying to add one of these to a modern computer (and yes, a computer from 2002 is no longer modern).


My Google searches unfortunately didn't yield any real fruit for quite some time while looking for these drivers, other than a bunch of junk listings to some 'free driver download' sites.  I eventually had somewhat of an epiphany while reading the not terribly helpful Windows Vista Drivers list on the KM site.  Specifically the controller drivers weren't following their actual name for driver info.  So, while our local DI-5510 uses a Fiery x3e 7255BW-KM, searching for this will not return anything of meaningful use.  However if you search for 'Pi7200e' you'll find exactly what your looking for.  Namely, you'll find the driver page that actually supports the x3e 7255BW-KM controller, which has drivers for basically anything you could ever want.  And to make things more interesting when these drivers install they do in fact say 'x3e ' despite not being labelled as such anywhere on the individual site you arrive on.


As you may have guessed I'm writing this here so that I don't lose it myself, however I figured I would post it publicly so others can refer to it if need be.  So I hope I save somebody time with this little writeup.


The Blue Pill:
Use this link and you'll find the right driver for your OS in the list somewhere.


The Red Pill:
I'm not sure how KM excuses this abysmal relation system between their products, controllers, the alternate names for these devices and the labeling on the systems.  But the drivers at least do exist, they just take forever to actually find.  In the course of my search I also came across a variety of what appear to be abandon KM web properties with ancient versions of this and similar drivers on them.  They are under the same or similar domains and should probably be cleaned up for the sanity of everyone involved.