I'm ModuleXC — systems developer focused on architecture and how code holds up under pressure. Started in 2019 with no mentor, no English — just broken code and curiosity until things clicked.
My main language is Lua / Luau. I know it well enough to dissect other people's codebases, refactor them, and build things others avoid because "it's too complex". Security systems, network layers, modular frameworks.
Outside of that I'm learning general backend and systems programming — Node, Python, C#, C++. Building toward running my own dev operation. Taking it slow, doing it right.
RemoteFunction router. Everything flows through it.Heartbeat:Wait() beats task.wait(0.1).task.wait(0.1). The actual interval drifted with frame load — sometimes 80ms, sometimes 130ms. Interpolation between waypoints assumed a constant tick. It was not constant. The lie was visible.task.wait in the movement hot path. Rebound to RunService.Heartbeat. Used the dt argument to advance progress, instead of guessing.while enemy.Alive do task.wait(0.1) -- "roughly" 100ms — never actually 100ms progress += 0.1 * enemy.Speed enemy.Model:SetPrimaryPartCFrame(path:GetCFrameAt(progress)) end
local conn conn = RunService.Heartbeat:Connect(function(dt) if not enemy.Alive then conn:Disconnect() return end progress += dt * enemy.Speed enemy.Model:SetPrimaryPartCFrame(path:GetCFrameAt(progress)) end)
AnimationUtil and Animator per tower type, listening for server signals like fire and idle. Friendly-fire gate moved server-side.state table on the tower itself — every modifier now lives in one place. Animator reads from that state and scales playback speed proportionally: animationSpeed = baseDuration / currentCooldown. One source of truth, two consumers.