Symbol 71 MovieClip Frame 1
stop();
Symbol 105 MovieClip Frame 50
gotoAndPlay (1);
Symbol 105 MovieClip Frame 61
stop();
Symbol 108 MovieClip Frame 1
stop();
Symbol 247 MovieClip Frame 1
stop();
Symbol 262 MovieClip [booster_lamp] Frame 1
stop();
Symbol 263 MovieClip [GameArea] Frame 1
#initclip 22
Object.registerClass("GameArea", com.midasplayer.webracer.GameArea);
#endinitclip
Symbol 294 MovieClip Frame 1
stop();
Symbol 302 MovieClip Frame 1
stop();
Symbol 321 MovieClip Frame 1
stop();
Symbol 323 MovieClip [WebRacer] Frame 1
#initclip 21
Object.registerClass("WebRacer", com.midasplayer.webracer.WebRacer);
#endinitclip
Symbol 338 MovieClip Frame 1
stop();
Symbol 360 MovieClip [__Packages.com.midasplayer.timing.Timeable] Frame 0
interface com.midasplayer.timing.Timeable
{
}
Symbol 361 MovieClip [__Packages.com.midasplayer.webracer.WebRacer] Frame 0
class com.midasplayer.webracer.WebRacer extends MovieClip implements com.midasplayer.timing.Timeable
{
var gotGameData, communicator, timer, gameArea, infoBar, infoBarSmall, bg, timeLabel;
function WebRacer () {
super();
}
function init() {
if (debug) {
_root.gameData = ((((((((("<gamedata duration=\"300\" randomseed=\"4711\"><track id=\"1\" name=\"n_imola\" url=\"http://royalgames.com/games/webracer/n_imola.swf\"/><track id=\"2\" name=\"n_monaco\" url=\"http://royalgames.com/games/webracer/n_monaco.swf\"/><text id=\"right\">Right</text><text id=\"key_space\">SPACE BAR</text><text id=\"start\">START</text><text id=\"game_instructions_header\">GAME INSTRUCTIONS</text><text id=\"wrong_way\">WRONG WAY</text><text id=\"lap\">Lap</text><text id=\"minimize\">Minimize window</text><text id=\"game_instructions\">Race three laps across each track and make number one before the race end to win. Pick up boost cubes to use for overtaking.</text><text id=\"boost\">Boost</text><text id=\"turn_around\">TURN AROUND</text><text id=\"accelerate\">Accelerate</text><text id=\"left\">Left</text><text id=\"track\">Track</text><text id=\"end_game\">END GAME</text><text id=\"controls_header\">CONTROLS</text><text id=\"break\">Break/Reverse</text>" + "<text id=\"lap_time\">Lap {0} time</text>") + "<text id=\"total_time\">TOTAL TIME</text>") + "<text id=\"score\">SCORE</text>") + "<text id=\"total_score\">TOTAL SCORE</text>") + "<text id=\"qualify\">QUALIFIED FOR RACE 2</text>") + "<text id=\"not_qualify\">DID NOT QUALIFY</text>") + "<text id=\"game_over\">GAME OVER</text>") + "<text id=\"race_start_in\">Race 2 starts in {0} seconds.</text>") + "<text id=\"game_end_in\">Game ends in {0} seconds.</text>") + "</gamedata>";
}
gotGameData = false;
communicator = new com.midasplayer.webracer.Communicator();
timer = new com.midasplayer.timing.Timer(this, 15);
}
function onEnterFrame() {
if (!inited) {
init();
inited = true;
}
if (!gotGameData) {
if (_root.gameData != undefined) {
gotGameData = true;
communicator.parseGameData(_root.gameData);
communicator.gameStarted();
gameArea.init(communicator, infoBar, infoBarSmall, bg);
gameArea.loadMap(0);
}
} else {
timer.advanceTime();
}
}
function tick(tick) {
fps = (fps * 0.8) + (timer.fps * 0.2);
timeLabel.text = "FPS: " + Math.floor(fps);
gameArea.tick(tick);
gameArea.fps = fps;
}
function render(tick, alpha) {
gameArea.render(tick, alpha);
}
static var debug = true;
var inited = false;
var fps = 0;
}
Symbol 362 MovieClip [__Packages.com.midasplayer.webracer.GameArea] Frame 0
class com.midasplayer.webracer.GameArea extends MovieClip
{
static var instance;
var timeOutTimer, skidmarks, createEmptyMovieClip, checkFpsIn, shouldSetBgVisible, renderSkidmarks, enteredText, bg, dynamicObjects, lapTimes, totalScore, quitIn, startLapTwoIn, communicator, soundEngine, boostTimes, infoBar, infoBarSmall, hjulgran, xCamPos, yCamPos, miniMapBg, attachMovie, beginTime, opponents, minimapDots, boostMcs, mapNum, mapName, raceStarted, mapMC, miniMapMC, keyRecorder, gameLogic, road, wall, car, minimap, xMinimapOffset, yMinimapOffset, minimapScale, raceOverPosition, raceOverLapEndTime, needleRot, xCam, yCam, _x, _y, globalToLocal;
function GameArea () {
super();
}
function init(communicator, infoBar, infoBarSmall, bg) {
timeOutTimer = 5400;
_root.egoPanel._visible = false;
_root.egoPanel._alpha = 100;
skidmarks = createEmptyMovieClip("skidmarks", 60);
skidmarks.lineStyle(5, 0, 100);
skidmarks.moveTo(200, 200);
checkFpsIn = -1;
shouldSetBgVisible = false;
com.midasplayer.webracer.Communicator.gameArea = this;
renderSkidmarks = false;
enteredText = "";
this.bg = bg;
dynamicObjects = new Array();
lapTimes = new Array();
totalScore = 0;
quitIn = -1;
startLapTwoIn = -1;
this.communicator = communicator;
_root.wrongWayWarning._visible = false;
_root.finishWindow._visible = false;
soundEngine = new com.midasplayer.webracer.SoundEngine(this);
boostTimes = new Array();
boostTimes[0] = -1;
boostTimes[1] = -1;
boostTimes[2] = -1;
this.infoBar = infoBar;
this.infoBarSmall = infoBarSmall;
hjulgran = new com.midasplayer.webracer.Hjulgran(_root.hjulgran, this);
instance = this;
createEmptyMovieClip("mapMC", 50);
createEmptyMovieClip("miniMapMC", 200);
Key.addListener(this);
Selection.addListener(this);
xCamPos = new com.midasplayer.timing.IFloat();
yCamPos = new com.midasplayer.timing.IFloat();
miniMapBg = attachMovie("MiniMapBg", "miniMapBg", 199);
miniMapBg.minimizeButton.gameArea = this;
miniMapBg.gameArea = this;
miniMapBg.minimizeButton.onRelease = function () {
this.gameArea.minimizeMinimap();
};
miniMapBg.onMouseDown = function () {
this.hh = 37;
if (this.bigPanel._visible) {
this.hh = this._height;
}
if ((((this._xMouse > 0) && (this._yMouse > 0)) && (this._xMouse <= this._width)) && (this._yMouse <= this.hh)) {
this.dragging = true;
this.xDragStart = this._xMouse;
this.yDragStart = this._yMouse;
}
};
miniMapBg.onMouseUp = function () {
this.dragging = false;
};
miniMapBg.onMouseMove = function () {
if (this.dragging) {
this.gameArea.miniMapX = this.gameArea.miniMapX + (this._xMouse - this.xDragStart);
this.gameArea.miniMapY = this.gameArea.miniMapY + (this._yMouse - this.yDragStart);
}
};
infoBar.boosterMeter0.gotoAndStop(3);
infoBar.boosterMeter1.gotoAndStop(3);
infoBar.boosterMeter2.gotoAndStop(3);
infoBarSmall.boosterMeter0.gotoAndStop(3);
infoBarSmall.boosterMeter1.gotoAndStop(3);
infoBarSmall.boosterMeter2.gotoAndStop(3);
infoBarSmall._visible = false;
infoBar.minimizeButton.gameArea = this;
infoBar.minimizeButton.onRelease = function () {
this.gameArea.toggleInfobar();
};
infoBarSmall.minimizeButton.gameArea = this;
infoBarSmall.minimizeButton.onRelease = function () {
this.gameArea.toggleInfobar();
};
infoBar.soundOnButton.gameArea = this;
infoBar.soundOnButton.onRelease = function () {
this.gameArea.toggleSound();
};
infoBar.soundOffButton.gameArea = this;
infoBar.soundOffButton.onRelease = function () {
this.gameArea.toggleSound();
};
_root.endGameButton.gameArea = this;
_root.endGameButton.onRelease = function () {
this.gameArea.endGameButtonPressed();
};
infoBar.soundOnButton._visible = false;
Key.addListener(this);
beginTime = getTimer();
}
function loadMap(mapNum) {
opponents = new Array();
minimapDots = new Array();
boostMcs = new Object();
isInited = false;
pickedUpBoosters = 0;
usedBoosters = 0;
boosts = 0;
lap = 0;
var _local2 = 0;
while (_local2 < dynamicObjects.length) {
dynamicObjects[_local2].unloadMovie();
_local2++;
}
dynamicObjects = new Array();
this.mapNum = mapNum;
var _local4 = communicator.trackUrls[mapNum + 1].toString();
var _local7 = communicator.trackNames[mapNum + 1].toString();
mapName = _local7;
mapLoaded = false;
raceStarted = false;
if (mapNum > 0) {
mapMC.unloadMovie();
miniMapMC.unloadMovie();
}
skidmarks.clear();
skidmarks = createEmptyMovieClip("skidmarks", 60);
skidmarks.lineStyle(5, 0, 100);
skidmarks.moveTo(200, 200);
var _local5 = new MovieClipLoader();
loadCount = 0;
_local5.addListener({onLoadProgress:function () {
}, onLoadInit:function () {
com.midasplayer.webracer.GameArea.instance.mapDataLoaded();
}, onLoadError:function (target_mc, errorCode) {
com.midasplayer.webracer.GameArea.instance.loadFailed("Failed to load the level data: " + errorCode);
}});
communicator.loadMapData(_local4);
var _local3 = _local5.loadClip(_local4, mapMC);
_local3 = _local3 & _local5.loadClip(_local4, miniMapMC);
if (!_local3) {
loadFailed("Failed to load the level data");
}
}
function loadFailed(reason) {
_root.finishWindow._visible = true;
bg._visible = true;
soundEngine.stopEngine();
_root.finishWindow.titleText.text = "ERROR";
_root.finishWindow.lapTimeText._visible = false;
_root.finishWindow.totalTimeText._visible = false;
_root.finishWindow.scoreText._visible = false;
_root.finishWindow.totalScoreText._visible = false;
_root.finishWindow.lapTimeNumber._visible = false;
_root.finishWindow.totalTimeNumber._visible = false;
_root.finishWindow.scoreNumber._visible = false;
_root.finishWindow.totalScoreText._visible = false;
_root.finishWindow.totalScoreNumber._visible = false;
_root.finishWindow.gameOverText._visible = true;
_root.finishWindow.loaderProgress._visible = false;
_root.finishWindow.gameOverText.text = "Exiting";
_root.finishWindow.errorText.text = reason;
communicator.gameEnd(totalScore);
quitIn = getTimer() + 7000;
}
function mapDataLoaded() {
loadCount++;
if (loadCount == 3) {
initMap();
_root.startWindow.loaderProgress._visible = false;
_root.finishWindow.loaderProgress._visible = false;
if (mapNum > 0) {
startLapTwoIn = getTimer() + 7000;
} else {
_root.startWindow.startButton.onRelease = function () {
_root.startWindow._visible = false;
com.midasplayer.webracer.GameArea.instance.soundEngine.stopIntroSong();
com.midasplayer.webracer.GameArea.instance.prepareStartRace();
};
}
}
}
function initMap() {
if (isInited) {
return(undefined);
}
isInited = true;
keyRecorder = new com.midasplayer.webracer.KeyRecorder();
if (mapNum == 0) {
soundEngine.playIntroSong();
}
var _local19 = communicator.parseMapData();
var _local20 = communicator.parsedPositions;
var _local21 = communicator.pathData;
gameLogic = new com.midasplayer.webracer.GameLogic(_local19, _local20, _local21, this, mapNum, communicator.seed);
var _local13 = mapMC.mapdata0.split(";");
var _local14 = new Array();
var _local2 = 0;
while (_local2 < _local13.length) {
var _local8 = _local13[_local2].split(":");
var _local12 = parseInt(_local8[0], 36);
var _local11 = parseInt(_local8[1], 36);
var _local9 = parseInt(_local8[2], 36);
if (!((isNaN(_local12) || (isNaN(_local11))) || (isNaN(_local9)))) {
_local14.push(new com.midasplayer.webracer.PathPoint(_local12, _local11, _local9));
}
_local2++;
}
var _local7 = new Array();
var _local3 = 100;
for (var _local17 in mapMC) {
if ((_local17.length > 2) && (_local17.substr(0, 2) == "wp")) {
mapMC[_local17]._visible = false;
} else if (_local17 == "car") {
mapMC[_local17]._visible = false;
} else if ((_local17.length > 7) && (_local17.substr(0, 8) == "opponent")) {
mapMC[_local17]._visible = false;
} else if ((_local17.length > 4) && (_local17.substr(0, 5) == "boost")) {
mapMC[_local17]._visible = false;
} else if ((_local17.length > 3) && (_local17.substr(0, 4) == "road")) {
road = mapMC[_local17];
} else if ((_local17.length > 3) && (_local17.substr(0, 4) == "wall")) {
wall = mapMC[_local17];
}
}
_local2 = 0;
while (_local2 < 5) {
var _local6 = attachMovie("Car", "Car" + _local3, _local3++);
dynamicObjects.push(_local6);
_local6._x = gameLogic.opponentMotions[_local2].pos.x / 4096;
_local6._y = gameLogic.opponentMotions[_local2].pos.y / 4096;
var _local10 = new com.midasplayer.webracer.Car(_local6, _local7.length + 1);
_local10.isComputer = true;
_local10.playerCar = true;
_local10.init(5);
_local7.push(_local10);
var _local5 = attachMovie("MinimapDot", "car", 100 + (_local3++));
dynamicObjects.push(_local5);
_local5.icon.gotoAndStop(_local7.length + 1);
minimapDots.push(_local5);
_local5._visible = miniMapBg.bigPanel._visible;
_local2++;
}
_local2 = 0;
while (_local2 < 1) {
var _local6 = attachMovie("Car", "Car" + _local3, _local3++);
dynamicObjects.push(_local6);
_local6._x = gameLogic.carMotion.pos.x / 4096;
_local6._y = gameLogic.carMotion.pos.y / 4096;
car = new com.midasplayer.webracer.Car(_local6, 0);
car.playerCar = true;
car.init(5);
car.isComputer = false;
var _local5 = attachMovie("MinimapDot", "car", 100 + (_local3++));
dynamicObjects.push(_local5);
_local5.icon.gotoAndStop(1);
minimapDots.push(_local5);
_local5._visible = miniMapBg.bigPanel._visible;
_local2++;
}
_local2 = 0;
while (_local2 < 3) {
var _local4 = attachMovie("booster", "booster", _local3++);
dynamicObjects.push(_local4);
_local4._x = gameLogic.boosts[_local2].x / 4096;
_local4._y = gameLogic.boosts[_local2].y / 4096;
_local4.taken = false;
boostMcs["boost" + _local2] = _local4;
_local2++;
}
for (var _local17 in miniMapMC) {
if ((_local17.length > 3) && (_local17.substr(0, 4) == "road")) {
minimap = miniMapMC[_local17];
miniMapMC[_local17]._visible = true;
} else {
miniMapMC[_local17]._visible = false;
}
}
minimap.swapHeights(4);
minimap._alpha = 100;
road._visible = false;
wall._visible = false;
var _local16 = communicator.mapWidth;
var _local15 = communicator.mapHeight;
xMinimapOffset = 0;
yMinimapOffset = 0;
minimapScale = 1;
if (_local16 > _local15) {
minimapScale = 120 / _local16;
_local15 = _local15 * minimapScale;
_local16 = _local16 * minimapScale;
yMinimapOffset = (-(130 - _local15)) / 2;
} else {
minimapScale = 130 / _local15;
_local16 = _local16 * minimapScale;
_local15 = _local15 * minimapScale;
xMinimapOffset = (-(120 - _local16)) / 2;
}
minimap._width = _local16;
minimap._height = _local15;
var _local18 = new Color(minimap);
_local18.setRGB(16777215);
minimap._visible = miniMapBg.bigPanel._visible;
car.setToCarMotion(gameLogic.carMotion);
car.setToCarMotion(gameLogic.carMotion);
_local2 = 0;
while (_local2 < _local7.length) {
var _local10 = new com.midasplayer.webracer.Opponent(_local7[_local2], _local14, this);
_local10.speedMod = 1 - (_local2 * 0.1);
opponents.push(_local10);
opponents[_local2].car.setToCarMotion(gameLogic.opponentMotions[_local2]);
opponents[_local2].car.setToCarMotion(gameLogic.opponentMotions[_local2]);
_local2++;
}
mapLoaded = true;
shouldSetBgVisible = true;
}
function prepareStartRace() {
hjulgran.dropDown(true);
}
function startRace() {
raceStarted = true;
raceStartTime = getTimer();
var _local2 = 0;
while (_local2 < opponents.length) {
opponents[_local2].start();
_local2++;
}
soundEngine.startEngine();
soundEngine.stopIntroSong();
communicator.raceStarted(mapNum, mapName, 0);
}
function onKillFocus() {
car.turnLeft = false;
car.turnRight = false;
car.accelerate = false;
car.brake = false;
car.handBrake = false;
}
function tick(tick) {
if (mapLoaded) {
timeOutTimer--;
if (timeOutTimer == 0) {
endGameButtonPressed();
beginTime = getTimer();
}
}
if ((checkFpsIn > 0) && (getTimer() > checkFpsIn)) {
checkFpsIn = -1;
if (fps < 15) {
_root._quality = "LOW";
}
}
if (quitIn > 0) {
var _local12 = Math.floor((quitIn - getTimer()) / 1000);
if (_local12 < 0) {
_local12 = 0;
}
_root.finishWindow.gameOverText.text = _global.textMappings.game_end_in.split("{0}").join(_local12);
if (_local12 == 0) {
quitIn = -1;
communicator.gameQuit();
}
}
if ((raceOverTime > 0) && (getTimer() > raceOverTime)) {
raceOverTime = -1;
doRaceOver(raceOverPosition, raceOverLapEndTime);
}
if (startLapTwoIn > 0) {
var _local12 = Math.floor((startLapTwoIn - getTimer()) / 1000);
_root.finishWindow.gameOverText._visible = true;
_root.finishWindow.gameOverText.text = _global.textMappings.race_start_in.split("{0}").join(_local12);
if (getTimer() > startLapTwoIn) {
_root.finishWindow._visible = false;
startLapTwoIn = -1;
prepareStartRace();
}
}
var _local10 = gameLogic.raceTimeInMilliseconds;
var _local13 = Math.floor(_local10 / 10) % 100;
var _local11 = Math.floor(_local10 / 1000) % 60;
var _local14 = Math.floor((_local10 / 1000) / 60);
infoBar.timeMeter.number0.gotoAndStop((_local13 % 10) + 1);
infoBar.timeMeter.number1.gotoAndStop(Math.floor(_local13 / 10) + 1);
infoBar.timeMeter.number2.gotoAndStop((_local11 % 10) + 1);
infoBar.timeMeter.number3.gotoAndStop(Math.floor(_local11 / 10) + 1);
infoBar.timeMeter.number4.gotoAndStop((_local14 % 10) + 1);
infoBar.timeMeter.number5.gotoAndStop(Math.floor(_local14 / 10) + 1);
infoBarSmall.timeMeter.number0.gotoAndStop((_local13 % 10) + 1);
infoBarSmall.timeMeter.number1.gotoAndStop(Math.floor(_local13 / 10) + 1);
infoBarSmall.timeMeter.number2.gotoAndStop((_local11 % 10) + 1);
infoBarSmall.timeMeter.number3.gotoAndStop(Math.floor(_local11 / 10) + 1);
infoBarSmall.timeMeter.number4.gotoAndStop((_local14 % 10) + 1);
infoBarSmall.timeMeter.number5.gotoAndStop(Math.floor(_local14 / 10) + 1);
if (mapLoaded) {
if (raceStarted) {
miniMapBg.raceMeter.number.gotoAndStop(mapNum + 2);
var _local8 = gameLogic.carMotion.lap + 2;
if (_local8 > 4) {
_local8 = 4;
}
miniMapBg.lapMeter.number.gotoAndStop(_local8);
if (!raceOver) {
currentTime = getTimer();
car.turnLeft = Key.isDown(37) || (Key.isDown(65));
car.turnRight = Key.isDown(39) || (Key.isDown(68));
car.accelerate = Key.isDown(38) || (Key.isDown(87));
car.brake = Key.isDown(40) || (Key.isDown(83));
isBoosting = false;
var _local4 = 0;
while (_local4 < 3) {
if (boostTimes[_local4] >= 0) {
isBoosting = true;
if ((getTimer() - boostTimes[_local4]) > 3000) {
boostTimes[_local4] = -1;
}
}
_local4++;
}
} else {
car.turnLeft = false;
car.turnRight = false;
car.accelerate = false;
car.brake = true;
}
var _local4 = 0;
while (_local4 < 3) {
if (_local4 < boosts) {
infoBar["boosterMeter" + _local4].gotoAndStop(1);
infoBarSmall["boosterMeter" + _local4].gotoAndStop(1);
} else if ((_local4 == boosts) && (isBoosting)) {
infoBar["boosterMeter" + _local4].gotoAndStop(2);
infoBarSmall["boosterMeter" + _local4].gotoAndStop(2);
} else {
infoBar["boosterMeter" + _local4].gotoAndStop(3);
infoBarSmall["boosterMeter" + _local4].gotoAndStop(3);
}
_local4++;
}
_local10 = gameLogic.raceTimeInMilliseconds;
_local13 = Math.floor(_local10 / 10) % 100;
_local11 = Math.floor(_local10 / 1000) % 60;
_local14 = Math.floor((_local10 / 1000) / 60);
if (_local11 >= 200) {
if (communicator.endGamePressed()) {
communicator.gameEnd(totalScore);
quitIn = getTimer();
}
}
var _local9 = Key.isDown(32);
if (!raceOver) {
keyRecorder.record(car.accelerate, car.brake, car.turnLeft, car.turnRight, _local9 && (!wasSpaceDown));
gameLogic.tick(car.accelerate, car.brake, car.turnLeft, car.turnRight, _local9 && (!wasSpaceDown));
}
wasSpaceDown = _local9;
car.setToCarMotion(gameLogic.carMotion);
position = 1;
_local4 = 0;
while (_local4 < opponents.length) {
opponents[_local4].car.setToCarMotion(gameLogic.opponentMotions[_local4]);
if (gameLogic.carMotion.progress < gameLogic.opponentMotions[_local4].progress) {
position++;
}
_local4++;
}
if (position < oldPosition) {
soundEngine.playOverTake();
}
if (position > oldPosition) {
soundEngine.playUnderTake();
}
oldPosition = position;
infoBar.posMeter.gotoAndStop(7 - position);
infoBarSmall.posMeter.gotoAndStop(7 - position);
var _local6 = 150;
var _local5 = _local6 * (((gameLogic.carMotion.speed / 4096) / 20) * 150);
if (_local5 < 0) {
_local5 = 0;
}
if (_local5 > _local6) {
_local5 = _local6;
}
soundVal = _local5 / _local6;
_local5 = _local6 * ((gameLogic.carMotion.speed / 4096) / 30);
if (_local5 < 0) {
_local5 = 0;
}
if (_local5 > _local6) {
_local5 = _local6;
}
needleRot = _local5 / _local6;
}
var _local7 = ((gameLogic.carMotion.speed / 4096) / 20) * 150;
if (firstTick) {
xCam = (gameLogic.carMotion.pos.x / 4096) + (Math.cos(gameLogic.carMotion.dir / 4096) * _local7);
yCam = (gameLogic.carMotion.pos.y / 4096) + (Math.sin(gameLogic.carMotion.dir / 4096) * _local7);
xCamPos.set(xCam);
yCamPos.set(yCam);
xCamPos.set(xCam);
yCamPos.set(yCam);
firstTick = false;
} else {
if (!raceOver) {
xCam = (xCam * 0.65) + (((gameLogic.carMotion.pos.x / 4096) + (Math.cos(gameLogic.carMotion.dir / 4096) * _local7)) * 0.35);
yCam = (yCam * 0.65) + (((gameLogic.carMotion.pos.y / 4096) + (Math.sin(gameLogic.carMotion.dir / 4096) * _local7)) * 0.35);
}
xCamPos.set(xCam);
yCamPos.set(yCam);
}
}
hjulgran.gameTick();
soundEngine.gameTick((car.accelerate && (gameLogic.carMotion.dirA > -380)) && (gameLogic.carMotion.dirA < 380), (gameLogic.carMotion.speed / 4096) / 30);
}
function lapCompleted(lap) {
var _local3 = gameLogic.raceTimeInMilliseconds;
if (lap > 0) {
lapTimes[lap - 1] = _local3;
if (lap > 1) {
lapTimes[lap - 1] = lapTimes[lap - 1] - lapTimes[lap - 2];
}
if (lap > 2) {
lapTimes[lap - 1] = lapTimes[lap - 1] - lapTimes[lap - 3];
}
communicator.lapCompleted(lap - 1, position - 1, keyRecorder.getString(), gameLogic.raceTimeInMilliseconds);
if (lap == 3) {
raceOverTime = getTimer() + 3000;
raceOver = true;
raceOverPosition = position;
raceOverLapEndTime = _local3;
}
soundEngine.playFinishLap(lap);
}
}
function boosterTaken(i) {
communicator.boosterPickedUp(gameLogic.raceTimeInMilliseconds);
soundEngine.playGetBooster();
boosts++;
boostMcs["boost" + i].mc.gotoAndPlay(51);
boostMcs["boost" + i].taken = true;
}
function boosterUsed() {
boostTimes[usedBoosters] = getTimer();
boosts--;
car.boost = 1;
car.mc.boost.gotoAndPlay(2);
soundEngine.playUseBooster();
communicator.boosterUsed(gameLogic.raceTimeInMilliseconds);
}
function doRaceOver(position, lapEndTime) {
checkFpsIn = -1;
_root._quality = "HIGH";
_root.finishWindow._visible = true;
bg._visible = true;
soundEngine.stopEngine();
var _local6 = gameLogic.raceTimeInMilliseconds;
var _local4 = Math.max(20000 - Math.floor(_local6 / 10), 0);
communicator.raceCompleted(mapNum, position - 1, gameLogic.raceTimeInMilliseconds, _local4);
totalScore = totalScore + _local4;
if ((mapNum == 0) && (!_global.shortGameMode)) {
if (position == 1) {
raceOver = false;
soundEngine.playWinSong();
_root.finishWindow.titleText.text = _global.textMappings.qualify;
} else {
soundEngine.playLoseSong();
_root.finishWindow.titleText.text = _global.textMappings.not_qualify;
}
} else {
soundEngine.playWinSong();
_root.finishWindow.titleText.text = _global.textMappings.game_over;
}
_root.finishWindow.lapTimeNumber.text = (((getTimeString(lapTimes[0]) + "\r") + getTimeString(lapTimes[1])) + "\r") + getTimeString(lapTimes[2]);
_root.finishWindow.totalTimeNumber.text = getTimeString(gameLogic.raceTimeInMilliseconds);
_root.finishWindow.scoreNumber.text = _local4;
if ((_global.shortGameMode || (mapNum == 1)) || (position > 1)) {
_root.finishWindow.totalScoreText._visible = true;
_root.finishWindow.totalScoreNumber._visible = true;
_root.finishWindow.totalScoreNumber.text = totalScore;
_root.finishWindow.gameOverText._visible = true;
_root.finishWindow.loaderProgress._visible = false;
} else {
_root.finishWindow.totalScoreText._visible = false;
_root.finishWindow.totalScoreNumber._visible = false;
_root.finishWindow.gameOverText._visible = false;
_root.finishWindow.loaderProgress._visible = true;
_root.finishWindow.loaderProgress.gotoAndStop(1);
}
if (((!_global.shortGameMode) && (mapNum == 0)) && (position == 1)) {
loadMap(mapNum + 1);
} else {
communicator.gameEnd(totalScore);
quitIn = getTimer() + 7000;
}
}
function getTimeString(milliseconds) {
var _local3 = Math.floor(milliseconds / 10) % 100;
var _local2 = Math.floor(milliseconds / 1000) % 60;
var _local4 = Math.floor(milliseconds / 60000) % 100;
var _local1 = "";
if (_local4 < 10) {
_local1 = _local1 + "0";
}
_local1 = _local1 + (_local4 + ":");
if (_local2 < 10) {
_local1 = _local1 + "0";
}
_local1 = _local1 + (_local2 + ":");
if (_local3 < 10) {
_local1 = _local1 + "0";
}
_local1 = _local1 + _local3;
return(_local1);
}
function getNeedleRot() {
return(needleRot);
}
function render(tick, alpha) {
if (mapLoaded) {
var _local5 = Math.floor(needleRot * 25);
if (_local5 > 25) {
_local5 = 25;
}
if (_local5 < 0) {
_local5 = 0;
}
infoBar.speedMeter.gotoAndStop(_local5 + 1);
infoBarSmall.speedMeter.gotoAndStop(_local5 + 1);
_x = Math.round((-xCamPos.get(alpha)) + 377.5);
_y = Math.round((-yCamPos.get(alpha)) + 300);
var _local6 = mapMC._width;
var _local7 = mapMC._height;
_local6 = communicator.mapWidth;
_local7 = communicator.mapHeight;
if (_x > 0) {
_x = 0;
}
if (_x < ((-_local6) + Stage.width)) {
_x = (-_local6) + Stage.width;
}
if (_y > 0) {
_y = 0;
}
if (_y < ((-_local7) + Stage.height)) {
_y = (-_local7) + Stage.height;
}
if (miniMapX < 0) {
miniMapX = 0;
}
if (miniMapY < 0) {
miniMapY = 0;
}
if (miniMapX > (755 - miniMapBg._width)) {
miniMapX = 755 - miniMapBg._width;
}
if (miniMapY > (600 - miniMapBg.hh)) {
miniMapY = 600 - miniMapBg.hh;
}
miniMapBg._x = (-_x) + miniMapX;
miniMapBg._y = (-_y) + miniMapY;
minimap._x = (miniMapBg._x - xMinimapOffset) + 16;
minimap._y = (miniMapBg._y - yMinimapOffset) + 40;
car.render(alpha);
if (renderSkidmarks && ((gameLogic.carMotion.dirA < -380) || (gameLogic.carMotion.dirA > 380))) {
globalToLocal(car.oldLeftWheelPoint);
globalToLocal(car.oldRightWheelPoint);
globalToLocal(car.leftWheelPoint);
globalToLocal(car.rightWheelPoint);
if (Math.random() < 0.8) {
skidmarks.moveTo(car.oldRightWheelPoint.x, car.oldRightWheelPoint.y);
skidmarks.lineTo(car.rightWheelPoint.x, car.rightWheelPoint.y);
}
if (Math.random() < 0.8) {
skidmarks.moveTo(car.oldLeftWheelPoint.x, car.oldLeftWheelPoint.y);
skidmarks.lineTo(car.leftWheelPoint.x, car.leftWheelPoint.y);
}
}
minimapDots[opponents.length]._x = minimap._x + (car.mc._x * minimapScale);
minimapDots[opponents.length]._y = minimap._y + (car.mc._y * minimapScale);
minimapDots[opponents.length]._rotation = car.mc._rotation;
var _local3 = 0;
while (_local3 < opponents.length) {
opponents[_local3].render(alpha);
minimapDots[_local3]._x = minimap._x + (opponents[_local3].car.mc._x * minimapScale);
minimapDots[_local3]._y = minimap._y + (opponents[_local3].car.mc._y * minimapScale);
minimapDots[_local3]._rotation = opponents[_local3].car.mc._rotation;
_local3++;
}
} else {
var _local8 = Math.floor((mapMC.getBytesLoaded() * 24) / mapMC.getBytesTotal());
_root.startWindow.loaderProgress.gotoAndStop(_local8 + 1);
_root.finishWindow.loaderProgress.gotoAndStop(_local8 + 1);
}
soundEngine.render(alpha);
hjulgran.render(alpha);
if (shouldSetBgVisible) {
shouldSetBgVisible = false;
bg._visible = false;
}
}
function onKeyDown() {
var _local3 = chr(Key.getAscii());
if (_local3 == "q") {
enteredText = "";
} else {
enteredText = enteredText + _local3;
if (enteredText == "skids") {
renderSkidmarks = !renderSkidmarks;
skidmarks.clear();
skidmarks = createEmptyMovieClip("skidmarks", 60);
skidmarks.lineStyle(5, 0, 100);
skidmarks.moveTo(200, 200);
enteredText = "";
}
if (enteredText == "notch") {
_root.egoPanel._visible = !_root.egoPanel._visible;
enteredText = "";
}
}
if (_local3 == "m") {
minimizeMinimap();
}
if (_local3 == "n") {
toggleInfobar();
}
if (_local3 == "s") {
toggleSound();
}
}
function onKeyUp() {
}
function minimizeMinimap() {
miniMapBg.bigPanel._visible = !miniMapBg.bigPanel._visible;
minimap._visible = miniMapBg.bigPanel._visible;
var _local2 = 0;
while (_local2 <= opponents.length) {
minimapDots[_local2]._visible = miniMapBg.bigPanel._visible;
_local2++;
}
miniMapBg.hh = 37;
if (miniMapBg.bigPanel._visible) {
miniMapBg.hh = miniMapBg._height;
}
}
function toggleInfobar() {
infoBar._visible = !infoBar._visible;
infoBarSmall._visible = !infoBarSmall._visible;
}
function toggleSound() {
infoBar.soundOnButton._visible = !infoBar.soundOnButton._visible;
infoBar.soundOffButton._visible = !infoBar.soundOffButton._visible;
soundEngine.toggleSound();
}
function endGameButtonPressed() {
if (communicator.endGamePressed()) {
communicator.gameEnd(totalScore);
quitIn = getTimer();
}
}
function checkFps() {
checkFpsIn = getTimer() + 3000;
}
var mapLoaded = false;
var firstTick = true;
var lap = 0;
var wasAccelerating = false;
var wrongLapTime = 0;
var boosts = 0;
var raceStartTime = 0;
var pickedUpBoosters = 0;
var position = 0;
var usedBoosters = 0;
var loadCount = 0;
var miniMapX = 597;
var miniMapY = 354;
var oldPosition = 7;
var isBoosting = false;
var fps = 0;
var isInited = false;
var nearestDistanceToNext = 1E16;
var raceOverTime = -1;
var raceOver = false;
var wasSpaceDown = false;
var currentTime = 0;
var soundVal = 0;
}
Symbol 363 MovieClip [__Packages.com.midasplayer.timing.IFloat] Frame 0
class com.midasplayer.timing.IFloat
{
function IFloat () {
}
function set(newValue) {
lastValue = value;
value = newValue;
}
function get(alpha) {
return(lastValue + ((value - lastValue) * alpha));
}
var value = 0;
var lastValue = 0;
}
Symbol 364 MovieClip [__Packages.com.midasplayer.webracer.SoundEngine] Frame 0
class com.midasplayer.webracer.SoundEngine
{
var soundMc, sound, vol, accelVol, speedVol1, speedVol2, speedVol3, targetVol, engineSoundIdle, engineSoundRun1, engineSoundRun2, engineSoundRun3, ambientSound1, ambientSound2, ambientSound3, ambientSound4, introSong, getBooster, useBooster, overTake, underTake, finishRace, lap1Sound, lap2Sound, loseGameSound, winGameSound, countdownSound1, countdownSound2, gasSound, breakSound, wasAccelerating;
function SoundEngine (ownerMc) {
soundMc = ownerMc.createEmptyMovieClip("soundMcc", 9999);
sound = new Sound(soundMc);
vol = new com.midasplayer.timing.IFloat(80);
accelVol = new com.midasplayer.timing.IFloat(0);
speedVol1 = new com.midasplayer.timing.IFloat(0);
speedVol2 = new com.midasplayer.timing.IFloat(0);
speedVol3 = new com.midasplayer.timing.IFloat(0);
targetVol = 80;
engineSoundIdle = new com.midasplayer.webracer.SoundHolder(soundMc, "engineSoundIdle");
engineSoundRun1 = new com.midasplayer.webracer.SoundHolder(soundMc, "engineSoundRun1");
engineSoundRun2 = new com.midasplayer.webracer.SoundHolder(soundMc, "engineSoundRun2");
engineSoundRun3 = new com.midasplayer.webracer.SoundHolder(soundMc, "engineSoundRun3");
ambientSound1 = new com.midasplayer.webracer.SoundHolder(soundMc, "ambientSound1");
ambientSound2 = new com.midasplayer.webracer.SoundHolder(soundMc, "ambientSound2");
ambientSound3 = new com.midasplayer.webracer.SoundHolder(soundMc, "ambientSound3");
ambientSound4 = new com.midasplayer.webracer.SoundHolder(soundMc, "ambientSound4");
introSong = new com.midasplayer.webracer.SoundHolder(soundMc, "introSong");
getBooster = new com.midasplayer.webracer.SoundHolder(soundMc, "getBooster");
useBooster = new com.midasplayer.webracer.SoundHolder(soundMc, "useBooster");
overTake = new com.midasplayer.webracer.SoundHolder(soundMc, "overTake");
underTake = new com.midasplayer.webracer.SoundHolder(soundMc, "underTake");
finishRace = new com.midasplayer.webracer.SoundHolder(soundMc, "finishRace");
lap1Sound = new com.midasplayer.webracer.SoundHolder(soundMc, "lap1Sound");
lap2Sound = new com.midasplayer.webracer.SoundHolder(soundMc, "lap2Sound");
loseGameSound = new com.midasplayer.webracer.SoundHolder(soundMc, "loseGameSound");
winGameSound = new com.midasplayer.webracer.SoundHolder(soundMc, "winGameSound");
countdownSound1 = new com.midasplayer.webracer.SoundHolder(soundMc, "countdownSound1");
countdownSound2 = new com.midasplayer.webracer.SoundHolder(soundMc, "countdownSound2");
gasSound = new com.midasplayer.webracer.SoundHolder(soundMc, "GasSound");
breakSound = new com.midasplayer.webracer.SoundHolder(soundMc, "BreakSound");
sound.setVolume(80);
}
function toggleSound() {
if (targetVol == 0) {
targetVol = 80;
} else {
targetVol = 0;
}
}
function setVolume(vol) {
targetVol = vol * 80;
}
function startEngine() {
engineSoundIdle.setVolume(100);
engineSoundIdle.playLooping();
breakSound.setVolume(100);
gasSound.setVolume(100);
engineRunning = true;
wasAccelerating = false;
var _local2 = 2;
while (_local2 < 3) {
this["engineSoundRun" + (_local2 + 1)].setVolume(0);
this["engineSoundRun" + (_local2 + 1)].playLooping(0);
_local2++;
}
}
function stopEngine() {
engineSoundIdle.stop();
engineSoundIdle.setVolume(100);
breakSound.stop();
gasSound.stop();
engineRunning = false;
var _local2 = 0;
while (_local2 < 3) {
this["engineSoundRun" + (_local2 + 1)].stop();
this["engineSoundRun" + (_local2 + 1)].setVolume(0);
_local2++;
}
}
function render(alpha) {
sound.setVolume(vol.get(alpha));
engineSoundIdle.setVolume((100 - accelVol.get(alpha)) * engineVolume);
engineSoundRun1.setVolume((accelVol.get(alpha) * speedVol1.get(alpha)) * engineVolume);
engineSoundRun2.setVolume((accelVol.get(alpha) * speedVol2.get(alpha)) * engineVolume);
engineSoundRun3.setVolume((accelVol.get(alpha) * speedVol3.get(alpha)) * engineVolume);
}
function gameTick(accelerating, speed) {
if (isNaN(speed)) {
speed = 0;
}
if (speed > 1) {
speed = 1;
}
if (engineRunning) {
if (accelerating != wasAccelerating) {
if (accelerating) {
breakSound.stop();
gasSound.sound.start(speed * 3);
} else {
gasSound.stop();
breakSound.play();
}
}
if (accelerating) {
if (gasSound.sound.position > (gasSound.sound.duration * 0.9)) {
gasSound.stop();
gasSound.sound.start(speed * 4.5);
}
}
wasAccelerating = accelerating;
if (speed > 0.1) {
tick--;
if (tick <= 0) {
tick = 25 + Math.floor(Math.random() * 50);
var _local2 = lastSound;
while ((_local2 == lastSound) || (_local2 == lastLastSound)) {
_local2 = Math.floor(Math.random() * 4);
}
this["ambientSound" + (lastLastSound + 1)].stop();
lastLastSound = lastSound;
lastSound = _local2;
this["ambientSound" + (_local2 + 1)].stop();
this["ambientSound" + (_local2 + 1)].setPan(Math.floor((Math.random() * 200) - 100));
this["ambientSound" + (_local2 + 1)].setVolume(Math.floor((Math.random() * 50) + 50));
this["ambientSound" + (_local2 + 1)].play();
}
}
}
oldSpeed = speed;
speed = speed * speed;
vol.set((vol.get(1) * 0.5) + (targetVol * 0.5));
accelVol.set((accelVol.get(1) * 0.6) + ((accelerating ? 100 : 0) * 0.4));
var _local7 = Math.max(1 - (Math.abs(speed - 0) * 1), 0);
var _local5 = Math.max(1 - (Math.abs(speed - 0.7) * 2), 0);
var _local6 = Math.max(1 - (Math.abs(speed - 1) * 3), 0);
speedVol1.set((speedVol1.get(1) * 0.5) + ((_local7 * ((speed * 0.5) + 0.5)) * 0.5));
speedVol2.set((speedVol2.get(1) * 0.5) + ((_local5 * ((speed * 0.5) + 0.5)) * 0.5));
speedVol3.set((speedVol3.get(1) * 0.5) + ((_local6 * ((speed * 0.5) + 0.5)) * 0.5));
}
function playIntroSong() {
introSong.stop();
introSong.play();
}
function stopIntroSong() {
introSong.stop();
}
function playGetBooster() {
getBooster.stop();
getBooster.play();
}
function playUseBooster() {
useBooster.stop();
useBooster.play();
}
function playOverTake() {
overTake.stop();
overTake.play();
}
function playUnderTake() {
underTake.stop();
underTake.play();
}
function playWinSong() {
winGameSound.stop();
winGameSound.play();
}
function playLoseSong() {
loseGameSound.stop();
loseGameSound.play();
}
function playCountdownSound(num) {
if (num == 0) {
countdownSound1.stop();
countdownSound1.play();
} else {
countdownSound2.stop();
countdownSound2.play();
}
}
function playFinishLap(lap) {
if (lap == 1) {
lap1Sound.stop();
lap1Sound.play();
} else if (lap == 2) {
lap2Sound.stop();
lap2Sound.play();
} else {
finishRace.stop();
finishRace.play();
}
}
static var engineVolume = 0.3;
var engineRunning = false;
var tick = 0;
var lastSound = -1;
var lastLastSound = -1;
var oldSpeed = 0;
var lastDownShiftTime = 0;
}
Symbol 365 MovieClip [__Packages.com.midasplayer.webracer.SoundHolder] Frame 0
class com.midasplayer.webracer.SoundHolder
{
var soundMc, sound;
function SoundHolder (ownerMc, soundName) {
var _local2 = ownerMc.getNextHighestDepth();
soundMc = ownerMc.createEmptyMovieClip("soundMcc" + _local2, _local2);
sound = new Sound(soundMc);
sound.attachSound(soundName);
}
function setPan(pan) {
sound.setPan(pan);
}
function setVolume(volume) {
sound.setVolume(volume);
}
function playLooping() {
sound.start(0, 9999999);
}
function play() {
sound.start(0);
}
function stop() {
sound.stop();
}
}
Symbol 366 MovieClip [__Packages.com.midasplayer.webracer.Hjulgran] Frame 0
class com.midasplayer.webracer.Hjulgran
{
var mc, gameArea, pos, posD, posDD, gameStarted, startTime;
function Hjulgran (mc, gameArea) {
this.mc = mc;
this.gameArea = gameArea;
lastTick = 0;
pos = new com.midasplayer.timing.IFloat();
pos.set(250);
posD = 0;
posDD = 0;
gameStarted = true;
}
function gameTick() {
var _local3 = pos.get(1) + posD;
posD = posD + posDD;
mc._visible = _local3 < 250;
if (_local3 > 250) {
posD = 0;
posDD = 0;
_local3 = 250;
gameArea.checkFps();
}
if (_local3 < 50) {
posD = 0;
posDD = 0;
_local3 = 50;
}
pos.set(_local3);
var _local2 = Math.floor((getTimer() - startTime) / 500) - 2;
if ((_local2 >= 0) && (_local2 <= 5)) {
if (lastTick != _local2) {
lastTick = _local2;
if (_local2 > 0) {
if (_local2 < 5) {
gameArea.soundEngine.playCountdownSound(0);
} else {
gameArea.soundEngine.playCountdownSound(1);
}
}
}
mc.lights.gotoAndStop(_local2 + 1);
}
if ((_local2 >= 5) && (!gameStarted)) {
dropDown(false);
gameStarted = true;
gameArea.startRace();
}
}
function dropDown(shouldDrop) {
if (shouldDrop) {
mc.lights.gotoAndStop(1);
gameStarted = false;
pos.set(250);
posD = 0;
posDD = 0;
startTime = getTimer();
posDD = -4;
} else {
posDD = 4;
}
}
function render(alpha) {
mc._y = -pos.get(alpha);
}
var lastTick = 0;
}
Symbol 367 MovieClip [__Packages.com.midasplayer.webracer.Communicator] Frame 0
class com.midasplayer.webracer.Communicator
{
static var isReady;
var trackNames, trackUrls, gameEndPressed, mayEndGame, mapDataXML, mapWidth, mapHeight, parsedPositions, pathData, seed;
function Communicator () {
trackNames = new Array();
trackUrls = new Array();
gameEndPressed = false;
mayEndGame = false;
}
function gameStarted() {
fscommand ("gameStart");
mayEndGame = true;
}
function raceStarted(racenum, mapname, localtime) {
if (gameEndPressed) {
return(undefined);
}
fscommand ("playData", ((((("844," + racenum) + " ") + mapname) + " ") + localtime) + "=0");
}
function boosterPickedUp(localtime) {
if (gameEndPressed) {
return(undefined);
}
fscommand ("playData", ("237," + localtime) + "=0");
}
function boosterUsed(localtime) {
if (gameEndPressed) {
return(undefined);
}
fscommand ("playData", ("972," + localtime) + "=0");
}
function lapCompleted(lap, position, gamedata, localtime) {
if (gameEndPressed) {
return(undefined);
}
fscommand ("playData", ((((((("470," + lap) + " ") + position) + " ") + gamedata) + " ") + localtime) + "=0");
}
function raceCompleted(racenum, position, localtime, score) {
if (gameEndPressed) {
return(undefined);
}
fscommand ("playData", (((((("185," + racenum) + " ") + position) + " ") + localtime) + "=") + score);
}
function endGamePressed() {
if (gameEndPressed) {
return(false);
}
if (!mayEndGame) {
return(false);
}
gameEndPressed = true;
fscommand ("playData", ("664," + getTimer()) + "=0");
return(true);
}
function gameEnd(score) {
mayEndGame = false;
fscommand ("gameEnd", score);
}
function gameQuit() {
fscommand ("gameQuit");
}
function loadMapData(path) {
isReady = false;
mapDataXML = new XML();
mapDataXML.ignoreWhite = true;
mapDataXML.onLoad = function (success) {
if (success) {
com.midasplayer.webracer.Communicator.gameArea.mapDataLoaded();
} else {
com.midasplayer.webracer.Communicator.gameArea.loadFailed("Failed to load the level meta-data");
}
};
mapDataXML.load(path + ".xml");
}
function parseMapData() {
mapWidth = 256;
mapHeight = 256;
parsedPositions = new Object();
pathData = new Array();
var _local3 = mapDataXML.childNodes[0].childNodes;
var _local11 = "";
var _local2 = 0;
while (_local2 < _local3.length) {
if (_local3[_local2].nodeName == "data") {
_local11 = new String(_local3[_local2].firstChild.nodeValue);
}
if (_local3[_local2].nodeName.substring(0, 4) == "path") {
var _local7 = new Number(_local3[_local2].nodeName.substring(4, 5));
pathData[_local7.valueOf()] = new String(_local3[_local2].firstChild.nodeValue);
} else if (_local3[_local2].nodeName == "pos") {
var _local5 = new String(_local3[_local2].firstChild.nodeValue).split(",");
var _local4 = new String(_local5[0]);
var _local10 = new Number(_local5[1]);
var _local8 = new Number(_local5[2]);
var _local6 = new Number(_local5[3]);
parsedPositions[_local4] = new Object();
parsedPositions[_local4].x = _local10.valueOf() << 0;
parsedPositions[_local4].y = _local8.valueOf() << 0;
parsedPositions[_local4].rot = _local6.valueOf() << 0;
} else if (_local3[_local2].nodeName == "width") {
var _local9 = new Number(_local3[_local2].firstChild.nodeValue);
mapWidth = _local9.valueOf();
} else if (_local3[_local2].nodeName == "height") {
var _local9 = new Number(_local3[_local2].firstChild.nodeValue);
mapHeight = _local9.valueOf();
}
_local2++;
}
return(_local11);
}
function parseGameData(gameData) {
var _local7 = new XML(_root.gameData);
_global.shortGameMode = new String(_local7.childNodes[0].attributes.mode) == "short";
_global.textMappings = new Object();
var _local5 = _local7.childNodes[0].childNodes;
var _local8 = new Number(_local7.childNodes[0].attributes.randomseed);
seed = _local8.valueOf() & 16777215;
var _local4 = 0;
while (_local4 < _local5.length) {
if (_local5[_local4].nodeName == "text") {
_global.textMappings[_local5[_local4].attributes.id] = new String(_local5[_local4].firstChild.nodeValue);
}
if (_local5[_local4].nodeName == "track") {
var _local6 = new Number(_local5[_local4].attributes.id);
trackNames[_local6] = new String(_local5[_local4].attributes.name);
trackUrls[_local6] = new String(_local5[_local4].attributes.url);
}
_local4++;
}
_root.endGameText.text = _global.textMappings.end_game;
_root.endGameTextShadow.text = _global.textMappings.end_game;
_root.startWindow.startButton.labelText.text = _global.textMappings.game_instructions_header;
_root.startWindow.titleText.text = _global.textMappings.game_instructions_header;
_root.startWindow.instructionsText.text = _global.textMappings.game_instructions;
_root.startWindow.controlsText.text = _global.textMappings.controls_header;
_root.startWindow.accelerateText.text = _global.textMappings.accelerate;
_root.startWindow.leftText.text = _global.textMappings.left;
_root.startWindow.rightText.text = _global.textMappings.right;
_root.startWindow.breakText.text = _global.textMappings.break;
_root.startWindow.boostText.text = _global.textMappings.boost;
_root.startWindow.trackText.text = _global.textMappings.track;
_root.startWindow.lapText.text = _global.textMappings.lap;
_root.startWindow.minimizeText.text = _global.textMappings.minimize;
_root.startWindow.spacebarText.text = _global.textMappings.key_space;
_root.startWindow.spacebarTextBg.text = _global.textMappings.key_space;
_root.finishWindow.lapTimeText.text = (((_global.textMappings.lap_time.split("{0}").join("1") + "\r") + _global.textMappings.lap_time.split("{0}").join("2")) + "\r") + _global.textMappings.lap_time.split("{0}").join("3");
_root.finishWindow.totalTimeText.text = _global.textMappings.total_time;
_root.finishWindow.scoreText.text = _global.textMappings.score;
_root.finishWindow.totalScoreText.text = _global.textMappings.total_score;
_root.finishWindow.totalScoreText.text = _global.textMappings.total_score;
}
}
Symbol 368 MovieClip [__Packages.com.midasplayer.webracer.GameLogic] Frame 0
class com.midasplayer.webracer.GameLogic
{
var callback, map, pathDatas, waypoints, boosts, carMotion, opponentMotions, carPosition, raceTimeInTicks, raceTimeInMilliseconds;
function GameLogic (encodedMapData, positions, pathData, callback, race, seed) {
this.callback = callback;
map = new Array();
var _local5 = 0;
while (_local5 < 256) {
map[_local5] = new Array();
_local5++;
}
com.midasplayer.math.MathFP.init();
com.midasplayer.webracer.Rand.setSeed(seed);
rleDecode(encodedMapData, map);
pathDatas = new Array();
var _local2 = 0;
while (_local2 < pathData.length) {
pathDatas.push(parsePath(pathData[_local2]));
_local2++;
}
waypoints = new Array();
_local2 = 0;
while (true) {
var _local3 = positions["wp" + _local2];
if ((_local3 == null) || (_local3 == undefined)) {
break;
}
waypoints.push(new com.midasplayer.webracer.Waypoint(_local3.x, _local3.y, _local3.rot));
_local2++;
}
boosts = new Array();
_local2 = 0;
while (_local2 < 3) {
var _local7 = false;
_local5 = 0;
var _local4 = 0;
while (!_local7) {
_local5 = (com.midasplayer.webracer.Rand.nextByte() & 255) << 0;
_local4 = (com.midasplayer.webracer.Rand.nextByte() & 255) << 0;
if ((map[_local5][_local4] & 1) != 0) {
_local7 = true;
}
}
var _local6 = new Object();
_local6.x = (_local5 * 16) << 12;
_local6.y = (_local4 * 16) << 12;
_local6.rot = 0;
boosts[_local2] = _local6;
_local2++;
}
var _local12 = positions.car;
carMotion = new com.midasplayer.webracer.CarMotion(this, 0, race, _local12.x, _local12.y, _local12.rot - 6433);
opponentMotions = new Array();
_local2 = 0;
while (_local2 < 5) {
var _local8 = positions["opponent" + _local2];
opponentMotions[_local2] = new com.midasplayer.webracer.CarMotion(this, 4 - _local2, race, _local8.x, _local8.y, _local8.rot - 6433);
opponentMotions[_local2].isComputer = true;
_local2++;
}
carPosition = 0;
raceTimeInTicks = 0;
raceTimeInMilliseconds = 0;
fixBoosters();
}
function fixBoosters() {
boosts = new Array();
var _local6 = 0;
while (_local6 < 3) {
var _local5 = false;
var _local3 = 0;
var _local2 = 0;
while (!_local5) {
_local3 = (com.midasplayer.webracer.Rand.nextByte() & 255) << 0;
_local2 = (com.midasplayer.webracer.Rand.nextByte() & 255) << 0;
if (((map[_local3][_local2] & 1) != 0) && ((map[_local3][_local2] & 2) == 0)) {
_local5 = true;
}
}
var _local4 = new Object();
_local4.x = (_local3 * 16) << 12;
_local4.y = (_local2 * 16) << 12;
_local4.rot = 0;
boosts[_local6] = _local4;
_local6++;
}
}
function parsePath(path) {
var _local6 = path.split(";");
var _local7 = new Array();
var _local2 = 0;
while (_local2 < _local6.length) {
var _local1 = _local6[_local2].split(":");
var _local5 = parseInt(_local1[0], 36);
var _local4 = parseInt(_local1[1], 36);
var _local3 = parseInt(_local1[2], 36);
if (!((isNaN(_local5) || (isNaN(_local4))) || (isNaN(_local3)))) {
_local7.push(new com.midasplayer.webracer.PathPoint(_local5, _local4, _local3));
}
_local2++;
}
return(_local7);
}
function tick(up, down, left, right, boost) {
carMotion.playerTick();
carMotion.tick(up, down, left, right, boost);
var _local2 = 0;
while (_local2 < 5) {
opponentMotions[_local2].computerTick();
carMotion.checkCollide(opponentMotions[_local2]);
_local2++;
}
_local2 = 0;
while (_local2 < 3) {
if (boosts[_local2] != null) {
if (carMotion.checkTouch(boosts[_local2])) {
carMotion.boosters++;
boosts[_local2] = null;
callback.boosterTaken(_local2);
}
}
_local2++;
}
carMotion.move(carMotion.motion);
_local2 = 0;
while (_local2 < 5) {
opponentMotions[_local2].move(opponentMotions[_local2].motion);
carMotion.checkPush(opponentMotions[_local2]);
_local2++;
}
if (carMotion.lap < 3) {
raceTimeInTicks++;
raceTimeInMilliseconds = Math.floor((raceTimeInTicks * 1000) / 15);
carPosition = 1;
_local2 = 0;
while (_local2 < 5) {
if (carMotion.progress < opponentMotions[_local2].progress) {
carPosition++;
}
_local2++;
}
}
}
static function rleDecode(line, map) {
var _local3 = 0;
var _local1 = 0;
var _local2 = 0;
var _local7 = 0;
while (_local7 < line.length) {
var _local9 = line.charAt(_local7);
var _local8 = valChars.indexOf(_local9);
var _local6 = runChars.indexOf(_local9);
if (_local8 >= 0) {
_local3 = Math.floor(_local8);
_local6 = 1;
}
var _local5 = 0;
while (_local5 < _local6) {
map[_local1][_local2 + 0] = _local3 & 3;
map[_local1][_local2 + 1] = _local3 >> 2;
_local1++;
if (_local1 == 256) {
_local1 = 0;
_local2 = _local2 + 2;
}
_local5++;
}
_local7++;
}
if (_local2 < 255) {
_local1 = 0;
while (_local1 < 256) {
_local2 = 0;
while (_local2 < 256) {
map[_local1][_local2] = 0;
_local2++;
}
_local1++;
}
_local3 = 0;
_local1 = 0;
_local2 = 0;
_local7 = 0;
while (_local7 < line.length) {
var _local9 = line.charAt(_local7);
var _local8 = valChars.indexOf(_local9);
var _local6 = runChars.indexOf(_local9);
if (_local8 >= 0) {
_local3 = Math.floor(_local8);
_local6 = 1;
}
var _local5 = 0;
while (_local5 < _local6) {
map[_local1][_local2 + 0] = _local3 & 3;
map[_local1][_local2 + 1] = _local3 >> 2;
_local1++;
if (_local1 == 200) {
_local1 = 0;
_local2 = _local2 + 2;
}
_local5++;
}
_local7++;
}
}
}
static var valChars = "0123456789abcdefghijklmnopqrstuv";
static var runChars = "wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
}
Symbol 369 MovieClip [__Packages.com.midasplayer.math.VectorFP] Frame 0
class com.midasplayer.math.VectorFP
{
var x, y;
function VectorFP (px, py) {
x = px;
y = py;
}
function toString() {
return(((("[" + x) + ",") + y) + "]");
}
function reset(px, py) {
x = px;
y = py;
}
function resetNew(px, py) {
return(new com.midasplayer.math.VectorFP((x = px), (y = py)));
}
function cloneVec(vec) {
x = vec.x;
y = vec.y;
}
function cloneVecNew(vec) {
return(new com.midasplayer.math.VectorFP((x = vec.x), (y = vec.y)));
}
function addV(xScalar, yScalar) {
x = x + xScalar;
y = y + yScalar;
}
function addVec(vec) {
x = x + vec.x;
y = y + vec.y;
}
function addVecNew(vec) {
return(new com.midasplayer.math.VectorFP(x + vec.x, y + vec.y));
}
function minVec(vec) {
x = x - vec.x;
y = y - vec.y;
}
function minVecNew(vec) {
return(new com.midasplayer.math.VectorFP(x - vec.x, y - vec.y));
}
function getNegativeVec(vec) {
x = -x;
y = -y;
}
function getNegativeVecNew(vec) {
return(new com.midasplayer.math.VectorFP((x = -x), (y = -y)));
}
function scaleVec(scalar) {
x = com.midasplayer.math.MathFP.mul(x, scalar);
y = com.midasplayer.math.MathFP.mul(y, scalar);
}
function scaleVecNew(scalar) {
return(new com.midasplayer.math.VectorFP(com.midasplayer.math.MathFP.mul(x, scalar), com.midasplayer.math.MathFP.mul(y, scalar)));
}
function dot(vec) {
return(com.midasplayer.math.MathFP.mul(x, vec.x) + com.midasplayer.math.MathFP.mul(y, vec.y));
}
function getNormal() {
return(com.midasplayer.math.MathFP.sqrt(com.midasplayer.math.MathFP.mul(x, x) + com.midasplayer.math.MathFP.mul(y, y)));
}
function getNormalSqr() {
return(com.midasplayer.math.MathFP.mul(x, x) + com.midasplayer.math.MathFP.mul(y, y));
}
function distanceTo(v) {
var _local2 = x - v.x;
var _local3 = y - v.y;
return(com.midasplayer.math.MathFP.sqrt(com.midasplayer.math.MathFP.mul(_local2, _local2) + com.midasplayer.math.MathFP.mul(_local3, _local3)));
}
function normalize() {
var _local2 = getNormal();
if (_local2 == 0) {
_local2 = 1;
}
x = com.midasplayer.math.MathFP.div(x, _local2);
y = com.midasplayer.math.MathFP.div(y, _local2);
}
function getUnitVec() {
var _local2 = new com.midasplayer.math.VectorFP(x, y);
var _local3 = getNormal();
_local2.x = com.midasplayer.math.MathFP.div(_local2.x, _local3);
_local2.y = com.midasplayer.math.MathFP.div(_local2.y, _local3);
return(_local2);
}
}
Symbol 370 MovieClip [__Packages.com.midasplayer.math.MathFP] Frame 0
class com.midasplayer.math.MathFP
{
function MathFP () {
}
static function init() {
}
static function mul(i, j) {
return(((i >> 3) * (j >> 3)) >> 6);
}
static function div(i, j) {
var _local4 = false;
var _local3 = 12;
if (j == 4096) {
return(i);
}
if ((j & 4095) == 0) {
return(i / (j >> _local3));
}
if (((i < 0) && (j > 0)) || ((i > 0) && (j < 0))) {
_local4 = true;
}
if (i < 0) {
i = -i;
}
if (j < 0) {
j = -j;
}
while (Math.max(i, j) >= (1 << (31 - _local3))) {
i = i >> 1;
j = j >> 1;
_local3--;
}
var _local5 = ((i << _local3) / j) << (12 - _local3);
return((_local4 ? (-_local5) : (_local5)));
}
static function sqrt2(i, j) {
if (i == 0) {
return(0);
}
var _local2 = (i + 4096) >> 1;
var _local1 = 0;
while (_local1 < j) {
_local2 = (_local2 + div(i, _local2)) >> 1;
_local1++;
}
return(_local2);
}
static function sqrt(i) {
return(sqrt2(i, 8));
}
static function sin(i) {
var _local1 = (mul(i, 234682) >> 12) % 360;
if (_local1 < 0) {
_local1 = 360 + _local1;
}
if (_local1 < 90) {
return(SIN_TABLE[_local1]);
}
if (_local1 < 180) {
return(SIN_TABLE[179 - _local1]);
}
if (_local1 < 270) {
return(-SIN_TABLE[_local1 - 180]);
}
return(-SIN_TABLE[359 - _local1]);
}
static function cos(i) {
var _local1 = ((-(mul(i, 234682) >> 12)) + 90) % 360;
if (_local1 < 0) {
_local1 = 360 + _local1;
}
if (_local1 < 90) {
return(SIN_TABLE[_local1]);
}
if (_local1 < 180) {
return(SIN_TABLE[179 - _local1]);
}
if (_local1 < 270) {
return(-SIN_TABLE[_local1 - 180]);
}
return(-SIN_TABLE[359 - _local1]);
}
static var SIN_TABLE = [0, 71, 142, 214, 285, 356, 428, 499, 570, 640, 711, 781, 851, 921, 990, 1060, 1129, 1197, 1265, 1333, 1400, 1467, 1534, 1600, 1665, 1731, 1795, 1859, 1922, 1985, 2047, 2109, 2170, 2230, 2290, 2349, 2407, 2465, 2521, 2577, 2632, 2687, 2740, 2793, 2845, 2896, 2946, 2995, 3043, 3091, 3137, 3183, 3227, 3271, 3313, 3355, 3395, 3435, 3473, 3510, 3547, 3582, 3616, 3649, 3681, 3712, 3741, 3770, 3797, 3823, 3848, 3872, 3895, 3917, 3937, 3956, 3974, 3991, 4006, 4020, 4033, 4045, 4056, 4065, 4073, 4080, 4086, 4090, 4093, 4095];
}
Symbol 371 MovieClip [__Packages.com.midasplayer.webracer.CarMotion] Frame 0
class com.midasplayer.webracer.CarMotion
{
var gameLogic, id, isComputer, boosters, acceleration, lap, currentLap, targetPoint, nextWaypoint, lastWaypoint, pos, motion, facing, dir, dirA, boost, speed, potentialSpeed, list, speedMod, pushTime, progress;
function CarMotion (gameLogic, id, race, x, y, dir) {
this.gameLogic = gameLogic;
this.id = id;
isComputer = false;
boosters = 0;
acceleration = 0;
lap = 0;
currentLap = 0;
targetPoint = 0;
nextWaypoint = 0;
lastWaypoint = gameLogic.waypoints.length - 1;
pos = new com.midasplayer.math.VectorFP(x, y);
motion = new com.midasplayer.math.VectorFP(0, 0);
facing = new com.midasplayer.math.VectorFP(0, 0);
this.dir = dir;
dirA = 0;
boost = 0;
speed = 0;
potentialSpeed = 0;
var _local3 = gameLogic.pathDatas.length;
list = gameLogic.pathDatas[id % _local3];
speedMod = (id * 15) + 40;
if (race == 0) {
speedMod = ((speedMod * 8) / 10) >> 0;
}
pushTime = 0;
}
function playerTick() {
_root.debugText.text = "";
}
function computerTick() {
var _local8 = true;
var _local11 = false;
var _local9 = false;
var _local7 = false;
var _local6 = new com.midasplayer.math.VectorFP(-facing.y, facing.x);
_local6.normalize();
var _local4 = new com.midasplayer.math.VectorFP(facing.x, facing.y);
_local4.normalize();
if (targetPoint < 2) {
targetPoint = 2;
}
var _local5 = list[targetPoint];
var _local2 = new com.midasplayer.math.VectorFP(_local5.x, _local5.y);
_local2.addV(-(pos.x >> 12), -(pos.y >> 12));
var _local10 = (_local2.x * _local2.x) + (_local2.y * _local2.y);
_local2.normalize();
var _local3 = _local6.dot(_local2);
if ((speed >> 12) > ((_local5.speed * speedMod) / 100)) {
_local8 = false;
}
if ((_local3 > 1000) || (_local4.dot(_local2) < 0)) {
_local7 = true;
}
if (_local3 < -1000) {
_local9 = true;
}
rotDiff = _local3;
if ((_local10 < 20) || ((((_local3 > 7000) || (_local3 < -7000)) || (_local4.dot(_local2) < 0)) && (_local10 < 50000))) {
targetPoint++;
if (targetPoint >= list.length) {
targetPoint = 0;
}
}
tick(_local8, _local11, _local9, _local7, false);
}
function tick(up, down, left, right, boost) {
if (pushTime > 0) {
pushTime--;
}
var _local9 = gameLogic.waypoints[nextWaypoint];
var _local4 = (_local9.pos.x - pos.x) >> 12;
var _local3 = (_local9.pos.y - pos.y) >> 12;
if (_local4 < 0) {
_local4 = -_local4;
}
if (_local3 < 0) {
_local3 = -_local3;
}
if (((_local4 < 300) && (_local3 < 300)) && (gameLogic.waypoints[nextWaypoint].isInFront(pos.x, pos.y))) {
nextWaypoint++;
if (nextWaypoint >= gameLogic.waypoints.length) {
nextWaypoint = 0;
currentLap++;
if (!isComputer) {
if (lap < currentLap) {
lap = currentLap;
gameLogic.callback.lapCompleted(lap);
}
}
}
lastWaypoint++;
if (lastWaypoint >= gameLogic.waypoints.length) {
lastWaypoint = 0;
}
}
var _local10 = gameLogic.waypoints[nextWaypoint];
var _local7 = (_local10.pos.x - pos.x) >> 14;
var _local8 = (_local10.pos.y - pos.y) >> 14;
var _local11 = com.midasplayer.math.MathFP.sqrt((_local7 * _local7) + (_local8 * _local8));
progress = (((currentLap * 32) + nextWaypoint) * 128000) - _local11;
if (boost && (boosters > 0)) {
boosters--;
acceleration = 16000;
gameLogic.callback.boosterUsed();
}
if (up) {
speed = speed + acceleration;
if (speed < potentialSpeed) {
speed = ((speed * 10) + (potentialSpeed * 6)) >> 4;
}
}
if (down) {
speed = com.midasplayer.math.MathFP.mul(speed, 3800);
speed = speed - 1500;
potentialSpeed = com.midasplayer.math.MathFP.mul(potentialSpeed, 3800);
potentialSpeed = potentialSpeed - 1500;
}
var _local2 = 4096;
if (left && (!right)) {
dirA = dirA - 250;
_local2 = 3700;
}
if (right && (!left)) {
dirA = dirA + 250;
_local2 = 3700;
}
facing.reset(com.midasplayer.math.MathFP.cos(dir), com.midasplayer.math.MathFP.sin(dir));
motion.addVec(facing.scaleVecNew(speed));
motion.scaleVec(_local2 >> 1);
speed = com.midasplayer.math.MathFP.mul(speed, (_local2 >> 1) + 2020);
var _local5 = pos.x >> 16;
var _local6 = pos.y >> 16;
if (((((_local5 >= 0) && (_local6 >= 0)) && (_local5 < 256)) && (_local6 < 256)) && ((gameLogic.map[_local5][_local6] & 1) == 0)) {
motion.scaleVec(3900);
speed = com.midasplayer.math.MathFP.mul(speed, 3900);
}
acceleration = ((acceleration * 8) / 10) >> 0;
if (acceleration < 2000) {
acceleration = 2000;
}
potentialSpeed = com.midasplayer.math.MathFP.mul(potentialSpeed, 4048);
if (potentialSpeed < speed) {
potentialSpeed = speed;
}
if (isComputer) {
if ((rotDiff > 4000) || (rotDiff < -4000)) {
dir = dir + (dirA * 3);
} else if ((rotDiff > 3000) || (rotDiff < -3000)) {
dir = dir + (dirA * 2);
} else {
dir = dir + dirA;
}
dirA = com.midasplayer.math.MathFP.mul(dirA, 1200);
} else {
dir = dir + dirA;
dirA = com.midasplayer.math.MathFP.mul(dirA, 2800);
}
}
function checkCollide(B) {
if ((((B.pos.x < (pos.x - 327680)) || (B.pos.x > (pos.x + 327680))) || (B.pos.y < (pos.y - 327680))) || (B.pos.y > (pos.y + 327680))) {
return(undefined);
}
movement.reset(motion.x, motion.y);
movement.addV(-B.motion.x, -B.motion.y);
var _local9 = pos.distanceTo(B.pos);
_local9 = _local9 - (sumRadii1 >> 1);
if (movement.getNormal() < _local9) {
return(undefined);
}
N.reset(movement.x, movement.y);
N.normalize();
C.reset(B.pos.x, B.pos.y);
C.minVec(pos);
var _local3 = N.dot(C);
if (_local3 <= 0) {
return(undefined);
}
var _local6 = C.getNormal();
var _local7 = com.midasplayer.math.MathFP.mul(_local6, _local6) - com.midasplayer.math.MathFP.mul(_local3, _local3);
var _local8 = com.midasplayer.math.MathFP.mul(sumRadii1 >> 1, sumRadii1 >> 1);
if (_local7 >= _local8) {
return(undefined);
}
var _local4 = _local8 - _local7;
if (_local4 < 0) {
return(undefined);
}
var _local5 = _local3 - com.midasplayer.math.MathFP.sqrt(_local4);
var _local10 = movement.getNormal();
if (_local10 < _local5) {
return(undefined);
}
motion.normalize();
motion.scaleVec(_local5);
}
function checkTouch(B) {
if ((((B.x < (pos.x - 327680)) || (B.x > (pos.x + 327680))) || (B.y < (pos.y - 327680))) || (B.y > (pos.y + 327680))) {
return(false);
}
movement.reset(motion.x, motion.y);
C.reset(B.x, B.y);
var _local8 = pos.distanceTo(C);
_local8 = _local8 - sumRadii2;
if (movement.getNormal() < _local8) {
return(false);
}
N.reset(movement.x, movement.y);
N.normalize();
C.minVec(pos);
var _local3 = N.dot(C);
if (_local3 <= 0) {
return(false);
}
var _local5 = C.getNormal();
var _local6 = com.midasplayer.math.MathFP.mul(_local5, _local5) - com.midasplayer.math.MathFP.mul(_local3, _local3);
var _local7 = com.midasplayer.math.MathFP.mul(sumRadii2, sumRadii2);
if (_local6 >= _local7) {
return(false);
}
var _local4 = _local7 - _local6;
if (_local4 < 0) {
return(false);
}
var _local9 = _local3 - com.midasplayer.math.MathFP.sqrt(_local4);
var _local10 = movement.getNormal();
return(_local10 >= _local9);
}
function checkPush(B) {
if ((((B.pos.x < (pos.x - 327680)) || (B.pos.x > (pos.x + 327680))) || (B.pos.y < (pos.y - 327680))) || (B.pos.y > (pos.y + 327680))) {
return(undefined);
}
C.reset(B.pos.x, B.pos.y);
C.minVec(pos);
var _local3 = C.getNormal();
if ((_local3 > 1024) && (_local3 < sumRadii1)) {
if (pushTime == 0) {
pushTime = 5;
speed = com.midasplayer.math.MathFP.mul(speed, 2800);
B.speed = com.midasplayer.math.MathFP.mul(B.speed, 2800);
potentialSpeed = com.midasplayer.math.MathFP.mul(potentialSpeed, 2800);
B.potentialSpeed = com.midasplayer.math.MathFP.mul(B.potentialSpeed, 2800);
}
C.normalize();
N.reset(C.x, C.y);
N.scaleVec(32768);
B.move(N);
C.scaleVec((-(sumRadii1 - _local3)) * 2);
move(C);
}
}
function move(motion) {
if (isComputer) {
pos.addVec(motion);
return(undefined);
}
if ((((motion.x > 65536) || (motion.x < -65536)) || (motion.y > 65536)) || (motion.y < -65536)) {
var _local7 = motion.scaleVecNew(2048);
move(_local7);
move(_local7);
} else {
var _local2 = (pos.x + motion.x) >> 16;
var _local4 = pos.y >> 16;
if (((((_local2 >= 0) && (_local4 >= 0)) && (_local2 < 256)) && (_local2 < 256)) && ((gameLogic.map[_local2][_local4] & 2) == 0)) {
pos.x = pos.x + motion.x;
} else {
var _local6 = ((motion.y < 0) ? -1 : 1);
if ((gameLogic.map[_local2][_local4 + _local6] & 2) == 0) {
pos.y = pos.y + (65536 * _local6);
} else if ((gameLogic.map[_local2][_local4 - _local6] & 2) == 0) {
pos.y = pos.y - (65536 * _local6);
}
speed = com.midasplayer.math.MathFP.mul(speed, 3500);
potentialSpeed = com.midasplayer.math.MathFP.mul(potentialSpeed, 3500);
}
_local2 = pos.x >> 16;
_local4 = (pos.y + motion.y) >> 16;
if (((((_local2 >= 0) && (_local4 >= 0)) && (_local2 < 256)) && (_local2 < 256)) && ((gameLogic.map[_local2][_local4] & 2) == 0)) {
pos.y = pos.y + motion.y;
} else {
var _local5 = ((motion.x < 0) ? -1 : 1);
if ((gameLogic.map[_local2 + _local5][_local4] & 2) == 0) {
pos.x = pos.x + (65536 * _local5);
} else if ((gameLogic.map[_local2 - _local5][_local4] & 2) == 0) {
pos.x = pos.x - (65536 * _local5);
}
speed = com.midasplayer.math.MathFP.mul(speed, 3500);
potentialSpeed = com.midasplayer.math.MathFP.mul(potentialSpeed, 3500);
}
}
}
static var sumRadii1 = 131072;
static var sumRadii2 = 196608;
var rotDiff = 0;
static var movement = new com.midasplayer.math.VectorFP(0, 0);
static var N = new com.midasplayer.math.VectorFP(0, 0);
static var C = new com.midasplayer.math.VectorFP(0, 0);
}
Symbol 372 MovieClip [__Packages.com.midasplayer.webracer.Waypoint] Frame 0
class com.midasplayer.webracer.Waypoint
{
var normal, pos, c;
function Waypoint (x, y, rot) {
normal = new com.midasplayer.math.VectorFP(com.midasplayer.math.MathFP.cos(rot), com.midasplayer.math.MathFP.sin(rot));
pos = new com.midasplayer.math.VectorFP(x, y);
c = normal.dot(pos);
}
function isInFront(x, y) {
return(((com.midasplayer.math.MathFP.mul(normal.x, x) + com.midasplayer.math.MathFP.mul(normal.y, y)) - c) > 0);
}
}
Symbol 373 MovieClip [__Packages.com.midasplayer.webracer.Rand] Frame 0
class com.midasplayer.webracer.Rand
{
function Rand () {
}
static function setSeed(seed) {
pos = seed & 255;
span = (((seed >> 6) & 31) * 2) + 1;
}
static function nextByte() {
pos = (pos + span) & 255;
return(NUMBERS[pos]);
}
static var NUMBERS = [68, -83, 93, -126, 54, -101, -16, 91, -116, 57, 41, -113, 81, -33, -49, -82, -15, -87, -52, 78, 72, -39, -44, 15, -26, 127, -96, -20, 84, -57, 92, -40, 64, 33, 5, -27, -94, 90, -41, -56, 12, -73, 124, -106, 71, 121, -36, 76, 116, -11, -99, -58, -10, 87, -72, 0, -42, -71, -88, -29, -85, 4, 123, -81, 109, 108, -32, -127, -4, -91, 29, 1, -110, -125, -112, -70, -89, 37, 25, -8, 31, -31, -34, -38, 80, 104, -50, 6, 18, -69, -65, -54, 105, 98, 11, 102, 69, 46, -107, -102, 118, 120, -104, 67, -22, -25, 39, -5, -95, 73, -51, 94, 40, -123, 2, -45, -111, -60, 43, -43, 8, 62, -23, -2, -28, -108, 126, -64, -109, -100, 35, -9, -30, 47, 101, 112, 10, -14, 27, 16, -35, 21, 89, 44, -62, 58, -24, 125, 20, -114, 107, 75, -79, 96, 59, -1, 115, -47, -12, 28, 42, -37, 38, 86, -61, -68, 23, -48, -46, 110, 13, -120, 99, 53, -55, 32, -17, -6, 61, -19, -53, 7, 70, -74, 66, 19, 24, -122, 50, -103, 48, -105, -67, -115, 49, 55, 119, -97, 111, 56, -66, 74, -76, -124, 88, -3, 106, 114, 45, 77, 30, 83, 82, 22, 52, -119, 17, 100, 36, -18, -98, 3, -86, 9, -118, -7, -78, 60, 79, -128, -121, 103, 122, -77, -117, 95, -21, -63, -59, -80, 51, 85, 14, 113, 63, -84, 97, 117, -93, -90, 65, 26, -75, -92, 34, -13];
static var pos = 0;
static var span = 1;
}
Symbol 374 MovieClip [__Packages.com.midasplayer.webracer.PathPoint] Frame 0
class com.midasplayer.webracer.PathPoint
{
var x, y, speed;
function PathPoint (x, y, speed) {
this.x = x;
this.y = y;
this.speed = speed;
}
function angleToPathPoint(waypoint) {
return(angleToCoords(waypoint.x, waypoint.y));
}
function angleToCoords(x, y) {
var _local2 = x - this.x;
var _local3 = y - this.y;
return(Math.atan2(_local3, _local2));
}
function distanceTo(x, y) {
return(Math.sqrt(distanceToSqr(x, y)));
}
function distanceToSqr(x, y) {
var _local2 = x - this.x;
var _local3 = y - this.y;
return((_local2 * _local2) + (_local3 * _local3));
}
function toString() {
return((((Math.floor(x).toString(36) + ":") + Math.floor(y).toString(36)) + ":") + Math.floor(speed).toString(36));
}
}
Symbol 375 MovieClip [__Packages.com.midasplayer.webracer.KeyRecorder] Frame 0
class com.midasplayer.webracer.KeyRecorder
{
var inData;
function KeyRecorder () {
}
function setData(data) {
inData = data;
}
function nextKey() {
if (inCount > 0) {
inCount--;
return(inChar);
}
if (inDataPointer >= inData.length) {
return(-1);
}
var _local2 = inData.charAt(inDataPointer++);
if (REPEAT_CHARS.indexOf(_local2) >= 0) {
inCount = REPEAT_CHARS.indexOf(_local2);
return(inChar);
}
inChar = KEY_CHARS.indexOf(_local2);
return(inChar);
}
function record(u, d, l, r, b) {
var _local2 = ((((u ? 1 : 0) | (d ? 2 : 0)) | (l ? 4 : 0)) | (r ? 8 : 0)) | (b ? 16 : 0);
if (_local2 != lastVal) {
if (count > 0) {
outData = outData + REPEAT_CHARS.charAt(count - 1);
count = 0;
}
outData = outData + KEY_CHARS.charAt(_local2);
lastVal = _local2;
} else {
count++;
if (count == 16) {
outData = outData + REPEAT_CHARS.charAt(count - 1);
count = 0;
}
}
}
function getString() {
if (count > 0) {
outData = outData + REPEAT_CHARS.charAt(count - 1);
count = 0;
}
var _local2 = outData;
outData = "";
return(_local2);
}
static var KEY_CHARS = "0123456789abcdefghijklmnopqrstuv";
static var REPEAT_CHARS = "ABCDEFGHIJKLMNOP";
var inDataPointer = 0;
var inCount = 0;
var inChar = 0;
var lastVal = -1;
var count = 0;
var outData = "";
}
Symbol 376 MovieClip [__Packages.com.midasplayer.webracer.Car] Frame 0
class com.midasplayer.webracer.Car
{
var mc, id, wheelPos, xPos, yPos, rotation, oldLeftWheelPoint, oldRightWheelPoint, leftWheelPoint, rightWheelPoint;
function Car (mc, id) {
this.mc = mc;
this.id = id;
wheelPos = new com.midasplayer.timing.IFloat(0);
}
function init(scale) {
xPos = new com.midasplayer.timing.IFloat();
yPos = new com.midasplayer.timing.IFloat();
rotation = new com.midasplayer.timing.IRotFloat();
playerCar = true;
x = mc._x * scale;
y = mc._y * scale;
rot = mc._rotation;
xPos.set(x / scale);
xPos.set(x / scale);
yPos.set(y / scale);
yPos.set(y / scale);
rotation.set(rot);
rotation.set(rot);
}
function setToCarMotion(carMotion) {
rot = (((carMotion.dir / 4096) * 180) / Math.PI) + 90;
x = carMotion.pos.x / 4096;
y = carMotion.pos.y / 4096;
speed = (carMotion.speed * 4) / 4096;
xPos.set(x);
yPos.set(y);
rotation.set(rot);
}
function render(alpha) {
var _local2 = Math.round((rotation.get(alpha) * 8) / 360) + 1;
if (_local2 < 0) {
_local2 = _local2 + 8;
}
if (_local2 >= 8) {
_local2 = _local2 - 8;
}
mc.mc.gotoAndStop(((id * 8) + 1) + _local2);
if (turnLeft && (!turnRight)) {
mc.mc.frontWheels.gotoAndStop(2);
} else if ((!turnLeft) && (turnRight)) {
mc.mc.frontWheels.gotoAndStop(3);
} else {
mc.mc.frontWheels.gotoAndStop(1);
}
oldLeftWheelPoint = {x:0, y:0};
mc.mc.leftWheelPoint.localToGlobal(oldLeftWheelPoint);
oldRightWheelPoint = {x:0, y:0};
mc.mc.rightWheelPoint.localToGlobal(oldRightWheelPoint);
var _local3 = (Math.floor(wheelPos.get(alpha)) % 6) + 1;
mc.mc.frontWheels.rightWheel.gotoAndStop(_local3);
mc.mc.frontWheels.leftWheel.gotoAndStop(_local3);
mc.mc.backWheels.rightWheel.gotoAndStop(_local3);
mc.mc.backWheels.leftWheel.gotoAndStop(_local3);
mc._x = xPos.get(alpha);
mc._y = yPos.get(alpha);
mc._rotation = rotation.get(alpha);
leftWheelPoint = {x:0, y:0};
mc.mc.leftWheelPoint.localToGlobal(leftWheelPoint);
rightWheelPoint = {x:0, y:0};
mc.mc.rightWheelPoint.localToGlobal(rightWheelPoint);
}
var turnLeft = false;
var turnRight = false;
var accelerate = false;
var brake = false;
var handBrake = false;
var x = 0;
var y = 0;
var time = 0;
var boost = 0;
var playerCar = false;
var rot = 0;
var xa = 0;
var ya = 0;
var rota = 0;
var speed = 0;
var potentialSpeed = 0;
var progress = 0;
var gameOver = false;
var wayPoint = 0;
var lap = 0;
var xsafePos = 0;
var ysafePos = 0;
}
Symbol 377 MovieClip [__Packages.com.midasplayer.timing.IRotFloat] Frame 0
class com.midasplayer.timing.IRotFloat extends com.midasplayer.timing.IFloat
{
var lastValue, value;
function IRotFloat () {
super();
}
function set(newValue) {
lastValue = value;
value = newValue;
value = value - (Math.floor((value - 180) / 360) * 360);
lastValue = lastValue + (Math.floor(((value - lastValue) + 180) / 360) * 360);
}
}
Symbol 378 MovieClip [__Packages.com.midasplayer.webracer.Opponent] Frame 0
class com.midasplayer.webracer.Opponent
{
var car, lapPathPoints, gameArea;
function Opponent (car, lapPathPoints, gameArea) {
this.car = car;
this.lapPathPoints = lapPathPoints;
this.gameArea = gameArea;
}
function setStartPathPoint(startPoint) {
this.startPoint = startPoint;
}
function start() {
pathPoint = 0;
started = true;
}
function render(alpha) {
car.render(alpha);
}
var pathPoint = 0;
var startPoint = 0;
var started = false;
var speedMod = 1;
}
Symbol 379 MovieClip [__Packages.com.midasplayer.timing.Timer] Frame 0
class com.midasplayer.timing.Timer
{
var timeable;
function Timer (timeable, gameTicksPerSecond) {
millisPerGameTick = 1000 / gameTicksPerSecond;
this.timeable = timeable;
}
function advanceTime() {
time = getTimer();
var _local3 = time - lastTime;
lastTime = time;
fps = 1000 / _local3;
unprocessedTime = unprocessedTime + _local3;
var _local2 = 0;
while (unprocessedTime > millisPerGameTick) {
unprocessedTime = unprocessedTime - millisPerGameTick;
timeable.tick(tick);
tick++;
_local2++;
if (_local2 >= 10) {
unprocessedTime = 0;
}
}
var _local4 = unprocessedTime / millisPerGameTick;
timeable.render(tick, _local4);
}
var time = 0;
var lastTime = 0;
var unprocessedTime = 0;
var tick = 0;
var millisPerGameTick = 0;
var fps = 0;
}