offset NPC---
#define
L_framerect_distance = 60
U_framerect_distance = 20
sprite_width = 10
sprite_height = 10
Walk_speed = 100
gravity = 30
jumpvel = 300
max_walk_time = 80
min_walk_time = 3
#enddefine
push ebp
mov ebp, esp
setpointer
mov eax, npc.scriptstate
jmp [eax*4+:StateTable]
//----------------------------------------
:State_direction
push 1
push 0
call random
add esp,8
setpointer
cmp eax, 0
je :set_dir_0
mov npc.direction, 2
jmp :dir_set_stand
:set_dir_0
mov npc.direction, 0
:dir_set_stand
jmp :State_decide
//----------------------------------------
:State_walk
mov npc.scriptstate, 1
add npc.moveY, gravity
inc npc.frametimer
cmp npc.frametimer, 5
jl :Walk_frame_set
mov npc.frametimer, 0
cmp npc.framenum, 0
je :set_frame_walk_1
mov npc.framenum, 0
jmp :decide_walk_time
:set_frame_walk_1
mov npc.framenum, 1
:Walk_frame_set
cmp npc.direction, 2
je :move_right_walk
mov npc.moveX, -Walk_speed
jmp :move_walk_set
:move_right_walk
mov npc.moveX, Walk_speed
:move_walk_set
:decide_walk_time
cmp npc.directive, 1
je :time_set_walk
push max_walk_time
push min_walk_time
call random
add esp, 8
setpointer
mov npc.objecttimer, eax
:time_set_walk
mov eax, npc.objecttimer
inc npc.scripttimer
cmp eax, npc.scripttimer
jge :render
jl :state_decide
//----------------------------------------
:State_Jump_prep
mov npc.moveY, -jumpvel
:State_Jump
mov npc.scriptstate, 2
mov npc.framenum, 2
jl :render
mov edx, npc.collision
and edx, 8
jne :hit_floor
add npc.moveY, gravity
jmp :render
:hit_floor
mov npc.moveY, 0
jmp :state_decide
//----------------------------------------
:State_decide
xor eax, eax //reset values
mov npc.scripttimer, eax
mov npc.frametimer, eax
mov npc.framenum, eax
mov npc.objecttimer, eax
mov npc.directive, eax
push 12
push 0
call random
add esp, 8
setpointer
cmp eax, 5
jl :State_direction
cmp eax, 11
jl :State_walk
jmp :State_Jump_prep
//----------------------
:render
mov eax, npc.moveX
mov edx, npc.moveY
add npc.X eax
add npc.Y edx
xor eax, eax
mov eax,npc.framenum
imul al, al, sprite_width
add eax, L_framerect_distance
mov npc.DisplayL,eax
add eax, sprite_width
mov npc.displayR,eax
mov eax, U_framerect_distance
cmp npc.direction, 2
jne :render_left
add eax sprite_height
:render_left
mov npc.displayU,eax
add eax,sprite_height
mov npc.displayD,eax
:end_of_code
mov esp, ebp
pop ebp
retn
:StateTable
print :State_direction
print :State_Walk
print :State_Jump