Josh Engebretson 10 жил өмнө
parent
commit
d1787ac215

+ 19 - 0
RoboMan3D/Resources/Components/AvatarController.js

@@ -288,3 +288,22 @@ exports.component = function(self) {
 
   }
 }
+
+function QuatFromEuler(x, y, z) {
+    var M_PI = 3.14159265358979323846264338327950288;
+    var q = [0, 0, 0, 0];
+    x *= (M_PI / 360);
+    y *= (M_PI / 360);
+    z *= (M_PI / 360);
+    var sinX = Math.sin(x);
+    var cosX = Math.cos(x);
+    var sinY = Math.sin(y);
+    var cosY = Math.cos(y);
+    var sinZ = Math.sin(z);
+    var cosZ = Math.cos(z);
+    q[0] = cosY * cosX * cosZ + sinY * sinX * sinZ;
+    q[1] = cosY * sinX * cosZ + sinY * cosX * sinZ;
+    q[2] = sinY * cosX * cosZ - cosY * sinX * sinZ;
+    q[3] = cosY * cosX * sinZ - sinY * sinX * cosZ;
+    return q;
+}

+ 220 - 199
ToonTown/Resources/Components/AvatarController.js

@@ -2,7 +2,7 @@
 "atomic component";
 
 var inspectorFields = {
-    speed: 1.0
+  speed: 1.0
 }
 
 var glmatrix = require("gl-matrix");
@@ -11,279 +11,300 @@ var vec3 = glmatrix.vec3;
 
 exports.component = function(self) {
 
-    var node = self.node;
+  var node = self.node;
 
-    var cameraNode;
+  var cameraNode;
 
-    var onGround = true;
-    var okToJump = true;
-    var inAirTime = 0;
+  var onGround = true;
+  var okToJump = true;
+  var inAirTime = 0;
 
-    var MOVE_FORCE = 1.8;
-    var INAIR_MOVE_FORCE = 0.02;
-    var BRAKE_FORCE = 0.2;
-    var JUMP_FORCE = 7.0;
-    var YAW_SENSITIVITY = 0.1;
-    var INAIR_THRESHOLD_TIME = 0.1;
+  var MOVE_FORCE = 1.8;
+  var INAIR_MOVE_FORCE = 0.02;
+  var BRAKE_FORCE = 0.2;
+  var JUMP_FORCE = 7.0;
+  var YAW_SENSITIVITY = 0.1;
+  var INAIR_THRESHOLD_TIME = 0.1;
 
-    var cameraMode = 0;
+  var cameraMode = 0;
 
-    var yaw = 0;
-    var pitch = 0;
+  var yaw = 0;
+  var pitch = 0;
 
-    var moveForward = false;
-    var moveBackwards = false;
-    var moveLeft = false;
-    var moveRight = false;
-    var mouseMoveX = 0.0;
-    var mouseMoveY = 0.0;
-    var button0 = false;
-    var button1 = false;
+  var moveForward = false;
+  var moveBackwards = false;
+  var moveLeft = false;
+  var moveRight = false;
+  var mouseMoveX = 0.0;
+  var mouseMoveY = 0.0;
+  var button0 = false;
+  var button1 = false;
 
-    var lastButton0 = false;
-    var lastButton1 = false;
+  var lastButton0 = false;
+  var lastButton1 = false;
 
-    self.idle = true;
+  self.idle = true;
 
-    self.start = function() {
+  self.start = function() {
 
-        var camera = node.scene.getMainCamera();
-        cameraNode = camera.node;
+    var camera = node.scene.getMainCamera();
+    cameraNode = camera.node;
 
-        // Create rigidbody, and set non-zero mass so that the body becomes dynamic
-        var body = node.createComponent("RigidBody");
-        body.mass = 1.0;
+    // Create rigidbody, and set non-zero mass so that the body becomes dynamic
+    var body = node.createComponent("RigidBody");
+    body.mass = 1.0;
 
-        // Set zero angular factor so that physics doesn't turn the character on its own.
-        // Instead we will control the character yaw manually
-        body.angularFactor = [0, 0, 0];
+    // Set zero angular factor so that physics doesn't turn the character on its own.
+    // Instead we will control the character yaw manually
+    body.angularFactor = [0, 0, 0];
 
-        // Set the rigidbody to signal collision also when in rest, so that we get ground collisions properly
-        body.collisionEventMode = Atomic.COLLISION_ALWAYS;
+    // Set the rigidbody to signal collision also when in rest, so that we get ground collisions properly
+    body.collisionEventMode = Atomic.COLLISION_ALWAYS;
 
-        // Set a capsule shape for collision
-        var shape = node.createComponent("CollisionShape");
-        shape.setCapsule(2, 4, [0, 2, 0]);
+    // Set a capsule shape for collision
+    var shape = node.createComponent("CollisionShape");
+    shape.setCapsule(2, 4, [0, 2, 0]);
 
-    }
+  }
 
-    self.fixedUpdate = function(timestep) {
+  self.fixedUpdate = function(timestep) {
 
-        var body = node.getComponent("RigidBody");
+    var body = node.getComponent("RigidBody");
 
-        // Update the in air timer. Reset if grounded
-        if (!onGround)
-            inAirTimer += timeStep;
-        else
-            inAirTimer = 0.0;
+    // Update the in air timer. Reset if grounded
+    if (!onGround)
+    inAirTimer += timeStep;
+    else
+    inAirTimer = 0.0;
 
-        // When character has been in air less than 1/10 second, it's still interpreted as being on ground
-        var softGrounded = inAirTimer < INAIR_THRESHOLD_TIME;
+    // When character has been in air less than 1/10 second, it's still interpreted as being on ground
+    var softGrounded = inAirTimer < INAIR_THRESHOLD_TIME;
 
-        var rot = node.getRotation();
+    var rot = node.getRotation();
 
-        var moveDir = [0, 0, 0];
+    var moveDir = [0, 0, 0];
 
-        // Update movement & animation
-        var velocity = body.getLinearVelocity();
+    // Update movement & animation
+    var velocity = body.getLinearVelocity();
 
-        // Velocity on the XZ plane
-        var planeVelocity = [velocity[0], 0.0, velocity[2]];
+    // Velocity on the XZ plane
+    var planeVelocity = [velocity[0], 0.0, velocity[2]];
 
-        if (cameraMode != 2) {
-            if (moveForward) {
-                vec3.add(moveDir, moveDir, [0, 0, 1])
-            }
-            if (moveBackwards) {
-                vec3.add(moveDir, moveDir, [0, 0, -1])
-            }
-            if (moveLeft) {
-                vec3.add(moveDir, moveDir, [-1, 0, 0])
-            }
-            if (moveRight) {
-                vec3.add(moveDir, moveDir, [1, 0, 0])
-            }
-        }
+    if (cameraMode != 2) {
+      if (moveForward) {
+        vec3.add(moveDir, moveDir, [0, 0, 1])
+      }
+      if (moveBackwards) {
+        vec3.add(moveDir, moveDir, [0, 0, -1])
+      }
+      if (moveLeft) {
+        vec3.add(moveDir, moveDir, [-1, 0, 0])
+      }
+      if (moveRight) {
+        vec3.add(moveDir, moveDir, [1, 0, 0])
+      }
+    }
 
-        if (vec3.length(moveDir) > 0.0)
-            vec3.normalize(moveDir, moveDir);
+    if (vec3.length(moveDir) > 0.0)
+    vec3.normalize(moveDir, moveDir);
 
-        vec3.transformQuat(moveDir, moveDir, [rot[1], rot[2], rot[3], rot[0]]);
-        vec3.scale(moveDir, moveDir, (softGrounded ? MOVE_FORCE : INAIR_MOVE_FORCE));
+    vec3.transformQuat(moveDir, moveDir, [rot[1], rot[2], rot[3], rot[0]]);
+    vec3.scale(moveDir, moveDir, (softGrounded ? MOVE_FORCE : INAIR_MOVE_FORCE));
 
-        if (softGrounded)
-            vec3.scale(moveDir, moveDir, self.speed);
+    if (softGrounded)
+      vec3.scale(moveDir, moveDir, self.speed);
 
-        body.applyImpulse(moveDir);
+    body.applyImpulse(moveDir);
 
-        if (softGrounded) {
+    if (softGrounded) {
 
-            // When on ground, apply a braking force to limit maximum ground velocity
-            vec3.negate(planeVelocity, planeVelocity);
-            vec3.scale(planeVelocity, planeVelocity, BRAKE_FORCE);
-            body.applyImpulse(planeVelocity);
+      // When on ground, apply a braking force to limit maximum ground velocity
+      vec3.negate(planeVelocity, planeVelocity);
+      vec3.scale(planeVelocity, planeVelocity, BRAKE_FORCE);
+      body.applyImpulse(planeVelocity);
 
-            // Jump. Must release jump control inbetween jumps
-            if (button1) {
-                if (okToJump) {
-                    var jumpforce = [0, 1, 0];
-                    vec3.scale(jumpforce, jumpforce, JUMP_FORCE);
-                    body.applyImpulse(jumpforce);
-                    okToJump = false;
-                }
-            } else
-                okToJump = true;
+      // Jump. Must release jump control inbetween jumps
+      if (button1) {
+        if (okToJump) {
+          var jumpforce = [0, 1, 0];
+          vec3.scale(jumpforce, jumpforce, JUMP_FORCE);
+          body.applyImpulse(jumpforce);
+          okToJump = false;
         }
+      } else
+      okToJump = true;
+    }
 
 
-        if (softGrounded && vec3.length(moveDir) > 0.0)
-            self.idle = false;
-        else
-            self.idle = true;
-
+    if (softGrounded && vec3.length(moveDir) > 0.0)
+    self.idle = false;
+    else
+    self.idle = true;
 
-        // Reset grounded flag for next frame
-        onGround = true;
 
+    // Reset grounded flag for next frame
+    onGround = true;
 
-    }
 
-    function MoveCamera(timeStep) {
+  }
 
-        // Movement speed as world units per second
-        var MOVE_SPEED = 10.0;
-        // Mouse sensitivity as degrees per pixel
-        var MOUSE_SENSITIVITY = 0.1;
+  function MoveCamera(timeStep) {
 
-        yaw = yaw + MOUSE_SENSITIVITY * mouseMoveX;
-        pitch = pitch + MOUSE_SENSITIVITY * mouseMoveY;
+    // Movement speed as world units per second
+    var MOVE_SPEED = 10.0;
+    // Mouse sensitivity as degrees per pixel
+    var MOUSE_SENSITIVITY = 0.1;
 
-        if (pitch < -90)
-            pitch = -90;
+    yaw = yaw + MOUSE_SENSITIVITY * mouseMoveX;
+    pitch = pitch + MOUSE_SENSITIVITY * mouseMoveY;
 
-        if (pitch > 90)
-            pitch = 90;
+    if (pitch < -90)
+    pitch = -90;
 
-        // Construct new orientation for the camera scene node from yaw and pitch. Roll is fixed to zero
-        cameraNode.rotation = QuatFromEuler(pitch, yaw, 0.0);
+    if (pitch > 90)
+    pitch = 90;
 
-        var speed = MOVE_SPEED * timeStep;
+    // Construct new orientation for the camera scene node from yaw and pitch. Roll is fixed to zero
+    cameraNode.rotation = QuatFromEuler(pitch, yaw, 0.0);
 
-        if (moveForward)
-            cameraNode.translate([0.0, 0.0, speed])
-        if (moveBackwards)
-            cameraNode.translate([0.0, 0.0, -speed])
-        if (moveLeft)
-            cameraNode.translate([-speed, 0.0, 0.0])
-        if (moveRight)
-            cameraNode.translate([speed, 0.0, 0.0])
+    var speed = MOVE_SPEED * timeStep;
 
-    }
+    if (moveForward)
+    cameraNode.translate([0.0, 0.0, speed])
+    if (moveBackwards)
+    cameraNode.translate([0.0, 0.0, -speed])
+    if (moveLeft)
+    cameraNode.translate([-speed, 0.0, 0.0])
+    if (moveRight)
+    cameraNode.translate([speed, 0.0, 0.0])
 
-    function UpdateControls() {
+  }
 
-        var input = Atomic.input;
+  function UpdateControls() {
 
-        moveForward = false;
-        moveBackwards = false;
-        moveLeft = false;
-        moveRight = false;
-        mouseMoveX = 0.0;
-        mouseMoveY = 0.0;
-        button0 = false;
-        button1 = false;
+    var input = Atomic.input;
 
-        // Movement speed as world units per second
-        var MOVE_SPEED = 20.0;
-        // Mouse sensitivity as degrees per pixel
-        var MOUSE_SENSITIVITY = 0.1;
+    moveForward = false;
+    moveBackwards = false;
+    moveLeft = false;
+    moveRight = false;
+    mouseMoveX = 0.0;
+    mouseMoveY = 0.0;
+    button0 = false;
+    button1 = false;
 
-        if (input.getKeyDown(Atomic.KEY_W))
-            moveForward = true;
-        if (input.getKeyDown(Atomic.KEY_S))
-            moveBackwards = true;
-        if (input.getKeyDown(Atomic.KEY_A))
-            moveLeft = true;
-        if (input.getKeyDown(Atomic.KEY_D))
-            moveRight = true;
+    // Movement speed as world units per second
+    var MOVE_SPEED = 20.0;
+    // Mouse sensitivity as degrees per pixel
+    var MOUSE_SENSITIVITY = 0.1;
 
-        if (input.getKeyPress(Atomic.KEY_F))
-            button0 = true;
-        if (input.getKeyPress(Atomic.KEY_SPACE))
-            button1 = true;
+    if (input.getKeyDown(Atomic.KEY_W))
+    moveForward = true;
+    if (input.getKeyDown(Atomic.KEY_S))
+    moveBackwards = true;
+    if (input.getKeyDown(Atomic.KEY_A))
+    moveLeft = true;
+    if (input.getKeyDown(Atomic.KEY_D))
+    moveRight = true;
 
-        mouseMoveX = input.getMouseMoveX();
-        mouseMoveY = input.getMouseMoveY();
+    if (input.getKeyPress(Atomic.KEY_F))
+    button0 = true;
+    if (input.getKeyPress(Atomic.KEY_SPACE))
+    button1 = true;
 
+    mouseMoveX = input.getMouseMoveX();
+    mouseMoveY = input.getMouseMoveY();
 
 
-    }
 
-    self.update = function(timeStep) {
+  }
 
-        UpdateControls();
+  self.update = function(timeStep) {
 
-        if (cameraMode != 2) {
-            yaw += mouseMoveX * YAW_SENSITIVITY;
-            pitch += mouseMoveY * YAW_SENSITIVITY;
-        }
+    UpdateControls();
 
-        if (pitch < -80)
-            pitch = -80;
-        if (pitch > 80)
-            pitch = 80;
+    if (cameraMode != 2) {
+      yaw += mouseMoveX * YAW_SENSITIVITY;
+      pitch += mouseMoveY * YAW_SENSITIVITY;
+    }
 
-        if (button0) {
-            cameraMode++;
-            if (cameraMode == 3)
-                cameraMode = 0;
-        }
+    if (pitch < -80)
+    pitch = -80;
+    if (pitch > 80)
+    pitch = 80;
 
+    if (button0) {
+      cameraMode++;
+      if (cameraMode == 3)
+      cameraMode = 0;
     }
 
-    self.postUpdate = function(timestep) {
+  }
 
-        // Get camera lookat dir from character yaw + pitch
-        var rot = node.getRotation();
+  self.postUpdate = function(timestep) {
 
-        dir = quat.create();
-        quat.setAxisAngle(dir, [1, 0, 0], (pitch * Math.PI / 180.0));
+    // Get camera lookat dir from character yaw + pitch
+    var rot = node.getRotation();
 
-        quat.multiply(dir, [rot[1], rot[2], rot[3], rot[0]], dir);
+    dir = quat.create();
+    quat.setAxisAngle(dir, [1, 0, 0], (pitch * Math.PI / 180.0));
 
-        var headNode = node.getChild("Head_Tip", true);
+    quat.multiply(dir, [rot[1], rot[2], rot[3], rot[0]], dir);
 
-        if (cameraMode == 1) {
+    var headNode = node.getChild("Head_Tip", true);
 
-            var headPos = headNode.getWorldPosition();
-            var offset = [0.0, 0.15, 0.2];
-            vec3.add(headPos, headPos, vec3.transformQuat(offset, offset, [rot[1], rot[2], rot[3], rot[0]]));
-            cameraNode.setPosition(headPos);
-            cameraNode.setRotation([dir[3], dir[0], dir[1], dir[2]]);
-            quat.setAxisAngle(dir, [0, 1, 0], (yaw * Math.PI / 180.0));
-            node.setRotation([dir[3], dir[0], dir[1], dir[2]]);
+    if (cameraMode == 1) {
 
-        }
-        if (cameraMode == 0) {
+      var headPos = headNode.getWorldPosition();
+      var offset = [0.0, 0.15, 0.2];
+      vec3.add(headPos, headPos, vec3.transformQuat(offset, offset, [rot[1], rot[2], rot[3], rot[0]]));
+      cameraNode.setPosition(headPos);
+      cameraNode.setRotation([dir[3], dir[0], dir[1], dir[2]]);
+      quat.setAxisAngle(dir, [0, 1, 0], (yaw * Math.PI / 180.0));
+      node.setRotation([dir[3], dir[0], dir[1], dir[2]]);
 
-            var aimPoint = node.getWorldPosition();
-            var aimOffset = [0, 1.7, 0];
-            vec3.transformQuat(aimOffset, aimOffset, dir);
-            vec3.add(aimPoint, aimPoint, aimOffset);
+    }
+    if (cameraMode == 0) {
 
-            var rayDir = vec3.create();
-            vec3.transformQuat(rayDir, [0, 0, -1], dir);
-            vec3.scale(rayDir, rayDir, 8);
+      var aimPoint = node.getWorldPosition();
+      var aimOffset = [0, 1.7, 0];
+      vec3.transformQuat(aimOffset, aimOffset, dir);
+      vec3.add(aimPoint, aimPoint, aimOffset);
 
-            vec3.add(aimPoint, aimPoint, rayDir);
+      var rayDir = vec3.create();
+      vec3.transformQuat(rayDir, [0, 0, -1], dir);
+      vec3.scale(rayDir, rayDir, 8);
 
-            cameraNode.setPosition(aimPoint);
-            cameraNode.setRotation([dir[3], dir[0], dir[1], dir[2]]);
-            quat.setAxisAngle(dir, [0, 1, 0], (yaw * Math.PI / 180.0));
-            node.setRotation([dir[3], dir[0], dir[1], dir[2]]);
+      vec3.add(aimPoint, aimPoint, rayDir);
 
-        } else
-            MoveCamera(timestep);
+      cameraNode.setPosition(aimPoint);
+      cameraNode.setRotation([dir[3], dir[0], dir[1], dir[2]]);
+      quat.setAxisAngle(dir, [0, 1, 0], (yaw * Math.PI / 180.0));
+      node.setRotation([dir[3], dir[0], dir[1], dir[2]]);
 
     }
-}
+    else
+      MoveCamera(timestep);
+
+  }
+}
+
+function QuatFromEuler(x, y, z) {
+    var M_PI = 3.14159265358979323846264338327950288;
+    var q = [0, 0, 0, 0];
+    x *= (M_PI / 360);
+    y *= (M_PI / 360);
+    z *= (M_PI / 360);
+    var sinX = Math.sin(x);
+    var cosX = Math.cos(x);
+    var sinY = Math.sin(y);
+    var cosY = Math.cos(y);
+    var sinZ = Math.sin(z);
+    var cosZ = Math.cos(z);
+    q[0] = cosY * cosX * cosZ + sinY * sinX * sinZ;
+    q[1] = cosY * sinX * cosZ + sinY * cosX * sinZ;
+    q[2] = sinY * cosX * cosZ - cosY * sinX * sinZ;
+    q[3] = cosY * cosX * sinZ - sinY * sinX * cosZ;
+    return q;
+}
+

+ 5 - 0
ToonTown/Resources/Models/Materials.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "a5a438fed0475820a09dc00cc5e1394c",
+	"FolderImporter": {}
+}

+ 5 - 0
ToonTown/Resources/Prefabs.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "70e6273db6a2ed2b2335dc6342503d20",
+	"FolderImporter": {}
+}

+ 13 - 2
ToonTown/Resources/Roboman/Robo_01.fbx.asset

@@ -3,7 +3,18 @@
 	"guid": "e30fa79a0b75b75cbe5b03a73baa28a5",
 	"ModelImporter": {
 		"scale": 0.5,
-		"importAnimations": false,
-		"animInfo": []
+		"importAnimations": true,
+		"animInfo": [
+			{
+				"name": "Idle",
+				"startTime": 1,
+				"endTime": 49
+			},
+			{
+				"name": "Run",
+				"startTime": 108,
+				"endTime": 124
+			}
+		]
 	}
 }

+ 0 - 58
ToonTown/Resources/Scenes/Hrm.scene

@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<scene id="1">
-	<attribute name="Name" value="" />
-	<attribute name="Time Scale" value="1" />
-	<attribute name="Smoothing Constant" value="50" />
-	<attribute name="Snap Threshold" value="5" />
-	<attribute name="Elapsed Time" value="0" />
-	<attribute name="Next Replicated Node ID" value="362" />
-	<attribute name="Next Replicated Component ID" value="1974" />
-	<attribute name="Next Local Node ID" value="16778496" />
-	<attribute name="Next Local Component ID" value="16777216" />
-	<attribute name="Variables" />
-	<attribute name="Variable Names" value="" />
-	<component type="PhysicsWorld" id="1" />
-	<component type="Octree" id="2" />
-	<component type="DebugRenderer" id="3" />
-	<node id="2">
-		<attribute name="Is Enabled" value="true" />
-		<attribute name="Name" value="Zone" />
-		<attribute name="Position" value="0 0 0" />
-		<attribute name="Rotation" value="1 0 0 0" />
-		<attribute name="Scale" value="1 1 1" />
-		<attribute name="Variables" />
-		<component type="Zone" id="4">
-			<attribute name="Bounding Box Min" value="-10000 -10000 -10000" />
-			<attribute name="Bounding Box Max" value="10000 10000 10000" />
-			<attribute name="Ambient Color" value="0.4 0.4 0.4 1" />
-		</component>
-	</node>
-	<node id="3">
-		<attribute name="Is Enabled" value="true" />
-		<attribute name="Name" value="GlobalLight" />
-		<attribute name="Position" value="0 0 0" />
-		<attribute name="Rotation" value="0.888074 0.325058 -0.325058 0" />
-		<attribute name="Scale" value="1 1 1" />
-		<attribute name="Variables" />
-		<component type="Light" id="5">
-			<attribute name="Light Type" value="Directional" />
-			<attribute name="Cast Shadows" value="true" />
-			<attribute name="CSM Splits" value="10 20 50 0" />
-			<attribute name="View Size Quantize" value="1" />
-			<attribute name="View Size Minimum" value="5" />
-			<attribute name="Depth Constant Bias" value="0.00025" />
-			<attribute name="Depth Slope Bias" value="0.001" />
-		</component>
-	</node>
-	<node id="361">
-		<attribute name="Is Enabled" value="true" />
-		<attribute name="Name" value="Camera" />
-		<attribute name="Position" value="0 0 -5" />
-		<attribute name="Rotation" value="1 0 0 0" />
-		<attribute name="Scale" value="1 1 1" />
-		<attribute name="Variables" />
-		<component type="Camera" id="1973">
-			<attribute name="FOV" value="45" />
-		</component>
-	</node>
-</scene>

+ 0 - 5
ToonTown/Resources/Scenes/Hrm.scene.asset

@@ -1,5 +0,0 @@
-{
-	"version": 1,
-	"guid": "1531f0c45ea0f0ae67bc5edd128ba5dc",
-	"SceneImporter": {}
-}

+ 212 - 8
ToonTown/Resources/Scenes/ToonTown.scene

@@ -5,10 +5,10 @@
 	<attribute name="Smoothing Constant" value="50" />
 	<attribute name="Snap Threshold" value="5" />
 	<attribute name="Elapsed Time" value="0" />
-	<attribute name="Next Replicated Node ID" value="360" />
-	<attribute name="Next Replicated Component ID" value="1972" />
-	<attribute name="Next Local Node ID" value="16778496" />
-	<attribute name="Next Local Component ID" value="16777216" />
+	<attribute name="Next Replicated Node ID" value="363" />
+	<attribute name="Next Replicated Component ID" value="1978" />
+	<attribute name="Next Local Node ID" value="16778752" />
+	<attribute name="Next Local Component ID" value="16777472" />
 	<attribute name="Variables" />
 	<attribute name="Variable Names" value="" />
 	<component type="PhysicsWorld" id="1" />
@@ -4345,7 +4345,7 @@
 				<attribute name="Offset Position" value="-0 0 0.77" />
 			</component>
 			<component type="RigidBody" id="482">
-				<attribute name="Physics Rotation" value="0.205735 -0.205735 0.676516 0.676516" />
+				<attribute name="Physics Rotation" value="0.205735 -0.205735 0.676515 0.676515" />
 				<attribute name="Physics Position" value="-63.12 52.7442 71.33" />
 				<attribute name="Collision Layer" value="2" />
 			</component>
@@ -4477,7 +4477,7 @@
 				<attribute name="Offset Position" value="-0 0 0.77" />
 			</component>
 			<component type="RigidBody" id="500">
-				<attribute name="Physics Rotation" value="-0.123335 0.123335 0.696268 0.696268" />
+				<attribute name="Physics Rotation" value="-0.123335 0.123335 0.696268 0.696267" />
 				<attribute name="Physics Position" value="-40.26 46.4468 48.68" />
 				<attribute name="Collision Layer" value="2" />
 			</component>
@@ -4587,7 +4587,7 @@
 				<attribute name="Offset Position" value="-0 -0 0.77" />
 			</component>
 			<component type="RigidBody" id="515">
-				<attribute name="Physics Rotation" value="0.658715 -0.658715 0.257087 0.257087" />
+				<attribute name="Physics Rotation" value="0.658716 -0.658716 0.257087 0.257087" />
 				<attribute name="Physics Position" value="-42.08 46.6681 45.61" />
 				<attribute name="Collision Layer" value="2" />
 			</component>
@@ -5018,7 +5018,7 @@
 				<attribute name="Offset Position" value="0 -0 0.3" />
 			</component>
 			<component type="RigidBody" id="573">
-				<attribute name="Physics Rotation" value="0.557897 -0.655317 -0.354553 -0.365515" />
+				<attribute name="Physics Rotation" value="0.557897 -0.655318 -0.354553 -0.365515" />
 				<attribute name="Physics Position" value="-41.0415 46.6593 46.998" />
 				<attribute name="Collision Layer" value="2" />
 			</component>
@@ -6073,4 +6073,208 @@
 			</component>
 		</node>
 	</node>
+	<node id="361">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Robo_01" />
+		<attribute name="Position" value="-58.68 40.21 -7.08" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="AnimatedModel" id="1973">
+			<attribute name="Model" value="Model;Cache/e30fa79a0b75b75cbe5b03a73baa28a5.mdl" />
+			<attribute name="Material" value="Material;Roboman/Materials/Robot_01_mat.material" />
+			<attribute name="Bone Animation Enabled">
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+				<variant type="Bool" value="true" />
+			</attribute>
+			<attribute name="Animation States">
+				<variant type="Int" value="0" />
+			</attribute>
+		</component>
+		<component type="AnimationController" id="1974">
+			<attribute name="Node Animation States">
+				<variant type="Int" value="0" />
+			</attribute>
+		</component>
+		<component type="JSComponent" id="1975">
+			<attribute name="ComponentFile" value="JSComponentFile;Components/RoboMan.js" />
+		</component>
+		<component type="JSComponent" id="1976">
+			<attribute name="ComponentFile" value="JSComponentFile;Components/AvatarController.js" />
+		</component>
+	</node>
+	<node id="362">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Camera" />
+		<attribute name="Position" value="0 0 0" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Camera" id="1977" />
+	</node>
 </scene>