bl791/IFDB / games /competition2011 /web /operationextraction /operationExtraction.html
bl791's picture
download
raw
198 kB
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- on the iPhone and Android, this sets the resolution to 320x356. -->
<meta name = "viewport" content = "width = device-width">
<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; }
.postfooter {
background-color: LightGray;
height: 5px;
}
/* Miscellaneous stuff */
.main {font-size: 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; vertical-align: middle;}
</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,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" 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>
<div class="postfooter">&nbsp;</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['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['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['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['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['MainBlvd1']._description = function() {{_out('<b>Main Boulevard at Genoa Lane</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 at Genoa Lane</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 between Genoa and Sarinson</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 between Genoa and Sarinson</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 at Sarinson Road</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 at Sarinson 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, near the hotel</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, near the hotel</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, beside hotel</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, beside hotel</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 had once offered a pleasant view over the city, it is now dwarfed by the surrounding buildings. From the top of the clock tower, it was 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;
$alpha.waitUntilHandoffConversation = 0;
$alpha.afterHandoffConversation = 0;
return 2;
}
case 2:
{
{_out('\nAgents Alpha and Bravo were reviewing their equipment when Agent \nCharlie entered.<>\nAGENT ALPHA: Is the parking garage ready?<>\nAGENT CHARLIE: Yes. All the cameras have been disabled, and all the \nentrances and exits have been booby-trapped. <>\nAGENT ALPHA: And the cars?<>\nAGENT CHARLIE: The primary car is just parked outside. The getaway \ncar in the garage is fuelled and ready to go. If we can \nget Dr. Galland to the parking garage, it should be easy to lose \nany pursuers and escape safely.<>\n');}
return 3;
}
case 3:
{
{_out('\nAGENT ALPHA: So I guess we\'re ready then.<>\nAGENT BRAVO: Definitely. Let\'s get started.<>\nAGENT CHARLIE: (hesitating) It looks risky. We need \nmore operatives for this mission. Too many things can \ngo wrong.<>\nAGENT ALPHA: The intelligence information I have is good. This plan \nis solid.<>\n');}
return 4;
}
case 4:
{
{_out('\nAgent Charlie wasn\'t pleased with the answer.<>\nAGENT ALPHA: Just focus on what you need to do. If we all do our jobs,\neverything will be fine.<>\nAGENT BRAVO: He\'s right. The plan is good.<>\nAgent Charlie nodded.<>\nAGENT ALPHA: Let\'s synchronize our watches. Remember, the Dawn \nMilitia is sending in a convoy to pick up Dr. Galland at \n32 ticks. \nYou two go ahead and position yourselves. I\'ll clean-up \nhere and then join you.<>\n');}
$alpha.endIntroConversation = true;
return 5;
}
case 5:
{
{_out('\nAGENT BRAVO: You know she\'s right. <>\nAGENT ALPHA: What can I do? We only determined the position of \nDr. Galland yesterday. With the Dawn Militia moving her out of the \ncountry today, we\'re all that\'s available.<>\nAGENT BRAVO: Couldn\'t we change this from a rescue mission to \nan assassination mission? The Dawn Militia gets no bio-weapon \nknowledge; we come out alive and safe?<>\nAGENT ALPHA: If they wanted her dead, they would have just called\nthe local police. They want her alive.<>\nAgent Bravo sighed. Agent Alpha was right. <>');}
return 6;
}
case 6:
{
{_out('\nAgent Alpha grimaced as he wiped the fingerprints from the room. \nThe mission was hastily planned and \nundermanned. Their execution needed to be perfect if they all \nwanted to come home alive. Agent Alpha shook away his thoughts. \nHe had to stay focused. Saving Dr. Galland was their only concern.<> \n');}
return 7;
}
case 7:
{
{_out('\nAgent Alpha scanned the apartment for potential sources of DNA \nevidence. He carefully decontaminated the obvious places while \nleaving false DNA traces elsewhere as decoys.<>\n');}
return 8;
}
case 8:
{
{_out('\nAgent Alpha reviewed his mission reports one last time before deleting \nthem from 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;
switch($alpha.waitUntilHandoffConversation)
{
case 0:
{_out('Agent Alpha took his cellphone out and pretended to talk to a \n friend.<>');}
break;
case 1:
{_out('While pretending to talk on his cellphone, Agent Alpha considered\n his intelligence information. There were four guards in the hotel.\n Could he take on all of them by himself? Perhaps he could divide\n them up somehow. <>');}
break;
//case 2:
// Agent Alpha pretended to talk on his cellphone while waiting.
// He wondered whether any civilians would get hurt during the rescue.
// Probably none, he decided, the hotel seemed mostly empty at the
// moment.<>
// break;
case 2:
{_out('Agent Alpha pretended to talk on his cellphone while waiting.<> \n He mentally traced through the steps of the plan. Did he bring\n enough firepower for the rescue? What about for the escape to the\n parking garage?<>');}
break;
case 3:
{_out('Agent Alpha pretended to talk on his cellphone while waiting. <>He\n wondered whether he had chosen the right plan. The alternative was\n for the team to disguise themselves as soldiers of the Dawn \n Militia and to pretend that they were the Dawn Militia convoy who \n were supposed to take the hostage away.<> ');}
break;
case 4:
{_out('Agent Alpha pretended to talk on his cellphone while waiting. <>He\n shook his head. It was too late for second thoughts. The current\n plan was clearly\n the safer and more reliable of the two. They could never\n get the timing of a fake transfer correct.<> ');}
break;
case 5:
{_out('Agent Alpha pretended to talk on his cellphone while waiting. <>He\n considered Agent Bravo\'s proposal. It would be so simple to \n just use a bomb to kill everybody, the guards and Dr. Galland. He\n could tell his superiors that it was an accident or miscalculation.\n Maybe the world would be safer without any bio-weapons experts, in\n the end.<> ');}
break;
case 6:
{_out('Agent Alpha pretended to talk on his cellphone while waiting. <>He\n wondered why his orders insisted on a rescue. Rescue missions had \n high failure rates. What would happen if they couldn\'t rescue her?\n He realized that there was probably a second team working on an\n assassination as a contingency.<>');}
// he realized that the doctor's life was more valuable than those
// of his team
break;
default:
{_out('Agent Alpha pretended to talk on his cellphone while waiting.<>');}
break;
}
$alpha.waitUntilHandoffConversation++;
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:
{
switch($alpha.afterHandoffConversation)
{
case 0:
{_out('Agent Alpha gave up pretending to talk on his cellphone. He put\n his phone away.<>');}
break;
case 1:
{_out('Agent Alpha pondered his choice. Did he do the right thing?<>');}
break;
case 2:
{_out('Agent Alpha pondered his choice. <>\n With such a small team, they couldn\'t rely on overwhelming force\n to overpower the enemy. Many civilians could potentially\n be at risk.<>');}
break;
case 3:
{_out('Agent Alpha pondered his choice. <>\n Were they really expected to go on a suicide mission to save\n Dr. Galland?.<>');}
break;
case 4:
{_out('Agent Alpha pondered his choice. <>\n Dr. Galland\'s knowledge would be dangerous in the hands of the\n Dawn Militia though. Millions of lives could be at risk.<>');}
break;
case 5:
{_out('Agent Alpha pondered his choice. <>\n There must be a second team, surely. No one would gamble everything\n on one operation. There had to be a plan B!<>');}
break;
case 6:
{_out('Agent Alpha pondered his choice. <>\n What would he tell the rest of the team?<>');}
break;
case 7:
{_out('Agent Alpha pondered his choice. <>\n He\'d have to tell his team that the circumstances changed. That he\n was compromised somehow. <>');}
break;
case 8:
{_out('Agent Alpha pondered his choice. <>\n He\'d tell his team that he noticed some extra guards, that some of the\n people in the lobby were looking at him suspiciously, that it was \n too dangerous.<>');}
break;
case 9:
{_out('Agent Alpha pondered his choice. <>\n He was sure his team would understand. They were already unhappy with\n how dangerous the mission was.<>');}
break;
case 10:
{_out('Agent Alpha pondered his choice. <>\n He\'d tell his team that he noticed some extra guards, that some of the\n people in the lobby were looking at him suspiciously, that it was \n too dangerous.<>');}
break;
case 11:
{_out('Agent Alpha pondered his choice. <>\n He and his team were alive, but he had failed his country.<>');}
break;
case 12:
{_out('Agent Alpha pondered his choice. <>\n Deep inside, he knew that he was a coward. When it ultimately\n mattered, he was unable to do the right thing.<>');}
break;
case 13:
{_out('Agent Alpha pondered his choice. <>\n He felt ashamed. He was no hero.<>');}
break;
case 14:
default:
{_out('Agent Alpha stared blankly at a wall, lost in his thoughts.<>');}
break;
}
$alpha.afterHandoffConversation++;
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('As soon as Agent Alpha and Dr. Galland entered the\n parking garage, they quickly climbed a flight of metal stairs \n to the second floor. At the top, he looked over the railing\n to see if there were any pursuers coming up.<>\n He heard some footsteps. Agent Alpha fingered a remote detonator\n in his pocket that he could use to blow-up the stairs. A head\n appeared. Agent Alpha smiled when he realized it was Agent Bravo.<>\n AGENT BRAVO: It\'s all clear. No one followed us.<>\n The three of them darted down a different set of stairs to \n a lower level where Agent Charlie was waiting at the getaway\n car. They all jumped in, and Agent Charlie drove them out of the \n garage and onto the highway.<>');}
}
else
{
{_out('Agent Alpha and Dr. Galland quickly climbed a flight of \n concrete stairs. When they reached the second floor, Agent\n Alpha signalled to Dr. Galland to stay silent. He listened\n intently, straining to hear footsteps of possible pursuers.\n Hearing nothing, he then moved to the outer wall of the \n garage where he could see out onto the streets.<>\n Agent Alpha finally relaxed.<>\n DR. GALLAND: Are we safe?\n AGENT ALPHA: Almost. We just have a little bit further to\n go.<>\n Agent Alpha led Dr. Galland down a different set of stairs\n to the basement of the garage. There, Agent Charlie was\n waiting at the getaway car. They all hopped into the car, \n and Agent Charlie drove them out of the garage and onto the \n highway.<>');}
}
}
else
{
if ($bravo.hasAncestor($Garage))
{
{_out('As soon as Agent Alpha and Dr. Galland entered the\n parking garage, they quickly climbed a flight of metal stairs \n to the second floor. At the top, he looked over the railing\n to see if there were any pursuers coming up.<>\n He heard some footsteps. Agent Alpha fingered a remote detonator\n in his pocket that he could use to blow-up the stairs. A head\n appeared. Agent Alpha smiled when he realized it was Agent Bravo.<>\n AGENT BRAVO: It\'s all clear. No one followed us.<>\n The three of them descended a different set of stairs to \n the basement. The getaway car was waiting for them there.\n Dr. Galland eagerly jumped in, but the two agents climbed\n in under a haze of exhaustion. The engine came to life, and\n they drove out of the garage and onto the highway.<>');}
}
else
{
{_out('Agent Alpha and Dr. Galland quickly climbed a flight of \n concrete stairs. When they reached the second floor, Agent\n Alpha signalled to Dr. Galland to stay silent. He listened\n intently, straining to hear footsteps of possible pursuers.\n Hearing nothing, he then moved to the outer wall of the \n garage where he could see out onto the streets.<>\n Agent Alpha finally relaxed.<>\n DR. GALLAND: Are we safe?\n AGENT ALPHA: Almost. We just have a little bit further to\n go.<>\n Agent Alpha led Dr. Galland down a different set of stairs\n to the basement of the garage. \n The getaway car was waiting for them there.\n Dr. Galland eagerly jumped in, but Agent Alpha followed\n in a haze of exhaustion. He wordlessly started the engine\n and 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 sped up a parking ramp at high speed and then darted\nthrough the rows of parked cars. The tires squealed and smoked as\nshe swerved, straining to keep them on the road.<>\nAgent Charlie slammed on the brakes near a stairwell. Agent Alpha and\nDr. Galland jumped out of the car and ran down the stairwell to the\nbasement while Agent Charlie stepped out, pulled out her gun, and waited at \nthe top for possible pursuers. Seeing none, she ran down the\nstairs herself, joining them at the getaway car.<>\nAGENT CHARLIE: It\'s all clear.<>\nAGENT ALPHA: Let\'s go then.<>\nThey jumped into the car, and Agent Charlie drove them out of the \ngarage 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;
$bravo.waitAt5Option = 0;
return 2;
}
case 2:
{
// Let Alpha run the intro conversation
if (!$alpha.endIntroConversation)
return 2;
// Agent Bravo stays behind a bit longer.
return 3;
}
case 3:
{
{_out('Agent Bravo picked up his gear: a briefcase and a brown paper bag.\nHe left the apartment.<>');}
$bravo.moveTo($MainBlvd1);
{_out('Agent Bravo exited the apartments onto the boulevard.<>');}
return 4;
}
case 4:
{
{_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 5;
}
case 5:
{
if ($bravo.bomb1)
{
$bomb.moveTo($MainBlvd1);
{_out('Agent Bravo dropped his brown paper bag 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 6;
}
case 6:
{
{_out('Agent Bravo walked east down Main Boulevard.<>');}
$bravo.moveTo($MainBlvd3);
{_out('Agent Bravo walked in from the west.<>');}
return 7;
}
case 7:
{
if ($bomb._parent != null)
{
{_out('Agent Bravo walked east down Main Boulevard.<>');}
return -9;
}
{_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 8;
}
case 8:
{
if ($bravo.bomb3)
{
{_out('Agent Bravo casually tossed his brown paper bag 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 -9;
return 9;
}
case 9:
{
$bravo.moveTo($MainBlvd4);
{_out('Agent Bravo walked in from the west.<>');}
return 10;
}
case 10:
{
{_out('As Agent Bravo walked, he pondered about the mission. Why did the\norders insist on a rescue? If the main concern was to prevent\nthe Dawn Militia from gaining bio-weapons expertise, then an \nassassination would be much safer and less likely to fail.<>\n\nAgent Bravo walked east down Main Boulevard.<>');}
$bravo.moveTo($MainBlvd5);
{_out('Agent Bravo walked in from the west.<>');}
return 11;
}
case 11:
{
{_out('As Agent Bravo walked, he pondered about the mission. Deep inside, \nhe knew why the agency sent them on such a dangerous rescue mission. \nUltimately, the agency felt that Dr. Galland\'s life was more\nvaluable than those of the team.<>\n\nHe looked up 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 12;
}
case 12:
{
if ($bravo.useClockTower)
return -13;
else
return -18;
//*****************************************************
return 13;
}
case 13:
{
{_out('Agent Bravo entered the clock tower.<>');}
$bravo.moveTo($ClockTower);
{_out('Agent Bravo entered the clock tower.<>');}
return 14;
}
case 14:
{
{_out('The clock tower was now a government administrative building. Agent\nBravo nonchalantly strode through the lobby to the inner corridors of \nthe building. He came across a door marked, \"maintenance only.\" Waiting\nuntil the corridor was empty, he forced the door open and found a \nladder leading up to the top of the \nclock tower. He climbed.<>');}
return 15;
}
case 15:
{
{_out('The roof of the clock tower was made of uneven, crumbling stone. Agent\nBravo looked over the edge to street below. The angle was awkward, but he\nhad a clear shot to below. He moved up against a low wall, where he\ncould lie down without being seen from the surrounding buildings.<>');}
return 16;
}
case 16:
{
{_out('Opening up his briefcase, Agent Bravo looked at his sniper rifle inside.\nHe meticulously removed each piece from the briefcase, inspected it, and \nassembled them together.<>');}
return 17;
}
case 17:
{
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 lay beside a low wall on the roof of the clock tower,\nwaiting for events to unfold.<>');}
}
return 17;
//*****************************************************
return 18;
}
case 18:
{
if ($alpha.isWalkingDownMainWithGalland
&& $alpha._parent == $bravo._parent)
{
{_out('Agent Bravo nodded to Agent Alpha, but kept his distance.<>');}
return 19;
}
switch($bravo.waitAt5Option)
{
case 0:
{_out('Agent Bravo stopped to look at some of the shops on the street.<>');}
break;
case 1:
{_out('Agent Bravo looked at the window display of a watch store.\n The store was selling the latest watches with chronosync\n movements.<>');}
break;
case 2:
{_out('Agent Bravo strolled further down the street to an antique\n toy store.<>');}
break;
case 3:
{_out('Agent Bravo stared at the window display of the antique\n toy store. He was particularly interested by the wooden train\n they had. He admired the craftsmanship involved where\n everything was done with handtools. <>');}
break;
case 4:
{_out('Looking at the toy train in the store window caused Agent\n Bravo to reminisce about the years before the Dawn Militia\n became so prominent. <>');}
break;
case 5:
{_out('Agent Bravo shook those thoughts from his mind and returned\n to looking at the shop windows.<>');}
break;
default:
{_out('Agent Bravo browsed the window displays of shops while\n waiting. <>');}
}
$bravo.waitAt5Option++
return 18;
//*****************************************************
return 19;
}
case 19:
{
if ($bravo.isDead)
{
return -20;
}
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 19;
return 20;
}
case 20:
{
return 20;
return 21;
}
case 21:
{
{_out('Agent Bravo was standing here. <>');}
return 21;
return 22;
}
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;
$charlie.parkedConversationMessage = 0;
$charlie.nextParkedMessage = function() {
switch($charlie.parkedConversationMessage)
{
case 0:
{_out('Agent Charlie was waiting in a parked car.<>\n She drummed her fingers on the steering wheel.<>');}
break;
case 1:
{_out('Agent Charlie was waiting in a parked car.<>\n She drummed her fingers on the dashboard.<>');}
break;
case 2:
{_out('Agent Charlie was waiting in a parked car.<>\n She looked at the car\'s rear view mirrors, seeing\n if they were adjusted properly.<>');}
break;
case 3:
{_out('Agent Charlie was waiting in a parked car.<>\n She wondered if she should be doing something to \n look less suspicious. Perhaps she should pretend\n that the car had broken down.<>');}
break;
case 4:
{_out('Agent Charlie was waiting in a parked car.<>\n She didn\'t want to attract any unnecessary attention\n from the local police. Maybe she should pretend\n that she had stopped her car here so that she\n could talk on her cellphone.<>');}
break;
case 5:
{_out('Agent Charlie was waiting in a parked car.<>\n She returned to drumming her fingers on the steering\n wheel.<>');}
break;
case 6:
{_out('Agent Charlie was waiting in a parked car.<>\n She hated the waiting. That\'s one thing that never\n came up during training. The endless waiting.<>');}
break;
case 7:
{_out('Agent Charlie was waiting in a parked car.<>\n After months of rigorous survival training, the gruelling\n endurance sessions, and the painful challenges to\n break you down and rebuild you, she found that the \n waiting was what she was unprepared for.<>');}
break;
case 8:
{_out('Agent Charlie was waiting in a parked car.<>\n She wanted to shoot some badguys. She wanted to break\n some necks. Instead, she was waiting, by herself, in a\n car, trying not to look suspicious.<>');}
break;
case 9:
{_out('Agent Charlie was waiting in a parked car.<>\n She wondered how long she would have to wait this time.\n Ten minutes? Ten hours? Ten days?<>');}
break;
case 10:
{_out('Agent Charlie was waiting in a parked car.<>\n She looked down at the baggy coat she was wearing. She\n looked stupid in it, but she needed the room to conceal\n her gun.<>');}
break;
case 11:
{_out('Agent Charlie was waiting in a parked car.<>\n Men could wear loose fitting jackets with space for guns\n and other toys and still look normal. Not so for women.<>');}
break;
case 12:
{_out('Agent Charlie was waiting in a parked car.<>\n Of course, the more ridiculous you looked, the less likely\n it was for witnesses to remember other identifying features.<>');}
break;
case 13:
{_out('Agent Charlie was waiting in a parked car.<>\n She wondered if she had screwed up by challenging Agent Alpha\n earlier. She shrugged it off. She called it like she saw it.<>');}
break;
case 14:
{_out('Agent Charlie was waiting in a parked car.<>\n The mission wasn\'t as well planned as the other ones she had been\n involved with, but if they pulled it off, she would definitely\n be trusted with much more interesting missions in the future.<>');}
break;
case 15:
{_out('Agent Charlie was waiting in a parked car.<>\n She drummed her fingers on the gear shift.<>');}
break;
default:
{_out('Agent Charlie was waiting in a parked car.<>');}
break;
}
$charlie.parkedConversationMessage++;
}
return 2;
}
case 2:
{
// Let Alpha run the intro conversation
if (!$alpha.endIntroConversation)
return 2;
{_out('Agent Charlie left the apartment. Agent Bravo stayed behind.<>');}
$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 -21;
{_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 -20;
{_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. She ripped out the stereo \nto make it look like common thieves had stolen the car and then\nwiped the car clean of fingerprints. <>');}
return 18;
}
case 18:
{
{_out('Agent Charlie walked down a set of stairs until she reached\nthe team\'s primary getaway car. She got inside and waited\nfor the other team members to arrive.<>');}
//*****************************************************
return 19;
}
case 19:
{
if ($alpha.hasAncestor($Garage))
return -25;
$charlie.nextParkedMessage();
return 19;
//*****************************************************
return 20;
}
case 20:
{
$charlie.parkedAt = 3;
if ($alpha.hasAncestor($Viaduct3))
return -25;
$charlie.nextParkedMessage();
return 20;
//*****************************************************
return 21;
}
case 21:
{
$charlie.parkedAt = 5;
if ($alpha.charlieToLoadingDock)
return -22;
if ($alpha.charlieSaves)
return -24;
$charlie.nextParkedMessage();
return 21;
//*****************************************************
return 22;
}
case 22:
{
{_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 23;
}
case 23:
{
if ($alpha.hasAncestor($LoadingDock))
return -25;
{_out('Agent Charlie waited in a parked car here.<>');}
return 23;
//*****************************************************
return 24;
}
case 24:
{
{_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 25;
//*****************************************************
// We're in the car with Alpha. Let Alpha take over all movement now
return 25;
}
case 25:
{
if ($charlie.isDead)
return -34;
if ($alpha.splitWithCharlie)
return -26;
if ($alpha._parent != $charlie._parent && $alpha.isInCar)
$charlie.moveTo($alpha._parent);
return 25;
// TODO: here
//*****************************************************
return 26;
}
case 26:
{
$charlie.moveTo($Viaduct4);
{_out(' Agent Charlie drove in from the east.<>');}
return 27;
}
case 27:
{
{_out('Agent Charlie drove \noff to the west down Viaduct Road.<>');}
$charlie.moveTo($Viaduct3);
{_out(' Agent Charlie drove in\nfrom the east.<>');}
return 28;
}
case 28:
{
if ($outdoorGuards.isStoppingCar)
return -32;
{_out('Agent Charlie drove off to the west \ndown Viaduct Road.<>');}
$charlie.moveTo($Viaduct2);
{_out(' Agent Charlie drove in\nfrom the east.<>');}
return 29;
}
case 29:
{
{_out('Agent Charlie drove\noff to the west down Viaduct Road.<>');}
$charlie.moveTo($Viaduct1);
{_out(' Agent Charlie drove in\nfrom the east.<>');}
return 30;
}
case 30:
{
if ($outdoorGuards.isStoppingCar)
return -32;
{_out('Agent Charlie drove into the parking\ngarage.<>');}
$charlie.moveTo($Garage);
{_out(' Agent Charlie drove in\nfrom Viaduct Road.<>');}
return 31;
}
case 31:
{
{_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 33;
//*****************************************************
return 32;
}
case 32:
{
// outdoorGuards handle this interaction
return 32;
return 33;
}
case 33:
{
{_out('Agent Charlie was standing here. <>');}
return 33;
return 34;
}
case 34:
{
return 34;
return 35;
}
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;
if ($roomGuards.calledSpotterToLoadingDock)
return -10;
{_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. They needed someone\n from the area to help them with hotels and to 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 me\n getting hurt, then you\'re worried about me having a gun \n to protect myself?\n Make up your mind.<>');}
break;
case 22:
{_out('MAN: (talking into cellphone) It\'s not fishy. 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 VIP or something.<>');}
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 may be good looking, but \n you\'re my 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 14;
}
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:
{
{_out('A man in a dirty jacket sat on one of the lobby couches, talking\nloudly into his cellphone. <>');}
{_out('MAN: (talking into cellphone) Oh wait, I\'ve got another call.<>\nThe man pressed some buttons on his cellphone.<>\nMAN: (talking into cellphone) Sure, I\'ll come down right away.<>');}
{_out('The man quickly walked down the hallway towards the back of the hotel.<>\n');}
$spotter.moveTo($BackHallway);
{_out('A man walked in from the hotel lobby.<>');}
return 11;
}
case 11:
{
{_out('The man from the lobby walked to the back of the hotel.<>');}
$spotter.moveTo($Backroom);
{_out(' man walked into the room from the hallway.<>');}
return 12;
}
case 12:
{
{_out('The man from the lobby exited the hotel to the loading dock.<>');}
$spotter.moveTo($LoadingDock);
{_out('A man walked out of the back of the hotel to the loading dock.<>');}
return 13;
}
case 13:
{
// Let the room guards handle the interaction here
return 13;
return 14;
}
case 14:
{
return 14;
return 15;
}
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;
$roomGuards.calledSpotterToLoadingDock = 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 -25;
{_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 -25;
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))
{
return -18;
}
else
{
{_out('Three guards were standing here with Dr. Galland. <>');}
}
return 17;
//*****************************************************
return 18;
}
case 18:
{
// let the convoy manage the interaction
if ($convoy.hasAncestor($LoadingDock))
return 18;
return -19;
return 19;
}
case 19:
{
{_out('The guards relaxed now that the convoy left.<>\nGUARD 1: Should we take care of the local now?<>\nGUARD 2: Might as well.<>\nThe first guard pulled out a cellphone and made a call.<>\nGUARD 1: (talking on his cellphone) Can you come out to the loading \ndock?<>');}
$roomGuards.calledSpotterToLoadingDock = true;
return 20;
}
case 20:
{
if ($spotter.hasAncestor($LoadingDock))
{
{_out(' Three guards were here taking a break.<>');}
return 21;
}
{_out(' Three guards were here taking a break.<>');}
return 20;
return 21;
}
case 21:
{
{_out('GUARD: You\'re here.<>\nMAN FROM LOBBY: So is the job over? Do you have the rest of my pay?<>\nGUARD: I\'ve got it right here.<>\nThe guard dug through his pocket and pulled out a bundle of bills.\nAnother guard came up and stood behind the man from the lobby.<>\n<a do=\"roomGuards?set#killTheLocal-');
_out(time);
_out('\">Kill the local</a><>\n<a do=\"roomGuards?unset#killTheLocal-');
_out(time);
_out('\">Let him live</a><>\n');}
return 22;
}
case 22:
{
if ($roomGuards.killTheLocal)
{
{_out('The man from the lobby took the bundle of bills and started to\n thumb through it, making sure it was all there. While the man\n was distracted, the guard standing behind him drew a pistol from\n his jacket, aimed it at the man\'s head and fired.<>');}
}
else
{
{_out('The man from the lobby took the bundle of bills and started to\n thumb through it, making sure it was all there.<> \n GUARD: You happy?<>\n MAN: Yeah, I\'m happy.<>');}
}
return 23;
}
case 23:
{
{_out('GUARD 1: We\'d better go.<>\nGUARD 2: Yeah.<>');}
return 24;
}
case 24:
{
return 24;
//*****************************************************
return 25;
}
case 25:
{
return 25;
return 26;
}
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 wildly. \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 grenade launcher\nand 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 squealed 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 military 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 grenade launcher 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 guards at the loading dock trained their guns on the SUV as\none of the SUV doors opened. A man came out and handed a piece of\npaper to one of the guards. The guard read it and nodded. The other\nguards lowered their guns, and shoved Dr. Galland into 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) + '">';
document.onkeypress = function(evt)
{
if (!evt) var evt = window.event;
var key;
if (evt.charCode)
key = evt.charCode;
else
key = evt.keyCode;
if (evt.shiftKey && (key == 68 || key == 100))
{
_out.save();
handleObjectClick('debug', null, null);
displayOutput(_out.popSave());
return false;
}
};
// 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:
198 kB
·
Xet hash:
49508861d4ffcfbfdda4c65de50135064bab806a66099d9a01bf757ca15ef6e6

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