Roblox Scripter · Luau

TheCatAndI

I have been scripting in Roblox for over 5 years. The games I worked on have more than 560M combined visits. I take on projects of any size, from a single system to a full game built from scratch.

Discord: TheCatAndI Roblox: ThePetAndI Available for commissions

Games I've worked on

Mr. Mix — Roblox game
Sole programmer

Mr. Mix

  • 390M+visits
  • 359Kfavorites

Horror game. I was the only programmer on the project and wrote the entire codebase in Luau — gameplay systems, interface and data handling — and kept fixing bugs and optimizing performance across updates.

roblox.com/games/18948446518/Mr-Mix
Ride A Cart Down A Slide — Roblox game
Sole scripter after acquisition

Ride A Cart Down A Slide

  • 153M+visits
  • 2.5M+favorites

After the game was acquired by new owners, I stayed on as the only scripter and handled the codebase on my own for a long period — new features, updates and fixes on a live game with a large active audience.

roblox.com/games/124398083342642/Ride-A-Cart-Down-A-Slide
Teamwork Puzzles X Obby — Roblox game
Scripting · Building · UI/UX

Teamwork Puzzles X Obby

  • 12M+visits
  • 187Kfavorites

Co-op puzzle obby. I was solely responsible for all scripting and core systems development, and I also handled building and the full UI/UX design and implementation — everything except icons and game thumbnails.

roblox.com/games/16931548915/Teamwork-Puzzles-X-Obby
Classic Games — Roblox game
Sole scripter

Classic Games

  • 3.9M+visits
  • 34Kfavorites

A collection of classic mini-games with a chest reward system. I was solely responsible for all scripting and core systems development.

roblox.com/games/129001652516147/Classic-Games
Meme Kombat — Roblox game
Sole scripter until acquisition

Meme Kombat

  • 516K+visits

Meme-themed fighting game. I was the only scripter on the project through development and release, and stayed the only one on the code up until the game was acquired.

roblox.com/games/119754606120804/Meme-Kombat
Mrouse's Animations — Roblox game
Sole scripter

Mrouse's Animations

  • 745K+visits
  • 9.6Kfavorites

Animation showcase experience. I was solely responsible for all scripting and core systems development.

roblox.com/games/121297490325652/Mrouses-Animations

Code sample

Three pieces of real code from my projects. Switch tabs to see each one.

From the game I am building right now: a player facility class — a grid, structure placement with occupancy checks, rotation, model spawning and cleanup after itself.

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Grid2 = require(ReplicatedStorage.Shared.Classes.Grid2)
local Grid2Path = require(ReplicatedStorage.Shared.Classes.Grid2Path)
local StructureConfig = require(ReplicatedStorage.Shared.Configs.StructureConfig)

local Facility = {}
Facility.__index = Facility

export type Placed = {
    Name: string,
    Position: Vector2,
    Rotation: number,
    Size: Vector2,
    Walkable: boolean,
    Sittable: boolean,
    Model: Model?,
}

export type Facility = typeof(setmetatable(
    {} :: {
        Owner: Player,
        Grid2: Grid2.Grid2,
        Grid2Path: Grid2Path.Grid2Path,
        Structures: { Placed },
        Container: Folder,
    },
    Facility
))

local GRID_SIZE = Vector2.new(10, 10)
local CELL_SIZE = 4

local function rotatedSize(size: Vector2, rotation: number): Vector2

    if rotation == 2 or rotation == 4 then
        return Vector2.new(size.Y, size.X)
    end

    return size

end

function Facility.new(owner: Player, origin: CFrame?): Facility

    local self = setmetatable({}, Facility)

    self.Owner = owner
    self.Grid2 = Grid2.new(GRID_SIZE, CELL_SIZE, origin)
    self.Grid2Path = Grid2Path.new(self.Grid2, {
        Diagonal = true,
        IsWalkable = function(_cell, occupant)
            return occupant == nil or occupant.Walkable == true
        end,
    })
    self.Structures = {}

    local container = Instance.new("Folder")
    container.Name = owner.Name
    container.Parent = workspace:FindFirstChild("Facilities") or workspace
    self.Container = container

    return self

end

function Facility.CanPlaceStructure(self: Facility, structureName: string, position: Vector2, rotation: number): boolean

    local config = StructureConfig.List[structureName]

    if not config then
        return false
    end

    if rotation ~= math.floor(rotation) or rotation < 1 or rotation > 4 then
        return false
    end

    return self.Grid2:IsAreaFree(position, rotatedSize(config.Size, rotation))

end

function Facility.GetAreaCenter(self: Facility, position: Vector2, size: Vector2): Vector3

    local near = self.Grid2:CellToWorld(position)
    local far = self.Grid2:CellToWorld(position + size - Vector2.one)

    return (near + far) / 2

end

function Facility.PlaceStructure(self: Facility, structureName: string, position: Vector2, rotation: number): Placed?

    if not self:CanPlaceStructure(structureName, position, rotation) then
        return nil
    end

    local config = StructureConfig.List[structureName]
    local size = rotatedSize(config.Size, rotation)

    local placed: Placed = {
        Name = structureName,
        Position = position,
        Rotation = rotation,
        Size = size,
        Walkable = config.Walkable,
        Sittable = config.Sittable,
        Model = nil,
    }

    self.Grid2:Occupy(position, size, placed)
    table.insert(self.Structures, placed)

    local assets = ReplicatedStorage:FindFirstChild("Assets")
    local structures = assets and assets:FindFirstChild("Structures")
    local template = structures and structures:FindFirstChild(structureName)

    if template and template:IsA("Model") then
        local model = template:Clone()
        local yaw = math.rad((rotation - 1) * 90)
        model:PivotTo(
            CFrame.new(self:GetAreaCenter(position, size))
                * self.Grid2.Origin.Rotation
                * CFrame.Angles(0, yaw, 0)
        )
        model.Parent = self.Container
        placed.Model = model
    else
        warn(`Facility: нет модели "{structureName}" в ReplicatedStorage.Assets.Structures`)
    end

    return placed

end

function Facility.RemoveStructure(self: Facility, position: Vector2): boolean

    local placed = self.Grid2:GetOccupant(position)

    if not placed then
        return false
    end

    self.Grid2:ClearArea(placed.Position, placed.Size)

    local index = table.find(self.Structures, placed)
    if index then
        table.remove(self.Structures, index)
    end

    if placed.Model then
        placed.Model:Destroy()
    end

    return true

end

function Facility.Destroy(self: Facility)

    self.Grid2:ClearAll()
    table.clear(self.Structures)
    self.Container:Destroy()

end

return Facility

What I do

  • Full game development from scratch
  • Game optimization & performance improvements
  • Clean and scalable OOP code
  • ECS architecture (Entity Component System)
  • Roblox core systems & popular frameworks
  • External workflow via Rojo
  • Reviewing and fixing existing codebases

Frameworks & tools

  • Rojo
  • Knit
  • ProfileStore
  • ReplicaService
  • Comm
  • Trove / Maid / Janitor
  • Signal
  • Promise
  • jecs + planck
  • Matter — know the API, no production use
  • Cmdr
  • TopbarPlus
  • Other popular modules

Genres I've worked with

Simulators Building / Construction Morph systems Obby (incl. teamwork mechanics) Horror Fighting