More race stuff
- Loop track type - Simple respawn when falling off track - col limit
This commit is contained in:
1 parent
4af42625a0
commit
5f89b4518b
4 files changed
+163
-20
No files matched your search
@@ -42,7 +42,14 @@ window.cameraIngame = function(kart) {
|
||||
camNormal[2] += (kart.kartNormal[2]-camNormal[2])*0.075;
|
||||
vec3.normalize(camNormal, camNormal);
|
||||
|
||||
camAngle += dirDiff(kart.physicalDir+kart.driftOff/2, camAngle)*0.075;
|
||||
if (kart.physBasis != null) {
|
||||
var kartA = kart.physicalDir+kart.driftOff/2;
|
||||
var forward = [Math.sin(kartA), 0, -Math.cos(kartA)];
|
||||
vec3.transformMat4(forward, forward, kart.physBasis.mat);
|
||||
camAngle += dirDiff(Math.atan2(forward[0], -forward[2]), camAngle)*0.075;
|
||||
} else {
|
||||
camAngle += dirDiff(kart.physicalDir+kart.driftOff/2, camAngle)*0.075;
|
||||
}
|
||||
camAngle = fixDir(camAngle);
|
||||
|
||||
boostOff += (((kart.boostNorm+kart.boostMT > 0)?5:0) - boostOff)*0.075
|
||||
@@ -59,7 +66,16 @@ window.cameraIngame = function(kart) {
|
||||
|
||||
function buildBasis() {
|
||||
//order y, x, z
|
||||
var basis = gramShmidt(camNormal, [Math.cos(camAngle), 0, Math.sin(camAngle)], [Math.sin(camAngle), 0, -Math.cos(camAngle)]);
|
||||
var kart = thisObj.kart;
|
||||
var forward = [Math.sin(camAngle), 0, -Math.cos(camAngle)];
|
||||
var side = [Math.cos(camAngle), 0, Math.sin(camAngle)];
|
||||
/*
|
||||
if (kart.physBasis != null) {
|
||||
vec3.transformMat4(forward, forward, kart.physBasis.mat);
|
||||
vec3.transformMat4(side, side, kart.physBasis.mat);
|
||||
}
|
||||
*/
|
||||
var basis = gramShmidt(camNormal, side, forward);
|
||||
var temp = basis[0];
|
||||
basis[0] = basis[1];
|
||||
basis[1] = temp; //todo: cleanup
|
||||
|
||||
@@ -19,6 +19,7 @@ window.controlRaceCPU = function(nkm) {
|
||||
}
|
||||
|
||||
this.fetchInput = fetchInput;
|
||||
this.setRouteID = setRouteID;
|
||||
|
||||
var battleMode = (nkm.sections["EPAT"] == null);
|
||||
|
||||
@@ -53,11 +54,30 @@ window.controlRaceCPU = function(nkm) {
|
||||
|
||||
var dist = vec3.dot(destNorm, kart.pos) + destConst;
|
||||
if (dist < ePoi.pointSize) advancePoint();
|
||||
if (ePath.loop) debugger;
|
||||
|
||||
destPoint = vec3.add([], ePoi.pos, vec3.scale([], vec3.lerp([], posOffset, destOff, offTrans), ePoi.pointSize));
|
||||
var dirToPt = Math.atan2(destPoint[0]-kart.pos[0], kart.pos[2]-destPoint[2]);
|
||||
|
||||
var diff = dirDiff(dirToPt, kart.physicalDir);
|
||||
var physDir = kart.physicalDir;
|
||||
if (kart.physBasis) {
|
||||
if (kart.physBasis.loop) {
|
||||
return {
|
||||
accel: true, //x
|
||||
decel: false, //z
|
||||
drift: false, //s
|
||||
item: false, //a
|
||||
|
||||
//-1 to 1, intensity.
|
||||
turn: 0,
|
||||
airTurn: 0 //air excitebike turn, doesn't really have much function
|
||||
};
|
||||
}
|
||||
var forward = [Math.sin(physDir), 0, -Math.cos(physDir)];
|
||||
vec3.transformMat4(forward, forward, kart.physBasis.mat);
|
||||
var physDir = Math.atan2(forward[0], -forward[2]);
|
||||
}
|
||||
var diff = dirDiff(dirToPt, physDir);
|
||||
var turn = Math.min(Math.max(-1, (diff*3)), 1);
|
||||
|
||||
offTrans += 1/240;
|
||||
@@ -94,6 +114,11 @@ window.controlRaceCPU = function(nkm) {
|
||||
|
||||
}
|
||||
|
||||
function setRouteID(routeID) {
|
||||
ePoiInd = routeID-1
|
||||
advancePoint();
|
||||
}
|
||||
|
||||
function advancePoint() {
|
||||
if (++ePoiInd < ePath.startInd+ePath.pathLen) {
|
||||
//next within this path
|
||||
|
||||
+118
-16
@@ -72,6 +72,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
|
||||
this.kartColVel = vec3.create();
|
||||
this.kartColTimer = 0;
|
||||
this.kartWallTimer = 0;
|
||||
|
||||
var charRes = scene.gameRes.getChar(charN);
|
||||
var kartRes = scene.gameRes.getKart(kartN);
|
||||
@@ -98,6 +99,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
this.lapNumber = 1;
|
||||
this.passedKTP2 = false;
|
||||
this.checkPointNumber = 0;
|
||||
this.OOB = 0;
|
||||
|
||||
this.wheelParticles = [
|
||||
new NitroEmitter(scene, k, -1, [1, 1.5, -1]),
|
||||
@@ -111,7 +113,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
var startLine = nkm.sections["KTPS"].entries[0];
|
||||
var passLine = nkm.sections["KTP2"].entries[0];
|
||||
var checkpoints = nkm.sections["CPOI"].entries;
|
||||
var respawns = nkm.sections["CPOI"].entries;
|
||||
var respawns = nkm.sections["KTPJ"].entries;
|
||||
var futureChecks = [1];
|
||||
|
||||
var hitGroundAnim = [ //length 13, on y axis
|
||||
@@ -403,6 +405,17 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
}
|
||||
} else { //default kart mode
|
||||
|
||||
if (k.OOB > 0) {
|
||||
var current = checkpoints[k.checkPointNumber];
|
||||
var respawn = respawns[current.respawn];
|
||||
k.physicalDir = (180-respawn.angle[1])*(Math.PI/180);
|
||||
k.angle = k.physicalDir;
|
||||
k.speed = 0;
|
||||
k.vel = vec3.create();
|
||||
k.pos = vec3.clone(respawn.pos);
|
||||
if (k.controller.setRouteID != null) k.controller.setRouteID(respawn.id1);
|
||||
k.OOB = 0;
|
||||
}
|
||||
var groundEffect = 0;
|
||||
if (lastCollided != -1) {
|
||||
groundEffect = MKDS_COLTYPE.PHYS_MAP[lastCollided];
|
||||
@@ -608,6 +621,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
|
||||
if (!onGround) {
|
||||
this.kartTargetNormal = [0, 1, 0];
|
||||
if (k.physBasis != null) vec3.transformMat4(this.kartTargetNormal,this.kartTargetNormal,k.physBasis.mat);
|
||||
vec3.add(k.vel, k.vel, k.gravity)
|
||||
if (k.ylock >= 0) {
|
||||
ylvel += k.gravity[1];
|
||||
@@ -630,6 +644,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
}
|
||||
|
||||
if (k.kartColTimer > 0) k.kartColTimer--;
|
||||
if (k.kartWallTimer > 0) k.kartWallTimer--;
|
||||
|
||||
wheelTurn += k.speed/16;
|
||||
wheelTurn = fixDir(wheelTurn);
|
||||
@@ -648,7 +663,15 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
|
||||
var steps = 0;
|
||||
var remainingT = 1;
|
||||
var velSeg = vec3.clone(k.vel);
|
||||
var baseVel = k.vel;
|
||||
if (k.physBasis != null) {
|
||||
if (k.physBasis.time-- < 0) exitBasis();
|
||||
else {
|
||||
baseVel = vec3.transformMat4([], baseVel, k.physBasis.mat);
|
||||
k.vel[1] = -1;
|
||||
}
|
||||
}
|
||||
var velSeg = vec3.clone(baseVel);
|
||||
var posSeg = vec3.clone(k.pos);
|
||||
var ignoreList = [];
|
||||
while (steps++ < 10 && remainingT > 0.01) {
|
||||
@@ -657,7 +680,10 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
colResponse(posSeg, velSeg, result, ignoreList)
|
||||
remainingT -= result.t;
|
||||
if (remainingT > 0.01) {
|
||||
velSeg = vec3.scale(vec3.create(), k.vel, remainingT);
|
||||
if (k.physBasis != null) {
|
||||
baseVel = vec3.transformMat4([], k.vel, k.physBasis.mat);
|
||||
}
|
||||
velSeg = vec3.scale(vec3.create(), baseVel, remainingT);
|
||||
}
|
||||
} else {
|
||||
vec3.add(posSeg, posSeg, velSeg);
|
||||
@@ -834,7 +860,13 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
function buildBasis() {
|
||||
//order y, x, z
|
||||
var dir = k.physicalDir+k.driftOff+(Math.sin((COLBOUNCE_TIME-k.kartColTimer)/3)*(Math.PI/6)*(k.kartColTimer/COLBOUNCE_TIME));
|
||||
var basis = gramShmidt(k.kartNormal, [Math.cos(dir), 0, Math.sin(dir)], [Math.sin(dir), 0, -Math.cos(dir)]);
|
||||
var forward = [Math.sin(dir), 0, -Math.cos(dir)];
|
||||
var side = [Math.cos(dir), 0, Math.sin(dir)];
|
||||
if (k.physBasis != null) {
|
||||
vec3.transformMat4(forward, forward, k.physBasis.mat);
|
||||
vec3.transformMat4(side, side, k.physBasis.mat);
|
||||
}
|
||||
var basis = gramShmidt(k.kartNormal, side, forward);
|
||||
var temp = basis[0];
|
||||
basis[0] = basis[1];
|
||||
basis[1] = temp; //todo: cleanup
|
||||
@@ -847,6 +879,56 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
|
||||
}
|
||||
|
||||
function enterBasis(normal) {
|
||||
//establish a new basis for the kart velocity based on this normal.
|
||||
//used by looping and sticky track surface types.
|
||||
|
||||
//first let's get the forward direction in our current basis
|
||||
|
||||
var dir = k.angle;
|
||||
var forward, side;
|
||||
if (k.physBasis != null) {
|
||||
forward = vec3.transformMat4([], [- Math.sin(dir), 0, Math.cos(dir)], k.physBasis.mat);
|
||||
side = vec3.transformMat4([], [Math.cos(dir), 0, Math.sin(dir)], k.physBasis.mat);
|
||||
} else {
|
||||
forward = [-Math.sin(dir), 0, Math.cos(dir)];
|
||||
side = [Math.cos(dir), 0, Math.sin(dir)];
|
||||
}
|
||||
|
||||
var basis = gramShmidt(normal, side, forward);
|
||||
var temp = basis[0];
|
||||
basis[0] = basis[1];
|
||||
basis[1] = temp; //todo: cleanup
|
||||
var m4 = [
|
||||
basis[0][0], basis[0][1], basis[0][2], 0,
|
||||
basis[1][0], basis[1][1], basis[1][2], 0,
|
||||
basis[2][0], basis[2][1], basis[2][2], 0,
|
||||
0, 0, 0, 1
|
||||
];
|
||||
|
||||
k.physicalDir = dirDiff(k.physicalDir, k.angle);
|
||||
k.angle = 0; //our front direction is now aligned with z.
|
||||
k.vel = [Math.sin(k.angle)*k.speed, k.vel[1], -Math.cos(k.angle)*k.speed];
|
||||
|
||||
k.physBasis = {
|
||||
mat: m4,
|
||||
inv: mat4.invert([], m4),
|
||||
time: 15,
|
||||
loop: false
|
||||
};
|
||||
}
|
||||
|
||||
function exitBasis() {
|
||||
//return to a normal y up, z forward basis.
|
||||
|
||||
var v = vec3.transformMat4([], k.vel, k.physBasis.mat);
|
||||
k.physicalDir = dirDiff(k.physicalDir, k.angle);
|
||||
k.angle = Math.atan2(v[0], -v[2]);
|
||||
k.physicalDir += k.angle;
|
||||
k.vel = v;
|
||||
k.physBasis = null;
|
||||
}
|
||||
|
||||
function sndUpdate(view) {
|
||||
k.soundProps.pos = vec3.transformMat4([], k.pos, view);
|
||||
if (k.soundProps.lastPos != null) k.soundProps.vel = vec3.sub([], k.soundProps.pos, k.soundProps.lastPos);
|
||||
@@ -892,24 +974,34 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
lastColSounds = colSound(lastCollided, colBE);
|
||||
|
||||
var n = vec3.normalize([], dat.normal);
|
||||
var an = n;
|
||||
if (k.physBasis != null) {
|
||||
an = vec3.transformMat4([], n, k.physBasis.inv);
|
||||
}
|
||||
var gravS = Math.sqrt(vec3.dot(k.gravity, k.gravity));
|
||||
var angle = Math.acos(vec3.dot(vec3.scale(vec3.create(), k.gravity, -1/gravS), n));
|
||||
var adjustPos = true;
|
||||
|
||||
if (colType == MKDS_COLTYPE.OOB || colType == MKDS_COLTYPE.FALL) {
|
||||
k.OOB = 1;
|
||||
}
|
||||
|
||||
if (MKDS_COLTYPE.GROUP_WALL.indexOf(colType) != -1) { //wall
|
||||
//sliding plane, except normal is transformed to be entirely on the xz plane (cannot ride on top of wall, treated as vertical)
|
||||
var xz = Math.sqrt(n[0]*n[0]+n[2]*n[2])
|
||||
var adjN = [n[0]/xz, 0, n[2]/xz]
|
||||
var xz = Math.sqrt(an[0]*an[0]+an[2]*an[2])
|
||||
var adjN = [an[0]/xz, 0, an[2]/xz]
|
||||
var proj = vec3.dot(k.vel, adjN);
|
||||
|
||||
if (proj < -1) {
|
||||
if (lastColSounds.hit != null) nitroAudio.playSound(lastColSounds.hit, {volume:1}, 0, k)
|
||||
var colObj = {pos:pos, vel:[0,0,0], mat: mat4.fromTranslation([], pos)};
|
||||
scene.particles.push(new NitroEmitter(scene, colObj, 13));
|
||||
scene.particles.push(new NitroEmitter(scene, colObj, 14));
|
||||
if (k.kartWallTimer == 0) {
|
||||
if (lastColSounds.hit != null) nitroAudio.playSound(lastColSounds.hit, {volume:1}, 0, k)
|
||||
var colObj = {pos:pos, vel:[0,0,0], mat: mat4.fromTranslation([], pos)};
|
||||
scene.particles.push(new NitroEmitter(scene, colObj, 13));
|
||||
scene.particles.push(new NitroEmitter(scene, colObj, 14));
|
||||
}
|
||||
k.kartWallTimer = 15;
|
||||
}
|
||||
vec3.sub(k.vel, k.vel, vec3.scale(vec3.create(), adjN, proj));
|
||||
|
||||
vec3.sub(k.vel, k.vel, vec3.scale(vec3.create(), adjN, proj));
|
||||
|
||||
|
||||
//convert back to angle + speed to keep change to kart vel
|
||||
@@ -923,10 +1015,21 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
k.boostNorm = BOOSTTIME;
|
||||
}
|
||||
|
||||
var stick = (colType == MKDS_COLTYPE.STICKY || colType == MKDS_COLTYPE.LOOP);
|
||||
|
||||
if (k.vel[1] > 0) k.vel[1] = 0;
|
||||
var proj = vec3.dot(k.vel, n);
|
||||
if (proj < -4 && k.vel[1] < -2) { proj -= 1.5; }
|
||||
vec3.sub(k.vel, k.vel, vec3.scale(vec3.create(), n, proj));
|
||||
var proj = vec3.dot(k.vel, an);
|
||||
if (!stick && proj < -4 && k.vel[1] < -2) { proj -= 1.5; }
|
||||
vec3.sub(k.vel, k.vel, vec3.scale(vec3.create(), an, proj));
|
||||
|
||||
if (stick) {
|
||||
enterBasis(dat.pNormal);
|
||||
k.physBasis.loop = colType == MKDS_COLTYPE.LOOP;
|
||||
} else {
|
||||
if (k.physBasis != null)
|
||||
exitBasis();
|
||||
}
|
||||
|
||||
k.kartTargetNormal = dat.pNormal;
|
||||
|
||||
if (change) {
|
||||
@@ -937,7 +1040,6 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
|
||||
setWheelParticles(particle, 0);
|
||||
}
|
||||
if (!onGround) {
|
||||
console.log("ground: "+colType+", "+colBE);
|
||||
groundAnim = 0;
|
||||
if (lastColSounds.land != null) nitroAudio.playSound(lastColSounds.land, {volume:1}, 0, k)
|
||||
}
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<head>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="mkjs">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, user-scalable=no">
<!-- Client Code Includes -->
<script src="code/engine/largeSphereCollider.js"></script>
<script src="code/engine/collisionTypes.js"></script>
<script src="code/engine/mkdsConst.js"></script>
<script src="code/engine/ingameRes.js"></script>
<script src="code/engine/itemController.js"></script>
<script src="code/IndexedDBShim.min.js"></script>
<script src="code/engine/storage/fileStore.js"></script>
<script src="code/engine/controls/controlDefault.js"></script>
<script src="code/engine/controls/controlRaceCPU.js"></script>
<script src="code/engine/controls/controlNetwork.js"></script>
<script src="code/engine/cameras/cameraIngame.js"></script>
<script src="code/engine/cameras/cameraSpectator.js"></script>
<script src="code/engine/cameras/cameraIntro.js"></script>
<script src="code/engine/scenes/sceneDrawer.js"></script>
<script src="code/engine/scenes/courseScene.js"></script>
<script src="code/engine/scenes/clientScene.js"></script>
<script src="code/engine/scenes/singleScene.js"></script>
<script src="code/ui/race3DUI.js"></script>
<script src="code/formats/net/netKart.js"></script>
<script src="code/entities/objDatabase.js"></script>
<script src="code/entities/trafficCar.js"></script>
<script src="code/entities/water.js"></script>
<script src="code/entities/itembox.js"></script>
<script src="code/entities/decorations.js"></script>
<script src="code/entities/rotatingGear.js"></script>
<script src="code/entities/bowserPlatforms.js"></script>
<script src="code/entities/soundMaker.js"></script>
<script src="code/particles/itemboxShard.js"></script>
<script src="code/particles/nitroParticle.js"></script>
<script src="code/particles/nitroEmitter.js"></script>
<script src="code/entities/shell.js"></script>
<script src="code/entities/kart.js"></script>
<script src="code/formats/kcl.js"></script>
<script src="code/formats/ndsFS.js"></script>
<script src="code/formats/nitro.js"></script>
<script src="code/formats/nsbtx.js"></script>
<script src="code/formats/nsbmd.js"></script>
<script src="code/formats/nsbta.js"></script>
<script src="code/formats/nsbca.js"></script>
<script src="code/formats/nsbtp.js"></script>
<script src="code/formats/nftr.js"></script>
<script src="code/formats/narc.js"></script>
<script src="code/formats/lz77.js"></script>
<script src="code/formats/spa.js"></script>
<script src="code/formats/nkm.js"></script>
<script src="code/formats/kartphysicalparam.js"></script>
<script src="code/formats/kartoffsetdata.js"></script>
<script src="code/render/nitroRender.js"></script>
<script src="code/render/nitroShaders.js"></script>
<script src="code/render/shadowRender.js"></script>
<script src="code/render/nitroAnimator.js"></script>
<script src="code/glmatrix/gl-matrix.js"></script>
<script src="code/formats/sdat.js"></script>
<script src="code/formats/swav.js"></script>
<script src="code/formats/swar.js"></script>
<script src="code/formats/sbnk.js"></script>
<script src="code/formats/sseq.js"></script>
<script src="code/formats/ssar.js"></script>
<script src="code/audio/sseqPlayer.js"></script>
<script src="code/audio/nitroAudio.js"></script>
<!-- Inline code (because that's always a good idea) -->
<script>
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
window.requestAnimationFrame = requestAnimationFrame;
var files = {};
var fileQuota;
var filesLoaded = 0;
var mobile = (function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|Line truncated
|
||||
<head>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="mkjs">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, user-scalable=no">
<!-- Client Code Includes -->
<script src="code/engine/largeSphereCollider.js"></script>
<script src="code/engine/collisionTypes.js"></script>
<script src="code/engine/mkdsConst.js"></script>
<script src="code/engine/ingameRes.js"></script>
<script src="code/engine/itemController.js"></script>
<script src="code/IndexedDBShim.min.js"></script>
<script src="code/engine/storage/fileStore.js"></script>
<script src="code/engine/controls/controlDefault.js"></script>
<script src="code/engine/controls/controlRaceCPU.js"></script>
<script src="code/engine/controls/controlNetwork.js"></script>
<script src="code/engine/cameras/cameraIngame.js"></script>
<script src="code/engine/cameras/cameraSpectator.js"></script>
<script src="code/engine/cameras/cameraIntro.js"></script>
<script src="code/engine/scenes/sceneDrawer.js"></script>
<script src="code/engine/scenes/courseScene.js"></script>
<script src="code/engine/scenes/clientScene.js"></script>
<script src="code/engine/scenes/singleScene.js"></script>
<script src="code/ui/race3DUI.js"></script>
<script src="code/formats/net/netKart.js"></script>
<script src="code/entities/objDatabase.js"></script>
<script src="code/entities/trafficCar.js"></script>
<script src="code/entities/water.js"></script>
<script src="code/entities/itembox.js"></script>
<script src="code/entities/decorations.js"></script>
<script src="code/entities/rotatingGear.js"></script>
<script src="code/entities/bowserPlatforms.js"></script>
<script src="code/entities/soundMaker.js"></script>
<script src="code/particles/itemboxShard.js"></script>
<script src="code/particles/nitroParticle.js"></script>
<script src="code/particles/nitroEmitter.js"></script>
<script src="code/entities/shell.js"></script>
<script src="code/entities/kart.js"></script>
<script src="code/formats/kcl.js"></script>
<script src="code/formats/ndsFS.js"></script>
<script src="code/formats/nitro.js"></script>
<script src="code/formats/nsbtx.js"></script>
<script src="code/formats/nsbmd.js"></script>
<script src="code/formats/nsbta.js"></script>
<script src="code/formats/nsbca.js"></script>
<script src="code/formats/nsbtp.js"></script>
<script src="code/formats/nftr.js"></script>
<script src="code/formats/narc.js"></script>
<script src="code/formats/lz77.js"></script>
<script src="code/formats/spa.js"></script>
<script src="code/formats/nkm.js"></script>
<script src="code/formats/kartphysicalparam.js"></script>
<script src="code/formats/kartoffsetdata.js"></script>
<script src="code/render/nitroRender.js"></script>
<script src="code/render/nitroShaders.js"></script>
<script src="code/render/shadowRender.js"></script>
<script src="code/render/nitroAnimator.js"></script>
<script src="code/glmatrix/gl-matrix.js"></script>
<script src="code/formats/sdat.js"></script>
<script src="code/formats/swav.js"></script>
<script src="code/formats/swar.js"></script>
<script src="code/formats/sbnk.js"></script>
<script src="code/formats/sseq.js"></script>
<script src="code/formats/ssar.js"></script>
<script src="code/audio/sseqPlayer.js"></script>
<script src="code/audio/nitroAudio.js"></script>
<!-- Inline code (because that's always a good idea) -->
<script>
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
window.requestAnimationFrame = requestAnimationFrame;
var files = {};
var fileQuota;
var filesLoaded = 0;
var mobile = (function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|Line truncated
|
||||
Reference in new issue
Block a user