{"id":226,"date":"2006-03-07T18:50:41","date_gmt":"2006-03-07T23:50:41","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=226"},"modified":"2007-11-04T10:23:38","modified_gmt":"2007-11-04T15:23:38","slug":"gta-hot-coffee","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=226","title":{"rendered":"GTA: Hot Coffee"},"content":{"rendered":"<p>A big controversy last year was when the &#8220;hot coffee&#8221; modification was released for Grand Theft Auto: San Adreas.  One thing that infuriated me about the whole thing was the fact that nobody reporting on the issue knew what in the world they were talking about.  Words were misused, meanings were mangled, and ignorance was propigated at an amazing speed.<\/p>\n<table align=left>\n<tr>\n<td><img decoding=\"async\" src=\"images\/gta_denise.jpg\"\/><\/td>\n<\/tr>\n<\/table>\n<p>Out of the box, GTA: SA has a mini-game where your character has an in-game girlfriend. You can do things like buy her flowers or take her out on dates. The dates are short missions where you drive her to a place to eat or a dance club. Once there, the game shows a brief scene (with sappy romantic music playing) of the two of you smiling and having dinner together, or you play a little dancing minigame.  Once this scene ends,  you drive her home.  Each time you do this, the &#8220;relationship&#8221; meter will go up a notch. Once you&#8217;ve done this enough times, she will invite your character in for &#8220;coffee&#8221; at the end of the date. If your character accepts, then the camera stays outside, and muffled sounds hint at what is going on inside. This is silly and juvenile in a PG-13 sort of way. <\/p>\n<p>As it was reported, a user-made download became available where you could access &#8220;unlockable&#8221; content.  If you downloaded this patch, then the camera would go inside when it was time for &#8220;coffee&#8221;.  I&#8217;ve never seen this myself, but from what I&#8217;ve been able to gather of how this works:<\/p>\n<p>This was another minigame, where the player would have to mash buttons, similar to the weightlifting game, or perhaps like the dancing game.  The upshot of the game was that the characters were having sex, (which was depicted with full rated-R nudity) and the player needed to do well at the game if they wanted to make their partner happy.  <\/p>\n<p>The term &#8220;hot coffee&#8221; has been used to refer to both the sex game and the user-made download that makes it possible. GTA itself does not use the term &#8220;hot coffee&#8221; in any way. <\/p>\n<p>People called this thing an &#8220;unlockable&#8221;, but that&#8217;s not what unlockable means.  Usually &#8220;locked&#8221; game content is stuff that you cannot access when you start out, but that you can earn at some later point through playing the game.  That was never the case with the hot coffee minigame.  There was <em>never<\/em> anything you could do within the game that would lead to unlocking hot coffee.  In order to get the game, the user had to go and download <em>other<\/em> software made by some guy on the internet, and then use that program to modify their copy of Grand Theft Auto.  To do this is a violation of the End-User License Agreement that the user agreed to when they installed the game.  That is a <em>hack<\/em>, not an &#8220;unlockable&#8221;, and the distinction is very important. <\/p>\n<p>This is like some guy using an illegal cable box to get the Playboy channel when he&#8217;s not paying for it, and then getting outraged at the cable company because they are providing him with pronography.  This scandal would never have been such a big deal if people had understood how the technology worked. From reading the news, most people would be led to believe that:<\/p>\n<ul>\n<li>This pornographic minigame was a part of all of the releases of this game. (Misleading: Hot Coffee is only possible on the PC version, as there is no way a user can hack the PS2 version.)\n<\/li>\n<li>This was a &#8220;hidden feature&#8221; within the game that could be unlocked via some special cheat. (Not true: You had to hack the original game to make it happen. Doing so violates the EULA)\n<\/li>\n<li>Rockstar games hid this in the game, trying to slip it past the rating system. (Given the facts, this is exceptionally unlikely.)\n<\/li>\n<\/ul>\n<p>However, the resources used by hot coffee are indeed installed with the game. That is, there are &#8220;naked&#8221; textures and (I assume) some sort of pelvic-thrusting animations.  There were probably sound files, and there was certainly game code driving the whole thing.  The only reason the hack is <em>possible<\/em> is that the sound files and game code were available, although they were detached from the rest of the game and you can&#8217;t access them without hacking.<\/p>\n<p>But again, this is like the cable theft analogy: The cable company is always sending you the Playboy channel; it&#8217;s just encrypted. If you take the step to hack it and decrypt the scrambled signal, then <em>you<\/em> bear the responsibility, not the cable company.<\/p>\n<p>So how did this happen?  Why was that stuff on the disk? Rockstar games never gave much of an explanation, which isn&#8217;t surprising.  Their primary concern since the story broke has been to minimize their vulnerability to incoming lawsuits, which generally means saying &#8220;no comment&#8221; a lot.   This game content took time to produce.  Someone had to make the animations, record audio files, and program the game itself, so this wasn&#8217;t a case of a single rogue programmer run amok.  At some point they intended this to be a part of the final product, and at some point they changed their mind.  Just what&#8217;s going on here?  <\/p>\n<p>I&#8217;m going to take a guess, and it might sound absurd, but humor me here: They disabled the feature and then forgot about it.  I&#8217;m sure if Rockstar offered this excuse they would be laughed out of business. I mean, how do you forget something like this?<\/p>\n<p>From my own perspective, I can see this happening.  I&#8217;ve had many large-scale projects over the years, and over the course of such projects features come and go.  Someone says, &#8220;that building sucks, get rid of it&#8221; and so you remove it from the game world, but you don&#8217;t expunge the building itself from the assets.  The building might be useful elsewhere.  Bosses can be fickle, and odds are good that he will come in a week from now and ask for the building to be put back in. You don&#8217;t want to DELETE the building entirely, or when he asks for it to be re-instated you&#8217;ll have to design it all over again.  This happens with objects, textures, and all kinds of other assets. As the project progresses, clutter builds up.  Old versions of objects linger.  Textures that seemed useful but were never put to use don&#8217;t delete themselves out of shame.  Most importantly, coders (like myself) don&#8217;t expect people to alter our programs after they&#8217;ve been released.  If I disable something, I assume its gone.<\/p>\n<div class=dmnotes>\nA word about &#8220;disabling&#8221; code:<\/p>\n<p>There are two ways to disable code: the wrong way and the ugly way.  The <strong>ugly<\/strong> way is to add special notes (called preprocessor directives, in fancy-talk) that say to the compiler &#8220;do not compile this code&#8221;.  It leaves the code out of the final execuatble, but it also messes up the indentation (like paragraph formatting for computer code, it helps the coder keep things organized) and this can make the code hard for a human to follow.  It also causes other annoying problems that require an extra few moments of typing to resolve.<\/p>\n<p>By contrast, the <strong>wrong<\/strong> way is to do this:<\/p>\n<p><code><b><br \/>\nif (0) {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PlayHotCoffee ();<br \/>\n} else {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;GoToChurch ();<br \/>\n}<br \/>\n<\/b><\/code><br \/>\nThe &#8220;if&#8221; thing is a test: if the stuff in () is not a zero, it will do the next set of code, which is PlayHotCoffee ().  But since it IS zero, then it will skip PlayHotCoffee () and instead it will GoToChurch (). Doing things this way, if the programmer wants to re-enable hot coffee, he just changes the zero to a one and re-compiles the program.<\/p>\n<p>As long as he leaves the zero there, the game will always GoToChurch () and NEVER PlayHotCoffee ().<\/p>\n<p>However, unlike when we use the preprocessor directives, the code to PlayHotCoffee () is still a part of the program.  If some hacker puzzles through the program he may discover the disabled code.  Then all he&#8217;d have to do is change that zero to a one and he can too can PlayHotCoffee ().  (Note that the hacker won&#8217;t see computer code like I showed above.  Once the program is compiled, all of that code is turned into pure numbers, which are much, much more difficult to read.)  <\/p>\n<p>For me, I always use the wrong way of doing things when writing code.  Sure the executable is bigger by a few bytes, but that&#8217;s trivial compared to the value of readble code that can be understood at a glance.\n<\/p><\/div>\n<p>I strongly suspect that this minigame was part of the original spec, but at some point in development they thought better of it. Word came down to remove the feature from the game.  A programmer added the &#8220;If&#8221; to skip hot coffee and do something else instead.  The feature disappeared from the game and everyone forgot all about it.  <\/p>\n<p>It would be strange for them to fear someone coming along and re-enabling hot coffee &#8211; players wouldn&#8217;t even <strong>know<\/strong> the minigame existed.  For them to find out, someone who knew a LOT about machine code would have to painstakingly examine the executable, paging through all those numbers a few bytes at a time until they found it. But what would cause them to go to all that trouble if they didn&#8217;t know about the game in the first place? Oddly enough, this is exactly what eventually happened, and I&#8217;ve never heard an explanation from the original hacker as to what he was really trying to accomplish when he stumbled on hot coffee. <\/p>\n<p>Remember that this game was originally developed for the Playstation 2, where no hacking is really possible.  The programmer would have needed to be thinking pretty far ahead AND be a bit paranoid in order to see this eventual outcome.  I wouldn&#8217;t work on a pornographic game myself, but in a similar situation I could see making the same mistake.  In fact, if you looked at the <a href=\"?p=202\">source code for my terrain project<\/a> you&#8217;ll see I disabled several bits of code using this method.<\/p>\n<p>But what about the textures, animations, and sound files used by hot coffee?  How did all those get left in the final product? This isn&#8217;t that hard to imagine either. By the end of the terrain project (which was a one-month part-time project by one guy, and not a two-year full-time project by a team), my textures directory was full old textures that were no longer used.  I deleted them before releasing them to the public, but I was working with a list of a dozen textures.  In the case of GTA, there would have been <em>thousands<\/em> of textures, <em>thousands<\/em> of sound files, and hundreds of animations. Somebody would need to have a lot of time on their hands to go through that list and figure out which ones were unused, and remove them.<\/p>\n<p>I find the scenario I outline above far more plausible than the idea that Rockstar games hid hot coffee in an attempt to bypass the censors and ratings board, or in order to create controversy. <\/p>\n<p>To my knowledge, this post is the first time someone has sat down and attempted to explain just what happened and why.  The news treated us to endless blathering about &#8220;unlockable&#8221; content, but none of them answered everyone&#8217;s number one question, which is: <em>Why was that stuff there in the first place?<\/em><\/p>\n<p>Now that the scandal has happened, I think lots of companies, and Rockstar in particular, are going to be a lot more paranoid about what they leave on the disc. Now that they know people will tear the program apart looking for&#8230; well, <em>anything<\/em>, I think we can expect developers to be a lot more careful from this point on.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>A big controversy last year was when the &#8220;hot coffee&#8221; modification was released for Grand Theft Auto: San Adreas. One thing that infuriated me about the whole thing was the fact that nobody reporting on the issue knew what in the world they were talking about. Words were misused, meanings were mangled, and ignorance was [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[39],"class_list":["post-226","post","type-post","status-publish","format-standard","hentry","category-reviews","tag-gta"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=226"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/226\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}