Journey of game studio Game studio
In my inaugural foray into game creation with game studio
Studio, I found it remarkably user-friendly. I could effortlessly
construct terrain using 3D objects, incorporating multiple
stairs and floors. Once I established a workable template,
the process became quite streamlined. All I needed to do
was duplicate the folder, make necessary positional adjustments,
and voilà—a new floor was created. The overarching ambition
is to craft a DIY game reminiscent of the SAO fantasy, complete
with a grand total of 100 floors to explore.
VIDEO
After several weeks of dedicated work on templates for
stairs and terrain, I finally succeeded in developing a
mini-game area spanning a few floors. To commemorate this
significant milestone, I recorded my achievement, marking
the progress I had made.
VIDEO
Running up the stairs and spinning the camera made me
feel dizzy, which wasn't enjoyable at all. I realized the
need for a convenient teleportation system where players
could simply touch a point to move up or down to the next
floor. With some guidance from ChatGPT, I successfully implemented
these warp points. Each object served a distinct function
– one for moving up and the other for moving down. The process
was straightforward; I only needed to update the floor number
in the front variable, eliminating the need for other complex
changes.
VIDEO
function onTouched(part)
local humanoid = part.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
local destinationPart = game.Workspace.Tower.Area6.floor26.wrapzone.destination
humanoid.RootPart.CFrame = destinationPart.CFrame
end end
script.Parent.Touched:Connect(onTouched)
Once again, I found that running up and touching an object
to reach the next floor felt cumbersome and impractical.
I began to contemplate the necessity for a more efficient
method, like a floor jump feature. However, my attempts
to create one were unsuccessful, as the guidance provided
on the game studio website's GUI (Graphical User Interface) section
proved unhelpful. Undeterred, I decided to reach out to
ChatGPT for assistance. I asked it to help me create a game
panel in which players could use the mouse to click and
initiate floor jumps. But this presented yet another challenge
– the mouse click functionality wasn't working for several
weeks. After some investigation, I discovered that nesting
the panel under an object resolved the issue. This aspect
of the process wasn't well-documented or discussed in videos,
which made it a significant hurdle. However, I persisted
and managed to create a functioning panel through a recording
process, ultimately confirming that it worked as intended.
VIDEO
TThrough numerous interactions with ChatGPT, I persistently
sought out every little detail regarding the creation of
a warp panel. Slowly but surely, I refined the script until
I achieved initial success, with the panel warping to the
same position. The next step involved fine-tuning the positions
to be precisely 1 meter apart. Subsequently, I encountered
the task of having each button perform a loop, and all of
them needed to warp to the same position as well—100 buttons
in total. With ChatGPT's help, I calculated the small gaps
between the 100 buttons, resulting in a long string of buttons.
I continued to push the boundaries and requested assistance
in creating a brick-laying effect. Initially, the script
provided an automatic brick-laying effect with a gap, but
it remained outside the panel. However, I managed to fine-tune
the formula to ensure it fit within the panel. In the end,
I achieved the creation of an auto-wrap panel, eliminating
the need to manually create panels for each of the 100 areas.
Now, a single box could call the script to summon and warp
one panel in front of me.
VIDEO
-- Define the ProximityPrompt
local proximityPrompt = script.Parent -- Define
the function to be executed when the player interacts
with the prompt function
onPromptTriggered(player) -- Define the message
to display in the chat
local humanoid = player.Character and
player.Character:FindFirstChild("Humanoid")
if humanoid then
local PanelPart
=game.Workspace.Tower.Area1.wrapzone.Panel.Panel
local offset= humanoid.RootPart.CFrame.LookVector * 10
local humanoffset = humanoid.RootPart.CFrame.p + offset
+ Vector3.new(0, 5, 0)
PanelPart.CFrame =CFrame.new(humanoffset)
local buttonParent =
game.Workspace.Tower.Area1.wrapzone.Panel["area100"]
local buttonOffset = Vector3.new(0, 0, 1.5) -- adjust
the y-offset as needed -- Get the
PanelPart and buttons you want to move
local buttons = {}
for i = 1, 100 do
buttons[i] =
game.Workspace.Tower.Area1.wrapzone.Panel.area100["area"
.. i]
end
local forwardVector = PanelPart.CFrame.lookVector
local rightVector = PanelPart.CFrame.rightVector
local upVector = PanelPart.CFrame.upVector
local buttonWidth = 2.5
local buttonHeight = 1.5
for i, button in ipairs(buttons) do
local rowIndex = math.ceil(i / 10) - 1
local colIndex = (i - 1) % 10
local buttonOffset = Vector3.new(
(colIndex * buttonWidth) - (1 * buttonWidth),
(rowIndex * buttonHeight) - (1 * buttonHeight),
-1
)
local buttonPosition = PanelPart.Position -
((rightVector * buttonOffset.X)-((rightVector *
buttonOffset.X)/2.5)-Vector3.new(0,3,0) )-
((upVector * buttonOffset.Y)- ((upVector *
buttonOffset.Y)/2.5)-Vector3.new(5,0,0) )-
(forwardVector * buttonOffset.Z)
button.CFrame = CFrame.new(buttonPosition,
buttonPosition + forwardVector)
end
end --print(proximityPrompt)
end -- Connect the function to the
ProximityPrompt's "Triggered" event
proximityPrompt.Triggered:Connect(onPromptTriggered)
Handling audio was straightforward; I simply uploaded
my pre-recorded morning sounds from my website. These were
recordings I made in the morning. At this point, my account
remained unaffected, and there was no ban in sight.
VIDEO
With the full template in place, featuring just one wrap
panel and 100 buttons for each floor, I effortlessly added
a new floor and edited the buttons for up, down, and the
panel. Everything worked seamlessly, enabling me to continuously
add and update floors without any hassle.
VIDEO
I created a simple recording where I built up to the
26th floor, complete with a functional panel and buttons.
VIDEO
The straightforward recording and testing are now at
floor 32, or area 32.
VIDEO
There's more to come! I'm currently in the process of
recording and testing areas up to 40.
VIDEO
Finally, I've reached area 50, which is half of my initial
goal. The testing and functionality are working smoothly.
VIDEO
I've made some progress, reaching area 57. However, there's
been a slight slowdown as I'm currently unable to carry
out testing and recording freely.
VIDEO
I'm making excellent progress, having reached 3/4 of
my goal. I'm now nearing the completion of area 75, and
the testing and functionality are performing admirably.
VIDEO
I've finally reached my goal of area 100! I didn't wait
for an official game development project; instead, I managed
to create a game similar to SAO with 100 areas all by myself.
A decade has passed since I first saw some videos on this
topic, but there haven't been any new videos since. In another
ten years, I'll be 50 years old, and I'm not even sure if
I'll still be able to play games or work. This milestone
is just a fun DIY game-building project, and I don't intend
to sell it since it's purely inspired by the SAO cartoon.
However, in a later video, I revealed that my account was
banned, leading me to abandon the project. The primary goal
and source of happiness in this endeavor were the joy of
running around 100 areas and battling some "zombies" (which
were supposed to be pigs on the first floor). I also struggled
to create a user menu similar to SAO, as the GUI part had
to be created locally, uploaded, synchronized, and then
called for testing validation before displaying the user
screen. This process proved to be quite troublesome. To
celebrate this milestone, I recorded my progress.
VIDEO
I successfully grasped the concept of GUI screen mode
and managed to create it. To mark this significant milestone
and share the knowledge I've acquired, I recorded my progress.
VIDEO
I took things a step further by learning how to create
multiple pages on the GUI screen, even when the data isn't
updated. Thanks to the recording, I now have the capability
to accomplish this task with ease
VIDEO
created a straightforward recording that demonstrates
the process of creating objects, importing them, and exporting
them into the game mode.
VIDEO
Even creating a simple sword proved to be troublesome
due to the need for the laborious process of uploading items
rather than handling everything locally. I decided to create
a simple recording to document these solutions.
VIDEO
Now, considering that there was nothing on each floor,
I required an object to interact with or attack. To my surprise,
in the user guide, I discovered the basic necessity of adding
zombies, designating them as enemies. This setup would enable
AI to attack me, and I could freely move around as the AI
tracked me down. It was a wonderful revelation, as I realized
that I wouldn't need to individually code behaviors for
each enemy. This approach would save me a substantial amount
of time if I were to start building a game from scratch.
VIDEO
The fundamental concept is that retrieving the player's
health is based on the synchronization of the humanoid object.
Every script call must wait for this synchronization to
be completed. With the humanoid object's not-null variable,
I can readily update the GUI locally on the screen. This
recording demonstrates how to retrieve the humanoid object
and declare it for this purpose.
VIDEO
Returning to the game studio guide, I stumbled upon a game
template that offered a standard setup for multiplayer rooms
where players could join and engage in combat. This template
eliminated the need for extensive programming, so I recorded
the process of getting this template up and running.
VIDEO
realized that I needed a variety of different zombies
for my game, but I found it challenging to create them myself.
It appeared that I would need to learn an entirely new set
of skills, from creating character skins to animating their
movements and emotions through video. This was a whole new
area for me. As a result, I decided to explore the marketplace
to acquire other objects, as the default zombie provided
by game studio was already fully set up and ready to use.
VIDEO
While creating a video for YouTube, I came across some
videos of my favorite game, "Kid Chameleon." An idea struck
me: I could recreate the same box hit effect in game studio.
Although it was essentially copying, this game hadn't seen
a sequel or a 3D version in over 20 years. So, I decided
to make a box hit effect just for fun, and the experience
brought me a great sense of joy. I forgot to mention that
I obtained the gem from the marketplace. When players touch
it, it automatically disappears, creating the game effect
of collecting gems.
VIDEO
An idea chain reaction occurred to me—I could incorporate
the gem dropping effect into the zombies when their health
reached zero, allowing players to collect the gem just like
the box in the previous video. I sought assistance from
ChatGPT to write a script for the gem to teleport to the
same position where the zombie had been chasing me and was
subsequently defeated. The gem would only appear after the
zombie had melted down and a few seconds had passed. It
turned out quite nicely, and the system worked as intended.
VIDEO
Since "Kid Chameleon" had some great sound effects, I
decided to delve into Audacity's functions to recreate each
of these sound effects. I documented the process along the
way. However, after finishing and attempting to upload them
to game studio, my account got banned. This incident left me
pondering whether it was time to conclude my game studio journey
and explore other avenues like Unity or Unreal Engine. In
the end, I decided to end my game studio journey as I didn't
see the need to unlock my account.
local objects = script.Parent local objectsFolder
= objects.Objects local objectsArray =
objectsFolder:GetChildren() local
delayBeforeDestroy = 1 local function
partTouched(otherPart, objectPart)
local whichCharacter = otherPart.Parent
local humanoid =
whichCharacter:FindFirstChildWhichIsA("Humanoid")
if humanoid then
print("part touched")
objectPart.CanCollide = false
objectPart.Transparency = 1
--wait(delayBeforeDestroy)
objectPart:Destroy()
end end -- Binds every object part
to the touch function so it works on all parts
for objectIndex = 1, #objectsArray do
local objectPart = objectsArray[objectIndex]
objectPart.Touched:Connect(function(otherPart)
partTouched(otherPart, objectPart)
end) end
VIDEO