ID:1115986
 
(See the best response by SuperAntx.)
Code:
Event/run_event
var/run_state/run_state

New(var/run_state/run_state)
src.run_state = run_state

start
New(var/run_state/run_state)
..(run_state)

fire()
run_state.make_run()

cancel
New(var/run_state/run_state)
..(run_state)

fire()
run_state.cancel_run()

walk
New(var/run_state/run_state)
..(run_state)

fire()
run_state.make_walk()

run_state
var
client/m
Event/run_event/cancel/cancel_run
Event/run_event/start/make_run
Event/run_event/walk/make_walk
make_run_scheduled = 0
running = 0

New(var/client/c)
m = c
cancel_run = new(src)
make_run = new(src)
make_walk = new(src)

proc
cancel_run()
reset_state(0)

make_run()
reset_state(1)
m.mob.icon_state = "run"

make_walk()
reset_state(0)
m.mob.icon_state = null

moved()
if(!running)
if(!make_run_scheduled)
run_scheduler.schedule(make_run, 20)
make_run_scheduled = 1
run_scheduler.reschedule(cancel_run, 5)
else
run_scheduler.reschedule(make_walk, 10)

reset_state(var/running)
run_scheduler.cancel(make_run)
run_scheduler.cancel(cancel_run)
run_scheduler.cancel(make_walk)
make_run_scheduled = 0
src.running = running


client
Move()
src.run_state.moved()
if (!src.run_state.running)
sleep(3)
..()


Problem description: I have disabled my diagonal movements (northwest, northeast, etc) and want to allow the combination of keys to enable them. EX: North + West = northwest movement, but I have no roundabout thought on how to enable that with the current running system in play.
You might want to check out FA's Keyboard library.
In response to Jemai1
I already know about Forum_account's library on that, but it did not work out for me. Nor did SuperAntX's strafe movement library.
In response to Boubi
Boubi wrote:
Nor did SuperAntX's strafe movement library.

Did you change /mob/player to whatever you're using for your game? Other than that the only other reason I could think of for failing is the macros aren't being added properly. If that's the case you can manually add them to your skin file yourself.
In response to SuperAntx
I did not manually add them myself, I'm just guessing that client.Move() was not being called since movement was done through the move()'s loop.
In response to Boubi
Best response
SimpleMove is completely removed from client.Move(), it uses its own set of macros and commands in order to handle movement. Because it calls step() you can still add hooks to mob.Move() if you wanted.

To have the player run you could either change the player's move_delay variable or directly alter MovementLoop() and change the way loop_delay is calculated.
In response to SuperAntx
I played around with it and managed to get it working.