//DOOR MUST HAVE BOUNDING BOX FLAG ENABLED!!!!!!!
Your door is actually using the POLYGON flag not a bounding box.
Both player and doors should not use POLYGON but actual BBoxs
What and where is this skill set? If you know?
if(vec_dist(door_handle.x, player.x) < 100 && my.pan == closed_pan){
set(me, PASSABLE);
Your setting the door passable, is the gravity trace using IGNORE_PASSABLE flag? You actually should not set the door passable. What might be happening is a timing error. You set the door passable, then walk in to it, the reset passable - making it solid. That will cause the player bbox to be in the door as well as the gravity trace to be in the door. Gravity trace hitting inside a door will cause a negative trace return, which would cause the player to fly upward.
c_scan(my.x, my.pan, vector(360, 180, door_range), IGNORE_ME | SCAN_ENTS); // each door scans around it, trying to detect the player
if (you) // detected an entity?
This scan should also IGNORE_PASSABLE or IGNORE_PASSENTS
Also after the '''if(you)''' you need to do another check for either the '''player''' pointer or some or id var, otherwise the scan can be trigger by others. - Although that is a potential problem not a real one at the moment.
while(key_enter){wait(1);}
not sure why the nested loop to wait.
EDITED HEAVILY
Mal