Congrats!
Just in case, here is some code from the manual that appears to address the floor sinking issue:
Code:
var friction;
action move_me
{
while (1)
{
force.PAN = -10 * KEY_FORCE.X; // calculate rotation force
my.SKILL14 = TIME*force.PAN + max(1-TIME*0.7,0)*my.SKILL14; // rotation speed
my.PAN += TIME * my.SKILL14; // rotate the player
vec_set(temp,my.x);
temp.z -= 4000; // calculate a position 4000 quants below the player
// set a trace mode for using the player's hull, and detecting map entities and level surfaces only
trace_mode = ignore_me+ignore_sprites+IGNORE_MODELS+USE_BOX;
result = trace(my.x,temp); // subtract vertical distance to ground
if (RESULT > 5) // in the air?
{
force.X = 0; // no pushing force
force.Y = 0;
force.Z = -5; // gravity force
friction = 0.1; // air friction
}
else // on or near ground
{
force.X = 10 * KEY_FORCE.Y; // translation force
force.Y = 0;
force.Z = -0.5 * RESULT; // ground elasticity
friction = 0.7; // ground friction
}
my.SKILL11 = TIME*force.X + max(1-TIME*friction,0)*my.SKILL11; // calculate ahead speed
my.SKILL13 = TIME*force.Z + max(1-TIME*friction,0)*my.SKILL13; // calculate vertical speed
dist.X = TIME * my.SKILL11; // distance ahead
dist.y = 0;
dist.Z = TIME * my.SKILL13; // distance down
move_mode = ignore_passable + glide;
ent_MOVE(dist,nullvector); // move the player
move_view(); // move the camera
wait(1);
}
}
Note the "if (result > 5)" statement which lowers the fall 'force' to 0.5 to prevent the one frame where the entity sinks through the floor. I am in the belief that 3DGS does a move, collision check, move collision check type deal.