Hey there! I’m BeastyBlake101. Roblox developer, veteran, and enthusiast. Jack of many trades, strong leader, effective communicator, and passionate creator with several years of experience. My goal is to make others happy with my work!
- Owner and Lead Developer of Arcade Island with 10+ million visits.
- Runner up in Roblox 2020 Holiday Game Jam with team Snowy Showdown: Battle Royale.
- Apart of Metaverse Champions Roblox Event with Arcade Island.
- Featured by Roblox on YouTube, Twitter, Facebook and Instagram.
- Roblox Developer Conference 2021 Attendee
Outside of Roblox development, some of my other interests include rhythm games, racing, shooters, exploring nature, arcades, sports, and hanging out with friends.
I strive in social and collaborative development environments with other motivated, passionate individuals.
🎮 | Creative Direction
Arcade Island
Welcome to Arcade Island. Play machines, win prizes, explore the island, and meet new people in an awesome social extravaganza.
Arcade Island showcases a variety of my talents and my passion to create. Arcade Island demonstrates my abilities in game design, systems design, programming, building, lighting, environmental design, UI design, marketing growth, and community management.
Snowy Showdown
As the icy lake thaws, players battle to be the last one standing as swords, power-ups, and random events make for complete madness. Do you have what it takes to be crowned champion?
I led the team that created Snowy Showdown for the Roblox 2020 Holiday Game Jam. The game was put together in less than a month. I efficiently designed an effective and entertaining core loop that received positive feedback from players and judges winning us 2nd place.
📜 | Scripting
Bloxzee
local values = script.Parent.Values
local home = script.Parent
local narrator = script.Parent.Narrator
local sensors = script.Parent.Sensors
local sounds = script.Parent.ButtonRoll
local bestCondition = "Nothing"
local function SetAction(number, action)
narrator.SurfaceGui["Choice"..number].Text = action
home["ButtonHold"..number].SurfaceGui.TextLabel.Text = action
if action == "Roll" then
home["ButtonHold"..number].Material = Enum.Material.Neon
else
home["ButtonHold"..number].Material = Enum.Material.SmoothPlastic
end
end
-- Set the action of the button to rolling or holding
local function SetNarrator(message)
narrator.SurfaceGui.Info.Text = message
end
-- Set the screen to a specific message
local function TableFind(rollResults, number)
local success = false
if table.find(rollResults, number) ~= nil then success = true end
return success
end
-- Look for an item in a table and return result
values.GameOn.Changed:Connect(function()
if values.GameOn.Value == true then
narrator.SurfaceGui.Info.Text = "Let's Play Bloxzee!"
wait(3)
local currentRoll = 1
local totalRoll = 3
-- Setup the game
while currentRoll <= totalRoll do
SetNarrator("Roll #"..currentRoll.."/3")
sounds.Roll:Play()
sounds.Lower:Stop()
sounds.Upper:Stop()
for index = 1, 5 do
for subIndex, subChild in pairs (home.Neons:GetChildren()) do subChild.Material = Enum.Material.SmoothPlastic end
wait(0.2)
for subIndex, subChild in pairs (home.Neons:GetChildren()) do subChild.Material = Enum.Material.Neon end
wait(0.2)
end
sounds.RollLoop.PlaybackSpeed = math.random(125, 175)*0.01
sounds.RollLoop:Play()
-- Show the current roll
local rollAction = {"", "", "", "", ""}
for index, child in pairs (narrator.SurfaceGui:GetChildren()) do
if string.find(child.Name, "Choice") then
local tablePosition = tonumber(string.sub(child.Name, 7, 7))
local action = child.Text
rollAction[tablePosition] = action
end
end
-- Determine roll action based of narrator screen
local unanchoredTable = {}
for index, entry in pairs (rollAction) do
local ball = home["Ball"..index]
if entry == "Roll" then
local POS_X = ball.Position.X + (math.random(-20, 20)*0.01)
local POS_Y = ball.Position.Y + (math.random(20, 50)*0.1)
local POS_Z = ball.Position.Z + (math.random(-20, 20)*0.01)
ball.Position = Vector3.new(POS_X, POS_Y, POS_Z)
table.insert(unanchoredTable, ball)
end
end
-- Add balls to be rolled into an unanchored table
wait()
for index, entry in pairs (unanchoredTable) do
entry.Anchored = false
entry:SetNetworkOwner(nil)
entry.VectorForce.Enabled = true
entry.VectorForce.Force = Vector3.new(math.random(50, 100), math.random(200, 400), math.random(50, 100))
end
-- Apply force to the unanchored balls
wait(math.random(10,30)*0.1)
for index, entry in pairs (unanchoredTable) do
entry.VectorForce.Enabled = false
end
-- Disable force on the unanchored balls
wait(2)
local attempts = 1
local maxAttempts = 10
local relaxed = false
while attempts <= maxAttempts and relaxed == false do
relaxed = true
for index, entry in pairs (unanchoredTable) do
if math.abs(entry.Position.Y - sensors.Row1.Part1.Position.Y) > 0.4 then
relaxed = false
elseif entry.Position.Y < sensors.Row1.Part1.Position.Y - 0.2 then
entry.Position = Vector3.new(entry.Position.X, entry.Position.Y + 2, entry.Position.Z)
end
end
wait(1)
attempts = attempts + 1
end
sounds.RollLoop:Stop()
-- Wait for the unanchored balls to calm down
for index, entry in pairs (rollAction) do
local ball = home["Ball"..index]
ball.Anchored = true
end
-- Anchor the unanchored balls
local availableSensors = {}
for index, descendant in pairs (sensors:GetDescendants()) do
if descendant:IsA("Part") then table.insert(availableSensors, descendant) end
end
-- Reset the available sensors table
local rollResults = {}
for index = 1, 5 do
local ball = home["Ball"..index]
local closestSensor = availableSensors[1]
local closestSensorIndex = 1
local closestMagnitude = (ball.Position - closestSensor.Position).Magnitude
for subIndex, subEntry in pairs (availableSensors) do
local magnitude = (ball.Position - subEntry.Position).Magnitude
if magnitude < closestMagnitude then
closestMagnitude = magnitude
closestSensor = subEntry
closestSensorIndex = subIndex
end
end
table.remove(availableSensors, closestSensorIndex)
ball.Position = closestSensor.Position
local row = tonumber(string.sub(closestSensor.Parent.Name, 4, 4))
local part = tonumber(string.sub(closestSensor.Name, 5, 5))
table.insert(rollResults, {row, part})
wait()
end
-- Snap the balls in exact positions and add their information to the roll table
for index = 1, #rollResults do rollResults[index] = rollResults[index][1] end
-- Simplify the table to the dice number only
local scoring = {
{"Two Pair", 25, false}, -- 1, 1, 2, 2
{"Three of a Kind", 50, false}, -- 1, 1, 1
{"Short Straight", 75, false}, -- 1, 2, 3, 4
{"Long Straight", 100, false}, -- 1, 2, 3, 4, 5
{"Full House", 150, false}, -- 1, 1, 1, 2, 2
{"Four of a Kind", 200, false}, -- 1, 1, 1, 1
{"Bloxzee", 1000, false} --1, 1, 1, 1, 1
}
-- Scoring information
local conditionMatched = false
conditionMatched = false
for index = 1, 6 do
-- Two pair can start with any number 1-6
local amountA = 0
for subIndex, subEntry in pairs (rollResults) do
if subEntry == index then
amountA = amountA + 1
end
end
-- How many of this number is there?
if amountA >= 2 then
for subSubIndex = 1, 6 do
local amountB = 0
for subSubSubIndex, subSubSubEntry in pairs (rollResults) do
if subSubSubEntry == subSubIndex and subSubIndex ~= index then
amountB = amountB + 1
end
end
if amountB >= 2 then
conditionMatched = true
end
--If there are two of this number, are there also two of another number?
end
end
end
if conditionMatched == true then
scoring[1][3] = true
end
-- Check for two pair
conditionMatched = false
for index = 1, 6 do
-- Three of a kind can start with any number 1-6
local matches = 0
for subIndex, subEntry in pairs (rollResults) do
if subEntry == index then
matches = matches + 1
if matches == 3 then
conditionMatched = true
end
end
end
-- Are there three of the same number?
end
if conditionMatched == true then
scoring[2][3] = true
end
-- Check for three of a kind
conditionMatched = false
for index = 1, 3 do
-- Short straights can start with 1-3
if TableFind(rollResults, index) == true then --table:find(rollResults, index) ~= nil then
--Can we find the starting number?
local straight = true
for subIndex = index, index + 3 do
if TableFind(rollResults, subIndex) == false then straight = false end
end
if straight == true then
conditionMatched = true
end
-- Can we find the all of the needed numbers?
end
end
if conditionMatched == true then
scoring[3][3] = true
end
-- Check for short straights
conditionMatched = false
if scoring[3][3] == true then
-- Must have a short straight to have a long straight
for index = 1, 2 do
-- Long straights can start with 1-2
if TableFind(rollResults, index) == true then
local straight = true
for subIndex = index, index + 4 do
if TableFind(rollResults, subIndex) == false then straight = false end
end
if straight == true then
conditionMatched = true
end
-- Can we find the all of the needed numbers?
end
end
if conditionMatched == true then
scoring[4][3] = true
end
end
-- Check for long straights
conditionMatched = false
if scoring[1][3] == true then
-- Must have a three pair to have a full house
for index = 1, 6 do
-- Full house can start with any number 1-6
local amountA = 0
for subIndex, subEntry in pairs (rollResults) do
if subEntry == index then amountA = amountA + 1 end
end
-- Identify the three pair
if amountA >= 3 then
for subSubIndex = 1, 6 do
local amountB = 0
for subSubSubIndex, subSubSubEntry in pairs (rollResults) do
if subSubSubEntry == subSubIndex and subSubIndex ~= index then
amountB = amountB + 1
end
end
if amountB >= 2 then
conditionMatched = true
end
end
-- Is there another number that is found at least two times?
end
end
end
if conditionMatched == true then
scoring[5][3] = true
end
-- Check for full house
conditionMatched = false
if scoring[2][3] == true then
-- Must have a three pair to have four of a kind
for index = 1, 6 do
-- Four of a kind can start with any number 1-6
local matches = 0
for subIndex, subEntry in pairs (rollResults) do
if subEntry == index then
matches = matches + 1
if matches == 4 then conditionMatched = true end
end
end
-- Are there four of the same number?
end
end
if conditionMatched == true then scoring[6][3] = true end
-- Check for four of a kind
conditionMatched = false
if scoring[6][3] == true then
-- Must have four of a kind to have Bloxzee
for index = 1, 6 do
-- Bloxzee can start with any number 1-6
local matches = 0
for subIndex, subEntry in pairs (rollResults) do
if subEntry == index then
matches = matches + 1
if matches == 5 then conditionMatched = true end
end
end
end
end
if conditionMatched == true then scoring[7][3] = true end
-- Check for Bloxzee
bestCondition = "Nothing"
for index, entry in pairs (scoring) do
if entry[3] == true then
bestCondition = entry[1]
end
end
values.LowerSection.Value = bestCondition
-- Find the best condition matched, if any
if values.LowerSection.Value == "Nothing" then
local points = 0
for index, entry in pairs (rollResults) do
points = points + entry
end
-- Check for points
-- One point per dice face value
-- Landing on 3 would be 3 points
values.UpperSection.Value = points
end
if values.LowerSection.Value == "Nothing" then
sounds.Upper:Play()
SetNarrator(tostring(values.UpperSection.Value).." Points")
wait(4)
else
if bestCondition ~= "Bloxzee" then
SetNarrator(values.LowerSection.Value)
sounds.Lower:Play()
end
wait(4)
end
if currentRoll < totalRoll and bestCondition ~= "Bloxzee" then
values.Deciding.Value = true
values.PressedCountdown.Value = 45
while values.PressedCountdown.Value > 0 do
home.ButtonRoll.Material = Enum.Material.Neon
wait(0.5)
home.ButtonRoll.Material = Enum.Material.SmoothPlastic
wait(0.5)
values.PressedCountdown.Value = values.PressedCountdown.Value - 1
end
-- Player decides what to do
elseif bestCondition == "Bloxzee" then
values.JackpotWon.Value = true
currentRoll = totalRoll
elseif currentRoll == totalRoll then
SetNarrator("That's the game!")
wait(4)
end
values.Deciding.Value = false
values.PressedCountdown.Value = -1
-- Find the game
if home.ButtonRoll.SurfaceGui.TextLabel.Text == "End Game" then
currentRoll = totalRoll
end
currentRoll = currentRoll + 1
end
if values.JackpotWon.Value == true then
SetNarrator("BLOXZEE")
sounds.Jackpot:Play()
values.JackpotWon.Value = false
values.Rainbow.Value = 0.1
wait(5)
for index = 1, 20 do
wait(1)
end
values.Rainbow.Value = 0
wait(1)
-- Jackpot celebration
else
SetNarrator("You won!")
sounds.Cashout:Play()
wait(8)
--
end
SetNarrator("Play Again!")
wait(4)
SetNarrator("Bloxzee")
home.ButtonRoll.SurfaceGui.TextLabel.Text = "Next Roll"
for index = 1, 5 do
SetAction(index, "Roll")
home["Ball"..index].Material = Enum.Material.Neon
end
wait(3)
values.GameOn.Value = false
home.CardSwipe.Player.Value = "-"
home.CardSwipe.Screen.SurfaceGui.TextLabel.Text = "Click To Start"
home.CardSwipe.Screen.ClickDetector.MaxActivationDistance = 16
end
end)
Source code of MainScript
in my open source Bloxzee arcade machine.
🔨 | Building
Arcade Island
I’m a huge fan of future lighting and other environmental tools and believe it can be used to take games to the next level of immersion.
✅ | Management
Social Community
Although Roblox has been of great assistance for a strong financial future, community and passion is at the core of what I do as a creator. I enjoy regular events, livestreams, and updates with my community. I am able to confidently manage large groups of people on a regular basis.
Finances
I created RoEconomics to help myself and other developers track finances with a growing game. I have used the Roblox ad system extensively and my work in tracking my own statistics has helped significantly.
Game Jam
Strong communication and leadership drove Snowy Showdown: Battle Royale to a runner up finish in the Roblox 2020 Holiday Game Jam. In this event, I was able to plan out the game and development schedule despite the stressful roadblock of a short time limit.
📷 | Photoshop
Business inquiries are expected to be paid at industry standard. Generally, I am very busy with existing projects, but I am always open to hearing new ideas. Please don’t hesitate send me a direct message on Twitter or a private message here!
Happy developing!