<html>

<head>
<title>loonygames presents: Anatomy of a Video Game</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
a { text-decoration: none; }
a:hover { color:000000;  text-decoration: underline; }


</style>
</head>

<body bgcolor="#FFF4D0" link="#3333FF" vlink="#000000" alink="#000000">
<center>
</center>
<table width="100%" border="0" bgcolor="#3596B3" height="58">
  <tr> 
    <td height="69" width="29%" align="left" valign="top"> 
      <div align="left"> <font face="Arial, Helvetica, sans-serif" color="#FFFFFF"><b><i><img src="../../images/logo_new.jpg" width="182" height="63" border="0" usemap="#logoa"> 
        </i></b></font></div>
    </td>
    <td height="69" width="29%" align="center" valign="top"> <center>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-2373963192914918";
/* 468x60 */
google_ad_slot = "3417104156";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center>
 
    </td>
  </tr>
</table>
<table width="100%" border="0" bgcolor="#3596B3" height="29">
  <tr> 
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <a href="../../../about.1"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF"><b><font size="2">about</font></b></font></a></td>
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <a href="../../../feedback.1"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF" size="2"><b>feedback</b></font></a></td>
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <a href="../../../archives/index.html"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF" size="2"><b>archives</b></font></a></td>
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <b><a href="../../../submissions/index.html"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif" size="2">submissions</font></a></b></td>
  </tr>
</table>
<div align="center"> <br>
</div>
<table width="100%" border="0">
  <tr> 
    <td width="72%"> 
      <h5><b><font face="Arial, Helvetica, sans-serif">//<a href="../../../index.html"><font color="#7C420E">loonygames</font></a>://<a href="../index.html"><font color="#7C420E">issue 
        2.8</font></a>://<a href="index.html"><font color="#7C420E">Anatomy of a 
        Video Game</font></a>://<a href="index.php"><font color="#7C420E">1</font></a>, 
        <a href="index2.php"><font color="#7C420E">2</font></a>, <a href="index4.php"><font color="#7C420E">3</font></a>, 
        <a href="index4.php"><font color="#7C420E">4</font></a>, <a href="index5.php"><font color="#7C420E">5</font></a>, 
        6, <a href="index7.php"><font color="#7C420E">7</font></a>, <a href="index8.php"><font color="#7C420E">8</font></a></font></b></h5>
    </td>
    <td align="right" valign="middle" width="28%"> 
      <div align="right"> 
        <h5><a href="http://www.loonygames.com/includes/printme.pl?url=/2.8/feat/&amp;withimages=yes"><img src="../../images/icons/print01.gif" width="27" height="27" align="baseline" border="0" alt="switch to printer-friendly version"></a></h5>
      </div>
    </td>
  </tr>
</table>
<br>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr> 
    <td align="center" valign="top" width="25%"> 
      <table border="0" width="99%" bgcolor="#D7B582" align="center" bordercolor="#E0E0E0">
        <tr> 
          <td align="LEFT" valign="TOP" width="100%"> <font color="#000000" face="Arial, Helvetica, sans-serif" size="2"> 
            <!--#exec
cgi="/includes/rand_quot.cgi"--> </font> <p><webdog><font face="Arial, Helvetica, sans-serif" size="2" color="#0022A8"><b><font color="#693A0C">What's 
           new today:</font></b></font> 
          
<p><b><font face="Arial, Helvetica, sans-serif" size="2"><a href="../../../index.html" target=""><b><font color="#00025E">New!!!</font></b></a><br></b>
  The archives have been cleaned up, dead links fixed, and the printable versions restored! Also, don't miss the new comments on the main page!</font></p>

 
<p><b><font face="Arial, Helvetica, sans-serif" size="2"><a href="../../2.15/feat/index.html" target=""><b><font color="#00025E">Livin' 
  With The Sims</font></b></a><br></b>
  theAntiELVIS explores the wild and wacky world that is Will Wright's <b>The Sims</b>, 
  asking the inevitable quesiton, &quot;is <b>The Sims</b> the first step toward a virtual 
  life where everyone is Swedish?&quot;</font></p>
<p><font color="#000000" face="Arial, Helvetica, sans-serif" size="2"><a href="../../2.15/pixel/index.html" target=""><b><font color="#00025E">Pixel 
  Obscura </font></b></a></font><font face="Arial, Helvetica, sans-serif" size="2"><br>
  Josh Vasquez on <b>Omikron: The Nomad Soul</b>.</font></p>
<p><font color="#000000" face="Arial, Helvetica, sans-serif" size="2"><a href="../../rl/index.html" target=""><b><font color="#00025E">Real 
  Life </font></b></a></font><font face="Arial, Helvetica, sans-serif" size="2"><br>
  Check out our newest comic strip, <b>Real Life</b>! Updated daily!</font></p>
<p><font color="#000000" face="Arial, Helvetica, sans-serif" size="2"><a href="../../uf.1" target=""><b><font color="#00025E">User 
  Friendly</font></b></a></font><font face="Arial, Helvetica, sans-serif" size="2"><br>
  Updated daily!</font></p>
<p></webdog> </p>
 
            <p></p>
            <p> </p>
            <p></p>
            <!--#include virtual="/includes/includes/commerce_ssi.htm" --> 
            <!--#include virtual="/includes/includes/art_ssi.htm" --></td>
        </tr>
      </table>
      <br>
      <table width="100%" border="0" bgcolor="#D7B582">
        <tr bgcolor="#D7B582"> 
          <td> 
            <div align="center"> 
              <p align="left"><font size="-1"><font face="Arial, Helvetica, sans-serif" size="2" color="#0022A8"><b><font color="#00025E">Random 
                Feature:</font></b></font> </font> </p>
              <p><!--#exec
cgi="/includes/rand_thumb.cgi"--><i><font face="Arial, Helvetica, sans-serif" size="-2"> 
                </font> </i></p>
            </div>
          </td>
        </tr>
      </table>
      <br>
      <table width="99%" border="0" bgcolor="#D7B582">
        <tr> 
          <td> 
            <div align="center"> 
              <form method="get" action="http://www.google.com/custom" name="">
                <font face="Arial, Helvetica, sans-serif" size="-1"><b><font color="#339900">Search 
                the Archives!</font></b></font> 
               
                 <INPUT TYPE=text name=q size=12 maxlength=255 value="">
 <INPUT type=submit name=sa VALUE="Google Search">
 <INPUT type=hidden name=cof 
VALUE="LW:216;L:http:/home/loonygames/loony.timedoctor.org/content/images/logo1.jpg;LH:55;AH:center;S:http://www.loonygames.com;AWFID:13a298c7abe84fd0;">
<input type=hidden name=domains value="loonygames.com"> 
<input type=hidden name=sitesearch value="loonygames.com">               
</div>
              </form>

              <p align="left"><i> </i></p>
            </div>
          </td>
        </tr>
      </table>
    </td>
    <td width="75%" align="center" valign="top"> 
      <table width="90%" border="0" cellpadding="0" align="center">
        <tr> 
          <td width="50%" valign="top"> 
            <div align="center"> 
              <table width="98%" border="0">
                <tr> 
                  <td width="55%"> 

                    <div align="left"> 
                      <p><b><font face="Arial, Helvetica, sans-serif" color="#0000FF"><i><font color="#904C10" size="3">Anatomy 
                        of a Video Game</font></i></font></b><br>
                      <div align="right"> <font face="Arial, Helvetica, sans-serif" size="-1">By 
                        <a href="mailto:jsimpson@ravensoft.com">Jake Simpson</a></font></div>
                    </div>
                  </td>
                  <td width="45%" align="right" valign="top"> 
                    <h5 align="right"><b><font face="Arial, Helvetica, sans-serif" color="#00025E">Vol. 
                      2, Issue 8 <br>
                      January 10, 2000&nbsp; </font></b></h5>
                  </td>
                </tr>
              </table>
              <loonystart>
              <p align="left"><font face="Arial, Helvetica, sans-serif"><b><font size="+1">Tools</font></b></font></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif"> &#147;You&#146;re 
                only as good as your tools&#148; goes the old saying. Well, it&#146;s 
                not strictly true, but its pretty close. The quality - ease of 
                use, reliability, expandability, intuitiveness and so on - and 
                relevance of your tools is often reflected in the quality of the 
                work got out of them. Having the correct tool for the job is essential 
                to getting top quality work out of your artists and designers. 
                Quite often, we will create a plug in for a commercially available 
                tool to do something specific that we need. For instance, we would 
                create a special plug in for 3D Max Studio to allow us to manipulate 
                a model in a way that the original was never designed. WE need 
                this feature, but most people out there don&#146;t, which is why 
                it wasn&#146;t in 3D Max in the first place. There&#146;s another 
                phrase which is applicable here &#145;If the only tool you have 
                is a hammer, you tend to treat everything like a nail&#146;. Sometimes, 
                we will create a totally new tool ourselves when nothing off the 
                shelf is flexible enough for us to modify it to what we need. 
                We aren&#146;t shy about doing that, since having the correct 
                tools can often mean the difference between and OK title and a 
                Great Title. Often, creating specific tools can make your game 
                stand out from the crowd, since it makes doing something hard 
                really easy. For instance, we created a specific tool to modify 
                and import our motion capture data for our game SOF. And as a 
                result, we have lots more motion &amp; cooler looking animations 
                than anyone else, and it&#146;s because we have a cool tool that 
                makes creating these animations easy for our animators.</font></p>
              <p align="left"> </p>
              <p align="left"><font size="+1"><b><font face="Arial, Helvetica, sans-serif">Networking</font></b></font></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif"> In case 
                you've been dead for the last 5 years, you'll know that there 
                has been a revolution in network online gaming. The Internet is 
                in part responsible for this, but it did come along before the 
                Internet had made it big, witness <b>Doom</b>, and so on. Since 
                the Internet became the preferred method of online play, most 
                games support some kind of multiplayer online option, indeed, 
                these days you are looked down on if you don't support it. At 
                the other end of the spectrum, there are id and Epic who are basing 
                their content around network multiplayer -ala <b>Quake III Arena</b> 
                and <b>Unreal Tournament</b>. They may have single player elements 
                but that is decidely not the focus with these products. At the 
                other end there is the persistent world brigade, IE <b>Everquest</b> 
                and <b>Ultima Online</b>.</font></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif"> Anyway, 
                in supporting network play over the Internet, you inherit all 
                of the worst part of the aspects of the Internet, and almost none 
                of the good. Some of the problems that you can tussle with include 
                lost or mis-ordered data packets, horribly variable latency, synchronization, 
                and user abuse. For those with no background, I&#146;ll give you 
                the quick two cent guide of networking. I have a much greater 
                and in-depth lecture on this subject, but again, it&#146;s up 
                your professors to decide if you&#146;ll get to hear it :)<br>
                Networking in games is loosely defined as the ability of a game 
                running on one machine to communicate and share data with another 
                machine playing the same game over a network (be it a LAN, direct 
                modem connection or the Internet), so they can share a gaming 
                universe and responses to it. What that means is that I can sit 
                here, play a game of <b>Quake</b> on my PC, and at the same time 
                you are too, and we can see each other as we play, talk to each 
                other, and see our responses to each other and the environment. 
                </font></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif">This is 
                vastly simplified, but you get the idea. How the game does this 
                is the tricky part. The game has to handle sending out its world 
                and client information &#150; E.g. current player position, his 
                current activity, health and so on, as well as receiving this 
                data from the other game. Both games have to operating on the 
                same frame, and often, if a data packet is delayed or lost from 
                one machine to the other, there needs to be some mechanism to 
                cope with this. Some Network protocols &#150; notably TCP/IP &#150; 
                will take care of this for you, but at a huge cost in packet latency. 
                TCP/IP guarantees delivery of packets in the correct order. If 
                a packet is lost, then all outgoing packets stop, until the TCP/IP 
                driver satisfies itself that the packet was indeed lost, and then 
                sends out another one, and waits for an acknowledgement from the 
                destination machine that it received that packet. In some cases 
                this waiting time can take seconds &#150; something you just can&#146;t 
                have in a fast response time game like Quake.</font></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif"><br>
                There are other Internet protocols you can use, - UDP comes to 
                mind here &#150; that don&#146;t make these assurances for you, 
                which means dealing with them is your problem. Quake gets around 
                it by having prediction code in the game. If you and I are playing, 
                and all of a sudden, some packets from you get delayed (which 
                is effectively latency &#150; this is defined as the time it takes 
                for the data to get from your PC to mine, this can be variable 
                over the internet) or lost, the game attempts to predict what 
                you were doing. It looks at your last action, maybe you were shooting 
                at me, and then traces that activity through to the end. Did the 
                shot hit me? When the packets finally get through, the game looks 
                to see if it was right in its predictions, and if it wasn&#146;t, 
                it adjusts the world accordingly. Obviously the prediction is 
                not always right, and in these cases, you will see glitching of 
                characters in the world &#150; some one that was alive in &#145;your&#146; 
                version of the world is dead in the real world. However, since 
                the prediction is right more than 50% of the time, its worth the 
                code and time to do it. One notable draw back of prediction though, 
                is that the longer you have to do it for, the greater the deviation 
                between &#145;your&#146; universe on your machine, and the one 
                in which all the other gamers are playing in. More than 3 to 4 
                seconds, and you will become hopelessly outdated. That sounds 
                short, but in game terms, where you are dealing with 20 packets 
                a second, that&#146;s a lot.</font></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif"><br>
                Then there&#146;s user abuse. When you get down to it, a network 
                game is just the data packets that are sent back and forth. If 
                you were particularly clever, you might write and editor that 
                allows you simulate the game, and have your character always follow 
                someone else, constantly gunning him down &#150; or more realistically, 
                make a modification to the game you are running that allows you 
                to always see all the other players, or superimpose their locations 
                on a Head Up Display. This of course, defies the point of playing 
                against someone else, when you have an unfair advantage. There 
                are ways and means of limiting this, but right now, that&#146;s 
                beyond the scope of this article.</font></p>
              <p align="left"></p>
              <p align="left"></p>
              <p align="left"></p>
              <p align="left"></p>
              <p align="left"></p>
              <p align="left"></p>
              <p align="left"><font face="Arial, Helvetica, sans-serif"><br></loonystart> 
                </font></p>
              </DIV>
            <div align="center">
                <p align="left"><font face="Arial, Helvetica, sans-serif"> </font><font face="Arial, Helvetica, sans-serif"> 
                  </font></p>
              </div>
              <table width="100%" border="0">
                <tr> 
                  
                <td width="50%"><font face="Arial, Helvetica, sans-serif"><a href="index5.php"><font color="#7C420E"><b><font size="+1">&lt;&lt;Prev</font></b></font> 
                  </a></font></td>
                  <td width="50%"> 
                    <div align="center"> 
                      <p align="left"></p>
                      <p align="left"></p>
                    </div>
                    
                  <p align="right"><font face="Arial, Helvetica, sans-serif"><a href="index7.php"><font color="#7C420E"><b><font size="+1">Next 
                    &gt;&gt;</font></b></font> </a></font> 
                </td>
                </tr>
              </table>
    
            </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<br>
<table width="100%" border="0" bgcolor="#3596B3" height="29">
  <tr> 
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <a href="../../../about.1"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF" size="2"><b>about</b></font></a></td>
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <a href="../../../feedback.1"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF" size="2"><b>feedback</b></font></a></td>
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <a href="../../../archives/index.html"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF" size="2"><b>archives</b></font></a></td>
    <td height="20" width="25%" align="center" valign="middle" bgcolor="#86531A"> 
      <b><a href="../../../submissions/index.html"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif" size="2">submissions</font></a></b></td>
  </tr>
</table>
<table width="100%" border="0" bgcolor="#3596B3" height="29">
  <tr> 
    <td height="20" width="35%"><a href="../../../index.html"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF"><b><i>loonygames</i></b></font></a></td>
    <td height="20" width="65%"> 
      <div align="right"><font face="Arial, Helvetica, sans-serif" color="#FFFFFF"><!--#exec
cgi="/includes/rand_bot.cgi"--></font></div>
    </td>
  </tr>
</table>
<p><i><font face="Arial, Helvetica, sans-serif" size="-2">Credits: Illustration 
  &copy; 2000 <a href="http://www.3dpalette.com/dimension">Durrenberger David 
  (dines)</a>. This article is &copy; 2000 Jake Simpson. All other content is 
  &copy; 2000 loonyboi productions. Unauthorized reproduction is prohibited. So 
  don't do it, or we'll dissect you.</font></i></p>
 <map name="logoa">
  <area shape="rect" coords="52,47,112,59" href="http://www.bluesnews.com">
  <area shape="rect" coords="3,3,179,46" href="../../../index.html">
</map>
</body>
</html>
