// auto-transcompiled — see *.dnd.json for canonical truth
//Depth
if(sprite_index != Hexport && sprite_index != HexportIn && sprite_index != HexportOut)
{
depth_set(0,43);
if(mask_index != NaviMask && sprite_index != HexportOut)
  mask_index = NaviMask;
}
else if(sprite_index == HexportIn || sprite_index == HexportOut)
{
if(dlayer != 0 && ((sprite_index == HexportOut && image_index >= 4) || (sprite_index == HexportIn && image_index <= 47)))
  depth_set(0,23);
else if(dlayer == 0 && ((sprite_index == HexportOut && image_index < 4) || (sprite_index == HexportIn && image_index > 47)))
  depth_set(4,23);
}
else if(sprite_index == Hexport)
{
if(collision_rectangle(x-8,y-8,x+sprite_width+8,y+sprite_width+8,hxtsideb,0,1))
{
if(dlayer != 4) depth_set(4,23);
}
else if(dlayer != 6) depth_set(6,23);
if(mask_index != HexportMask) mask_index = HexportMask;
}


//Hexporting Speed
if(sprite_index == Hexport && fspeed > 0 && fspeed < 8)
{
fspeed += 0.2;
}
else if(fspeed > 8)
{
fspeed = 8;
}

/*if((sprite_index == Hexport || sprite_index == HexportIn || sprite_index == HexportOut)
{
if(mask_index != Hexport) mask_index = Hexport;
}
else if(mask_index != NaviCol*/


/*if(ispeed != 0 && fspeed != 0 && !(!position_meeting(x+18,y+43,icetile) && position_meeting(x+18,y+43,tile1)))
  fspeed = 0;
else if(position_meeting(x+18,y+43,icetile) && fspeed != 0)*/



//Movement Tiles
if(sprite_index != Hexport && sprite_index != HexportIn && sprite_index != HexportOut && sprite_index != TeleIn && sprite_index != TeleOut && sprite_index != JoinIn && sprite_index != JoinOut && sprite_index != sprite44 && !jshell)
{

if(/*position_meeting(x+18,y+43,mtile1r)*/collision_rectangle(x+9,y+40,x+26,y+46,mtile1r,1,1) || collision_rectangle(x+9,y+40,x+26,y+46,mtile3r,1,1))
{
srspeed += 2;
}
else if(/*position_meeting(x+18,y+43,mtile1l)*/collision_rectangle(x+9,y+40,x+26,y+46,mtile1l,1,1) || collision_rectangle(x+9,y+40,x+26,y+46,mtile3l,1,1))
{
slspeed += 2;
}
else if(/*position_meeting(x+18,y+43,mtile1u)*/collision_rectangle(x+9,y+40,x+26,y+46,mtile1u,1,1) || collision_rectangle(x+9,y+40,x+26,y+46,mtile3u,1,1))
{
suspeed += 2;
}
else if(/*position_meeting(x+18,y+43,mtile1d)*/collision_rectangle(x+9,y+40,x+26,y+46,mtile1d,1,1) || collision_rectangle(x+9,y+40,x+26,y+46,mtile3d,1,1))
{
sdspeed += 2;
}
srspeed -= 1;
slspeed -= 1;
suspeed -= 1;
sdspeed -= 1;
if(srspeed > 6) {srspeed = 6;}
if(slspeed > 6) {slspeed = 6;}
if(suspeed > 6) {suspeed = 6;}
if(sdspeed > 6) {sdspeed = 6;}
if(srspeed < 0) {srspeed = 0;}
if(slspeed < 0) {slspeed = 0;}
if(suspeed < 0) {suspeed = 0;}
if(sdspeed < 0) {sdspeed = 0;}

if(!keyboard_check(vk_left) && !keyboard_check(vk_right) && !keyboard_check(vk_up) && !keyboard_check(vk_down) && !keyboard_check(vk_alt) &&
  (position_meeting(x+18,y+43,mtile1r) || position_meeting(x+18,y+43,mtile1l) || position_meeting(x+18,y+43,mtile1u) || position_meeting(x+18,y+43,mtile1d)))
{
slidedir = point_direction(x,y,x+srspeed-slspeed,y+sdspeed-suspeed);
if(slidedir >= 337.5 || slidedir < 22.5) sprite_index = NaviStandR;
else if(slidedir >= 22.5 && slidedir < 67.5) sprite_index = NaviStandUR;
else if(slidedir >= 67.5 && slidedir < 112.5) sprite_index = NaviStandU;
else if(slidedir >= 112.5 && slidedir < 157.5) sprite_index = NaviStandUL;
else if(slidedir >= 157.5 && slidedir < 202.5) sprite_index = NaviStandL;
else if(slidedir >= 202.5 && slidedir < 247.5) sprite_index = NaviStandDL;
else if(slidedir >= 247.5 && slidedir < 292.5) sprite_index = NaviStandD;
else /*if(slidedir >= 292.5 && slidedir < 337.5)*/ sprite_index = NaviStandDR;
}

x += srspeed;
x -= slspeed;
y -= suspeed;
y += sdspeed;

if(global.curspeed != fspeed && fspeed != 0)
{
fspeed = global.curspeed;
}

//Ice Tiles
if(ispeed != 0)
{

if(!position_meeting(x+18,y+43,icetile) && position_meeting(x+18,y+43,tile1))
{
if(idir == 0 || idir == 360) srspeed = ispeed;
else if(idir == 180) slspeed = ispeed;
else if(idir == 90) suspeed = ispeed;
else if(idir == 270) sdspeed = ispeed;
ispeed = 0;
}
else
{
if(fspeed != 0) fspeed = 0;
if(slspeed != 0) slspeed = 0;
if(srspeed != 0) srspeed = 0;
if(suspeed != 0) suspeed = 0;
if(sdspeed != 0) sdspeed = 0;
ni = lengthdir_x(ispeed,idir); //Doitx
for(i = 0; i < abs(ni); i += 1)
{
if(collision_rectangle(x+9+sign(ni),y+40,x+26+sign(ni),y+46,door1vertical,1,1) || collision_rectangle(x+9+sign(ni),y+40,x+26+sign(ni),y+46,icepillar,1,1))
  {ispeed = 0; break;}
else x += sign(ni);
}
ni = lengthdir_y(ispeed,idir); //Doity
for(i = 0; i < abs(ni); i += 1)
{
if(collision_rectangle(x+9,y+40+sign(ni),x+26,y+46+sign(ni),door1horizontal,1,1) || collision_rectangle(x+9,y+40+sign(ni),x+26,y+46+sign(ni),icepillar,1,1))
  {ispeed = 0; break;}
else y += sign(ni);
}
}

}
else if(position_meeting(x+18,y+43,icetile) && (fspeed != 0 || slspeed != 0 || srspeed != 0 || suspeed != 0 || sdspeed != 0))
{

idir = point_direction(lastx,lasty,server.x+round(lengthdir_x(fspeed,direction)),server.y+round(lengthdir_y(fspeed,direction)));
if(idir mod 90 != 0) idir = round(idir/90)*90;
if(idir == 0 || idir == 180 || idir == 360)
  ispeed = abs(server.x+round(lengthdir_x(fspeed,direction))-lastx);
else if(idir == 90 || idir == 270)
  ispeed = abs(server.y+round(lengthdir_y(fspeed,direction))-lasty);

}

} //End Movement/Ice Tiles
else
{
if(slspeed != 0) slspeed = 0;
if(srspeed != 0) srspeed = 0;
if(suspeed != 0) suspeed = 0;
if(sdspeed != 0) sdspeed = 0;
}


//Fall off edge.
if(tcollide == 0 && sprite_index != JoinIn && sprite_index != JoinOut && sprite_index != Hexport && sprite_index != HexportOut && sprite_index != HexportIn && visible && !jshell)
{
rand = random(99);
global.dafalls += 1;
global.jid = 99;
global.p_x[global.jid] = xstart;
global.p_y[global.jid] = ystart;
if(ceil(rand) > 9 || global.dafalls <= 5)
{
if(global.duopid != -1 && global.duorole)
  duojoin = 1;
else
  duojoin = 0;
global.p_area[global.jid] = global.area;
global.p_room[global.jid] = room;
}
else
{
if(global.duopid == -1 || !global.duorole)
{
duojoin = 0;
global.dafalls = 0;
global.p_area[global.jid] = "Abyssal Ruin";
global.p_room[global.jid] = Digital_Abyss;
}
else
{
duojoin = 2;
global.p_area[global.jid] = global.area;
global.p_room[global.jid] = room;
caddline("You have taken a fatal fall. Duo Net utilized!",global.c_server);
clearbuffer();
writebyte(23);
writebyte(global.duopid);
sendmessage(global.s_tcpsocket);
}
}
global.watching = -1;
sprite_index = JoinOut;
}

if(sprite_index == TeleIn || sprite_index == TeleOut || sprite_index == JoinIn || sprite_index == JoinOut)
{
image_speed = 1;
fspeed = 0;
}
else if(sprite_index == HexportOut || sprite_index == HexportIn)
{
image_speed = 0.8;
fspeed = 0;
}

if(flicker) flicker = 0;
else flicker = 1;


//fSpeed movement
//x+9,y+39,x+26,y+47 (navi collision bounds w/1 pixel coushin)
move = round(lengthdir_x(fspeed,direction));
i = 0;
for(i = 0; i < abs(move); i += 1)
{
if(sign(move) == -1 && ((tbordered && (!abscheckheight2(tile1,mplatparent,x+9-1,y+39,8) || sprite_index == Hexport)) || !tbordered || jshell))
  x -= 1;
else if(sign(move) == 1 && ((tbordered && (!abscheckheight2(tile1,mplatparent,x+26+1,y+39,8) || sprite_index == Hexport)) || !tbordered || jshell))
  x += 1;
else break;
}
move = round(lengthdir_y(fspeed,direction));
i = 0;
for(i = 0; i < abs(move); i += 1)
{
if(sign(move) == -1 && ((tbordered && (!abschecklength2(tile1,mplatparent,y+39-1,x+9,17) || sprite_index == Hexport)) || !tbordered || jshell))
  y -= 1;
else if(sign(move) == 1 && ((tbordered && (!abschecklength2(tile1,mplatparent,y+47+1,x+9,17) || sprite_index == Hexport)) || !tbordered || jshell))
  y += 1;
else break;
}


tcollide = 0;
tbordered = 0;
if((global.canduo && global.duopid == -1) || (global.watchpid == -1 && global.duopid == -1))
{
global.potenpid = -1;
closest = 999;
curdist = 999;
for(i = 0; i < global.pindex; i += 1)
{
curdist = point_distance(x,y,global.p_x[i],global.p_y[i]);
if(global.p_room[i] == room && curdist <= closest && curdist <= 42 && global.duopid == -1 && global.watchpid == -1 &&
  (global.p_watchable[i] || (global.p_canduo[i] && !global.p_induo[i] && global.canduo)))
{
global.potenpid = i;
closest = curdist;
}
}
}
else if(global.potenpid != -1)
  global.potenpid = -1;

if(global.watching != -1 && !instance_exists(watcher))
{
i = instance_create(x,y,watcher);
if(global.watching == global.duopid && !global.duorole)
  (i).duo = 1;
}
/*else if(global.watching == -1 && instance_exists(watcher))
{
}*/
