bl791's picture
download
raw
186 kB
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>OperationExtraction</title>
<style type="text/css">
/* Main sections for general page layout*/
#footerbuttons {
background-color: LightGray;
clear: both;
text-align: center; }
#sidebar {vertical-align: bottom; }
#content {vertical-align: bottom;}
#locationpanel {border: 1px solid black; }
#statuspanel {border: 1px solid black; }
/* Miscellaneous stuff */
.main {font-size: x-large; color: black; }
.main a {color: black; }
.main a:link {color: Gray; text-decoration: none; font-style: italic; }
.main a:visited {color: Gray; text-decoration: none; font-style: italic; }
.main a:hover {color: LightGray; text-decoration: underline; }
/* IE doesn't support data urls as cursors unfortunately. */
.main a.eye {color: black; cursor: url("data:image/x-win-bitmap;base64,AAACAAEAGBcAAAAAAACsBgAAFgAAACgAAAAYAAAALgAAAAEACAAAAAAAhAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlD87AJGR+QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAwMDAwAAAAAAAAAAAAAAAwMDAwAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP/B/wD8AB8A+AAPAOAAAwDAAAEAgAAAAMAAAQDgAAMA+AAPAPwAHwD/wf8AP///AA///wAf//8AP///AH///wA="), url("data:image/gif;base64,R0lGODlhGAAXAJEAAAAAADs/lPmRkf///yH5BAkAAAEALAAAAAAYABcAAAhjAAEEGEiwoMGDAwEIRMjwoMKFDSM+hBgRocKKGBtOpFhxo8eLGgEM+KhwJMeEJU1+HKCyYEqVJFmaRCkT5kqZIF+SfIiTIk+bE1k+tChy58yQO0Fm3JixqdOnUKNKnUq16sCAADs="), help; }
.main a.eye:link {color: Gray; text-decoration: none; font-style: italic; cursor: url("data:image/x-win-bitmap;base64,AAACAAEAGBcAAAAAAACsBgAAFgAAACgAAAAYAAAALgAAAAEACAAAAAAAhAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlD87AJGR+QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAwMDAwAAAAAAAAAAAAAAAwMDAwAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP/B/wD8AB8A+AAPAOAAAwDAAAEAgAAAAMAAAQDgAAMA+AAPAPwAHwD/wf8AP///AA///wAf//8AP///AH///wA="), url("data:image/gif;base64,R0lGODlhGAAXAJEAAAAAADs/lPmRkf///yH5BAkAAAEALAAAAAAYABcAAAhjAAEEGEiwoMGDAwEIRMjwoMKFDSM+hBgRocKKGBtOpFhxo8eLGgEM+KhwJMeEJU1+HKCyYEqVJFmaRCkT5kqZIF+SfIiTIk+bE1k+tChy58yQO0Fm3JixqdOnUKNKnUq16sCAADs="), help; }
.main a.eye:visited {color: Gray; text-decoration: none; font-style: italic; cursor: url("data:image/x-win-bitmap;base64,AAACAAEAGBcAAAAAAACsBgAAFgAAACgAAAAYAAAALgAAAAEACAAAAAAAhAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlD87AJGR+QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAwMDAwAAAAAAAAAAAAAAAwMDAwAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP/B/wD8AB8A+AAPAOAAAwDAAAEAgAAAAMAAAQDgAAMA+AAPAPwAHwD/wf8AP///AA///wAf//8AP///AH///wA="), url("data:image/gif;base64,R0lGODlhGAAXAJEAAAAAADs/lPmRkf///yH5BAkAAAEALAAAAAAYABcAAAhjAAEEGEiwoMGDAwEIRMjwoMKFDSM+hBgRocKKGBtOpFhxo8eLGgEM+KhwJMeEJU1+HKCyYEqVJFmaRCkT5kqZIF+SfIiTIk+bE1k+tChy58yQO0Fm3JixqdOnUKNKnUq16sCAADs="), help; }
.main a.eye:hover {color: LightGray; text-decoration: underline; cursor: url("data:image/x-win-bitmap;base64,AAACAAEAGBcAAAAAAACsBgAAFgAAACgAAAAYAAAALgAAAAEACAAAAAAAhAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlD87AJGR+QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAwMDAwAAAAAAAAAAAAAAAwMDAwAAAAAAAAMDAwAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAwMAAAAAAAAAAAADAwAAAAAAAAAAAAAAAAMAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP/B/wD8AB8A+AAPAOAAAwDAAAEAgAAAAMAAAQDgAAMA+AAPAPwAHwD/wf8AP///AA///wAf//8AP///AH///wA="), url("data:image/gif;base64,R0lGODlhGAAXAJEAAAAAADs/lPmRkf///yH5BAkAAAEALAAAAAAYABcAAAhjAAEEGEiwoMGDAwEIRMjwoMKFDSM+hBgRocKKGBtOpFhxo8eLGgEM+KhwJMeEJU1+HKCyYEqVJFmaRCkT5kqZIF+SfIiTIk+bE1k+tChy58yQO0Fm3JixqdOnUKNKnUq16sCAADs="), help; }
.windowbar {background-color: LightGray; color: black; font-weight: bold; padding: 0.2em; }
.windowbar a img {border-style: none; }
#locationpanelcontents { padding: 0.2em; }
#statuspanelcontents { padding: 0.2em; }
/* Mouseovers for the button bar at the bottom */
#toggleLookPanel {background-color: black; display: inline-block; }
#toggleInventoryPanel {background-color: black; display: inline-block; }
#toggleLookPanel:hover {background-color: white; display: inline-block; }
#toggleInventoryPanel:hover {background-color: white; display: inline-block; }
#footerbuttons a img {border-style: none;}
</style>
<script>
window.onload = function() {
initIFGameEngine();
}
</script>
</head>
<body>
<table width="100%" class="main">
<tr id="mainarearow">
<td id="sidebar" width="30%">
<div id="statuspanel"></div>
<div id="locationpanel"></div>
</td>
<td id="content" width="70%" aria-live="polite" aria-relevant="additions" role="log">
<noscript>
This game requires JavaScript to run.
</noscript>
<h1>Operation Extraction</h1>
<p>NO beta testers were used during the development of this game.</p>
<p>This game is an experiment in how to portray multiple interactive interconnecting narratives. You do not play a character in this story. Instead, you observe and influence what various characters are doing. Along the bottom of the screen are a row of buttons that allow you to move through the timeline of the story. A typical playthrough of this game will mostly involve clicking on the next button to see how events unfold. You can move from room to room to observe different areas, and occasionally, you will have the option of changing certain decisions and outcomes in the story.</p>
<div style="font-family: monospace;">
<p style="font-size: 120%">OPERATION EXTRACTION</p>
<p>Dr. Galland, a bio-weapons specialist, was kidnapped from her home by the Dawn Militia last Saturday. The Agency has intercepted communications yesterday that she is being held on the fifth floor of the Antico Hotel, and that the Dawn Militia is preparing to move her out of the country, out of our reach. </p>
<p>PRIMARY OBJECTIVE: Rescue Dr. Galland</p>
</div>
<div id="loading"></div>
</td>
<script>
<!--
document.getElementById('loading').innerHTML = 'Loading...';
//-->
</script>
</tr>
</table>
<div id="footerbuttons">
<hr>
<div style="width: 0px; height: 0px; overflow: hidden; position: absolute;"><a href="#footer" name="footer" accesskey="2">Jump to end of text</a></div>
<a href="#" id="toggleLookPanel"><img src="data:image/gif;base64,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" alt="Open Surroundings Panel"></a><a href="#" id="lookButton" accesskey="l"><img src="data:image/png;base64,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" alt="Surroundings"></a>
<a href="#" id="toggleInventoryPanel"><img src="data:image/gif;base64,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" alt="Open Status Panel"></a><a href="#" id="inventoryButton" accesskey="i"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAfgSURBVHjazFlba9VHEN85nC9jLvoiSBMRrA2kNI+KYjCk9mtZJCVgfRIiDSgIamNonqSJjQ9+lp3p7tz3fxLax5xDzvmfvczOzvU3k1Ku5AuI6GoxBNA+59++fbtSbDUxNc7mSVqNTerslj4Esmi4R/sN7d1G9bkPdjqysX+Ca2FCi594l1LVOTs4/ezSCqpMiZQTQODVzLt8FSQeUDpybv9JfS2zS/1UkPFOFoU/fgQ1GGdFjuob+4JGBGBgi0An9Z58VlEKhHpfitOo2CYsLlTmE1QNqg67JRW9m5ISifMUtjdLBPoTgbMlFMgUhSxs4m0kUgee73NMobNaVLLtiteuXcvGcf71q8hVxWw6VXHJ7fofsuLcokiu5GwhkJoFK0GuIgbRt4qG+xjKxUktCGh5aXnRZpeYy/Pzc+RzeTkgoXo9CC98baRitkp+tkvLD+RDlRJbgytCtepm2R6Wl1eclX++fBHWV1Z0cGlp6UsbFFNTBaAEJBabq5d1QnqiuxicnZ0thI7RAy96ra6uysMF2wusrq4szv4Pqv3VLtYEOiN9IflTxSZ/jCGMOdIJIXH696kPYqzC09NTWWBj6O8pRZR9vk4pz3ydsMI72PZ4yHbpc9ND+3X9xnU9lVfzDtQz7EMW3LhxXdf4jZQk+gWpEDqDqBtnfjTFlRFHAfl1hHnZ+fnzZ784+hr72WbVxzBNZJ2QMYz2SB4Qyhw7gz10WkwpGhk0zLOxWggHi0l6HvgviY66TWOqSpQs0vOsk/V9pHGUIkeUuUZed7ZwSc9S8UEpH7FG/ZfFH1sdu+Xa7OyUJ4ZAnE8xJYZRoOoRXdVqBq4ddKu8efOmLFAdIGZdtlkXKlLFRM8MTG2N0B0JB5OvTKiazcYBVX+0j0pB8+Svk9CjGy8Ol5EFJycnMZ1vFpZKzrEsM2kZ96X/BV0XoEkEQ45m9bdu3Yrl5hrt3cYtQKDt7tEU0eXkToyhqeSJ8On4uETej0AOEAZv4MKyHOeU9bV1t5DjT5/Y+GF9bS0NHmtqgORHAkaKQSc+QcI+8Hvtu7V2DBwdHV0GyCw4XzYLt2/fvixYH/155N78H+Q8nfHs+vo6w0A0xxtQoCM2cijHNxJsoeDm48ePbeWdO3fyKTKIjABoRHqlDAg9kCb0ZE4JCM5qzzXVLBJ76mFV14nSq39Rso9uTh/ef/CT3r//gJ6MOpGUViiCu4zU5C/uPAkGipJRjKhkEBRW4cHIxEkeYJNmiDDHOYEkGYM3tAcoSNMs1g7UoRTlg+oEv1P6y2v8x/f37mUN3r17t32+e/duajspOHvsnoTiPDRnIxhLCfWdkiQVhikWBo7pL3rZVXWnQdySahGtKqQagMBzKcpXMxdRcaVuQNVBQ43wbUGqivVs/LDRSLx988YZevP2bfvc2NhQS9IYj2pJEU+7Bdeqpmon9KDtSiRxNysiCqNVdW4FuCRYvCRDibt5TLcM2F9VyUa00sUlCoVSFDgvWsuMcERBEa2rOaTHeY/6/Wtzc7PtPzw8dPcR9f1xeNgeftzcpJwf1LUxpxEaFSWvBduamoCHJx29EPxmnkxy5JLTOFimMVBt053aKt+MIAz+sbpZZlXjSh+uOaey/PrT1tZW2/z64IB4U2KryZgODl6355+2tlRW1eFv1dDo+ZAwVEGRE+d9kfmGVWRaCWohC17tFAltVBLEQ/IqygpOGmTJlZjVclY4k9qYV+1WZEEy+WRsyToD0+XwIrOvXr3yQAC0GBqGBZEOh/YQRdMgMlRIi6wYLxqSrI4EL9KjuRE505ojQ/hqfJhhFvDSF5wlzanFYlWR5oMmWioR5bs8uYAF62lYjLNCWMiJb+vtrAIFTTiDEq0dRKheg5ZkuIuiYEZuz0R5HWLSzMwLHzEUdIAWRVjC0wGSw/UfPHjgbN2/f18WlQzGLRxborb9FLhVVhQLgTN0XKyxO5D5AqyNk0hRR5RQL1/+Hoi0pwojZG6n31gdTFCg1JCAsVXzWVExUMDrVCmGM2up8PDhw0blxYsXbbB9tudHjx5RRB0vI6NWjGCaULhXHmpbbqZeyGmQgBTp1B5hcMpUDfbmTAYCGBapXRqKZJz7gY7F3SAjnDpIc6VXr8tcLumSXihvP95uJPb3910g7bmNPN5+nBsMQWwQ2iglK7ourqo9E+t9NN6lDhNYMZLQosc5SPlb44vttca2hAft7YEhqQFEcZ1ojRDhvljLQu/FSmY0i9wX4afuM092dtrOvd/23CULl1x7e3ttfGfnCebejFmTJBAmpX/hSyVJy7s3+f6GcixN0BDsc81uZhRZIZX53GGbDE5yCE1x8NBI8no7vK5YC2VqE/1rd3e3bX7+/DlGliXrDFEbb7O7P+/aVkytmmyuk1YXOXSba+UE6kpeXJInV5WVdRMTtg05W2YpY97jro72p60vDA43QZrYgLSAvuHZs18d6EAUvVLkGfwCq/GUybB/LyqjSHZIqlDNIAik9qt6GLjXFG0y0dOnv/Ty1VIagbDt0IQUeQwtrwQagaIrqwnZkSCIKJlDlFyc/8UhUmznYfF7jTXL3Fv0wp7S9P4a5BYWEzMh8UYi40+tmwYEo9hWgQBhGYVthZmHCsM1AmxGzeKAZ4t10XNzz7wUii8jRRjF+th+M/mnS9HiH+wm2uu3XrxWMXCl/3F3RV//CjAAvJamjp4aGFgAAAAASUVORK5CYIK=" alt="Status"></a>
<!--
<a href="#" id="doNothingButton">Do Nothing</a>
<a href="#" id="optionsButton">Options</a>
-->
<span id="custombuttons">&nbsp;&nbsp;&nbsp;<a do="timeline?fullrewind">Rewind</a> <a do="timeline?minus8">-8</a> <a do="timeline?minus1">-1</a> &nbsp; <a do="timeline?next">next</a> &nbsp; <a do="timeline?plus8">+8</a></span>
</div>
<!-- Load these things last, so that they don't block the loading of other stuff -->
<script>
<!--
function gel(id)
{
return document.getElementById(id);
}
function GameObject(id) {
this._id = id;
this._children = new Array();
this._actions = new Object();
this._exits = new Object();
this._parent = null;
};
GameObject.prototype = {
hasAncestor : function(ancestor) {
var parent = this._parent;
while (parent && parent != ancestor)
parent = parent._parent;
if (!parent) return false;
return true;
},
hasChild : function(obj) {
return obj._parent == this;
},
contains : function(obj) {
// I'm not sure if this definition of contains makes the most sense
return obj.hasAncestor(this);
},
moveTo : function(obj) {
if (this._parent)
this._parent.removeChild(this);
if (obj)
obj.addChild(this);
},
removeChild : function(child) {
if (child._parent == this)
{
child._parent = null;
for (var idx in this._children)
{
if (this._children[idx] == child)
{
this._children.splice(idx, 1);
break;
}
}
}
return this;
},
addChild : function(child) {
if (child._parent)
child._parent.removeChild(child);
child._parent = this;
this._children.push(child);
return this;
},
makeCopy : function() {
// This doesn't make a real 1:1 copy of the object, but simply a copy
// that behaves similarly to the original
// Make a shallow copy of the object
var copy = new Object();
for (var idx in this)
copy[idx] = this[idx];
// Also make a shallow copy of the exits, actions, but not the children
copy._children = new Array();
copy._actions = new Object();
for (var idx in this._actions)
copy._actions[idx] = this._actions[idx];
copy._exits = new Object();
for (var idx in this._exits)
copy._exits[idx] = this._exits[idx];
// Give the copy a unique id
copy._id = '__' + _idCounter;
_idCounter++;
o[copy._id] = copy;
// Set the location as nowhere
copy._parent = null;
return copy;
}
};
var _idCounter = 0;
var o = new Object();
var _Player;
var Game = {
// General preferences
isLocationPanelOpen: true,
isStatusPanelOpen: true,
scrollbackSize: 500
}
function fillLocationPanel()
{
gel('locationpanel').innerHTML = '<div class="windowbar"><a href="#" id="closeLookPanel"><img src="data:image/gif;base64,R0lGODlhDwAPAIABAAAAAP///yH5BAEAAAEALAAAAAAPAA8AAAImhI8Jwe1tnmQxVLhsPnhnvXDUB17aI2JOsn5cWsGxh9JTfdfKDhQAOw==" alt="Close Surroundings"></a> Surroundings</div><div id="locationpanelcontents"></div>';
gel('closeLookPanel').onclick = function() {
Game.isLocationPanelOpen = false;
updatePanels();
gel('footerbuttons').scrollIntoView();
return false;};
_out.save();
_Player._parent._description();
var newNodes = createInnerHTML(outputToHTML(_out.popSave()));
addElementArrayTo(gel('locationpanelcontents'), newNodes);
}
function fillStatusPanel()
{
gel('statuspanel').innerHTML = '<div class="windowbar"><a href="#" id="closeInventoryPanel"><img src="data:image/gif;base64,R0lGODlhDwAPAIABAAAAAP///yH5BAEAAAEALAAAAAAPAA8AAAImhI8Jwe1tnmQxVLhsPnhnvXDUB17aI2JOsn5cWsGxh9JTfdfKDhQAOw==" alt="Close Status"></a> Status</div><div id="statuspanelcontents"></div>';
gel('closeInventoryPanel').onclick = function() {
Game.isStatusPanelOpen = false;
updatePanels();
gel('footerbuttons').scrollIntoView();
return false;};
_out.save();
_Player._description();
var newNodes = createInnerHTML(outputToHTML(_out.popSave()));
addElementArrayTo(gel('statuspanelcontents'), newNodes);
}
function updatePanels()
{
var isSideBarOpen = Game.isLocationPanelOpen || Game.isStatusPanelOpen;
if (isSideBarOpen)
{
if (!gel("sidebar"))
{
var newSidebar = document.createElement("td");
newSidebar.setAttribute('width', '30%');
newSidebar.setAttribute('id', 'sidebar');
newSidebar.innerHTML = '<div id="statuspanel"></div><div id="locationpanel"></div>';
gel("mainarearow").insertBefore(newSidebar, gel("content"));
}
gel("content").width = "70%";
}
else
{
if (gel('sidebar'))
gel('mainarearow').removeChild(gel('sidebar'));
gel("content").width = "100%";
}
if (Game.isLocationPanelOpen)
fillLocationPanel();
else {
if (gel("locationpanel"))
gel("locationpanel").innerHTML = "";
}
if (Game.isStatusPanelOpen)
fillStatusPanel();
else {
if (gel("statuspanel"))
gel("statuspanel").innerHTML = "";
}
}
function endTurn(isAction)
{
_getEndTurnFn()(isAction);
if (isAction)
updatePanels();
}
function escapeHTML(str)
{
return str.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/["]/g, "&quot;");
}
function handleObjectClick(objName, actionName, arg)
{
// Find the object being clicked on
var obj = o[objName];
if (actionName)
{
// Perform the action
var action = obj._actions[actionName];
if (!action.condition.call(obj, arg))
return; // TODO: show error msg
_out.separator();
action.action.call(obj, arg);
endTurn(true);
}
else
{
// Show the description for the object
_out.separator();
obj._description();
_out('<>');
var isFirst = true;
for (var actionid in obj._actions)
{
if (obj._actions[actionid].condition.call(obj))
{
if (!isFirst)
_out(' &mdash; ');
isFirst = false;
_out('<a do="' + escapeHTML(obj._id) + '?' + escapeHTML(actionid) + '">');
obj._actions[actionid].name.call(obj);
_out('</a> ');
}
}
endTurn(false);
}
}
function handleRoomClick(roomName, action, arg)
{
// Find the room being clicked on
var currentRoom = _Player._parent;
// Check if we're allowed to move to this room
var isExitAllowed = false;
if (currentRoom._exits[roomName])
isExitAllowed = currentRoom._exits[roomName].call(currentRoom, arg);
if (!isExitAllowed) return; // TODO: show error msg
// Do the move
_Player.moveTo(o[roomName]);
_out.separator();
_Player._parent._description();
endTurn(true);
}
function handleClick(event)
{
// Find what object, action, or location was clicked on
if (!event) var event = window.event;
var target = event.currentTarget; // currentTarget and this refer to object handling the event (target refers to object actually clicked on)
if (!target) target = this;
var room = target.getAttribute('go');
var obj = null; // target.getAttribute('obj');
var action = null; // target.getAttribute('action');
var arg = null;
var doAction = target.getAttribute('do');
if (doAction)
{
var atidx = doAction.indexOf('?');
if (atidx != -1)
{
obj = doAction.substring(0, atidx);
action = doAction.substring(atidx + 1);
var argidx = action.indexOf('#');
if (argidx != -1)
{
arg = action.substring(argidx + 1);
action = action.substring(0, argidx);
}
}
else
obj = doAction;
}
// Check if links refer to valid objects
// TODO: show error messages that links were invalid
if (obj && !o[obj]) return;
if (room && !o[room]) return;
if (action && obj && !o[obj]._actions[action]) return;
// Dispatch to handle the event
var actionFilter = _getActionFilterFn();
var movementFilter = _getMovementFilterFn();
_out.save();
if (obj != null)
{
if ((action && actionFilter(o[obj], o[obj]._actions[action], arg))
|| (!action && actionFilter(o[obj], null, null)))
{
handleObjectClick(obj, action, arg);
}
}
else if (room != null)
{
if (movementFilter(o[room], arg))
{
handleRoomClick(room, action, arg);
}
}
displayOutput(_out.popSave());
return false;
}
function rewriteAnchor(anchor)
{
// regular links without a "do" or "go" attribute will be treated normally
if (!anchor.getAttribute('do')
&& !anchor.getAttribute('go'))
return;
// For links that examine an object, use an eye cursor
if (anchor.getAttribute('do')
&& anchor.getAttribute('do').indexOf('?') == -1)
anchor.className = 'eye';
// Fix up special click handler
anchor.onclick = handleClick;
anchor.href= '#';
}
var dummyAdd = document.createElement('div');
function createInnerHTML(text)
{
// Create elements
dummyAdd.innerHTML = text;
// Fix up links
var links = dummyAdd.getElementsByTagName('a');
for (var i = 0; i < links.length; i++)
rewriteAnchor(links.item(i));
// Move elements into an array
var toReturn = new Array();
for (var n = dummyAdd.childNodes.length-1; n >= 0; n--)
{
var el = dummyAdd.childNodes[n];
dummyAdd.removeChild(el);
toReturn[n] = el;
}
return toReturn;
}
function addElementArrayTo(dest, elems)
{
for (var n = 0; n < elems.length; n++)
dest.appendChild(elems[n]);
}
function addInnerHTML(text)
{
// Create content
var newNodes = createInnerHTML(text);
if (newNodes.length > 0)
{
// Add in the content
var firstEl = newNodes[0];
addElementArrayTo(gel('content'), newNodes);
while (gel('content').childNodes.length > Game.scrollbackSize)
gel('content').removeChild(gel('content').childNodes[0]);
// Scroll to the bottom of the screen
gel('footerbuttons').scrollIntoView();
// Check if we've scrolled so far that the new content has
// already scrolled off the top of the browser window. Then we
// scroll it back down
// (Note: Chrome 5 seems to have a problem scrolling things twice
// in that it leaves garbage on the screen. Hopefully Chrome will
// solve this problem themselves)
var element = firstEl;
scrollToBottomButLeaveVisible(element);
}
}
function scrollToBottomButLeaveVisible(elem)
{
// Scroll to the bottom of the screen, but make sure the given element is still visible
// (scroll back up if it doesn't fit)
//
var element = elem;
var pageX = 0;
var pageY = 0;
while(element.offsetParent)
{
pageX += element.offsetLeft;
pageY += element.offsetTop;
element = element.offsetParent;
}
var windowScrollY = 0;
if (window.pageYOffset)
windowScrollY = window.pageYOffset; // get scroll position of browser off the window
else
windowScrollY = element.scrollTop; // get scroll position of browser off of the body element
if (pageY < windowScrollY)
elem.scrollIntoView();
}
function createOutputFunction()
{
var saveStack = new Array();
var buffer = '';
function _out(str)
{
if (str === null || typeof(str) == "undefined")
return;
buffer = buffer + str;
}
_out.separator = function() {
_out('<div><img src="data:image/gif;base64,R0lGODlhMgADAIAAAAAAAP///yH5BAAAAAAALAAAAAAyAAMAAAIKhI+py+0Po5xUFgA7"></div>');
}
_out.save = function() {
saveStack.push(buffer);
buffer = '';
}
_out.popSave = function() {
var toReturn = buffer;
buffer = saveStack.pop();
return toReturn;
}
return _out;
}
var _out = createOutputFunction();
function outputToHTML(text)
{
while(text.indexOf('<>') != -1)
{
var idx = text.indexOf('<>');
text = text.substring(0, idx) + '</p><p>' + text.substring(idx+2);
}
return text;
}
function displayOutput(outputString)
{
if (outputString)
addInnerHTML('<p>' + outputToHTML(outputString) + '</p>');
}
function initIFGameEngine()
{
// Add events to main buttons
//
gel("toggleLookPanel").onclick = function() {
Game.isLocationPanelOpen = true; //!Game.isLocationPanelOpen;
updatePanels();
gel('footerbuttons').scrollIntoView();
return false;};
gel("lookButton").onclick = function() {
var actionFilter = _getActionFilterFn();
if (actionFilter(_Player._parent, null))
{
_out.save();
_out.separator();
_Player._parent._description();
displayOutput(_out.popSave());
// TODO: also update panels with this text
endTurn(false);
}
return false;};
gel("toggleInventoryPanel").onclick = function() {
Game.isStatusPanelOpen = true; //!Game.isStatusPanelOpen;
updatePanels();
gel('footerbuttons').scrollIntoView();
return false;};
gel("inventoryButton").onclick = function() {
var actionFilter = _getActionFilterFn();
if (actionFilter(_Player, null))
{
_out.save();
_out.separator();
_Player._description();
displayOutput(_out.popSave());
// TODO: also update panels with this text
endTurn(false);
}
return false;};
initGameCode();
// Remove loading information
gel("loading").parentNode.removeChild(gel("loading"));
// show description of initial room
_out.save();
var starter = _getTurnZeroFn();
if (starter)
starter();
displayOutput(_out.popSave());
gel('content').scrollIntoView(); // scroll to top of the page.
// Initialize panels
//
updatePanels();
}
var _getActionFilterFn;
var _getMovementFilterFn;
var _getEndTurnFn;
var _getTurnZeroFn;
function initGameCode()
{
// Game code is defined in its own function so that the
// scope of variables won't interfere with global scope
var moveTo; // Sometimes I forget the "this" in "this.moveTo" but moveTo() is defined as a global var in JavaScript, so it is silently accepted. This redefinition removes this problem.
var turnZero; // In newer versions of this program, this is always defined, but if not, we define it here
o['timeline'] = new GameObject('timeline');
var $timeline = o['timeline'];
o['Safehouse'] = new GameObject('Safehouse');
var $Safehouse = o['Safehouse'];
o['pc'] = new GameObject('pc');
var $pc = o['pc'];
o['debug'] = new GameObject('debug');
var $debug = o['debug'];
o['MainBlvd1'] = new GameObject('MainBlvd1');
var $MainBlvd1 = o['MainBlvd1'];
o['Viaduct1'] = new GameObject('Viaduct1');
var $Viaduct1 = o['Viaduct1'];
o['Garage'] = new GameObject('Garage');
var $Garage = o['Garage'];
o['MainBlvd2'] = new GameObject('MainBlvd2');
var $MainBlvd2 = o['MainBlvd2'];
o['Viaduct2'] = new GameObject('Viaduct2');
var $Viaduct2 = o['Viaduct2'];
o['MainBlvd3'] = new GameObject('MainBlvd3');
var $MainBlvd3 = o['MainBlvd3'];
o['Viaduct3'] = new GameObject('Viaduct3');
var $Viaduct3 = o['Viaduct3'];
o['MainBlvd4'] = new GameObject('MainBlvd4');
var $MainBlvd4 = o['MainBlvd4'];
o['Viaduct4'] = new GameObject('Viaduct4');
var $Viaduct4 = o['Viaduct4'];
o['MainBlvd5'] = new GameObject('MainBlvd5');
var $MainBlvd5 = o['MainBlvd5'];
o['Viaduct5'] = new GameObject('Viaduct5');
var $Viaduct5 = o['Viaduct5'];
o['ClockTower'] = new GameObject('ClockTower');
var $ClockTower = o['ClockTower'];
o['Lobby'] = new GameObject('Lobby');
var $Lobby = o['Lobby'];
o['BackHallway'] = new GameObject('BackHallway');
var $BackHallway = o['BackHallway'];
o['Backroom'] = new GameObject('Backroom');
var $Backroom = o['Backroom'];
o['LaundryRoom'] = new GameObject('LaundryRoom');
var $LaundryRoom = o['LaundryRoom'];
o['Stairwell'] = new GameObject('Stairwell');
var $Stairwell = o['Stairwell'];
o['Hallway'] = new GameObject('Hallway');
var $Hallway = o['Hallway'];
o['HotelRoom'] = new GameObject('HotelRoom');
var $HotelRoom = o['HotelRoom'];
o['LoadingDock'] = new GameObject('LoadingDock');
var $LoadingDock = o['LoadingDock'];
o['Characters'] = new GameObject('Characters');
var $Characters = o['Characters'];
o['alpha'] = new GameObject('alpha');
var $alpha = o['alpha'];
o['alphaController'] = new GameObject('alphaController');
var $alphaController = o['alphaController'];
o['bravo'] = new GameObject('bravo');
var $bravo = o['bravo'];
o['bravoController'] = new GameObject('bravoController');
var $bravoController = o['bravoController'];
o['charlie'] = new GameObject('charlie');
var $charlie = o['charlie'];
o['charlieController'] = new GameObject('charlieController');
var $charlieController = o['charlieController'];
o['spotter'] = new GameObject('spotter');
var $spotter = o['spotter'];
o['spotterController'] = new GameObject('spotterController');
var $spotterController = o['spotterController'];
o['roomGuards'] = new GameObject('roomGuards');
var $roomGuards = o['roomGuards'];
o['roomGuardsController'] = new GameObject('roomGuardsController');
var $roomGuardsController = o['roomGuardsController'];
o['hallwayGuards'] = new GameObject('hallwayGuards');
var $hallwayGuards = o['hallwayGuards'];
o['hallwayGuardsController'] = new GameObject('hallwayGuardsController');
var $hallwayGuardsController = o['hallwayGuardsController'];
o['outdoorGuards'] = new GameObject('outdoorGuards');
var $outdoorGuards = o['outdoorGuards'];
o['outdoorGuardsController'] = new GameObject('outdoorGuardsController');
var $outdoorGuardsController = o['outdoorGuardsController'];
o['convoy'] = new GameObject('convoy');
var $convoy = o['convoy'];
o['convoyController'] = new GameObject('convoyController');
var $convoyController = o['convoyController'];
o['bomb'] = new GameObject('bomb');
var $bomb = o['bomb'];
o['bombController'] = new GameObject('bombController');
var $bombController = o['bombController'];
var isMovementAllowed = function(destination, arg) {
if (inputRestriction) return false;
return true;
};
var isActionAllowed = function(obj, action, arg) {
if (obj == $timeline) return true;
var currentRoom = _Player._parent;
if (inputRestriction && obj != inputRestriction) return false;
// Check if object is in same room as player
if (!obj.hasAncestor(currentRoom) && obj != currentRoom) return false;
return true;
}
;
var endTurn = function(isAction) {
if (isAction && !$timeline.isTimelineAction)
$timeline.gotoTime(time + 1);
$timeline.isTimelineAction = false;
};
var inputRestriction = null;
var getListedObjects = function(obj)
{
var listedObjects = new Array();
for (var i in obj._children)
{
if (!obj._children[i].listingName) continue;
listedObjects.push(obj._children[i]);
}
return listedObjects;
}
;
var showListedObjects = function(objList)
{
if (objList.length == 0)
{_out('nothing');}
else
{
var count = 0;
for (var i in objList)
{
{_out('<a do=\"');
_out(objList[i]._id);
_out('\">');}
objList[i].listingName();
{_out('</a>');}
if (count == objList.length - 2)
{_out(' and ');}
else if (count < objList.length - 2)
{_out(', ');}
count++;
}
}
}
;
var time = 0;
var turnZero = function()
{
$timeline.resetTime();
_Player._parent._description();
$timeline.gotoTime(1);
};
var timelineButtons = {rewind:'data:image/png;base64,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',
back:'data:image/png;base64,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',
minus8:'data:image/png;base64,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',
next:'data:image/png;base64,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',
plus8:'data:image/png;base64,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'
};
o['timeline']._description = function() {{_out('');}};
o['timeline']._actions['next'] = { name : function() {{_out('next');}}, condition: function(_arg) {return true;}, action: function(_arg) {this.isTimelineAction = true;
this.gotoTime(time + 1);
}};
o['timeline']._actions['fullrewind'] = { name : function() {{_out('fullrewind');}}, condition: function(_arg) {return true;}, action: function(_arg) {this.isTimelineAction = true;
this.gotoTime(1);}};
o['timeline']._actions['minus1'] = { name : function() {{_out('minus1');}}, condition: function(_arg) {return true;}, action: function(_arg) {this.isTimelineAction = true;
this.gotoTime(time - 1);}};
o['timeline']._actions['minus8'] = { name : function() {{_out('minus8');}}, condition: function(_arg) {return true;}, action: function(_arg) {this.isTimelineAction = true;
this.gotoTime(time - 8);}};
o['timeline']._actions['plus8'] = { name : function() {{_out('plus8');}}, condition: function(_arg) {return true;}, action: function(_arg) {this.isTimelineAction = true;
this.gotoTime(time + 8);}};
o['timeline'].gotoTime = function(newTime)
{
if (newTime < 1) newTime = 1;
if (newTime <= time)
{
this.resetTime();
}
while (time < newTime)
{
if (newTime - time > 1)
this.isOutputDisabled = true;
else
this.isOutputDisabled = false;
for (var faListIdx = 0; faListIdx < this.faList.length; faListIdx++)
{
if (!this.isGameOver)
this.faList[faListIdx].next();
}
time++;
}
};
o['timeline'].isOutputDisabled = false;
o['timeline'].resetTime = function()
{
// Rewind
this.isGameOver = false;
for (idx in this.faList)
{
this.faList[idx].reset();
this.faList[idx].next();
}
time = 0;
};
o['timeline'].faList = [$alphaController, $bravoController, $charlieController, $spotterController, $roomGuardsController, $hallwayGuardsController, $outdoorGuardsController, $convoyController, $bombController];
o['timeline'].isTimelineAction = false /* set to true prevents the timeline from advancing at the end of the turn, ending the turn resets this variable back to false. */;
o['timeline'].isGameOver = false;
o['timeline'].missionFailed = function()
{
this.isGameOver = true;
if ($timeline.isOutputDisabled) return;
{_out('<b>Mission Failed</b><>\n ');}
};
o['timeline'].missionSucceeded = function()
{
this.isGameOver = true;
if ($timeline.isOutputDisabled) return;
{_out('<b>Mission Success</b><>\n ');}
var lost = 0;
if ($bravo.isDead)
lost++;
if ($charlie.isDead)
lost++;
if (lost == 0)
{_out('Agents Lost: None<>');}
else
{_out('Agents Lost: ');
_out(lost);
_out('<>');}
var collateral = 0;
if ($bomb.explodedAt1)
collateral++;
if ($bomb.explodedAt3)
collateral++;
if ($outdoorGuards.isReduced)
collateral += 2;
if ($convoy.isReduced)
collateral += 1;
if ($convoy.isDead)
collateral += 2;
if ($outdoorGuards.isDead)
collateral += 2;
if (collateral < 2)
{_out('Collateral Damage: Minimal<>');}
else if (collateral < 4)
{_out('Collateral Damage: Medium<>');}
else
{_out('Collateral Damage: Heavy<>');}
};
o['timeline'].debugRerun = function()
{
var oldTime = time;
$timeline.resetTime();
$timeline.gotoTime(oldTime);
};
o['Safehouse']._description = function() {{_out('<b>Safehouse</b><>\nThe safehouse was a sparse two-bedroom apartment with a few cheap furnishings. It overlooked <a go=\"MainBlvd1\">Main Boulevard</a>.<>');}};
o['Safehouse']._exits['MainBlvd1'] = function(_arg) {return true;};
o['Safehouse'].addChild(o['pc']);
o['pc']._description = function() {{_out('<a do=\"pc?jumpToAlpha\">Agent Alpha</a><>\n<a do=\"pc?jumpToBravo\">Agent Bravo</a><>\n<a do=\"pc?jumpToCharlie\">Agent Charlie</a><>\n<!--<a do=\"debug\">debug</a>-->\nTurn: ');
_out(time);
_out(' <>\n');}};
o['pc']._actions['jumpToAlpha'] = { name : function() {{_out('jumpToAlpha');}}, condition: function(_arg) {return true;}, action: function(_arg) {var parent = $alpha._parent;
if (parent != null && parent != $pc._parent)
{
$pc.moveTo(parent);
_Player._parent._description();
}}};
o['pc']._actions['jumpToBravo'] = { name : function() {{_out('jumpToBravo');}}, condition: function(_arg) {return true;}, action: function(_arg) {var parent = $bravo._parent;
if (parent != null && parent != $pc._parent)
{
$pc.moveTo(parent);
_Player._parent._description();
}}};
o['pc']._actions['jumpToCharlie'] = { name : function() {{_out('jumpToCharlie');}}, condition: function(_arg) {return true;}, action: function(_arg) {var parent = $charlie._parent;
if (parent != null && parent != $pc._parent)
{
$pc.moveTo(parent);
_Player._parent._description();
}}};
o['pc']._actions['setIn'] = { name : function() {{_out('setIn');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var split2 = split[0].split('+');
var variable = split2[0];
var obj = split2[1];
o[obj][variable] = true;
{_out('Ok.<>');}}};
o['pc']._actions['unsetIn'] = { name : function() {{_out('unsetIn');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var split2 = split[0].split('+');
var variable = split2[0];
var obj = split2[1];
o[obj][variable] = true;
{_out('Ok.<>');}}};
o['pc'].addChild(o['debug']);
o['debug']._description = function() {{_out('Debug scripts');}};
o['debug']._actions['ambush in stairs'] = { name : function() {{_out('ambush in stairs');}}, condition: function(_arg) {return true;}, action: function(_arg) {$alpha.useElevator = false;
$alpha.useStairsEarly = false;
$alpha.wearUniform = false;
$alpha.stairAmbush = true;
$timeline.debugRerun();
}};
o['debug']._actions['late attack wear uniform'] = { name : function() {{_out('late attack wear uniform');}}, condition: function(_arg) {return true;}, action: function(_arg) {$alpha.useElevator = false;
$alpha.useStairsEarly = false;
$alpha.wearUniform = true;
$alpha.attackBeforeTransfer = true;
$timeline.debugRerun();}};
o['debug']._actions['late attack no uniform'] = { name : function() {{_out('late attack no uniform');}}, condition: function(_arg) {return true;}, action: function(_arg) {$alpha.useElevator = false;
$alpha.useStairsEarly = false;
$alpha.wearUniform = false;
$alpha.stairAmbush = false;
$alpha.attackBeforeTransfer = true;
$timeline.debugRerun();}};
o['debug']._actions['charlie at loading dock'] = { name : function() {{_out('charlie at loading dock');}}, condition: function(_arg) {return true;}, action: function(_arg) {$charlie.parkAt5 = true;
$timeline.debugRerun();}};
o['debug']._actions['charlie at 3'] = { name : function() {{_out('charlie at 3');}}, condition: function(_arg) {return true;}, action: function(_arg) {$charlie.parkAt5 = false;
$charlie.parkAt3 = true;
$timeline.debugRerun();}};
o['debug']._actions['charlie at garage'] = { name : function() {{_out('charlie at garage');}}, condition: function(_arg) {return true;}, action: function(_arg) {$charlie.parkAt5 = false;
$charlie.parkAt3 = false;
$timeline.debugRerun();}};
o['debug']._actions['bravo in clock tower'] = { name : function() {{_out('bravo in clock tower');}}, condition: function(_arg) {return true;}, action: function(_arg) {$bravo.useClockTower = true;
$timeline.debugRerun();}};
o['debug']._actions['Go to loading dock'] = { name : function() {{_out('Go to loading dock');}}, condition: function(_arg) {return true;}, action: function(_arg) {$pc.moveTo($LoadingDock);}};
o['debug']._actions['Go to Main Boulevard 3'] = { name : function() {{_out('Go to Main Boulevard 3');}}, condition: function(_arg) {return true;}, action: function(_arg) {$pc.moveTo($MainBlvd3);}};
o['debug']._actions['weaponsAtViaduct'] = { name : function() {{_out('weaponsAtViaduct');}}, condition: function(_arg) {return true;}, action: function(_arg) {$charlie.weaponsAtMain = false;
$charlie.weaponsAtViaduct = true;
$charlie.parkAt5 = false;
$timeline.debugRerun();}};
o['debug']._actions['weaponsAtmain'] = { name : function() {{_out('weaponsAtmain');}}, condition: function(_arg) {return true;}, action: function(_arg) {$charlie.weaponsAtMain = true;
$timeline.debugRerun();}};
o['debug']._actions['weaponsNowhere'] = { name : function() {{_out('weaponsNowhere');}}, condition: function(_arg) {return true;}, action: function(_arg) {$charlie.weaponsAtMain = false;
$charlie.weaponsAtViaduct = false;
$timeline.debugRerun();}};
o['debug']._actions['bravo at 5'] = { name : function() {{_out('bravo at 5');}}, condition: function(_arg) {return true;}, action: function(_arg) {$bravo.useClockTower = false;
$timeline.debugRerun();}};
o['debug']._actions['decoyBlast'] = { name : function() {{_out('decoyBlast');}}, condition: function(_arg) {return true;}, action: function(_arg) {$bravo.bomb1 = true;
$bomb.explode1After = true;
$timeline.debugRerun();}};
o['debug']._actions['convoyBlast'] = { name : function() {{_out('convoyBlast');}}, condition: function(_arg) {return true;}, action: function(_arg) {$bravo.bomb1 = true;
$bomb.explode1After = false;
$bomb.explode1Convoy = true;
$timeline.debugRerun();}};
o['debug']._actions['noBlast'] = { name : function() {{_out('noBlast');}}, condition: function(_arg) {return true;}, action: function(_arg) {$bravo.bomb1 = true;
$bomb.explode1After = false;
$bomb.explode1Convoy = false;
$timeline.debugRerun();}};
o['debug']._actions['bombPatio'] = { name : function() {{_out('bombPatio');}}, condition: function(_arg) {return true;}, action: function(_arg) {$bravo.bomb1 = false;
$bravo.bomb3 = true;
$bomb.explode3Patio = true;
$timeline.debugRerun();}};
o['MainBlvd1']._description = function() {{_out('<b>Main Boulevard</b><>\nAt this intersection, Main Boulevard met Genoa Lane. Main Boulevard was a wide four lane road that ran <a go=\"MainBlvd2\">east</a> toward the Antico hotel. Genoa Lane was a small side street leading to <a go=\"Viaduct1\">Viaduct Road</a>. Grimy old <a go=\"Safehouse\">apartment buildings</a> lined the Main Boulevard here except for one large <a go=\"Garage\">parking garage</a> with multiple entrances and exits.<>\n');}};
o['MainBlvd1']._exits['MainBlvd2'] = function(_arg) {return true;};
o['MainBlvd1']._exits['Viaduct1'] = function(_arg) {return true;};
o['MainBlvd1']._exits['Garage'] = function(_arg) {return true;};
o['MainBlvd1']._exits['Safehouse'] = function(_arg) {return true;};
o['Viaduct1']._description = function() {{_out('<b>Viaduct Road</b><>\nViaduct Road was a narrow road running parallel to Main Boulevard. Viaduct Road ran <a go=\"Viaduct2\">east</a> toward the Antico hotel. A small side-street called Genoa Lane connected the road to <a go=\"MainBlvd1\">Main Boulevard</a>. The entrance to a multi-story <a go=\"Garage\">parking garage</a> faced Viaduct Road.<>\n');}};
o['Viaduct1']._exits['Viaduct2'] = function(_arg) {return true;};
o['Viaduct1']._exits['MainBlvd1'] = function(_arg) {return true;};
o['Viaduct1']._exits['Garage'] = function(_arg) {return true;};
o['Garage']._description = function() {{_out('<b>Parking Garage</b><>\nThe cement multi-story parking garage was ideal for the operation since it was near the highway, had multiple entrances and exits, and was maze-like inside. The team could quickly enter from <a go=\"MainBlvd1\">Main Boulevard</a> or <a go=\"Viaduct1\">Viaduct Road</a>, lose any pursuers, and escape unnoticed.<>');}};
o['Garage']._exits['MainBlvd1'] = function(_arg) {return true;};
o['Garage']._exits['Viaduct1'] = function(_arg) {return true;};
o['MainBlvd2']._description = function() {{_out('<b>Main Boulevard</b><>\nMain Boulevard was a wide four lane road running <a go=\"MainBlvd3\">east</a>-<a go=\"MainBlvd1\">west</a>. The road was flanked by small neighbourhood cafes and corner stores at the bottom that have apartments above them.<>\n');}};
o['MainBlvd2']._exits['MainBlvd1'] = function(_arg) {return true;};
o['MainBlvd2']._exits['MainBlvd3'] = function(_arg) {return true;};
o['Viaduct2']._description = function() {{_out('<b>Viaduct Road</b><>\nViaduct Road ran <a go=\"Viaduct3\">east</a>-<a go=\"Viaduct1\">west</a>, parallel to the Main Boulevard. <>');}};
o['Viaduct2']._exits['Viaduct1'] = function(_arg) {return true;};
o['Viaduct2']._exits['Viaduct3'] = function(_arg) {return true;};
o['MainBlvd3']._description = function() {{_out('<b>Main Boulevard</b><>\nMain Boulevard was a wide four lane road running <a go=\"MainBlvd4\">east</a>-<a go=\"MainBlvd2\">west</a>. Main Boulevard intersected Sarinson Road here. Sarinson Road connected Main Boulevard to <a go=\"Viaduct3\">Viaduct Road</a>. The Iberio restaurant dominated the intersection with its large patio occupying all of the sidewalk. <>');}};
o['MainBlvd3']._exits['MainBlvd4'] = function(_arg) {return true;};
o['MainBlvd3']._exits['MainBlvd2'] = function(_arg) {return true;};
o['MainBlvd3']._exits['Viaduct3'] = function(_arg) {return true;};
o['Viaduct3']._description = function() {{_out('<b>Viaduct Road</b><>\nViaduct Road ran <a go=\"Viaduct4\">east</a>-<a go=\"Viaduct2\">west</a>, parallel to the Main Boulevard. Sarinson Road connected to Viaduct Road here, and led off to <a go=\"MainBlvd3\">Main Boulevard</a>.<>\n');}};
o['Viaduct3']._exits['Viaduct2'] = function(_arg) {return true;};
o['Viaduct3']._exits['Viaduct4'] = function(_arg) {return true;};
o['Viaduct3']._exits['MainBlvd3'] = function(_arg) {return true;};
o['MainBlvd4']._description = function() {{_out('<b>Main Boulevard</b><>\nMain Boulevard was a wide four lane road running <a go=\"MainBlvd5\">east</a>-<a go=\"MainBlvd3\">west</a>. Upscale shops selling jewelry and clothing lined the sides of the street.<>');}};
o['MainBlvd4']._exits['MainBlvd5'] = function(_arg) {return true;};
o['MainBlvd4']._exits['MainBlvd3'] = function(_arg) {return true;};
o['Viaduct4']._description = function() {{_out('<b>Viaduct Road</b><>\nViaduct Road ran <a go=\"Viaduct5\">east</a>-<a go=\"Viaduct3\">west</a>, parallel to the Main Boulevard. <>');}};
o['Viaduct4']._exits['Viaduct5'] = function(_arg) {return true;};
o['Viaduct4']._exits['Viaduct3'] = function(_arg) {return true;};
o['MainBlvd5']._description = function() {{_out('<b>Main Boulevard</b><>\nMain Boulevard was a wide four lane road running east-<a go=\"MainBlvd4\">west</a>. The <a go=\"Lobby\">Antico hotel</a> sat here with its old but distinguished grey facade. A small laneway led south to <a go=\"Viaduct5\">Viaduct Road</a> and then out to the back of the hotel. An old <a go=\"ClockTower\">clock tower</a> rose up beside the laneway.<>');}};
o['MainBlvd5']._exits['MainBlvd4'] = function(_arg) {return true;};
o['MainBlvd5']._exits['Lobby'] = function(_arg) {return true;};
o['MainBlvd5']._exits['Viaduct5'] = function(_arg) {return true;};
o['MainBlvd5']._exits['ClockTower'] = function(_arg) {return true;};
o['Viaduct5']._description = function() {{_out('<b>Viaduct Road</b><>\nViaduct Road extended <a go=\"Viaduct4\">west</a>, parallel to the Main Boulevard. A narrow laneway led from the <a go=\"MainBlvd5\">Main Boulevard</a> in the north around to the <a go=\"LoadingDock\">back of the Antico hotel</a>. <>');}};
o['Viaduct5']._exits['LoadingDock'] = function(_arg) {return true;};
o['Viaduct5']._exits['Viaduct4'] = function(_arg) {return true;};
o['Viaduct5']._exits['MainBlvd5'] = function(_arg) {return true;};
o['ClockTower']._description = function() {{_out('<b>Clock Tower</b><>\nAlthough the clock tower once offered a pleasant view over the city, it is now dwarfed by the surrounding buildings. From the top of the clock tower, it is only possible to see the adjacent sections of <a go=\"MainBlvd5\">Main Boulevard</a> and Viaduct Road.<>');}};
o['ClockTower']._exits['MainBlvd5'] = function(_arg) {return true;};
o['Lobby']._description = function() {{_out('<b>Hotel Lobby</b><>\nThe hotel lobby was quiet with only a few guests milling about. The receptionist at the front desk chatted with the concierge to fill time. The front doors led outside to <a go=\"MainBlvd5\">Main Boulevard</a>. Cramped and creaky <a go=\"Hallway\">elevators</a> stood ready to lead people upstairs. And a small <a go=\"BackHallway\">hallway</a> led deeper into the hotel.<>');}};
o['Lobby']._exits['MainBlvd5'] = function(_arg) {return true;};
o['Lobby']._exits['Hallway'] = function(_arg) {return true;};
o['Lobby']._exits['BackHallway'] = function(_arg) {return true;};
o['BackHallway']._description = function() {{_out('<b>Back Hallway</b><>\nThe hallway connected the <a go=\"Lobby\">hotel lobby</a> to the <a go=\"Backroom\">back of the hotel</a>. There was a non-descript door labeled <a go=\"LaundryRoom\">laundry room</a> here.<>');}};
o['BackHallway']._exits['Lobby'] = function(_arg) {return true;};
o['BackHallway']._exits['Backroom'] = function(_arg) {return true;};
o['BackHallway']._exits['LaundryRoom'] = function(_arg) {return true;};
o['Backroom']._description = function() {{_out('<b>Back room</b><>\nThe back room of the hotel was used as a general storage area. Boxes of toiletries and towels were mixed together with bags of garbage to be discarded. A <a go=\"BackHallway\">hallway</a> connected the backroom to the lobby. Emergency <a go=\"Stairwell\">stairs</a> led upstairs to the hotel rooms. A large door exited to the <a go=\"LoadingDock\">loading dock</a>.<>');}};
o['Backroom']._exits['LoadingDock'] = function(_arg) {return true;};
o['Backroom']._exits['Stairwell'] = function(_arg) {return true;};
o['Backroom']._exits['BackHallway'] = function(_arg) {return true;};
o['LaundryRoom']._description = function() {{_out('<b>Laundry Room</b><>\nThe laundry room contained a bank of washers and dryers for cleaning linen and uniforms. All the washers were full. There was a big bin with uniforms waiting to be cleaned. The laundry room exited to a <a go=\"BackHallway\">hallway</a>.<>\n');}};
o['LaundryRoom']._exits['BackHallway'] = function(_arg) {return true;};
o['Stairwell']._description = function() {{_out('<b>Stairwell</b><>\nThe emergency stairwell led from the <a go=\"Backroom\">ground floor</a> to the <a go=\"Hallway\">upper floors</a> of the hotel.<>\n');}};
o['Stairwell']._exits['Backroom'] = function(_arg) {return true;};
o['Stairwell']._exits['Hallway'] = function(_arg) {return true;};
o['Hallway']._description = function() {{_out('<b>Fifth Floor Hallway</b><>\nThe hallway was long and straight with hotel rooms along each side. Hotel <a go=\"HotelRoom\">room 503</a>, where Dr. Galland was being held, sat in the middle of the hallway. <a go=\"Lobby\">Elevators</a> stood at the end of the hallway. There was also a set of emergency <a go=\"Stairwell\">stairs</a> leading down to the ground floor.<>');}};
o['Hallway']._exits['Lobby'] = function(_arg) {return true;};
o['Hallway']._exits['Stairwell'] = function(_arg) {return true;};
o['Hallway']._exits['HotelRoom'] = function(_arg) {return true;};
o['HotelRoom']._description = function() {{_out('<b>Hotel room 503</b><>\nRoom 503 was a spacious suite filled with luxurious antique furniture. A door led out to <a go=\"Hallway\">hallway</a>.<>\n');}};
o['HotelRoom']._exits['Hallway'] = function(_arg) {return true;};
o['LoadingDock']._description = function() {{_out('<b>Loading dock</b><>\nThe loading dock of the hotel had a wide <a go=\"Backroom\">metal door</a> where trucks could unload their goods here. A large garbage bin sat near the door. Trucks could drive down the laneway from <a go=\"Viaduct5\">Viaduct Road</a> to the loading docks without inconveniencing the guests at the front of the hotel.<>');}};
o['LoadingDock']._exits['Backroom'] = function(_arg) {return true;};
o['LoadingDock']._exits['Viaduct5'] = function(_arg) {return true;};
o['Characters']._description = function() {{_out('');}};
o['Characters'].addChild(o['alpha']);
o['alpha']._description = function() {{_out('');}};
o['alpha']._actions['set'] = { name : function() {{_out('set');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = true;
{_out('Ok.<>');}}};
o['alpha']._actions['unset'] = { name : function() {{_out('unset');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = false;
{_out('Ok.<>');}}};
o['alpha'].useElevator = false;
o['alpha'].useStairsEarly = false;
o['alpha'].wearUniform = false;
o['alpha'].stairAmbush = false;
o['alpha'].splitUpWithCharlie = false;
o['alpha'].attackBeforeTransfer = false;
o['alpha'].addChild(o['alphaController']);
(function(_oldOut) {
/*
BIG TODO LIST:
*- convoy should be driving fast if there is an explosion
*- alternate escape route
*- split up at car
*- bravo follows alpha
*- battle with convoy
*- fill-in the battle descriptions
*- guards see alpha getting in car even if spotter is shot
*- can put weapons cache in two locations or nowhere.
*- bravo in clock tower should do something
*- bombs
*- charlie doesn't go to garage first to get car
*- convoy stops when it encounters the spotter
*- remove failure objective (too gruesome)
*- do the hand-off
*- walkthrough
*- different levels of success
*- at garage with bravo (fix description)
- timing of bomb distraction in normal battle flow
- fill in other times
- remove the "Agent" part of Alpha, Bravo, and Charlie
*/
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($alpha.hasAncestor(_Player._parent))
_oldOut(str);
}
o['alphaController'].state = 1;
o['alphaController'].reset = function(){this.state = 1;};
o['alphaController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['alphaController']._fa = function(state){
switch(state) {
case 1:
{
$alpha.moveTo($Safehouse);
$alpha.endIntroConversation = false;
$alpha.elevatorAttack = false;
$alpha.grenadeInHallway = false;
$alpha.isWearingUniform = false;
$alpha.charlieToLoadingDock = false;
$alpha.charlieSaves = false;
$alpha.isInCar = false;
$alpha.splitWithCharlie = false;
$alpha.isWalkingDownMainWithGalland = false;
$alpha.hasHeavyWeapons = false;
return 2;
}
case 2:
{
{_out('\nAgents Alpha and Bravo were reviewing their equipment when Agent Charlie entered.<>\nAGENT ALPHA: Is the parking garage ready?<>\nAGENT CHARLIE: Yes. All the cameras have been disabled, and all the entrances and exits have been booby-trapped. The primary getaway car is fuelled and ready to go. As long as we can get Dr. Galland to the parking garage, we can lose any pursuers and escape safely.<>\n');}
return 3;
}
case 3:
{
{_out('\nAGENT ALPHA: So I guess we\'re ready then.<>\nAGENT BRAVO: Yes<>\nAGENT CHARLIE: Yes, but it looks risky. We really should have twice as many operatives on this mission. Too many things can go wrong.<>\nAGENT ALPHA: We only determined the position of Dr. Galland yesterday. With the Dawn Militia moving her out of the country today, we\'re all that\'s available.<>\n');}
return 4;
}
case 4:
{
{_out('\nAgent Charlie isn\'t pleased with the answer.<>\nAGENT ALPHA: The intelligence information I have is good. This plan is solid.<>\nAGENT BRAVO: Well, what choice do we have? Let\'s do this.<>\nAgent Charlie reluctantly agreed.<>\n');}
return 5;
}
case 5:
{
{_out('\nAGENT ALPHA: Ok, let\'s synchronize our watches. The Dawn Militia is expected to send in a convoy to pick up Dr. Galland at exactly 32 ticks. You two go ahead and position yourselves. I\'ll clean-up here and then join you.<>\n');}
$alpha.endIntroConversation = true;
return 6;
}
case 6:
{
{_out('\nAgent Alpha grimaced as he wiped the fingerprints from the room. Agent Charlie was right. This mission was hastily planned and undermanned. Their execution needed to be perfect if they all wanted to return home alive. Agent Alpha shook away his thoughts. He had to stay focused. The mission was the only concern.<> \n');}
return 7;
}
case 7:
{
{_out('\nAgent Alpha scanned the apartment for potential sources of DNA evidence. He carefully decontaminated the obvious places while leaving false DNA traces elsewhere as decoys.<>\n');}
return 8;
}
case 8:
{
{_out('\nAgent Alpha reviewed his mission reports one last time before deleting them \nfrom his cellphone. It was time to go.<>');}
return 9;
}
case 9:
{
{_out('Agent Alpha left the apartment.<>\n');}
$alpha.moveTo($MainBlvd1);
{_out('Agent Alpha exited the apartments onto the boulevard.<>');}
return 10;
}
case 10:
{
{_out('Agent Alpha walked east down Main Boulevard.<>');}
$alpha.moveTo($MainBlvd2);
{_out('Agent Alpha walked in from the west.<>');}
return 11;
}
case 11:
{
{_out('Agent Alpha walked east down Main Boulevard.<>');}
$alpha.moveTo($MainBlvd3);
{_out('Agent Alpha walked in from the west.<>');}
return 12;
}
case 12:
{
{_out('Agent Alpha walked east down Main Boulevard.<>');}
$alpha.moveTo($MainBlvd4);
{_out('Agent Alpha walked in from the west.<>');}
return 13;
}
case 13:
{
{_out('Agent Alpha walked east down Main Boulevard.<>');}
$alpha.moveTo($MainBlvd5);
{_out('Agent Alpha walked in from the west.<>');}
return 14;
}
case 14:
{
{_out('Agent Alpha entered the hotel.<>');}
$alpha.moveTo($Lobby);
{_out('Agent Alpha entered the lobby.<>');}
return 15;
}
case 15:
{
{_out('While scanning the people in the room, Agent Alpha pulled out his cellphone \nand pretended to phone up to someone in the hotel.<>\n\n<a do=\"alpha?set#useElevator-');
_out(time);
_out('\">Take the elevator up to the fifth floor</a><>\n<a do=\"alpha?unset#useElevator-');
_out(time);
_out('\">Find another way up</a><>\n');}
return 16;
}
case 16:
{
if ($alpha.useElevator)
return -17;
else
return -20;
//*****************************************************
return 17;
}
case 17:
{
{_out('Agent Alpha entered the elevator and rode it to the fifth floor.<>');}
$alpha.moveTo($Hallway);
return 18;
}
case 18:
{
{_out('\nThe elevator bell rung. The guards perked up.<> \nGUARD: John, you check it out. I\'ll stay here.<>\nJohn, the guard, pulled out his gun and stood in front of the elevator doors. \nAs the doors slid open, the elevator seemed empty.<> \nSuddenly, a hand reached out from the side of the elevator, grabbed his arm, \nand yanked him in. He fired his gun, but his shots hit the back of the elevator. \nHe saw a knife coming towards his face. He screamed but it was too late.<> \n');}
$alpha.elevatorAttack = true;
return 19;
}
case 19:
{
{_out('\nThe other guard heard the commotion and trained his gun on the elevator.<> \nHolding John\'s body as cover, Agent Alpha charged out of the elevator, firing his pistol wildly. The guard shot back again and again. Bullets whizzed through the hallway. As quickly as it started, it was all over. With their ammo clips emptied, the two combatants stood facing each other.<> \nAgent Alpha dropped John\'s body and fell to the ground, dead. The guard lowered his gun and then realized that there was blood gushing from his neck and arms. \"I got him for you, John\" thought the guard, as he too collapsed.<>\n');}
//TODO: Guards inside the hotel room should react somehow
$timeline.missionFailed();
//*****************************************************
return 20;
}
case 20:
{
{_out('\nAgent Alpha went down the hallway looking for other means up to the fifth floor.<>\n');}
$alpha.moveTo($BackHallway);
{_out('\nAgent Alpha entered from the lobby.<>\n');}
return 21;
}
case 21:
{
{_out('Agent Alpha continued walking down the hallway to the back of the hotel.<>\n');}
$alpha.moveTo($Backroom);
{_out('Agent Alpha entered from the hallway.<>');}
return 22;
}
case 22:
{
{_out('\nAgent Alpha noticed the emergency stairs.<> \n<a do=\"alpha?set#useStairsEarly-');
_out(time);
_out('\">Climb the stairs to the fifth floor</a><>\n<a do=\"alpha?unset#useStairsEarly-');
_out(time);
_out('\">Not now</a><>\n');}
return 23;
}
case 23:
{
if ($alpha.useStairsEarly)
return -24;
else
return -33;
//*****************************************************
return 24;
}
case 24:
{
//TODO - Probably wouldn't use stun grenade in hallway since he already has surprise<>
//TODO - guards inside room would need heavy weapons to shoot through a door, and the bullets would penetrate the walls as well probably unless they were cement<>
//TODO - may not make sense to "roll" into the room during a breach?<>
{_out('Agent Alpha entered the stairwell.<>');}
$alpha.moveTo($Stairwell);
{_out('Agent Alpha entered from the stairwell at the ground floor.<>');}
return 25;
}
case 25:
{
{_out('\nAgent Alpha quietly climbed the stairs. At the fifth floor he stood by the door to the hallway and listened at the door.<>\n');}
return 26;
}
case 26:
{
{_out('\nAgent Alpha pulled a stun grenade out from inside his jacket and rolled it into the hallway.<>\n');}
$alpha.grenadeInHallway = true;
return 27;
}
case 27:
{
{_out('\nAgent Alpha waited for the blast and then leapt into the hallway, guns raised.<>\n');}
$alpha.moveTo($Hallway);
{_out('\nAgent Alpha leapt into the room, shooting his pistols. Stunned by the blast, the two guards collapsed without returning fire.<>\n');}
return 28;
}
case 28:
{
{_out('\nAgent Alpha searched the guards but found nothing. As he stepped toward door 503, \ngunshots were fired through the hotel room door, hitting the wall on the other \nside of the hallway.<> \n');}
return 29;
}
case 29:
{
{_out('\nAgent Alpha knelt down beside the door and attached a small explosive charge to \nthe lock. He stepped aside and let it blow.<>\n');}
return 30;
}
case 30:
{
{_out('\nAgent Alpha lay down on the ground. As he nudged the door open and rolled a \nstun grenade into the hotel room, gunshots whizzed by above his head. Bang! \nThe stun grenade went off.<>\n');}
return 31;
}
case 31:
{
{_out('\nAgent Alpha leapt into the room and started firing. <>\n');}
$alpha.moveTo($HotelRoom);
{_out('\nWith the guards blinded, Agent Alpha leapt into the room with his gun firing. He quickly dispatched a guard hiding behind a bed. He turned his head surveying the room. Dr Galland was crouched in the corner, unhurt. Then he saw the guard standing behind the door.<>\n');}
return 32;
}
case 32:
{
{_out('\nAgent Alpha dove to the ground and twisted, trying to protect his body from\nthe guard behind the door, \nbut the guard was already firing, hitting him several times in the chest. \nAgent Alpha hit the ground, dead.<> \n');}
$timeline.missionFailed();
//*****************************************************
return 33;
}
case 33:
{
{_out(' Agent Alpha returned to the hallway. <>');}
$alpha.moveTo($BackHallway);
{_out('Agent Alpha entered from the back of the hotel.<>');}
return 34;
}
case 34:
{
{_out(' Agent Alpha noticed the laundry room door. He went inside.<>');}
$alpha.moveTo($LaundryRoom);
{_out(' Agent Alpha entered the laundry room.<>');}
return 35;
}
case 35:
{
{_out('\nAgent Alpha rummaged through the bins of dirty laundry and found a hotel \nuniform that fit him.<>\n<a do=\"alpha?set#wearUniform-');
_out(time);
_out('\">Wear the uniform</a><>\n<a do=\"alpha?unset#wearUniform-');
_out(time);
_out('\">Don\'t wear the uniform</a><>\n');}
return 36;
}
case 36:
{
if ($alpha.wearUniform)
return -40;
else
return -37;
//*****************************************************
return 37;
}
case 37:
{
{_out('\nAgent Alpha looked over the uniform but decided against it. Time was short and \nit wouldn\'t help much. He returned to the hallway. <> \n');}
$alpha.moveTo($BackHallway);
{_out('Agent Alpha entered from the laundry room.<>');}
return 38;
}
case 38:
{
{_out('\nAgent Alpha considered the time. It was almost time for the transfer. There wouldn\'t be enough time to breach the hotel room.<>\n<a do=\"alpha?set#stairAmbush-');
_out(time);
_out('\">Wait in the stairs until the transfer takes place</a><>\n<a do=\"alpha?unset#stairAmbush-');
_out(time);
_out('\">Wait here until the transfer takes place</a><>\n');}
return 39;
}
case 39:
{
if ($alpha.stairAmbush)
return -43;
else
return -54;
//*****************************************************
return 40;
}
case 40:
{
$alpha.isWearingUniform = true;
{_out('Agent Alpha put on the uniform.<>');}
//TODO Fill this in
return 41;
}
case 41:
{
{_out(' Agent Alpha left the laundry room.');}
$alpha.moveTo($BackHallway);
{_out('Agent Alpha entered from the laundry room.<>');}
return 42;
}
case 42:
{
return -54;
//*****************************************************
return 43;
}
case 43:
{
{_out('Agent Alpha went to the back of the hotel.<>');}
$alpha.moveTo($Backroom);
{_out('Agent Alpha entered from the hallway.<>');}
return 44;
}
case 44:
{
{_out('\nAgent Alpha entered the stairwell.<>\n');}
$alpha.moveTo($Stairwell);
{_out('\nAgent Alpha entered from the ground floor hallway.<>\n');}
return 45;
}
case 45:
{
{_out('\nAgent Alpha climbed the stairs to the fifth floor. The Dawn Militia \nwould likely be coming soon. He needed some place to hide. He climbed \nup to the sixth floor and pressed his back against the wall so he \ncouldn\'t be seen by anyone looking upwards.<>\n');}
return 46;
}
case 46:
{
if ($hallwayGuards.willEnterStairs)
return -47;
{_out('Agent Alpha hid on the sixth floor with his back pressed against\na wall.<>');}
return 46;
return 47;
}
case 47:
{
{_out('\nThe fifth floor door to the stairwell opened. Two guards entered and surveyed the surroundings.<> \nGUARD: It looks good. Let\'s go.<>\nAgent Alpha stayed hidden on the sixth floor.<>\n');}
return 48;
}
case 48:
{
{_out('\nTwo more guards entered stairwell, pushing a gagged Dr. Galland in front of them. They proceeded down the stairwell, with two guards sweeping the front, Dr. Galland in the middle, and another two guards securing the rear.<>\nAgent Alpha leaned over the edge and looked down the stairwell. It was time.<>\n');}
return 49;
}
case 49:
{
{_out('\nAs the guards escorted Dr. Galland down the stairwell, Agent Alpha removed a flash-bang from his jacket and dropped it down the middle of the stairwell so that it landed in front of the guards. It clanged on the stairs causing the guards to turn and look.<>\n');}
$bomb.triggerAmbushDetonation = true;
return 50;
}
case 50:
{
{_out('\nThe stun grenade exploded with a burst of light, leaving the guards disoriented. Agent Alpha\'s ears were ringing from the blast, but he didn\'t have time to recover. He needed to act now. Pulling out his gun, he sprinted down the stairs. Past the fifth floor and fourth floor, he ran. When he turned the corner for the third floor, he saw them. The guards were still blinded by the stun grenade. He fired as he ran forward, killing the four guards while leaving Dr. Galland unharmed.<>\n');}
$spotter.isTriggered = true;
return 51;
}
case 51:
{
if ($charlie.parkedAt == 5)
{
{_out('Agent Alpha used his mic to radio Charlie.<>\nAGENT ALPHA: Charlie, we\'re heading to the exit.<>');}
$alpha.charlieToLoadingDock = true;
}
{_out('\nAgent Alpha removed the gag from Dr. Galland\'s. She was still \ndisoriented from the blast, but they had to move. Grabbing Dr. \nGalland\'s arm, Agent Alpha led her down the stairwell. He \npushed her into the first floor hallway and then followed.<>\n');}
$alpha.moveTo($Backroom);
{_out('\nDr. Galland and Agent Alpha exited the stairwell into the hallway.<>\n');}
return 52;
}
case 52:
{
{_out('\nAgent Alpha could see the guard coming towards them from the lobby.<> \nAGENT ALPHA: Let\'s go!<>\nHe shuffled her off out the back door.<>\n');}
$alpha.moveTo($LoadingDock);
{_out('\nAgent Alpha and Dr. Galland burst out of the back door to the back loading dock.<>\n');}
return 53;
}
case 53:
{
if ($charlie.hasAncestor($LoadingDock))
return -66;
else
return -76;
//*****************************************************
return 54;
}
case 54:
{
if ($roomGuards.hasAncestor($LoadingDock))
return -55;
{_out('Agent Alpha waited here, out of sight.<>');}
return 54;
return 55;
}
case 55:
{
{_out('Agent Alpha noticed some movement coming from the back of the hotel.<>\n<a do=\"alpha?set#attackBeforeTransfer-');
_out(time);
_out('\">Attack now</a><>\n<a do=\"alpha?unset#attackBeforeTransfer-');
_out(time);
_out('\">Let the transfer take place</a><>\n');}
return 56;
}
case 56:
{
if (!$alpha.attackBeforeTransfer)
return -57;
$hallwayGuards.alphaAttacking = true;
{_out(' Agent Alpha went to the back of the hotel.<>');}
$alpha.moveTo($Backroom);
{_out('\nAgent Alpha entered the backroom and saw a guard standing there.<> \n');}
if ($alpha.isWearingUniform)
return 58;
else
return 62;
//*****************************************************
return 57;
}
case 57:
{
{_out('Agent Alpha waited here, out of sight.<>');}
return 57;
//*****************************************************
return 58;
}
case 58:
{
{_out('\nGUARD: I\'m sorry. We\'re doing something back here. Can you come back later?<>\nAGENT ALPHA: I just have some garbage I need to throw out.<>\nAgent Alpha continued to approach the guard.<>\nGUARD: I can\'t let you through here.<>\nAt that point, Agent Alpha had already reached the guard. A knife appeared in the operative\'s hand, and he quickly jabbed his hand upwards into the guard\'s neck.<>\n');}
return 59;
}
case 59:
{
$spotter.isTriggered = true;
{_out('\nAs the guard collapsed, Agent Alpha continued walking \ntowards the back door. He pushed the metal door open slightly, so \nthat he could see outside while still having some cover. He saw one \nguard standing in front of a garbage bin. Agent Alpha quickly \ncharged out, dispatched the guard, and took cover behind the \ngarbage bin.<>\n');}
$alpha.moveTo($LoadingDock);
{_out('\nThe door to the hotel opened slightly. Suddenly, Agent Alpha charged out and\nshot one of the guards, who was standing in front of the garbage bin. \nAgent Alpha took cover behind the bin. The other guards were \nsurprised and quickly scrambled to take cover.<>\n');}
$roomGuards.alphaAttacking = true;
return 60;
}
case 60:
{
{_out('\nAgent Alpha hid behind the garbage bin as he took fire from the guards. \nBullets slammed against the bin and the wall. Agent Alpha leaned out to one \nside of the bin to draw their fire, then quickly ran to the other side of \nthe bin and leaned out the other side. One guard held Dr. Galland and \nwas taking cover behind a corner. The other guard was hiding behind a \nparked car but not very well. Agent Alpha snapped off a shot and was able\nto take down the guard behind the car.<> \n');}
//Agent Alpha shot out the feet of the guard behind the car,
//causing the guard to collapse to the ground,
//and then dipped back behind the bin.<>
$alpha.charlieSaves = true;
return 61;
}
case 61:
{
if ($charlie.hasAncestor($LoadingDock))
{
{_out('\nSuddenly, Agent Alpha heard some gunshots and some yelling \nby the guards.<> \nAGENT CHARLIE: It\'s all clear!<>\nAgent Alpha emerged from behind the garbage bin. Agent Charlie had \ncome up from Viaduct Road, surprised the last guard, shooting him \nfrom behind. Dr. Galland was unharmed.<>\n\nAgent Charlie had a car ready to go. Agent Alpha and Dr. Galland\njumped in.<>\nAGENT CHARLIE: Where are we going?<>\n<a do=\"alpha?set#splitUpWithCharlie-');
_out(time);
_out('\">Agent Charlie drives down Viaduct Road as a diversion</a><>\n<a do=\"alpha?unset#splitUpWithCharlie-');
_out(time);
_out('\">They drive together to the garage</a><>\n');}
$alpha.isInCar = true;
return 67;
}
else
{
{_out('\nAgent Alpha stuck his gun out from the side of the bin, firing off \na few shots blindly. He then surged forward and ran out, firing \nanother few shots of suppressive fire. The guard stayed hidden \nbehind the corner with Dr. Galland.<>\nAgent Alpha reached the corner and pressed his back against the \nwall. The guard was just around the other side. Agent Alpha could \nsee the guard\'s gun point out from around the corner. He quickly \ngrabbed the guard\'s gun, put his own gun around the corner, and \nfired off a shot. The guard groaned and then collapsed on the \nground.<>\n');}
return 76;
}
//*****************************************************
return 62;
}
case 62:
{
{_out('\nGUARD: Stand back, sir. This route is blocked.<>\nAgent Alpha kept walking forward towards the guard.<>\nThe guard started pulling a gun out, but Agent Alpha quickly closed the distance and was able to grab the gun before it was pointed at him. Agent Alpha deflected the guard\'s arm to point towards the wall just as the guard pulled the trigger. In a fluid motion, he then swung up his other hand and stabbed the guard in the neck.<>\n');}
$spotter.isTriggered = true;
return 63;
}
case 63:
{
{_out('\nAgent Alpha leaned out the back door, using the metal door as cover, and saw a clear path to a garbage bin. He quickly charged out and took cover behind it.<>\n');}
$alpha.moveTo($LoadingDock);
{_out('\nAgent Alpha leaned out the back door, using the metal door as cover, and saw a clear path to a garbage bin. He quickly charged out and took cover behind it.<> \nThe guards fumbled to get their guns ready in time, and their shots harmlessly hit the door and wall.<>\n');}
$roomGuards.alphaAttacking = true;
return 64;
}
case 64:
{
{_out('\nAgent Alpha hid behind the garbage bin as he took fire from the guards. Bullets slammed against the bin and the wall. One guard held Dr. Galland and was taking cover behind a corner. The other two guards were taking cover behind a parked car. Agent Alpha leaned out to one side of the bin to draw their fire, then quickly ran to the other side of the bin and fired out from the other side.<>\nHe could see two of the guards running toward him. He fired and killed one of the guards, but the other one was able to take cover on the other side of the bin.<>\n');}
$alpha.charlieSaves = true;
return 65;
}
case 65:
{
if ($charlie.hasAncestor($LoadingDock))
{
{_out('\nAgent Alpha was trapped. No one was shooting, but he knew the \nguards were trying to outflank him.<> \nSuddenly, Agent Alpha heard some gunshots and some yelling \nby the guards.<> \nAGENT CHARLIE: It\'s all clear!<>\nAgent Alpha leaned out from behind the garbage bin. Agent Charlie \nhad come up from Viaduct Road, surprised the guards from behind, \nand shot them all. Dr. Galland was unharmed.<>\nAgent Charlie had a car ready to go. Agent Alpha and Dr. Galland\njumped in.<>\nAGENT CHARLIE: Where are we going?<>\n<a do=\"alpha?set#splitUpWithCharlie-');
_out(time);
_out('\">Agent Charlie drives down Viaduct Road as a diversion</a><>\n<a do=\"alpha?unset#splitUpWithCharlie-');
_out(time);
_out('\">They drive together to the garage</a><>\n');}
$alpha.isInCar = true;
return 67;
}
else
{
{_out('\nAgent Alpha was trapped. No one was shooting, but he knew the \nguards were trying to outflank him. He burst out of cover and ran \ntowards the corner, shooting at the guard. The \nother guard looped around the bin and started firing at him.<> \nAgent Alpha could feel the bullets pierce his body, but he had \nto keep going. He managed a few more paces before succumbing \nto his wounds and \nfalling to the pavement.<>\n');}
$timeline.missionFailed();
}
//*****************************************************
return 66;
}
case 66:
{
// TODO: Fill this in properly
//{_out('\n//Someone waiting or not<>\n//Agent Charlie was waiting at the loading dock with the car.<>\n//Agent Alpha removed the gag from Dr. Galland. <>\n//Take the car<>\n//Walk to the parking garage<>\n//');}
{_out(' Agent Charlie had a car ready to go. Agent Alpha and Dr. Galland\njumped in.<>\nAGENT CHARLIE: Where are we going?<>\n<a do=\"alpha?set#splitUpWithCharlie-');
_out(time);
_out('\">Agent Charlie drives down Viaduct Road as a diversion</a><>\n<a do=\"alpha?unset#splitUpWithCharlie-');
_out(time);
_out('\">They drive together to the garage</a><>\n');}
$alpha.isInCar = true;
return 67;
}
case 67:
{
{_out('Agent Charlie sped away with Agent Alpha and Dr. Galland down \nthe laneway to Viaduct Road.<>');}
$alpha.moveTo($Viaduct5);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom behind the hotel.<>');}
return 68;
}
case 68:
{
if ($alpha.splitUpWithCharlie)
{
{_out('AGENT ALPHA: We\'ll get out here. <>\nAgent Charlie slammed on the brakes. Agent Alpha and Dr. Galland\nleapt out of the car and ran down the laneway towards Main Boulevard.\nAgent Charlie continued driving off to the west down Viaduct Road.<>');}
$alpha.isInCar = false;
$alpha.splitWithCharlie = true;
$alpha.moveTo($MainBlvd5);
{_out('Agent Alpha ran in down the laneway from Viaduct Road with \nDr. Galland.<>');}
$alpha.isWalkingDownMainWithGalland = true;
return 84;
}
else
{
{_out('Agent Charlie drove Agent Alpha and Dr. Galland off to the west \ndown Viaduct Road.<>');}
$alpha.moveTo($Viaduct4);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom the east.<>');}
}
return 69;
}
case 69:
{
{_out('A car containing Agent Alpha, Agent Charlie, and Dr. Galland drove\noff to the west down Viaduct Road.<>');}
$alpha.moveTo($Viaduct3);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom the east.<>');}
return 70;
}
case 70:
{
if ($outdoorGuards.isStoppingCar)
return -75;
{_out('Agent Charlie drove Agent Alpha and Dr. Galland off to the west \ndown Viaduct Road.<>');}
$alpha.moveTo($Viaduct2);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom the east.<>');}
return 71;
}
case 71:
{
{_out('A car containing Agent Alpha, Agent Charlie, and Dr. Galland drove\noff to the west down Viaduct Road.<>');}
$alpha.moveTo($Viaduct1);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom the east.<>');}
return 72;
}
case 72:
{
if ($outdoorGuards.isStoppingCar)
return -75;
{_out('Agent Charlie drove Agent Alpha and Dr. Galland into the parking\ngarage.<>');}
$alpha.moveTo($Garage);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom Viaduct Road.<>');}
return 73;
}
case 73:
{
{_out('Agent Charlie parked the car near a stairwell. Agent Alpha, Agent \nCharlie, and Dr. Galland quickly jumped out of the car and ran down\nthe stairwell to a lower floor. There, they leapt into a different\ncar and sped off out of the parking garage and onto the highway.<>');}
$timeline.missionSucceeded();
return 74;
}
case 74:
{
//*****************************************************
return 75;
}
case 75:
{
// outdoorGuards handle this interaction
return 75;
//*****************************************************
return 76;
}
case 76:
{
// TODO: Fill this in properly
{_out('\nThey had to keep moving. Agent Alpha pulled on Dr Galland\'s arm, \nforcing her to follow him. They walked to Viaduct Road.<>');}
$alpha.moveTo($Viaduct5);
{_out('\nAgent Alpha and Dr. Galland walked down the laneway \nfrom behind the hotel to Viaduct Road.<>\n');}
if ($charlie.hasAncestor($Viaduct3))
return 77;
else
return 83;
//*****************************************************
return 77;
}
case 77:
{
{_out('Agent Alpha hesitated as he and Dr. Galland emerged onto Viaduct\nRoad. The road was narrow and deserted affording little cover if the\nenemy came upon them. But with Agent Charlie just down the street,\nit was worth the risk.<>\nAgent Alpha continued walking west down Viaduct Road with Dr.\nGalland.<>');}
$alpha.moveTo($Viaduct4);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 78;
}
case 78:
{
if ($charlie.weaponsAt == 2 && !$alpha.hasHeavyWeapons)
{
{_out('Agent Alpha stopped and stepped into an alleyway. A dufflebag\n was lying on the ground. Opening it up, he found a military rifle, \n which he slung over his shoulder.<>');}
$alpha.hasHeavyWeapons = true;
}
else
return -79;
return 79;
}
case 79:
{
{_out('Agent Alpha continued walking west down Viaduct Road with Dr.\nGalland.<>');}
$alpha.moveTo($Viaduct3);
if ($charlie.hasAncestor($Viaduct3))
{
{_out('Agent Alpha and Dr. Galland walked in from the east. Agent\n Charlie was waiting in the car for them here.<>');}
return 91;
}
else
{
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
}
return 80;
}
case 80:
{
if ($outdoorGuards.isAlphaBattle)
return -99;
{_out('Agent Alpha continued walking west down Viaduct Road with Dr.\nGalland.<>');}
$alpha.moveTo($Viaduct2);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 81;
}
case 81:
{
{_out('Agent Alpha continued walking west down Viaduct Road with Dr.\nGalland.<>');}
$alpha.moveTo($Viaduct1);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 82;
}
case 82:
{
if ($outdoorGuards.isAlphaBattle)
return -99;
{_out('Agent Alpha walked into the parking garage with Dr. Galland.<>');}
$alpha.moveTo($Garage);
if ($charlie.hasAncestor($Garage))
{
{_out('Agent Alpha and Dr. Galland walked into the parking garage from\nViaduct Road. <>');}
}
else
{
{_out('Agent Alpha and Dr. Galland walked into the parking garage from\nViaduct Road.<>');}
}
return 90;
//*****************************************************
return 83;
}
case 83:
{
{_out('AGENT ALPHA: This road is too quiet. There\'s not enough cover here.<>\nAgent Alpha diverted up the laneway towards Main Boulevard along with\nDr. Galland.<>');}
$alpha.moveTo($MainBlvd5);
{_out('Agent Alpha and Dr. Galland walked in along the laneway from Viaduct \nRoad.<>');}
$alpha.isWalkingDownMainWithGalland = true;
return 84;
}
case 84:
{
if ($convoy.isAlphaBattle)
return -100;
if ($charlie.weaponsAt == 1 && !$alpha.hasHeavyWeapons)
{
{_out('Agent Alpha stopped and looked under a car. He pulled\n out a long duffle bag. Opening it up, he found a military rifle, \n which he slung over his shoulder.<>');}
$alpha.hasHeavyWeapons = true;
}
else
return -85;
return 85;
}
case 85:
{
{_out('Agent Alpha continued walking west down Main Boulevard with Dr.\nGalland.<>');}
$alpha.moveTo($MainBlvd4);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 86;
}
case 86:
{
if ($convoy.isAlphaBattle)
return -100;
{_out('Agent Alpha continued walking west down Main Boulevard with Dr.\nGalland.<>');}
$alpha.moveTo($MainBlvd3);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 87;
}
case 87:
{
if ($convoy.isAlphaBattle)
return -100;
{_out('Agent Alpha continued walking west down Main Boulevard with Dr.\nGalland.<>');}
$alpha.moveTo($MainBlvd2);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 88;
}
case 88:
{
if ($convoy.isAlphaBattle)
return -100;
{_out('Agent Alpha continued walking west down Main Boulevard with Dr.\nGalland.<>');}
$alpha.moveTo($MainBlvd1);
{_out('Agent Alpha and Dr. Galland walked in from the east.<>');}
return 89;
}
case 89:
{
if ($convoy.isAlphaBattle)
return -100;
{_out('Agent Alpha walked into the parking garage with Dr. Galland.<>');}
$alpha.moveTo($Garage);
if ($charlie.hasAncestor($Garage))
{
{_out('Agent Alpha and Dr. Galland walked into the parking garage from\nViaduct Road. <>');}
}
else
{
{_out('Agent Alpha and Dr. Galland walked into the parking garage from\nMain Boulevard.<>');}
}
return 90;
//*****************************************************
return 90;
}
case 90:
{
if ($charlie.hasAncestor($Garage))
{
if ($bravo.hasAncestor($Garage))
{
{_out('Agent Charlie was waiting at the getaway car. Agent Alpha,\n Agent Bravo, and\n Dr. Galland jumped in, and Agent Charlie drove them out of the \n garage and onto the highway.<>');}
}
else
{
{_out('Agent Charlie was waiting at the getaway car. Agent Alpha and\n Dr. Galland jumped in, and Agent Charlie drove them out of the \n garage and onto the highway.<>');}
}
}
else
{
if ($bravo.hasAncestor($Garage))
{
{_out('Agent Alpha found the getaway car. He, Agent Bravo, and \n Dr. Galland jumped in,\n and they drove out of the garage and onto the highway.<>');}
}
else
{
{_out('Agent Alpha found the getaway car. He and Dr. Galland jumped in,\n and they drove out of the garage and onto the highway.<>');}
}
}
$timeline.missionSucceeded();
return 101;
//*****************************************************
return 91;
}
case 91:
{
if ($outdoorGuards.isStoppingCar)
return -75;
if ($outdoorGuards.isAlphaBattle)
return -99;
{_out('Agent Alpha pushed Dr. Galland into the back of the car.<>\nAGENT ALPHA: Lie on the ground. Make sure no one can see you.<>\nAgent Alpha jumped into the front passenger seat. Agent Charlie\nthen drove off to the west down Viaduct Road.<>');}
$alpha.isInCar = true;
$alpha.moveTo($Viaduct2);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom the east.<>');}
return 92;
}
case 92:
{
{_out('A car containing Agent Alpha, Agent Charlie, and Dr. Galland drove\noff to the west down Viaduct Road.<>');}
$alpha.moveTo($Viaduct1);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom the east.<>');}
return 93;
}
case 93:
{
if ($outdoorGuards.isStoppingCar)
return -75;
if ($outdoorGuards.hasAncestor($outdoorGuards._parent)
&& $alpha.isInCar
&& !$spotter.isSpottedInCar)
{
{_out('Agent Alpha was nervous and was about to reach into his coat\n to take out his pistol.<>\n AGENT CHARLIE: Stay calm. I think we\'re safe.<>\n She calmly drove through\n the crowd of guards. The guards peered into the windows of the car,\n looking for Dr. Galland but could only see the two agents.<>\n Once they cleared the crowd, Agent Charlie drove into the parking\n garage.<>');}
}
else
{
{_out('Agent Charlie drove Agent Alpha and Dr. Galland into the parking\ngarage.<>');}
}
$alpha.moveTo($Garage);
{_out(' A car with Agent Alpha, Agent Charlie, and Dr. Galland drove in\nfrom Viaduct Road.<>');}
return 94;
}
case 94:
{
{_out('Agent Charlie parked the car near a stairwell. Agent Alpha, Agent \nCharlie, and Dr. Galland quickly jumped out of the car and ran down\nthe stairwell to a lower floor. There, they leapt into a different\ncar and sped off out of the parking garage and onto the highway.<>');}
$timeline.missionSucceeded();
return 95;
}
case 95:
{
// TODO: Fill this in properly
return 101;
return 96;
}
case 96:
{
// TODO: More stuff
{_out('\nTODO - door in loading dock shouldn\'t be elevated?<>\nTODO - guard in the lobby is a local tough, hired to do menial work<>\nTODO - won\'t enter the loading dock if he hears gunshots<>\nTODO - if the Dawn Militia gets away, they\'ll shoot him?<>\n');}
return 97;
}
case 97:
{
return 98;
}
case 98:
{
{_out('\nAs the guard collapsed, Agent Alpha continued walking towards the back door. He pushed the metal door open slightly, so that he could see outside while still having some cover. He saw one guard and was able to dispatch him before the guard fired back.<> \n');}
return 101;
//*****************************************************
return 99;
}
case 99:
{
if ($outdoorGuards.isDead)
{
if ($alpha.hasAncestor($Viaduct3))
{
if ($charlie.isDead)
{
return -80;
}
else
{
return -91;
}
}
else
{
// Alpha is at Viaduct1 for some reason
// (can't actually happen)
return -82;
}
}
// Let the outdoor guards handle the battle
return 99;
//*****************************************************
return 100;
}
case 100:
{
if ($convoy.isDead)
{
if ($alpha.hasAncestor($MainBlvd5))
return -84;
else if ($alpha.hasAncestor($MainBlvd4))
return -86;
else if ($alpha.hasAncestor($MainBlvd3))
return -87;
else if ($alpha.hasAncestor($MainBlvd2))
return -88;
else if ($alpha.hasAncestor($MainBlvd1))
return -89;
}
// Let the convoy handle the battle
return 100;
return 101;
}
case 101:
{
{_out('Agent Alpha was standing here. <>');}
return 101;
//*****************************************************
return 102;
}
case 102:
{
return 102;
//TODO: links for new rooms during movement
return 103;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['bravo']);
o['bravo']._description = function() {{_out('');}};
o['bravo']._actions['set'] = { name : function() {{_out('set');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = true;
{_out('Ok.<>');}}};
o['bravo']._actions['unset'] = { name : function() {{_out('unset');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = false;
{_out('Ok.<>');}}};
o['bravo'].bomb1 = false;
o['bravo'].bomb3 = false;
o['bravo'].useClockTower = false;
o['bravo'].addChild(o['bravoController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($bravo.hasAncestor(_Player._parent))
_oldOut(str);
}
o['bravoController'].state = 1;
o['bravoController'].reset = function(){this.state = 1;};
o['bravoController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['bravoController']._fa = function(state){
switch(state) {
case 1:
{
$bravo.moveTo($Safehouse);
$bravo.isDead = false;
return 2;
}
case 2:
{
// Let Alpha run the intro conversation
if (!$alpha.endIntroConversation)
return 2;
{_out('Agent Bravo picked up his gear and left the building.<>');}
$bravo.moveTo($MainBlvd1);
{_out('Agent Bravo exited the apartments onto the boulevard.<>');}
return 3;
}
case 3:
{
{_out('Agent Bravo noticed a garbage can near the intersection.<>\n\n<a do=\"bravo?set#bomb1-');
_out(time);
_out('\">Leave the explosive package here</a><>\n<a do=\"bravo?unset#bomb1-');
_out(time);
_out('\">Keep going</a><>\n\n');}
return 4;
}
case 4:
{
if ($bravo.bomb1)
{
$bomb.moveTo($MainBlvd1);
{_out('Agent Bravo dropped a package in a garbage can near the \n intersection. He then walked off to the east down Main\n Boulevard.<> ');}
}
else
{_out('Agent Bravo walked off to the east down Main\n Boulevard.<> ');}
$bravo.moveTo($MainBlvd2);
{_out('Agent Bravo walked in from the west.<> ');}
return 5;
}
case 5:
{
{_out('Agent Bravo walked east down Main Boulevard.<>');}
$bravo.moveTo($MainBlvd3);
{_out('Agent Bravo walked in from the west.<>');}
return 6;
}
case 6:
{
if ($bomb._parent != null)
{
{_out('Agent Bravo walked east down Main Boulevard.<>');}
return -8;
}
{_out('Agent Bravo noticed a garbage can near the intersection and the\nrestaurant patio.<>\n\n<a do=\"bravo?set#bomb3-');
_out(time);
_out('\">Leave the explosive package here</a><>\n<a do=\"bravo?unset#bomb3-');
_out(time);
_out('\">Keep going</a><>\n\n');}
return 7;
}
case 7:
{
if ($bravo.bomb3)
{
{_out('Agent Bravo casually tossed the explosive package into a garbage\n can. He then walked east down Main Boulevard.<>');}
$bomb.moveTo($MainBlvd3);
}
else
{
{_out('Agent Bravo walked east down Main Boulevard.<>');}
}
return -8;
return 8;
}
case 8:
{
$bravo.moveTo($MainBlvd4);
{_out('Agent Bravo walked in from the west.<>');}
return 9;
}
case 9:
{
{_out('Agent Bravo walked east down Main Boulevard.<>');}
$bravo.moveTo($MainBlvd5);
{_out('Agent Bravo walked in from the west.<>');}
return 10;
}
case 10:
{
{_out('Agent Bravo looked at the clock tower. He considered stationing\nhimself there. <>\n\n<a do=\"bravo?set#useClockTower-');
_out(time);
_out('\">Enter the clock tower</a><>\n<a do=\"bravo?unset#useClockTower-');
_out(time);
_out('\">Stay here</a><>\n');}
return 11;
}
case 11:
{
if ($bravo.useClockTower)
return -12;
else
return -15;
//*****************************************************
return 12;
}
case 12:
{
{_out('Agent Bravo entered the clock tower.<>');}
$bravo.moveTo($ClockTower);
{_out('Agent Bravo entered the clock tower.<>');}
return 13;
}
case 13:
{
{_out('Agent Bravo snuck into an employee-only area of the tower, where he\nwas able to climb some maintenance stairs to the top of the tower.\nHe pulled out the parts to a sniper rifle and started assembling it.<>');}
//TODO: elaborate on the sniper rifle (was he always carrying it?)
return 14;
}
case 14:
{
if ($spotter.hasAncestor($Viaduct5) && !$spotter.isDead)
{
{_out('Agent Bravo noticed a guard running down Viaduct road after\n Agent Alpha. He brought the scope of the sniper rifle to his eye\n and loosed a shot. The guard fell to the ground.<>');}
$spotter.isDead = true;
}
else if ($convoy.isAlphaBattle && $convoy.hasAncestor($MainBlvd5))
{
{_out('Agent Bravo noticed a convoy of SUVs had intercepted \n Agent Alpha on Main Boulevard. He brought his sniper rifle \n up and fired at the guards there.<>');}
}
else
{
{_out('Agent Bravo waited on top of the tower.<>');}
}
return 14;
//*****************************************************
return 15;
}
case 15:
{
if ($alpha.isWalkingDownMainWithGalland
&& $alpha._parent == $bravo._parent)
{
{_out('Agent Bravo nodded to Agent Alpha, but kept his distance.<>');}
return 16;
}
else
{_out('Agent Bravo was standing here. <>');}
return 15;
//*****************************************************
return 16;
}
case 16:
{
if ($bravo.isDead)
{
return -17;
}
else if ($bravo._parent != $alpha._parent)
{
{_out('Agent Bravo followed Agent Alpha but stayed on the other side\n of the street.<>');}
$bravo.moveTo($alpha._parent);
if ($bravo._parent != $Garage)
{_out('Agent Bravo followed Agent Alpha but stayed on the other side\n of the street.<>');}
else
{_out('Agent Bravo followed Agent Alpha into the garage.<>');}
}
else if ($convoy.isAlphaBattle)
{
}
else
{
{_out('Agent Bravo stood on the other side of the street from Agent\n Alpha.<>');}
}
return 16;
return 17;
}
case 17:
{
return 17;
return 18;
}
case 18:
{
{_out('Agent Bravo was standing here. <>');}
return 18;
return 19;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['charlie']);
o['charlie']._description = function() {{_out('');}};
o['charlie']._actions['set'] = { name : function() {{_out('set');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = true;
{_out('Ok.<>');}}};
o['charlie']._actions['unset'] = { name : function() {{_out('unset');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = false;
{_out('Ok.<>');}}};
o['charlie'].parkAt3 = false;
o['charlie'].parkAt5 = false;
o['charlie'].weaponsAtMain = false;
o['charlie'].weaponsAtViaduct = false;
o['charlie'].addChild(o['charlieController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($charlie.hasAncestor(_Player._parent))
_oldOut(str);
}
o['charlieController'].state = 1;
o['charlieController'].reset = function(){this.state = 1;};
o['charlieController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['charlieController']._fa = function(state){
switch(state) {
case 1:
{
$charlie.moveTo($Safehouse);
$charlie.parkedAt = 0;
$charlie.isDead = false;
$charlie.weaponsAt = 0;
return 2;
}
case 2:
{
// Let Alpha run the intro conversation
if (!$alpha.endIntroConversation)
return 2;
{_out('Agent Charlie followed him.<>');}
$charlie.moveTo($MainBlvd1);
{_out('Agent Charlie exited the apartments onto the boulevard.<>');}
return 3;
}
case 3:
{
{_out('Agent Charlie jumped into the stolen car that she had waiting\noutside the apartment. It was a normal, inconspicuous car with its\nlicense plates changed. She drove off to the east down Main \nBoulevard.<>');}
$charlie.moveTo($MainBlvd2);
{_out('Agent Charlie drove in from the west.<>');}
return 4;
}
case 4:
{
{_out('Agent Charlie drove east down Main Boulevard.<>');}
$charlie.moveTo($MainBlvd3);
{_out('Agent Charlie drove in from the west.<>');}
return 5;
}
case 5:
{
{_out('Agent Charlie drove east down Main Boulevard.<>');}
$charlie.moveTo($MainBlvd4);
{_out('Agent Charlie drove in from the west.<>');}
return 6;
}
case 6:
{
{_out('Agent Charlie drove east down Main Boulevard.<>');}
$charlie.moveTo($MainBlvd5);
{_out('Agent Charlie drove in from the west.<>');}
return 7;
}
case 7:
{
{_out('Agent Charlie parked the car.<>\n<a do=\"charlie?set#weaponsAtMain-');
_out(time);
_out('\">Leave weapons here</a><>\n<a do=\"charlie?unset#weaponsAtMain-');
_out(time);
_out('\">Keep going</a><>\n');}
return 8;
}
case 8:
{
if ($charlie.weaponsAtMain)
{
{_out('Agent Charlie stepped out of the car, removed a duffle bag from \n the trunk and slid it under a car.<>\n She got back in\n the car and drove down the laneway to Viaduct Road.<>');}
$charlie.weaponsAt = 1;
}
else
{
{_out('Agent Charlie drove down the laneway to Viaduct Road.<>');}
}
$charlie.moveTo($Viaduct5);
{_out('Agent Charlie drove in from Main Boulevard.<>');}
return 9;
}
case 9:
{
{_out('Agent Charlie looked over this section of Viaduct Road. No traffic\nwould pass through here except for delivery trucks going to the \nAntico hotel.<>\n<a do=\"charlie?set#parkAt5-');
_out(time);
_out('\">Park the car here</a><>\n<a do=\"charlie?unset#parkAt5-');
_out(time);
_out('\">Keep going</a><>\n');}
return 10;
}
case 10:
{
if ($charlie.parkAt5)
return -20;
{_out('Agent Charlie drove west up Viaduct Road.<>');}
$charlie.moveTo($Viaduct4);
{_out('Agent Charlie drove in from the east.<>');}
return 11;
}
case 11:
{
if ($charlie.weaponsAt == 0)
{
{_out('Agent Charlie parked the car.<>\n <a do=\"charlie?set#weaponsAtViaduct-');
_out(time);
_out('\">Leave weapons here</a><>\n <a do=\"charlie?unset#weaponsAtViaduct-');
_out(time);
_out('\">Keep going</a><>\n ');}
}
else
{
{_out('Agent Charlie drove west up Viaduct Road.<>');}
$charlie.moveTo($Viaduct3);
{_out('Agent Charlie drove in from the east.<>');}
return 13;
}
return 12;
}
case 12:
{
if ($charlie.weaponsAtViaduct)
{
{_out('Agent Charlie stepped out of the car, removed a duffle bag from \n the trunk and threw it into an alleyway.<>\n She got back in\n the car and drove west up Viaduct Road.<>');}
$charlie.weaponsAt = 2;
}
else
{_out('Agent Charlie drove west up Viaduct Road.<>');}
$charlie.moveTo($Viaduct3);
{_out('Agent Charlie drove in from the east.<>');}
return 13;
}
case 13:
{
{_out('Agent Charlie looked over the intersection. The street was narrow,\nbut few people walked down here. She could probably park the car on \nthe sidewalk without arousing too much suspicion.<>\n\n<a do=\"charlie?set#parkAt3-');
_out(time);
_out('\">Park the car here</a><>\n<a do=\"charlie?unset#parkAt3-');
_out(time);
_out('\">Keep going</a><>\n');}
return 14;
}
case 14:
{
if ($charlie.parkAt3)
return -19;
{_out('Agent Charlie drove west up Viaduct Road.<>');}
$charlie.moveTo($Viaduct2);
{_out('Agent Charlie drove in from the east.<>');}
return 15;
}
case 15:
{
{_out('Agent Charlie drove west up Viaduct Road.<>');}
$charlie.moveTo($Viaduct1);
{_out('Agent Charlie drove in from the east.<>');}
return 16;
}
case 16:
{
{_out('Agent Charlie drove into the parking garage.<>');}
$charlie.moveTo($Garage);
{_out('Agent Charlie drove in from Viaduct Road.<>');}
return 17;
}
case 17:
{
$charlie.parkedAt = 0;
{_out('Agent Charlie got out of the car.<>');}
//*****************************************************
return 18;
}
case 18:
{
if ($alpha.hasAncestor($Garage))
return -24;
{_out('Agent Charlie was waiting here.<>');}
return 18;
//*****************************************************
return 19;
}
case 19:
{
$charlie.parkedAt = 3;
if ($alpha.hasAncestor($Viaduct3))
return -24;
{_out('Agent Charlie waited in a parked car here.<>');}
return 19;
//*****************************************************
return 20;
}
case 20:
{
$charlie.parkedAt = 5;
if ($alpha.charlieToLoadingDock)
return -21;
if ($alpha.charlieSaves)
return -23;
{_out('Agent Charlie waited in a parked car here.<>');}
return 20;
//*****************************************************
return 21;
}
case 21:
{
{_out('Agent Charlie received a message from her radio. Agent Alpha was\non his way. She started the car and drove to the loading dock.<>\n');}
$charlie.moveTo($LoadingDock);
{_out('Agent Charlie drove in from Viaduct Road.<>');}
return 22;
}
case 22:
{
if ($alpha.hasAncestor($LoadingDock))
return -24;
{_out('Agent Charlie waited in a parked car here.<>');}
return 22;
//*****************************************************
return 23;
}
case 23:
{
{_out('Agent Charlie noticed a commotion at the loading dock behind the\nhotel. She started up the car and drove over there.<>');}
$charlie.moveTo($LoadingDock);
return 24;
//*****************************************************
// We're in the car with Alpha. Let Alpha take over all movement now
return 24;
}
case 24:
{
if ($charlie.isDead)
return -33;
if ($alpha.splitWithCharlie)
return -25;
if ($alpha._parent != $charlie._parent && $alpha.isInCar)
$charlie.moveTo($alpha._parent);
return 24;
// TODO: here
//*****************************************************
return 25;
}
case 25:
{
$charlie.moveTo($Viaduct4);
{_out(' Agent Charlie drove in from the east.<>');}
return 26;
}
case 26:
{
{_out('Agent Charlie drove \noff to the west down Viaduct Road.<>');}
$charlie.moveTo($Viaduct3);
{_out(' Agent Charlie drove in\nfrom the east.<>');}
return 27;
}
case 27:
{
if ($outdoorGuards.isStoppingCar)
return -31;
{_out('Agent Charlie drove off to the west \ndown Viaduct Road.<>');}
$charlie.moveTo($Viaduct2);
{_out(' Agent Charlie drove in\nfrom the east.<>');}
return 28;
}
case 28:
{
{_out('Agent Charlie drove\noff to the west down Viaduct Road.<>');}
$charlie.moveTo($Viaduct1);
{_out(' Agent Charlie drove in\nfrom the east.<>');}
return 29;
}
case 29:
{
if ($outdoorGuards.isStoppingCar)
return -31;
{_out('Agent Charlie drove into the parking\ngarage.<>');}
$charlie.moveTo($Garage);
{_out(' Agent Charlie drove in\nfrom Viaduct Road.<>');}
return 30;
}
case 30:
{
{_out('Agent Charlie parked the car near a stairwell. She quickly \njumped out of the car and ran down\nthe stairwell to a lower floor. There, the getaway car was\nwaiting<>');}
return 32;
//*****************************************************
return 31;
}
case 31:
{
// outdoorGuards handle this interaction
return 31;
return 32;
}
case 32:
{
{_out('Agent Charlie was standing here. <>');}
return 32;
return 33;
}
case 33:
{
return 33;
return 34;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['spotter']);
o['spotter']._description = function() {{_out('');}};
o['spotter'].addChild(o['spotterController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($spotter.hasAncestor(_Player._parent))
_oldOut(str);
}
o['spotterController'].state = 1;
o['spotterController'].reset = function(){this.state = 1;};
o['spotterController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['spotterController']._fa = function(state){
switch(state) {
case 1:
{
$spotter.isTriggered = false;
$spotter.isSpottedInCar = false;
$spotter.isSpottedOnFoot = false;
$spotter.isDead = false;
$spotter.isWaitingAt5 = false;
$spotter.moveTo($Lobby);
$spotter.conversationOption = 0;
return 2;
}
case 2:
{
if ($spotter.isTriggered)
return -3;
{_out('A man in a dirty jacket sat on one of the lobby couches, talking\nloudly into his cellphone. <>');}
switch($spotter.conversationOption)
{
case 0:
{_out('MAN: (talking into cellphone) I don\'t like it when you talk\n like that.<>');}
break;
case 1:
{_out('MAN: (talking into cellphone) I DO have a real job.<>');}
break;
case 2:
{_out('MAN: (talking into cellphone) I\'m working right now!<>');}
break;
case 3:
{_out('MAN: (talking into cellphone) I\'m not just drinking with friends.\n I\'m at a fancy hotel right now doing a job.<>');}
break;
case 4:
{_out('MAN: (talking into cellphone) Honey, this is the real deal. \n They even gave me half of the money already.<>');}
break;
case 5:
{_out('MAN: (talking into cellphone) Um. Stop nagging me! I do what\n I want with my money. <>');}
break;
case 6:
{_out('MAN: (talking into cellphone) If I want to spend it at the track,\n that\'s my choice!<>');}
break;
case 7:
{_out('MAN: (talking into cellphone) Stop nagging me, woman! I\'ll get\n more money soon.<>');}
break;
case 8:
{_out('MAN: (talking into cellphone) Johnny said that if I do a good job\n here that he\'ll hook me up with other stuff in the future.<>');}
break;
case 9:
{_out('MAN: (talking into cellphone) Johnny is legit.<>');}
break;
case 10:
{_out('MAN: (talking into cellphone) I\'ve known him forever!<>');}
break;
case 11:
{_out('MAN: (talking into cellphone) Honey, you don\'t know what you\'re\n talking about.<>');}
break;
case 12:
{_out('MAN: (talking into cellphone) He\'s not a loan shark. He lent me\n money when times were tough.<>');}
break;
case 13:
{_out('MAN: (talking into cellphone) Well, you were fine with his\n money when I used it to pay for your dinners and movies.<>');}
break;
case 14:
{_out('MAN: (talking into cellphone) If you don\'t want to eat out\n any more then fine. We won\'t!<>');}
break;
case 15:
{_out('MAN: (talking into cellphone) I told you. Johnny is legit. This\n is a good job.<>');}
break;
case 16:
{_out('MAN: (talking into cellphone) I don\'t know. Just guard some \n woman or something.<>');}
break;
case 17:
{_out('MAN: (talking into cellphone) What training? You just stand\n around a lot<>');}
break;
case 18:
{_out('MAN: (talking into cellphone) The other guys are pretty\n professional. They\'ll take care of it.<>');}
break;
case 19:
{_out('MAN: (talking into cellphone) They lent me a piece. I\'m safe.<>');}
break;
case 20:
{_out('MAN: (talking into cellphone) Stop screaming!<>');}
break;
case 21:
{_out('MAN: (talking into cellphone) First you\'re worried about my\n safety, then you\'re worried about me having a gun to protect myself?\n Make up your mind.<>');}
break;
case 22:
{_out('MAN: (talking into cellphone) It\'s not fish. I told you that\n Johnny is legit.<>');}
break;
case 23:
{_out('MAN: (talking into cellphone) I don\'t know how Johnny knows them.\n Johnny knows everybody.<>');}
break;
case 24:
{_out('MAN: (talking into cellphone) The woman is some special person.<>');}
break;
case 25:
{_out('MAN: (talking into cellphone) I don\'t know. The guys didn\'t tell\n me who the woman is. <>');}
break;
case 26:
{_out('MAN: (talking into cellphone) I think she\'s some sort of scientist\n type. She\'s helping them cook something up.<>');}
break;
case 27:
{_out('MAN: (talking into cellphone) Yeah, she\'s pretty good looking.<>');}
break;
case 28:
{_out('MAN: (talking into cellphone) I don\'t have a crush on her. What\n are you talking about?<>');}
break;
case 29:
{_out('MAN: (talking into cellphone) She\'s good looking, but you\'re my\n babe.<>');}
break;
case 30:
{_out('MAN: (talking into cellphone) It was just one time!<>');}
break;
case 31:
{_out('MAN: (talking into cellphone) She\'s like 40 or something. Really\n old. She\'s got nothing on you.<>');}
break;
case 32:
{_out('MAN: (talking into cellphone) Just cool it.<>');}
break;
case 33:
{_out('MAN: (talking into cellphone) Let\'s talk about something else, ok?<>');}
break;
case 34:
{_out('MAN: (talking into cellphone) What have you been up to?<>');}
break;
case 35:
{_out('MAN: (talking into cellphone) Yes.<>');}
break;
case 36:
{_out('MAN: (talking into cellphone) Your kidding me!<>');}
break;
case 37:
{_out('MAN: (talking into cellphone) Marcie said what?<>');}
break;
case 38:
{_out('MAN: (talking into cellphone) I told you not to trust her.<>');}
break;
case 39:
{_out('MAN: (talking into cellphone) Everyone knows you can\'t trust\n a woman like that.<>');}
break;
case 40:
{_out('MAN: (talking into cellphone) Well, she\'s wrong.<>');}
break;
case 41:
{_out('MAN: (talking into cellphone) Ask Susie about it.<>');}
break;
case 42:
{_out('MAN: (talking into cellphone) No, the other Susie.<>');}
break;
case 43:
{_out('MAN: (talking into cellphone) She\'s into computers and stuff.\n She knows everything.<>');}
break;
case 44:
{_out('MAN: (talking into cellphone) No, I\'m not going to go back to\n school.<>');}
break;
case 45:
{_out('MAN: (talking into cellphone) I told you, I don\'t like that \n stuff.<>');}
break;
case 46:
{_out('MAN: (talking into cellphone) I can\'t sit around classrooms all\n day. That\'s just not me.<>');}
break;
case 47:
{_out('MAN: (talking into cellphone) No, I\'m not interested.<>');}
break;
case 48:
{_out('MAN: (talking into cellphone) I don\'t care what they said on TV.<>');}
break;
case 49:
{_out('MAN: (talking into cellphone) I have a good job already.<>');}
break;
case 50:
{_out('MAN: (talking into cellphone) Once this pans out, everything \n will be good.<>');}
break;
case 51:
{_out('MAN: (talking into cellphone) Yes.<>');}
break;
case 52:
{_out('MAN: (talking into cellphone) Uhuh.<>');}
break;
case 53:
{_out('MAN: (talking into cellphone) <sigh><>');}
break;
case 53:
{_out('MAN: (talking into cellphone) no.<>');}
break;
default:
}
$spotter.conversationOption++;
return 2;
//*****************************************************
return 3;
}
case 3:
{
{_out('The man talking on his cellphone jerked up when he heard some\ngunshots. <>');}
return 4;
}
case 4:
{
{_out('The guard quickly ran down the hallway towards the back of the hotel.<>\n');}
$spotter.moveTo($BackHallway);
{_out('A guard ran in from the hotel lobby.<>');}
return 5;
}
case 5:
{
{_out('The guard ran to the back of the hotel.<>');}
$spotter.moveTo($Backroom);
{_out('A guard ran into the room from the hallway.<>');}
return 6;
}
case 6:
{
if (!$alpha.hasAncestor($LoadingDock))
return -7;
{_out(' The guard looked at the metal door going outside and hesitated. \nHe put his ear up against the door and listened.<>');}
return 6;
return 7;
}
case 7:
{
{_out(' The guard started dialling his cellphone. He nudged the back\ndoor open and peeked outside. Seeing it all clear, he stepped outside.<>\n');}
$spotter.moveTo($LoadingDock);
{_out('The back door opened slightly, and then a guard stepped out, talking \non his cellphone.<>');}
if ($alpha.isInCar)
$spotter.isSpottedInCar = true;
else
$spotter.isSpottedOnFoot = true;
return 8;
}
case 8:
{
//if ($alpha.hasAncestor($Viaduct5))
//{
// {_out('GUARD: (talking on his cellphone) I don\'t know how they \n// escaped. <>');}
// return 8;
//}
{_out('GUARD: (talking on his cellphone) We\'ve been attacked! \nSomeone is escaping with Dr. Galland \n');
_out(($spotter.isSpottedOnFoot)?"on foot":"by car");
_out('. ');}
{_out(' I\'m following them now.<>\nThe guard ran down the laneway to Viaduct Road.<>');}
$spotter.moveTo($Viaduct5);
{_out('A guard talking on his cellphone ran in from behind the hotel.<>');}
return 9;
}
case 9:
{
if ($bravo.hasAncestor($ClockTower))
{
{_out('A bullet was fired from a rooftop, hitting the guard in the\n head. He collapsed on the ground, letting the cellphone fall from\n his hands.<>');}
//$spotter.isDead = true; (set by bravo)
return 10;
}
if ($alpha._parent != $charlie._parent && $spotter.isSpottedInCar
&& !$spotter.isSpottedOnFoot)
{
{_out('GUARD: (talking on his cellphone) They split up. Some of them\n are escaping on foot. They\'re headed towards the highway. \n I\'ll wait here in case they double back.<>');}
$spotter.isSpottedOnFoot = true;
}
else if ($spotter.isSpottedOnFoot && !$spotter.isSpottedInCar
&& $alpha._parent == $charlie._parent && $alpha._parent == $Viaduct3)
{
{_out('GUARD: (talking on his cellphone) Wait. They seem to be getting\n into a car. I\'m not sure. It\'s off in the distance.<>');}
$spotter.isSpottedInCar = true;
}
else if (!$spotter.isWaitingAt5)
{
{_out('GUARD: (talking on his cellphone) They\'re headed towards the\n highway. I\'ll wait here in case they double back.<>');}
$spotter.isWaitingAt5 = true;
}
else
{
{_out('A guard was standing here, holding a cellphone up to his ear.<>');}
}
return 9;
return 10;
}
case 10:
{
return 10;
return 11;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['roomGuards']);
o['roomGuards']._description = function() {{_out('');}};
o['roomGuards'].addChild(o['roomGuardsController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($roomGuards.hasAncestor(_Player._parent))
_oldOut(str);
}
o['roomGuardsController'].state = 1;
o['roomGuardsController'].reset = function(){this.state = 1;};
o['roomGuardsController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['roomGuardsController']._fa = function(state){
switch(state) {
case 1:
{
$roomGuards.moveTo($HotelRoom);
$roomGuards.alphaAttacking = false;
return 2;
}
case 2:
{
if ($alpha.grenadeInHallway)
return -3;
if (time==22) // I'm not sure when to trigger this
return -9;
{_out('Two guards were standing here with Dr. Galland. <>');}
return 2;
//*****************************************************
return 3;
}
case 3:
{
{_out('An explosion went off in the hallway.<>');}
return 4;
}
case 4:
{
{_out('\nGUARD 1: What\'s that sound?<>\nGUARD 2: It\'s an attack. Take cover!<>\nThe guards quickly hid behind some furniture.<>\n');}
return 5;
}
case 5:
{
{_out('\nBoth guards waited nervously with the guns pointed at the door. \nOne of them could see a shadow moving on the other side of the door. \nHe fired several shots through the door.<>\n');}
return 6;
}
case 6:
{
{_out('\nGUARD 1: Do you think we got him?<>\nGUARD 2: I don\'t know. Make sure the girl doesn\'t go anywhere.<>\nOne of the guards slowly moved around the room, keeping his gun pointed at the door the whole time. He positioned himself flat against the wall behind the door.<>\nBoth guards jumped when they heard a blast from the door.<>\n');}
return 7;
}
case 7:
{
{_out('\nBoth guards saw the hotel room door open slightly, so they both started firing through the door.<> \nBang!<>\nA stun grenade went off, sending blinding light in all directions.<>\n');}
return 8;
}
case 8:
{
//TODO: dead bodies lay in the room?
return 8;
//*****************************************************
return 9;
}
case 9:
{
{_out(' One of the guards received a text message on his cellphone. He read\nit.<>\nGUARD: The convoy is arriving. Let\'s go.<>\nThe other guard gave a distinctive knock on the door of the hotel room.<>\n');}
$hallwayGuards.startTransfer = true;
return 10;
}
case 10:
{
{_out('The guards heard three knocks on the door from the guards outside.<>\nGUARD: It\'s clear. <>\n');}
return 11;
}
case 11:
{
{_out('The guards grabbed Dr. Galland and exited the room.<>');}
$roomGuards.moveTo($Hallway);
{_out('The door to room 503 opened and two guards exited with Dr. Galland.<>');}
return 12;
}
case 12:
{
// Hallway guards move to stairwell.
return 13;
}
case 13:
{
{_out('The two guards entered the stairwell, pushing Dr. Galland in front\nof them.<>');}
$roomGuards.moveTo($Stairwell);
if ($alpha.hasAncestor($Stairwell))
return -18;
{_out('\nTwo more guards entered stairwell, pushing a gagged Dr. Galland in \nfront of them. They proceeded down the stairwell, with two guards \nsweeping the front, Dr. Galland in the middle, and another two \nguards securing the rear.<>\n');}
return 14;
}
case 14:
{
{_out('The four guards escorted Dr. Galland down the stairwell to the ground \nfloor. Two of them exited the stairwell while the others remained behind\nwith Dr. Galland.<>');}
// Switch roles here. Have the room guards proceed first while the
// hallway guards stay behind with Dr. Galland.
$roomGuards.moveTo($Backroom);
{_out('Two guards entered from the stairwell.<>');}
return 15;
}
case 15:
{
// hallway guards enter now
{_out('Two more guards entered from the stairwell, pushing Dr. Galland\nin front of them. \nOne guard opened the back door and stepped out to the back of the\nhotel. <>');}
$roomGuards.moveTo($LoadingDock);
{_out('The back door to the hotel opened, and a single guard stepped outside.<>');}
return 16;
}
case 16:
{
{_out('Two more guards exited the hotel with Dr. Galland, joining the\nthe one guard already outside.');}
return 17;
}
case 17:
{
if ($roomGuards.alphaAttacking)
return -18;
if ($spotter.isTriggered)
{
{_out('The three guards were startled to hear gunshots.<>\n GUARD: Everyone, spread out and take cover!<>');}
}
else if ($convoy.hasAncestor($LoadingDock))
{
}
else
{
{_out('Three guards were standing here with Dr. Galland. <>');}
}
return 17;
//*****************************************************
return 18;
}
case 18:
{
return 18;
return 19;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['hallwayGuards']);
o['hallwayGuards']._description = function() {{_out('');}};
o['hallwayGuards'].addChild(o['hallwayGuardsController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($hallwayGuards.hasAncestor(_Player._parent))
_oldOut(str);
}
o['hallwayGuardsController'].state = 1;
o['hallwayGuardsController'].reset = function(){this.state = 1;};
o['hallwayGuardsController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['hallwayGuardsController']._fa = function(state){
switch(state) {
case 1:
{
$hallwayGuards.moveTo($Hallway);
$hallwayGuards.startTransfer = false;
$hallwayGuards.willEnterStairs = false;
$hallwayGuards.alphaAttacking = false;
return 2;
}
case 2:
{
if ($alpha.elevatorAttack)
return -3;
if ($alpha.grenadeInHallway)
return -4;
if ($hallwayGuards.startTransfer)
return -6;
{_out('Two guards were standing here. <>');}
return 2;
//*****************************************************
return 3;
}
case 3:
{
return 3;
// TODO dead body loop?
//*****************************************************
return 4;
}
case 4:
{
{_out('\nThe guards noticed a metal canister rolling in from the stairwell. Suddenly, it exploded with a blinding flash of light and a disorienting boom.<>\n');}
return 5;
}
case 5:
{
return 5;
// TODO dead body loop?
//*****************************************************
return 6;
}
case 6:
{
{_out('The guards heard a distinctive knock coming from the door of room\n503.<>');}
return 7;
}
case 7:
{
{_out('The guards scanned the hallway and then knocked on the door of room\n503 three times.<>');}
return 8;
}
case 8:
{
// room guards exit with Dr. Galland.
{_out('The guards in the hallway nodded.<>');}
$hallwayGuards.willEnterStairs = true;
return 9;
}
case 9:
{
{_out('Two of the guards entered the stairwell, leaving the other\ntwo guards in the hallway with Dr. Galland.<>');}
$hallwayGuards.moveTo($Stairwell);
if ($alpha.hasAncestor($Stairwell))
return -15;
{_out('The fifth floor door to the stairwell opened. Two guards entered and surveyed the surroundings.<> \nGUARD: It looks good. Let\'s go.<>\n\n');}
return 10;
}
case 10:
{
// room guards enter
return 11;
}
case 11:
{
// room guards walk down the stairwell. Two room guards go on ahead
// to back room.
return 12;
}
case 12:
{
{_out('The two remaining guards pushed Dr. Galland out of the stairwell\nat the ground floor.<>');}
$hallwayGuards.moveTo($Backroom);
// One guard steps outside while others stay here.
return 13;
}
case 13:
{
{_out(' Two more guards exited the hotel bringing Dr. Galland with them. One \nguard remained behind. <>');}
return 14;
}
case 14:
{
if ($hallwayGuards.alphaAttacking)
return -15;
{_out(' One guard stood here.<>');}
return 14;
//*****************************************************
return 15;
}
case 15:
{
return 15;
return 16;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['outdoorGuards']);
o['outdoorGuards']._description = function() {{_out('');}};
o['outdoorGuards'].addChild(o['outdoorGuardsController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($outdoorGuards.hasAncestor(_Player._parent))
_oldOut(str);
}
o['outdoorGuardsController'].state = 1;
o['outdoorGuardsController'].reset = function(){this.state = 1;};
o['outdoorGuardsController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['outdoorGuardsController']._fa = function(state){
switch(state) {
case 1:
{
$outdoorGuards.moveTo($MainBlvd3);
$outdoorGuards.isStoppingCar = false;
$outdoorGuards.isAlphaBattle = false;
$outdoorGuards.isReduced = false;
$outdoorGuards.isDead = false;
return 2;
}
case 2:
{
if ($spotter.isSpottedInCar || $spotter.isSpottedOnFoot)
{
return -11;
}
if ($bomb.explodedAt1)
{
return -5;
}
if ($bomb.canBlowPatioAt3 && $bomb.explode3Patio)
return -3;
{_out('A large group of workers sat at the patio, \nsharing a large pitcher of beer.<>');}
return 2;
//*****************************************************
return 3;
}
case 3:
{
{_out('Suddenly, the garbage can beside the patio exploded sending \nshrapnel everywhere. Nearby windows shattered. Several workers \nlay dead on the patio ground. Others, having sat further\naway from the blast, were stunned and bleeding, but alive.<>');}
$bomb.explodedAt3 = true;
$outdoorGuards.isReduced = true;
return 4;
}
case 4:
{
if ($spotter.isSpottedInCar || $spotter.isSpottedOnFoot)
{
{_out('One of the workers clumsily pressed a finger to the \n radio transmitter in his ear. <>\n GUARD: It\'s an attack! The hostage is escaping!<>\n The guards stumbled down\n Sarinson Road towards Viaduct Road.<>');}
$outdoorGuards.moveTo($Viaduct3);
{_out('A group of guards entered from Sarinson Road.<>');}
return 12;
}
{_out('The workers who survived the blast sat on the ground, stunned.<>');}
return 4;
//*****************************************************
return 5;
}
case 5:
{
{_out('The workers sitting on the patio were startled by the \nsound of a large blast coming from the west.<>\nWORKER: Something is going on. We\'d better check it out.<>\n');}
return 6;
}
case 6:
{
if ($spotter.isSpottedInCar || $spotter.isSpottedOnFoot)
{
return -9;
}
{_out('The workers gathered their gear and hurried west down Main\nBoulevard.<>');}
$outdoorGuards.moveTo($MainBlvd2);
{_out('A group of workers hurried in from the east.<>');}
return 7;
}
case 7:
{
if ($spotter.isSpottedInCar || $spotter.isSpottedOnFoot)
{
return -9;
}
{_out('The group of workers hurried west down Main\nBoulevard.<>');}
$outdoorGuards.moveTo($MainBlvd1);
{_out('A group of workers hurried in from the east.<>');}
return 8;
}
case 8:
{
if ($spotter.isSpottedInCar || $spotter.isSpottedOnFoot)
{
return -9;
}
{_out('The group of workers examined the remains of the explosion. They\nquietly chatted about whether it was an accident or intentional.<>');}
return 8;
//*****************************************************
return 9;
}
case 9:
{
{_out('One of the workers pressed a finger to the radio transmitter \nin his ear.<>\nGUARD 1: Something is up. The hostage is escaping! <>\nGUARD 2: What about the explosion?<>\nGUARD 1: Forget the explosion. We have to stop them!<>');}
return 10;
}
case 10:
{
if ($outdoorGuards.hasAncestor($Viaduct1)
|| $outdoorGuards.hasAncestor($Viaduct3))
{
return -12;
}
else if ($outdoorGuards.hasAncestor($MainBlvd3))
{
{_out('The guards ran off down\n Sarinson Road towards Viaduct Road.<>');}
$outdoorGuards.moveTo($Viaduct3);
{_out('A group of guards entered from Sarinson Road.<>');}
return 10;
}
else if ($outdoorGuards.hasAncestor($MainBlvd2))
{
{_out('The guards ran west down Main Boulevard.<>');}
$outdoorGuards.moveTo($MainBlvd1);
{_out('A group of guards ran in from the east.<>');}
return 10;
}
else if ($outdoorGuards.hasAncestor($MainBlvd1))
{
{_out('The guards ran down Genoa Lane towards Viaduct Road.<>');}
$outdoorGuards.moveTo($Viaduct1);
{_out('A group of guards ran in down Genoa Lane from Main Boulevard.<>');}
return 10;
}
//*****************************************************
return 11;
}
case 11:
{
{_out('One of the workers on the patio pressed a finger to the \nradio transmitter in his ear. <>\nGUARD: Something is up. The hostage is escaping! They\'re headed \nthis way.<>\nThe guards quickly jumped up from the patio and ran off down\nSarinson Road towards Viaduct Road.<>');}
$outdoorGuards.moveTo($Viaduct3);
{_out('A group of guards entered from Sarinson Road.<>');}
return 12;
//*****************************************************
return 12;
}
case 12:
{
if ($alpha.hasAncestor($outdoorGuards._parent)
&& !$alpha.isInCar)
return -13;
if ($charlie.hasAncestor($outdoorGuards._parent)
&& $spotter.isSpottedInCar)
return -17;
if ($alpha.hasAncestor($outdoorGuards._parent)
&& $alpha.isInCar
&& !$spotter.isSpottedInCar)
{
{_out('One of the guards pointed out the approaching car. <>\n GUARD: HQ says they escaped on foot, but check it out anyway.<>');}
}
else if (!$spotter.isSpottedInCar
&& $alpha._parent == $charlie._parent
&& !$alpha.isInCar
&& $outdoorGuards.hasAncestor($Viaduct1))
{
{_out('GUARD 1: It looks like there\'s two people getting in a car \n down there.<>\n The guards strained to see down Viaduct Road.<>\n GUARD 2: Check it out when the car gets over here.<>');}
$spotter.isSpottedInCar = true;
}
else
{_out('A group of guards stood here.<>');}
return 12;
//*****************************************************
return 13;
}
case 13:
{
// TODO: Fill this in
// TODO: Make a scheme for when battles are survivable
// TODO: e.g. full guards needs two things to survive
// TODO: such as extra person + weapons. If you only
// TODO: have one thing, then one person dies
{_out('One of the guards stared at Agent Alpha and Dr. Galland.<>');}
$outdoorGuards.isAlphaBattle = true;
return 14;
}
case 14:
{
if ($alpha.hasHeavyWeapons)
{
{_out('Agent Alpha noticed a crowd of guards standing in the\n intersection staring at his rifle. He lifted the gun and sprayed \n a short burst of\n fire at the guards, killing a few. The guards scattered for\n cover.<>');}
}
else
{
{_out('GUARD: That\'s them! It\'s Dr. Galland.<>\n As the other guards turned to look, Agent Alpha already had his\n pistol out and shot the guard. The guards scrambled for cover,\n firing back wildy. \n ');}
if ($charlie._parent == $alpha._parent)
{_out(' Agent Charlie fired at the guards from behind her car.<>');}
else
{_out('<>');}
}
return 15;
}
case 15:
{
if ($alpha.hasHeavyWeapons)
{
// TODO: We know Charlie will be here
{_out(' Agent Alpha pushed Dr. Galland into a building entranceway\n for cover while he sprayed the guards with another burst of \n gunshots. Agent Charlie pulled out her pistol and took pot shots\n at the remaining guards while they covered from Agent Alpha\'s \n fire. When the smoke cleared, all the guards laid dead on the\n ground.<>');}
return -19;
}
else if ($charlie._parent == $alpha._parent && $outdoorGuards.isReduced)
{
{_out(' The guards tried to return fire, but already decimated by the\n bomb blast and stuck in the cross-fire of Agents Alpha and Charlie,\n they didn\'t stand a chance.<>');}
return -19;
}
else if ($charlie._parent == $alpha._parent)
{
{_out(' Agent Alpha grabbed Dr. Galland and dove into a building\n entranceway while Agent Charlie suppressed the guards with\n her gunfire. The guards responded by spraying the car with\n submachinegun fire. The bullets smashed through the windows\n of the car, and Agent Charlie slumped down, dead.<>');}
$charlie.isDead = true;
}
else
{
{_out(' Agent Alpha and Dr. Galland quickly took cover in the \n entranceway to a building. The guards pulled out some \n submachineguns and sprayed the entranceway with bullets.\n Dr. Galland cowered in the corner.<>');}
}
return 16;
}
case 16:
{
if ($charlie._parent == $alpha._parent)
{
{_out(' Agent Alpha jumped out from behind cover. Holding his pistol\n steady with both hands, he robotically fired off one shot after\n another as the guards were turned facing Agent Charlie. The guards\n fell one by one until they were all dead.<>');}
return -19;
}
else
{
{_out(' Agent Alpha fired his pistol off at the guards, taking out one,\n but he quickly ran out of bullets. Realizing this, the guards \n circled around. With a sweep of machine gun fire, they had him, \n and Agent Alpha collapsed to the ground.<>');}
$timeline.missionFailed();
}
// if Charlie here
// if has heavy weapons
// if bravo in clock tower
// if guards went through a bomb blast
return 20;
//*****************************************************
return 17;
}
case 17:
{
$outdoorGuards.isStoppingCar = true;
{_out('The guards saw the car drive up.<>\nGUARD: That\'s the one! Stop it!<>\nThe guards were standing in the middle of the road, but Agent Charlie\npressed her foot to the accelerator to drive through them.<>');}
return 18;
}
case 18:
{
{_out('The guards dived out of the way as Agent Charlie drove the car\nthrough their ranks. One of the guards pulled out a rock-propelled\ngrenade and fired it at the car as it drove away. <>\n\nThe blast caused the back of the car to shatter. The car continued\nto roll forward but it veered off to the side and hit a building.\nAll the occupants were dead.<>');}
if ($alpha.isInCar)
{
$timeline.missionFailed();
return 20;
}
else
$charlie.isDead = true;
return 20;
//*****************************************************
return 19;
}
case 19:
{
$outdoorGuards.isDead = true;
$outdoorGuards.isAlphaBattle = false;
return 19;
return 20;
}
case 20:
{
{_out('A group of guards stood here.<>');}
return 20;
return 21;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['convoy']);
o['convoy']._description = function() {{_out('');}};
o['convoy'].addChild(o['convoyController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($convoy.hasAncestor(_Player._parent))
_oldOut(str);
}
o['convoyController'].state = 1;
o['convoyController'].reset = function(){this.state = 1;};
o['convoyController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['convoyController']._fa = function(state){
switch(state) {
case 1:
{
$convoy.moveTo(null);
$convoy.isReduced = false;
$convoy.isDead = false;
$convoy.isAlphaBattle = false;
$convoy.isHelpingPatio = false;
$convoy.isAlarmed = function()
{
return $spotter.isSpottedInCar
|| $spotter.isSpottedOnFoot
|| $bomb.explodedAt1;
}
return 2;
}
case 2:
{
// Wait until triggered
if (time == 30)
return -3;
return 2;
return 3;
}
case 3:
{
$convoy.moveTo($MainBlvd1);
if ($convoy.isAlarmed())
{
{_out('A convoy of three black SUVs sped in from the west.');}
return 14;
}
else
{
{_out('A convoy of three black SUVs drove in from the west and stopped \nat the intersection.<>');}
}
return 4;
}
case 4:
{
if ($bomb.explode1Convoy && $bomb.canBlowConvoyAt1)
{
return -12;
}
if ($convoy.isAlarmed())
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -14;
}
{_out('The convoy of three black SUVs waited for the traffic lights to \nchange.<>');}
return 5;
}
case 5:
{
if ($convoy.isAlarmed())
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -14;
}
{_out('The traffic lights turned green, and the three black SUVs\ncontinued driving east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd2);
{_out('A convoy of three black SUVs drove in from the west.<>');}
return 6;
}
case 6:
{
if ($convoy.isAlarmed())
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -15;
}
{_out('The convoy of three black SUVs drove east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd3);
{_out('A convoy of three black SUVs drove in from the west. It stopped\nat the intersection.<>');}
return 7;
}
case 7:
{
if ($convoy.isAlarmed())
{
if ($convoy.isHelpingPatio)
{
{_out('The guards from the convoy quickly returned to the SUV and \n drove off rapidly. ');}
return -16;
}
else
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -16;
}
}
else if ($bomb.explodedAt3)
{
{_out('The guards from the convoy of SUVs were helping to revive the\n surviving workers on the patio.<>');}
$convoy.isHelpingPatio = true;
return 7;
}
else
{_out('The convoy of three black SUVs stopped at the intersection.<>');}
return 8;
}
case 8:
{
if ($convoy.isAlarmed())
{
if ($convoy.isHelpingPatio)
{
{_out('The guards from the convoy quickly returned to the SUV and \n accelerated rapidly. ');}
return -16;
}
else
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -16;
}
}
else if ($bomb.explodedAt3)
{
{_out('Some of the guards from the convoy of SUVs were helping \n to treat the\n surviving workers on the patio.<>');}
return 7;
}
{_out('The three black SUVs\ncontinued driving east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd4);
{_out('A convoy of three black SUVs drove in from the west.<>');}
return 9;
}
case 9:
{
if ($convoy.isAlarmed())
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -17;
}
{_out('The convoy of three black SUVs drove east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd5);
{_out('A convoy of three black SUVs drove in from the west.<>');}
return 10;
}
case 10:
{
if ($convoy.isAlarmed())
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -18;
}
{_out('The convoy of three black SUVs drove down the laneway towards\nViaduct Road.<>');}
$convoy.moveTo($Viaduct5);
{_out('A convoy of three black SUVs drove in down the laneway from\nMain Boulevard.<>');}
return 11;
}
case 11:
{
if ($convoy.isAlarmed())
{
{_out('The convoy suddenly surged forward and accelerated rapidly. ');}
return -19;
}
{_out('The convoy of three black SUVs drove down the laneway towards\nthe back of the hotel.<>');}
$convoy.moveTo($LoadingDock);
{_out('A convoy of three black SUVs drove in down the laneway from\nViaduct Road.<>');}
return 30;
//*****************************************************
return 12;
}
case 12:
{
{_out('The bomb in the garbage can exploded, tearing into one of the\nSUVs stopped at the intersection. The driver of the SUV was\nbloodied but unharmed. His passengers were not so lucky though.<>');}
$convoy.isReduced = true;
if ($convoy.hasAncestor($MainBlvd1))
$bomb.explodedAt1 = true;
{_out('A guard jumped out of one of the undamaged SUVs and ran to help.<>\nGUARD: Are you ok? Can you drive?<>\nThe bloodied driver nodded.<>\nGUARD: We have to get out of here! We might get ambushed.<> ');}
return 13;
}
case 13:
{
{_out(' Well-trained, the drivers quickly recovered and surged\nforward, trying to escape the area as quickly as possible. ');}
return -14;
//*****************************************************
// High speed version of drive to loading dock
return 14;
}
case 14:
{
{_out('The three black SUVs sped east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd2);
{_out('A convoy of three black SUVs sped in from the west.<>');}
if ($alpha.hasAncestor($convoy._parent))
return -25;
return 15;
}
case 15:
{
if ($alpha.hasAncestor($convoy._parent))
return -25;
{_out('The convoy of three black SUVs sped east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd3);
{_out('A convoy of three black SUVs sped in from the west.<>');}
if ($alpha.hasAncestor($convoy._parent))
return -25;
return 16;
}
case 16:
{
if ($alpha.hasAncestor($convoy._parent))
return -25;
{_out('The three black SUVs sped through the intersection without stopping\nand went east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd4);
{_out('A convoy of three black SUVs sped in from the west.<>');}
if ($alpha.hasAncestor($convoy._parent))
return -25;
return 17;
}
case 17:
{
if ($alpha.hasAncestor($convoy._parent))
return -25;
{_out('The convoy of three black SUVs sped east down Main Boulevard.<>');}
$convoy.moveTo($MainBlvd5);
{_out('A convoy of three black SUVs sped in from the west.<>');}
if ($alpha.hasAncestor($convoy._parent))
return -25;
return 18;
}
case 18:
{
if ($alpha.hasAncestor($convoy._parent))
return -25;
{_out('The convoy of three black SUVs sped down the laneway towards\nViaduct Road.<>');}
$convoy.moveTo($Viaduct5);
{_out('A convoy of three black SUVs sped in down the laneway from\nMain Boulevard.<>');}
if ($alpha.hasAncestor($convoy._parent))
return -25;
return 19;
}
case 19:
{
if ($alpha.hasAncestor($convoy._parent))
return -25;
if ($spotter.isSpottedInCar
|| $spotter.isSpottedOnFoot)
{
return -20;
}
{_out('The tires of the three black SUVs squealed as they sped through a tight\nturn down the laneway towards the back of the hotel.<>');}
$convoy.moveTo($LoadingDock);
{_out('A convoy of three black SUVs sped down the laneway from\nViaduct Road.<>');}
if ($alpha.hasAncestor($convoy._parent))
return -25;
return 30;
//*****************************************************
return 20;
}
case 20:
{
{_out('The three SUVs stopped as they hit Viaduct Road. With the other\nguards protecting Viaduct Road, they decided to loop back to \nthe highway along Main Boulevard in case they missed anything.<>');}
{_out('The convoy of three black SUVs sped down the laneway towards Main\nBoulevard.<>');}
$convoy.moveTo($MainBlvd5);
{_out('A convoy of three black SUVs squeeled in along a laneway from\nViaduct Road.<>');}
return 21;
}
case 21:
{
{_out('The convoy of three black SUVs sped west down Main\nBoulevard.<>');}
$convoy.moveTo($MainBlvd4);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 22;
}
case 22:
{
{_out('The convoy of three black SUVs sped west down Main\nBoulevard.<>');}
$convoy.moveTo($MainBlvd3);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 23;
}
case 23:
{
{_out('The convoy of three black SUVs sped west down Main\nBoulevard.<>');}
$convoy.moveTo($MainBlvd2);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 24;
}
case 24:
{
{_out('The convoy of three black SUVs sped west down Main\nBoulevard.<>');}
$convoy.moveTo($MainBlvd1);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 38;
//*****************************************************
return 25;
}
case 25:
{
// TODO: Fill this in
// TODO: Make a scheme for when battles are survivable
// TODO: e.g. full guards needs two things to survive
// TODO: such as extra person + weapons. If you only
// TODO: have one thing, then one person dies
{_out('The convoy of SUVs stopped hard with a squeal of brakes. The\ndoors of the SUVs opened.<>');}
$convoy.isAlphaBattle = true;
return 26;
}
case 26:
{
{_out('Some guards stepped out of the SUVs. All of them were carrying\nheavy weaponry.<>\nGUARD: That\'s Dr. Galland! Stop them.<>\nAgent Alpha grabbed Dr. Galland\'s hand and ran behind a car.<>\n');}
return 27;
}
case 27:
{
{_out(' Agent Alpha and Dr. Galland knelt low as the guards \nraked the car they were hiding behind with gunfire. ');}
if ($charlie.weaponsAt == 1 && !$alpha.hasHeavyWeapons)
{
{_out('Agent Alpha peeked under the car. A duffle bag was there.\n He dragged it out and opened it, pulling the miliary rifle out.<>');}
$alpha.hasHeavyWeapons = true;
}
if ($bravo._parent == $alpha._parent)
{
{_out('Agent Bravo was on the other side of the street, unnoticed\n by the guards. He stepped behind a corner, removed a grenade from\n his jacket, and lobbed onto one of the guards\' SUVs.<>');}
}
else if ($bravo.hasAncestor($ClockTower) && $alpha.hasAncestor($MainBlvd5))
{
{_out(' A loud crack was heard, and one of the guards fell to the\n ground with a bullet to the head.<>\n GUARD: They have snipers! Scatter! Scatter!<>\n The guards scattered in a panic.<>');}
}
else if ($alpha.hasHeavyWeapons)
{
{_out(' Agent Alpha knew they would soon be encircled if he didn\'t\n do anything. He fell to the ground and looked under the car.\n Perfect. Although they were standing behind their SUVs, he\n had a clear shot of their feet. He lay down a wave of fire\n under the SUVs, ');}
if ($convoy.isReduced)
{
{_out('causing the guards to fall to the \n ground in agony. <>');}
return -37;
}
else
{
{_out('causing many guards to fall to the \n ground in agony. <>');}
}
}
else
{
{_out(' Agent Alpha knew they would soon be encircled if he didn\'t\n do anything. He fell to the ground and looked under the car.\n Perfect. Although they were standing behind their SUVs, he\n had a clear shot of their feet. He shot out the feet of some \n of the guards, causing them to the ground in pain.<>\n ');}
}
return 28;
}
case 28:
{
if ($bravo._parent == $alpha._parent)
{
if ($convoy.isReduced)
{
{_out('Guards scattered upon seeing the grenade, but many were\n still caught in the blast. Agent Alpha stepped \n out from behind cover and shot the remaining guards.<>');}
return -37;
}
else if ($alpha.hasHeavyWeapons)
{
{_out('Guards scattered upon seeing the grenade, but many were\n still caught in the blast. Agent Alpha stepped \n out from behind cover and sprayed the area with machine\n gun fire until he emptied his clip. All the guards were \n dead.<>');}
return -37;
}
else
{
{_out('Guards scattered upon seeing the grenade, but many were\n still caught in the blast. Agent Alpha stepped out from\n behind cover and shot at the guards. There were too many\n though. Some of the guards ran behind the corner where\n Agent Bravo was hiding. He was quickly overwhelmed.\n <>');}
$bravo.isDead = true;
}
}
else if ($bravo.hasAncestor($ClockTower) && $alpha.hasAncestor($MainBlvd5))
{
if ($alpha.hasHeavyWeapons)
{
{_out('Seeing the guards scatter, Agent Alpha stepped out from \n behind cover and sprayed the area with machine\n gun fire until he emptied his clip. All the guards were \n dead.<>');}
return -37;
}
else if ($convoy.isReduced)
{
{_out('Seeing the guards scatter, Agent Alpha stepped out from \n behind cover and shot at the guards. He fell two more \n while Agent Bravo dispatched the rest.<>');}
return -37;
}
else
{
{_out('Seeing the guards scatter, Agent Alpha stepped out from \n behind cover and shot at the guards. Under fire from above\n and Agent Alpha and with nowhere to take cover, the guards \n were panicking.<>\n GUARD: Get Dr. Galland! Get her!<>\n The guards charged Agent Alpha\'s position. He fired at them,\n but quickly ran out of bullets. The guards overwhelmed him.<>');}
$timeline.missionFailed();
}
}
else if ($alpha.hasHeavyWeapons)
{
// convoy not reduced
{_out(' The guards quickly ran out from behind the SUVs to some \n alleyways. They sprayed Agent Alpha\'s position with gunfire\n as they did so. <>');}
}
else
{
{_out(' The guards quickly ran out from behind the SUVs to some \n alleyways. They sprayed Agent Alpha\'s position with gunfire\n as they did so. <>');}
}
return 29;
}
case 29:
{
if ($bravo._parent == $alpha._parent)
{
{_out(' Agent Alpha fired out from behind the car, but he was\n soon out of ammunition. The guards quickly encircled and\n dispatched him.<>');}
$timeline.missionFailed();
}
else if ($alpha.hasHeavyWeapons)
{
// convoy not reduced
{_out(' One of the guards loaded a rocket-propelled grenade while\n in the alleyway. He stepped out and fired it at the car where\n Agent Alpha and Dr. Galland were hiding. The blast killed them\n both.<>');}
$timeline.missionFailed();
}
else
{
{_out('Agent Alpha stepped out to shoot at the guards, but his\n pistol was out of ammo. The guards quickly encircled and\n dispatched him.<>');}
$timeline.missionFailed();
}
// if Bravo is here
// if bravo in clock tower
// if has heavy weapons
// if convoy went through a bomb blast
return 38;
//*****************************************************
return 30;
}
case 30:
{
{_out('The doors to the SUV opened. The guards wordlessly shoved Dr. Galland\ninto the SUV.<>');}
return 31;
}
case 31:
{
{_out('The guards watched as the SUV doors closed, and the convoy sped \ndown the laneway toward Viaduct Road.<>');}
$convoy.moveTo($Viaduct5);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 32;
}
case 32:
{
{_out('The convoy of three black SUVs sped west down Viaduct Road.<>');}
$convoy.moveTo($Viaduct4);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 33;
}
case 33:
{
{_out('The convoy of three black SUVs sped west down Viaduct Road.<>');}
$convoy.moveTo($Viaduct3);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 34;
}
case 34:
{
{_out('The convoy of three black SUVs sped west down Viaduct Road.<>');}
$convoy.moveTo($Viaduct2);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 35;
}
case 35:
{
{_out('The convoy of three black SUVs sped west down Viaduct Road.<>');}
$convoy.moveTo($Viaduct1);
{_out('A convoy of three black SUVs sped in from the east.<>');}
return 36;
}
case 36:
{
{_out('The convoy of three black SUVs drove west down Viaduct Road, \nonto the highway, and out of the city, never to be seen again.<>');}
$timeline.missionFailed();
return 38;
//*****************************************************
return 37;
}
case 37:
{
$convoy.isDead = true;
$convoy.isAlphaBattle = false;
return 37;
return 38;
}
case 38:
{
{_out('The convoy was sitting here. <>');}
return 38;
return 39;
}
default:
return 0;
}
};
})(_out);
o['Characters'].addChild(o['bomb']);
o['bomb']._description = function() {{_out('');}};
o['bomb']._actions['set'] = { name : function() {{_out('set');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = true;
{_out('Ok.<>');}}};
o['bomb']._actions['unset'] = { name : function() {{_out('unset');}}, condition: function(_arg) {var split = _arg.split('-');
if (split.length > 1)
{
var allowedTime = Number(split[1]);
if (allowedTime != time-1) return false;
}
return true;}, action: function(_arg) {var split = _arg.split('-');
var variable = split[0];
this[variable] = false;
{_out('Ok.<>');}}};
o['bomb'].explode1After = false;
o['bomb'].explode1Convoy = false;
o['bomb'].explode3Patio = false;
o['bomb'].addChild(o['bombController']);
(function(_oldOut) {
var _out = function(str)
{
if ($timeline.isOutputDisabled) return;
if ($bomb.hasAncestor(_Player._parent))
_oldOut(str);
}
o['bombController'].state = 1;
o['bombController'].reset = function(){this.state = 1;};
o['bombController'].next = function(){
while(true)
{
var newState = this._fa(this.state);
if (newState >= 0) { this.state = newState; return;}
this.state = -newState;
}
};
o['bombController']._fa = function(state){
switch(state) {
case 1:
{
$bomb.moveTo(null);
$bomb.explodedAt1 = false;
$bomb.triggerAmbushDetonation = false;
$bomb.canBlowConvoyAt1 = false;
$bomb.explodedAt3 = false;
$bomb.canBlowPatioAt3 = false;
return 2;
}
case 2:
{
return 3;
}
case 3:
{
if ($bomb.hasAncestor($MainBlvd1))
return -4;
if ($bomb.hasAncestor($MainBlvd3))
return -13;
return 3;
//*****************************************************
return 4;
}
case 4:
{
if ($bomb.triggerAmbushDetonation)
return -10;
if ($convoy.hasAncestor($MainBlvd1))
return -5;
return 4;
//*****************************************************
return 5;
}
case 5:
{
$bomb.canBlowConvoyAt1 = true;
{_out('<a do=\"bomb?set#explode1Convoy-');
_out(time);
_out('\">Detonate the bomb now</a><>\n<a do=\"bomb?unset#explode1Convoy-');
_out(time);
_out('\">Detonate the bomb later</a><>\n');}
return 6;
}
case 6:
{
// let the convoy handle the explosion
return 7;
}
case 7:
{
// guards are gone
return 8;
}
case 8:
{
// Second chance to blow-up the bomb
return 9;
}
case 9:
{
//if ($bomb.explode1After)
// return -12;
return 15;
//*****************************************************
return 10;
}
case 10:
{
// chance to blow-up the bomb
{_out('<a do=\"bomb?set#explode1After-');
_out(time);
_out('\">Detonate the bomb now</a><>\n<a do=\"bomb?unset#explode1After-');
_out(time);
_out('\">Detonate the bomb later</a><>\n');}
return 11;
}
case 11:
{
if ($bomb.explode1After)
return -12;
if (!$convoy.hasAncestor($MainBlvd1))
return 11;
return -5;
//*****************************************************
return 12;
}
case 12:
{
{_out('The bomb in the garbage can exploded, ripping the can into pieces\nthat scattered around the road. The blast shattered nearby windows\nand created a large smoke cloud.<>');}
$bomb.explodedAt1 = true;
return 15;
//*****************************************************
return 13;
}
case 13:
{
if ($spotter.isTriggered)
return -14;
return 13;
return 14;
}
case 14:
{
$bomb.canBlowPatioAt3 = true;
{_out('<a do=\"bomb?set#explode3Patio-');
_out(time);
_out('\">Detonate the bomb now</a><>\n<a do=\"bomb?unset#explode3Patio-');
_out(time);
_out('\">Detonate the bomb later</a><>\n');}
// let the guards handle the explosion
return 15;
return 15;
}
case 15:
{
return 15;
return 16;
}
default:
return 0;
}
};
})(_out);
_Player = o['pc'];
// IE doesn't trigger click events on a double click whereas other browsers do.
// But IE has a distinctive event pattern (on the second click, it issues mouseup, then
// double-click ---> there is no mousedown event) that allows us to detect this
// and correctly trigger a click event
var hookIEDblClickToClickCatcher = function(object, handler)
{
var isDown = false;
var isMismatchedUp = false;
object.onmousedown = function() { isDown = true; isMismatchedUp = false; }
object.onmouseup = function() { if (isDown) isDown = false; else isMismatchedUp = true; }
object.ondblclick = function() { if (isMismatchedUp) { handler.call(this); isMismatchedUp = false; } }
object = null;
}
var _bar = document.getElementById("custombuttons");
var _custombuttons = _bar.getElementsByTagName("A");
for (var i = 0; i < _custombuttons.length; i++)
{
rewriteAnchor(_custombuttons[i]);
hookIEDblClickToClickCatcher(_custombuttons[i], handleClick);
}
var b = _custombuttons[0];
b.innerHTML = '<img src="' + timelineButtons.rewind + '" alt="' + (b.innerText || b.textContent) + '">';
var b = _custombuttons[1];
b.innerHTML = '<img src="' + timelineButtons.minus8 + '" alt="' + (b.innerText || b.textContent) + '">';
var b = _custombuttons[2];
b.innerHTML = '<img src="' + timelineButtons.back + '" alt="' + (b.innerText || b.textContent) + '">';
var b = _custombuttons[3];
b.innerHTML = '<img src="'+ timelineButtons.next+'" alt="' + (b.innerText || b.textContent) + '">';
var b = _custombuttons[4];
b.innerHTML = '<img src="' + timelineButtons.plus8 + '" alt="' + (b.innerText || b.textContent) + '">';
// Provide a hole that allows us to reach in from
// global scope to access some of the game specific
// variables
_getActionFilterFn = function() { return isActionAllowed; };
_getMovementFilterFn = function() { return isMovementAllowed; };
_getEndTurnFn = function() { return endTurn; }
_getTurnZeroFn = function() { return turnZero; }
}
//-->
</script>
</body>
</html>

Xet Storage Details

Size:
186 kB
·
Xet hash:
f51e8c0efc133888d280103442b9ce6a6f3127ea82503a2be248bfa301d66783

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.