NOTICE: The collaboration category will be removed on December 31st, 2021. Please see my updated portfolio @: https://talent.roblox.com/creators/609345911, this thread will be carbon copied to https://devforum.roblox.com/t/bootsaremes-portfolio-lua-programmer-game-developer/1533079.
Qualifications
Greetings to everyone! My name is bootsareme and I have been programming for 6+ years now. I can script the following:
- fighting systems
- round-based games
- in-game shops
- admin consoles
- custom chats
- pathfinding NPCs
- Backend APIs/HTTP requests
- Datastores
- procedual terrain generation
- linking a Roblox game to a Discord integration bot
- managing game analytics with a SQL server
- creating custom admin commands
- using a HTTP proxy to check a player’s membership status from an external website.
Besides these topics, I also have a proficient understanding of the Roblox API and the lifecycle/deployment of Roblox games.
Other Ventures
Besides Lua and the Roblox API, I am also fluent in these following languages/tools:
- C (Win32 API)
- C++ (Qt GUI, STL)
- C# (.NET)
- Java (AWT, Swing)
- Python (Many libraries)
- Git Products (Github, Gitlab)
- Linux System Admininistration
- Algorithms and Data Structures
I have also created several GUI applications using C++ Qt Framework in conjunction with the C Win32 API, a C# UWP applet that uses OpenCV (Python) for image identification, and a geolocation tool in Java. I currently own a cloud server in which I administer websites through Linux shells. More projects by me can be found here: bootsareme · GitHub.
Showcase
You can view my latest game here: Immune System Fighting Simulator - Roblox
Demostration of Procedual Terrain Generation by me: Procedural Terrain Generation Demo - Roblox
Here are some of my works
--xbox controller vibration script
--Roblox Services
local HapticService = game:GetService("HapticService")
local UserInputService = game:GetService("UserInputService")
--local player
local player = game:GetService("Players").LocalPlayer
--wait to make sure it loads
wait(5)
--checks if vibration is supported
if HapticService:IsVibrationSupported(Enum.UserInputType.Gamepad1) then
--starts listening for health changed event once player spawns
player:WaitForChild("leaderstats").Type:GetPropertyChangedSignal("Value"):Connect(function()
local initHealth = player.Character.Humanoid.Health
--detect if health changes
workspace[player.Name].Humanoid:GetPropertyChangedSignal("Health"):Connect(function()
local finalHealth = player.Character.Humanoid.Health
local vibrateAmount = (initHealth - finalHealth) / 100
--vibrates only if touched
player.Character.Killpart.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Large, vibrateAmount)
wait(0.5)
end
HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Large, 0)
end)
end)
--if humanoid is dead, stop vibrating
workspace[player.Name].Humanoid.Died:Connect(function()
HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Large, 0)
end)
end)
end
--press L2 to open sidebar, L1 to close sidebar
UserInputService.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.ButtonL1 then
player.PlayerGui.Sidebar.Frame.closebutton.Visible = true
player.PlayerGui.Sidebar.Frame:TweenPosition(UDim2.new(-0.146, 0, 0.243, 0))
wait(1)
player.PlayerGui.Sidebar.Frame.closebutton.Visible = false
player.PlayerGui.Sidebar.Frame.clonebutton.Visible = true
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
player.PlayerGui.Sidebar.Frame.clonebutton.Visible = true
player.PlayerGui.Sidebar.Frame:TweenPosition(UDim2.new(0, 0, 0.243, 0))
wait(1)
player.PlayerGui.Sidebar.Frame.clonebutton.Visible = false
player.PlayerGui.Sidebar.Frame.closebutton.Visible = true
end
end
end)
--if player's friend joins, small vibration for 1/5 second
game.Players.PlayerAdded:Connect(function(friend)
if player:IsFriendsWith(friend.UserId) then
HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Small, 1)
wait(0.2)
HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.Small, 0)
end
end)
--pathfinding AI script
--services
local PathfindingService = game:GetService("PathfindingService")
local Teams = game:GetService("Teams")
--begin module
local PathfindingAI = {}
local function cloneCharacter(player)
local character = game.Players[player.Name].Character
character.Archivable = true
local characterClone = character:Clone()
character.Archivable = false
return characterClone
end
function PathfindingAI.InitPathfindingAI(player)
if game.Players[player.Name].leaderstats.Type.Value == "Virus" or game.Players[player.Name].leaderstats.Type.Value == "Bacteriophage" then
local path = PathfindingService:CreatePath()
local clonedCharacter = cloneCharacter(player)
clonedCharacter.Name = player.Name
workspace[player.Name].Humanoid.WalkSpeed = 16
clonedCharacter.Humanoid.Health = 100
clonedCharacter.Parent = workspace
clonedCharacter.HumanoidRootPart.CFrame = CFrame.new(player.HumanoidRootPart.CFrame.X - 10, player.HumanoidRootPart.CFrame.Y, player.HumanoidRootPart.CFrame.Z - 10)
while game.Players[player.Name].Team == Teams.Pathogens or game.Players[player.Name].leaderstats.Type.Value == "Bacteriophage" do
local rootPos = player.HumanoidRootPart.Position
local randomPos = Vector3.new(math.random(-302, 280), rootPos.Y, math.random(-285, 266))
path:ComputeAsync(clonedCharacter.HumanoidRootPart.Position, randomPos)
local waypoints = path:GetWaypoints()
for _, waypoint in pairs(waypoints) do
clonedCharacter.Humanoid:MoveTo(waypoint.Position)
if waypoints.Action == Enum.PathWaypointAction.Jump then
clonedCharacter.Humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
wait()
end
if game.Players[player.Name].Team == Teams.Menu then
clonedCharacter:Destroy()
end
elseif game.Players[player.Name].leaderstats.Type.Value == "Bacteria" then
local path = PathfindingService:CreatePath()
local clonedCharacter = cloneCharacter(player)
clonedCharacter.Name = player.Name
workspace[player.Name].Humanoid.WalkSpeed = 16
clonedCharacter.Humanoid.Health = 100
clonedCharacter.Parent = workspace
for _, v in pairs(clonedCharacter:GetChildren()) do
if v.Name == "Humanoid" then
continue
else
v:SetNetworkOwner(nil)
end
end
clonedCharacter.HumanoidRootPart.CFrame = CFrame.new(player.HumanoidRootPart.CFrame.X - 10, player.HumanoidRootPart.CFrame.Y, player.HumanoidRootPart.CFrame.Z - 10)
while game.Players:WaitForChild(player.Name).Team == Teams.Pathogens do
local rootPos = player.HumanoidRootPart.Position
local playerPos = Vector3.new(rootPos.X-10, rootPos.Y, rootPos.Z-10)
path:ComputeAsync(clonedCharacter.HumanoidRootPart.Position, playerPos)
local waypoints = path:GetWaypoints()
for _, waypoint in pairs(waypoints) do
clonedCharacter.Humanoid:MoveTo(waypoint.Position)
if waypoints.Action == Enum.PathWaypointAction.Jump then
clonedCharacter.Humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
clonedCharacter.Humanoid.MoveToFinished:Wait()
end
wait(1)
end
if game.Players[player.Name].Team == Teams.Menu then
clonedCharacter:Destroy()
end
end
end
return PathfindingAI
--gamepasses script
local MarketplaceService = game:GetService("MarketplaceService")
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local GamepassDataStore = DataStoreService:GetDataStore("GamepassDataStore")
local function processReceipt(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
return Enum.ProductPurchaseDecision.NotProcessedYet
end
if receiptInfo.ProductId == 1027340459 then
for _, v in pairs(Players:GetPlayers()) do
v.Character.Humanoid.Health = 0
end
elseif receiptInfo.ProductId == 1041266338 then
game.ReplicatedStorage.AddPlayerPoints:Fire(receiptInfo.PlayerId, 100)
elseif receiptInfo.ProductId == 1041266453 then
game.ReplicatedStorage.AddPlayerPoints:Fire(receiptInfo.PlayerId, 1000)
elseif receiptInfo.ProductId == 1041267057 then
game.ReplicatedStorage.AddPlayerPoints:Fire(receiptInfo.PlayerId, 10000)
end
return Enum.ProductPurchaseDecision.PurchaseGranted
end
MarketplaceService.ProcessReceipt = processReceipt
MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, purchasedPassID, purchaseSuccess)
if purchaseSuccess == true and purchasedPassID == 10800416 then
GamepassDataStore:SetAsync(player.UserId, true)
player.PlayerGui.ShopGUI.Bacteriophage.Buy:Destroy()
player.PlayerGui.ShopGUI.Bacteriophage.equip.Position = UDim2.new(0.5, 0, 0.9, 0)
end
end)
game.ReplicatedStorage.PlayerInPlayingState.OnServerEvent:Connect(function(player)
if GamepassDataStore:GetAsync(player.UserId) == true then
player.PlayerGui:WaitForChild("ShopGUI").Bacteriophage.Buy.Active = false
player.PlayerGui:WaitForChild("ShopGUI").Bacteriophage.Buy.Visible = false
player.PlayerGui:WaitForChild("ShopGUI").Bacteriophage.equip.Position = UDim2.new(0.5, 0, 0.9, 0)
end
end)
Availability
I am available all day for work on the weekends. During the weekdays, I am only available 4-6 hours due to school. You can contact me anytime during the day, but I may not respond until the afternoon/evening.
Payment
Prices are negotiable, I accept payments either daily/weekly or per scripting task. My preferred payment method is Robux payouts . I prefer short-term scripting tasks rather than long-term developments, although I can negotiate long-term jobs too.
Contact
You can contact me here on the Developer Forum or via Discord. My Discord tag is bootsareme#1155. I prefer you contact me here because I have notifications and I will not accept unknown friend requests on Discord.