var/list/opposite_dirs = list(SOUTH, NORTH, null, WEST, SOUTHWEST, NORTHWEST, null, EAST, SOUTHEAST, NORTHEAST)
client
var/movement
var/movement_direction = 0
var/movement_keys = 0
North()
Northeast()
Northwest()
South()
Southeast()
Southwest()
East()
West()
verb/movekey(var/d as num, var/keystate as num)
set hidden = 1
if(!movement_direction)
. = 1
var/opposite = opposite_dirs[d]
if(keystate)
movement_direction |= d
movement_keys |= d
if(opposite & movement_keys)
movement_direction &= ~opposite
else
movement_direction &= ~d
movement_keys &= ~d
if(opposite & movement_keys)
movement_direction |= opposite
if(. && movement_direction)
begin_movement()
An example is if I hold down northeast, and then hold down southeast but then release it, I'll begin moving northwest (its opposite direction). I'm trying to get it so I go back to moving northeast when southeast is released.