johnny

I am a 19 years old developer with 7 years of experience, numerous projects and commissions under my belt. I provide maximum efficiency, optimization, and orgnization. I strive to be humble and offer quality service with fair pricing (open to negotations).

Payment preference: USD via PayPal.

Note: This website is a work in progress, I am still collecting all my projects.

contact

fadullo

jsfadullo@gmail.com

open-source

confetti

This is a simple confetti module that I made, great performance and appealing.

It avoids creating instances but instead, uses a pool of instances that can be reused again and again. Greatly enhancing the performance of this effect, meaning, you can spam it, and it will not lag your game.

confetti.luau:
--!strict

type activepiece = {
    [number]: number | Frame
}

-- change it however you want
local poolSize = 200
local gravity = 2.2
local spreadForce = 1.0
local upwardForce = -2.8
local minimumSize = 40
local maximumSize = 50

-- some colors for the confetti
local colors = {
	Color3.fromRGB(255, 87, 87),
	Color3.fromRGB(255, 195, 77),
	Color3.fromRGB(255, 255, 102),
	Color3.fromRGB(102, 255, 102),
	Color3.fromRGB(102, 178, 255),
	Color3.fromRGB(178, 102, 255),
	Color3.fromRGB(255, 102, 255),
}

local random = math.random
local newUDim2 = UDim2.new
local insert = table.insert
local remove = table.remove

local pool: {Frame} = {}
local activePieces: {activepiece} = {}

runService.RenderStepped:Connect(function(deltaTime: number)
    if deltaTime > 0.1 then
        deltaTime = 0.1
    end

    for i = #activePieces, 1, -1 do
        local data = activePieces[i]

        local x = data[1] :: number
        local y = data[2] :: number
        local velocityX = data[3] :: number
        local velocityY = data[4] :: number
        local rotation = data[5] :: number
        local rotationVelocity = data[6] :: number
        local piece = data[7] :: Frame

        velocityY += gravity * deltaTime
        x += velocityX * deltaTime
        y += velocityY * deltaTime
        rotation += rotationVelocity * deltaTime

        data[1] = x
        data[2] = y
        data[4] = velocityY
        data[5] = rotation

        piece.Position = newUDim2(x, 0, y, 0)
        piece.Rotation = rotation

        if y > 1.1 or x < -0.1 or x > 1.1 then
            piece.Visible = false
            insert(pool, piece)
            remove(activePieces, i)
        end
    end
end)

-- call this function to play the effect
function confetti.play(amount: number?)
    local count = amount or 150
    local min = minimumSize
    local max = maximumSize

    for _ = 1, count do
        local piece = remove(pool)

        if not piece then
            break
        end

        local size = random(min, max)

        piece.Size = newUDim2(0, size, 0, size)
        piece.BackgroundColor3 = colors[random(1, #colors)]
        piece.Visible = true

        insert(activePieces, {
            [1] = random(0, 1000) / 1000, -- x position
            [2] = 1.05, -- y position
            [3] = (random() - 0.5) * spreadForce,
            [4] = random(upwardForce * 100, (upwardForce * 0.4) * 100) / 100,
            [5] = random(-180, 180),
            [6] = random(-500, 500),
            [7] = piece
        })
    end
end

-- run this function when you require this module
function confetti.setup()
    for _ = 1, poolSize do
        local piece = Instance.new("Frame")

        piece.AnchorPoint = Vector2.new(0.5, 0.5)
        piece.BorderSizePixel = 0
        piece.Visible = false
        piece.Parent = Confetti.UI
        insert(pool, piece)
    end
end

ui loading

This is how I load my UI in my projects. First, this is how I set up my folders in ReplicatedStorage, you can change this however you want.

ui
├── modules
│    └── template
│         └── ui (This is a screen gui object)
└── loader
loader.luau:
--!strict

if runService:IsStudio() then
    error("cannot be run on the server")
end

local modules = replicatedStorage.ui.modules
local localPlayer = players.LocalPlayer :: Player
loader playerGui = localPlayer:WaitForChild("PlayerGui") :: PlayerGui

local loadedModules = {}

local function validate(data: any): boolean
    return typeof(data) == "table"
        and data.ui ~= nil
        and typeof(data.ui) == "Instance"
        and data.ui:IsA("ScreenGui")
end

local function init(moduleScript: ModuleScript)
    local success, result = pcall(require, moduleScript)

    if not success then
        warn("failed to require " .. moduleScript.Name .. ": " .. tostring(result))
        return
    end

    if not validate(result) then
        warn("invalid module shape for: " .. moduleScript.Name)
        return
    end

    local data = result
    local enabled = false

    if data.setup then
        local setupSuccess, setupResult = pcall(data.setup)
        if setupSuccess and typeof(setupResult) == "boolean" then
            enabled = setupResult
        end
    end

    data.ui.ResetOnSpawn = false
    data.ui.IgnoreGuiInset = true
    data.ui.Enabled = enabled
    data.ui.Parent = playerGui
    loadedModules[moduleScript.Name] = data
end

for _, module: ModuleScript in modules:GetChildren() do
    if not module:IsA("ModuleScript") then continue end
    init(module)
end

And as for the template, see the following.

template.luau:
local template = {
    ui = script:WaitForChild("ui")
}

function template.setup()
    -- start writing code for this specific ui
    
    -- return false if you want this ui module off
    return true
end


return template

That is pretty much it, just get a local script and require the loader module, and it should load all your modules for you.

There will be more posts that incorporates this with a loading screen and a menu manager (controls which ui’s can be on the screen).

building

garage sale

This is a recent project for a client. Tasked with creating a map and models that resemebles a “garage sale.” Similar to “Sell Lemons” on ROBLOX. The layouts, designing, icons, and models are all made by me.

Project images
Project images

steal a soldier

This project is a remake of Steal a Brainrot on ROBLOX, but instead it’s solders instead of brainrots. I designed the layout myself, the buildings myself, and packages such as the trees, foliage, and other assets myself. It was a development team of around 4+ people.

Project images
Project images

kennedy space center

This is another personal project, based off the real life KSC. This project began to test my limits on accuracy, though this was entirely for fun, I am looking forward to expand this build to fully build the entirety of KSC.

Project images
Project images
Project images
Project images

rouston

I was apart of a 3 man development team, tasked with creating buildings, environments, and textures to capture the hood of “Rouston.” I designed these buildings in such a way that it appeals to the player’s eyes, and work well with performance, utilizing meshes and minimizing the usage of parts. Please note, the other developers were in charge of the layout, I simply made the builds and helped with decorating the environments.

Project images
Project images
Project images
Project images

spartans high school

This is a personal project, with the sole intent of experimenting with interior environments. Everything you see in this project are all made by me, organizing each component in packages. The school layout, construction, and lighting is made by me.

Project images
Project images
Project images
Project images
Project images

kennington

This project focused more on interior than exterior. The plants aren’t mine, though I modeled everything else.

Project images
Project images
Project images
Project images

peggys cove

This project is a personal one, I wanted to enhance my skills in terrain building, as well as, incorporating my builds with them. The following pictures is based off Peggy’s cove in Nova Scotia, Canada.

Project images
Project images

ski resort

It was 2 days before the Christmas of 2024, I was up late at night and decided to create a building you would see in a Ski Resort. The architectured building you see is fully designed by me, decorated by me, and the color palette I experimented myself.

Project images

stranger things

The following is an accurate redesigning of the Stranger Things houses into ROBLOX. I had to research every single image you see here. Had to utilize frame by frame clips of anything. I learned the importance of references and research to achieve what the client wanted, and to be happy with it, and they sure were.

Project images
Project images
Project images
Project images

zall garrison

Client tasked me of creating a military installation in a forest. The project consisted of designing the terrain, environemnts, and buildings. It took roughly 1 week to finish.

Project images
Project images
Project images