diff --git a/lib/roblox_emulator/src/runner/task.rs b/lib/roblox_emulator/src/runner/task.rs
index 8f934aa..7e367c3 100644
--- a/lib/roblox_emulator/src/runner/task.rs
+++ b/lib/roblox_emulator/src/runner/task.rs
@@ -2,6 +2,9 @@
 fn no_op(_lua:&mlua::Lua,_time:Option<super::number::Number>)->mlua::Result<f64>{
 	Ok(0.0)
 }
+fn tick(_lua:&mlua::Lua,_:())->mlua::Result<f64>{
+	Ok(0.0)
+}
 // This is used to avoid calling coroutine.yield from the rust side.
 const LUA_WAIT:&str=
 "local coroutine_yield=coroutine.yield
@@ -31,5 +34,9 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{
 
 	globals.raw_set("wait",wait)?;
 
+	// TODO: move this somewhere it belongs
+	let tick=lua.create_function(tick)?;
+	globals.raw_set("tick",tick)?;
+
 	Ok(())
 }