Screenshot: An ode to the days of cheating

Nintendo Power
Nintendo Power eventually became a cheat code paradise. Its final issue was released in December 2012. — photo by Rob Boudon

There are some things missing from most games these days—elements of gameplay that were once essential parts of the home gaming experience. Extra lives, for example, are a thing of the past, obviated by the ability to save one’s game, and by the ubiquitous “autosave.” With extra lives, so too goes the “Game Over,” the lack of which basically guarantees that everyone will finish every game if they try hard enough. The decline of these elements has gone hand-in-hand with a higher complexity of both storytelling and gameplay: Nobody would play Bioshock, for instance, if when you died too many times you had to start all over from the beginning of the 12-hour narrative.

Alongside these now-passe components, another game element largely missing from contemporary games is the cheat code. Cheating has been around for the entire history of gaming. It was first practiced either on tape-based gaming computers on which savvy gamers could gain access to the game’s code itself and enter instructions to give them extra lives at the outset. Later, in console games, cheats were programmed in by the developers in a game’s testing stage. In the latter cases, codes developed as a way for testers to set certain elements of the game as controls while they tested other variables. If, for example, they wanted to test the animation of the final boss sequence in Super Mario Bros. (1985) but not the character’s response to Bowser’s fireballs, a code might be devised for invulnerability to help speed along the end of the game and to see how Bowser performed.

Such cheat codes would be entered via the console’s controller, a particular sequence of rapid button-pushing with such results as extra lives, infinite ammo or a character with a comically large head. These cheats would sometimes be left in the code of the game’s final release—either by accident or on purpose—and the proper sequence for accessing them was either leaked or figured out and then shared by groups of fans.

The most famous code is probably the “Konami code”—so named because it appeared in many games developed by Konami—which has even appeared occasionally in our contemporary, cheat-impoverished context. One might also remember it as the “Contra code,” after the Rambo-esque Nintendo (NES) game from 1987: (Say it with me, now) “Up, up, down, down, left, right, left, right, b, a, start.”

Cheat codes could serve many functions. In Contra, you got 30 lives. The blood in the Mortal Kombat series (1992-present)—eventually the subject of much ‘90s controversy—began as a cheat code. In NBA Jam: Tournament Edition (1994), a cheat code allowed you to play the game as the Beastie Boys, the Fresh Prince or Hillary Clinton (no, really).

Disney console games of the early ‘90s were inevitably both beautiful and impossible, as anyone who’s tried to get past the third level or so of The Lion King for Super Nintendo (1994) can tell you. My sister and I pretty consistently used “pause, a, a, b, b, a, a, b, b, a” to skip levels in Aladdin (1993) on the Sega Genesis.

Cheat codes allowed users to get around some of the limits imposed on them by the game’s rules so that new aspects of the game, previously hidden or inaccessible, could be experienced. In many ways, the impulse behind cheating is answered by contemporary gaming, which promises the average user a complete experience of the narrative and the more intrepid user a host of hidden achievements and “Easter eggs.” Before this, though, a veritable industry grew up on the outskirts of the video game market, an industry that provided cheats, hints, tips and tricks to users stuck in a game, or just looking to experience it in a new way. These took the form of magazines, 1-900 hotlines and eventually online forums — which had the advantage of being online, user-run and free.

The culmination of this side-industry was seen in the Game Genie and Game Shark devices, which attached to game cartridges on one side and the console on the other. The popular Genie or Shark allowed you to choose the cheats you wished to activate on your game from a menu that preceded the game. By the early ‘90s, “cheating” had become both an essential part of gameplay and a profitable arena for both video game companies and outsiders.

“Cheat” is thus something of a misnomer, preserving the notion that to cheat is a marginal practice, not a legitimate effect of and portion of the game experience. Indeed, if playing the game is enacting the code, then what we refer to as “cheating” might be seen as a more direct interaction with that code: When you enter the code, you’re talking to the machine, not acting in the virtual world. You’re playing the algorithm, not its visual representation. Cheating is gaming made honest.

Like extra lives and “Game Over,” cheat codes make the most sense in this older form of gaming where forestalling your character’s demise was imperative. They also made more sense before internet-connected consoles and online “leaderboards” made a level playing field across all owners of a given game necessary.

Importantly, there are still ways to exploit the systems: On last year’s XCOM: Enemy Unknown I saved my game after every troop movement in order to ensure that none of my team would die while on a mission. This way, I played with a more experienced and powerful team, and was able to preserve my best soldiers for the final battle. Is this the intended form of gameplay? Probably not. But if a system gives you both rules and tools, I say exploit the latter to upend the former, whenever possible.

Pat Brown is a graduate student in Film Studies at the University of Iowa. 

[gravityform id="17" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper your-village-form_wrapper' id='gform_wrapper_17' ><a id='gf_17' class='gform_anchor' ></a><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_17' id='gform_17' class='your-village-form' action='/screenshot-an-ode-to-the-days-of-cheating/#gf_17'> <div class='gform_body'><ul id='gform_fields_17' class='gform_fields top_label form_sublabel_below description_below'><li id='field_17_7' class='gfield gfield_html gfield_html_formatted gfield_no_follows_desc field_sublabel_below field_description_below gfield_visibility_visible' ><h3 style="font-weight:800; font-size:34px;">Let's get started</h3> <p style="font-size:18px;">Fill out this form and we'll contact you with information about marketing with Little Village!</p></li><li id='field_17_4' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' for='input_17_4_3' ></label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name has_last_name no_suffix gf_name_has_2 ginput_container_name gfield_trigger_change' id='input_17_4'> <span id='input_17_4_3_container' class='name_first' > <input type='text' name='input_4.3' id='input_17_4_3' value='' aria-label='First name' tabindex='2' aria-invalid="false" placeholder='First name'/> <label for='input_17_4_3' >First</label> </span> <span id='input_17_4_6_container' class='name_last' > <input type='text' name='input_4.6' id='input_17_4_6' value='' aria-label='Last name' tabindex='4' aria-invalid="false" placeholder='Last name'/> <label for='input_17_4_6' >Last</label> </span> </div></li><li id='field_17_5' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_17_5' ><span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_5' id='input_17_5' type='text' value='' class='large' tabindex='6' placeholder='Company name' aria-required="true" aria-invalid="false" /></div></li><li id='field_17_3' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_17_3' ><span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_3' id='input_17_3' type='text' value='' class='large' tabindex='7' placeholder='Your email address' aria-required="true" aria-invalid="false"/> </div></li><li id='field_17_8' class='gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_' ><label class='gfield_label' for='input_17_8' >Name</label><div class='ginput_container'><input name='input_8' id='input_17_8' type='text' value='' /></div><div class='gfield_description'>This field is for validation purposes and should be left unchanged.</div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_17' class='gform_button button' value='SUBMIT' tabindex='8' onclick='if(window["gf_submitting_17"]){return false;} window["gf_submitting_17"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_17"]){return false;} window["gf_submitting_17"]=true; jQuery("#gform_17").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=17&amp;title=&amp;description=&amp;tabindex=1' /> <input type='hidden' class='gform_hidden' name='is_submit_17' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='17' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_17' value='WyJbXSIsIjlmNzc1YTEyZmZjNmYyODk5Mzk0NDM3ZjRlOGYyZDNmIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_17' id='gform_target_page_number_17' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_17' id='gform_source_page_number_17' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="196"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_17' id='gform_ajax_frame_17'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 17, '' );jQuery('#gform_ajax_frame_17').load( function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_17');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_17').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;if(is_form){jQuery('#gform_wrapper_17').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_17').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_17').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_17').offset().top); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_17').val();gformInitSpinner( 17, '' );jQuery(document).trigger('gform_page_loaded', [17, current_page]);window['gf_submitting_17'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_17').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_17').offset().top);jQuery(document).trigger('gform_confirmation_loaded', [17]);window['gf_submitting_17'] = false;}, 50);}else{jQuery('#gform_17').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [17, current_page]);} );} );</script><script type='text/javascript'> if(typeof gf_global == 'undefined') var gf_global = {"gf_currency_config":{"name":"U.S. Dollar","symbol_left":"$","symbol_right":"","symbol_padding":"","thousand_separator":",","decimal_separator":".","decimals":2},"base_url":"https:\/\/\/wp-content\/plugins\/gravityforms-asdf111aasdfffs-nope","number_formats":[],"spinnerUrl":"https:\/\/\/wp-content\/plugins\/gravityforms-asdf111aasdfffs-nope\/images\/spinner.gif"};jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 17) {if(typeof Placeholders != 'undefined'){ Placeholders.enable(); }} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [17, 1]) } ); </script>