Hi! I’m Kushal.
I started scripting Roblox games when I was 12 years old.
In this article, you’ll learn how I was able to script Roblox games for 9+ years without giving up.
Early Beginnings
Before I even began scripting, I had a desire to learn.
This desire was fueled by seeing this transformation in a Dragon Ball game on Roblox.
At the time, all I wanted was to be able to make my own awesome transformations for my own games.
The Toolbox had transformation scripts too, but they weren’t very good.
A lot of time, the transformation scripts on the Toolbox were extremely buggy as well. I didn’t know how to fix any of the issues that they had.
I was in a battle with myself: Should I just use the toolbox to make transformations or learn to script?
Using the existing transformations in the toolbox felt like I could just add them in and they’d work for my game.
So, that’s what I did.
I just used the toolbox.
Kushal’s First Game (2016)
My first game (ever) on Roblox was called Dragon Ball: Ultimate Power / Dragon Ball: Beyond Evolution.
In hindsight, I never was able to decide between the two names, so let’s just say I called it both.
Lol.
The intention of Dragon Ball: Ultimate Power (my game) was to create a game similar to the dragon ball game that I loved, Dragon Ball: Final Adventures.
But more particularly, I wanted to create my own transformations.
If you view the video above, you can see all of the transformations that Dragon Ball: Final Adventures (the game I loved) had.
Sure, for today’s day and age, they seem pretty basic.
But back then?
That’s all I wanted to be able to script.
And I wanted it badly.
Scripting Dreams
Now, at this time, I had a friend who was able to script his own transformations that also heavily inspired me.
This friend, however, was already so good at scripting that he could already make the entire Dragon Ball: Final Adventures game by himself.
He was often in Roblox Studio making his own transformations.
Every time I saw one of his own transformations, I was captivated.
It was my dream to be able to have amazing transformations for my Roblox game.
One day, he let me have his supreme being transformation…
At around this time, you can see that most of the features in this game were made by him.
Everything else was directly from the toolbox.
From looking at his scripts, I realized a few things:
- I didn’t know anything about scripting
- I could change some text in the script to change what my character says
So, I would go ahead and try to change the text in the script to tailor his code to my game.
And that’s how I began learning.
Beginning Roblox Scripting
I was frustrated that I couldn’t change some of the things in his system without breaking it completely.
Learning to script, rather than using premade ones from the Toolbox, would allow me to create my own transformations and chatting systems. I wanted that more than anything.
So, I took the leap of faith and began learning scripting, with the intention of one day being able to create my own transformations.
Every night, I would read a chapter of a scripting book before going to sleep.
The next day, I would practice what I had learned.
To learn more about this stage of my early beginnings as a scripter, please feel free to read this article.
Over time, I was able to create amazing things.
Take a look at how my game, turned out:
Note: This game relied on a lot of assets from another game, called Dragon Ball: Generations (which never came out). While the systems were scripted by me, the other assets weren’t made by me.
The End of Dragon Ball: Ultimate Power
In my eyes, I never thought about the possibility of the game succeeding and getting constant players.
There was not much of a sense of progression.
So, people came, enjoyed the game, and then left.
But I never viewed it as a success or failure.
I was just having fun creating games. There was no concept of success/failure. I just worked on what was fun for me.
In hindsight, I think that assigning a success/failure mark to anything has a large effect on your motivation, as you’ll see pretty soon.
Dragon Ball: Galaxy Burst
At this point, I had experience in developing a solo game as a 12 year old.
During this time in 2016, a lot of exploits were rampant; it was pretty easy to get the source code of any Roblox game.
What does a 12 year old do when he gets the source code for a game he really enjoys?
He copies it!
And that’s what I did, along with a bunch of friends.
We had the client-sided source code of a Dragon Ball game and with my newfound scripting knowledge from my first game, I managed to reproduce the server-sided source code for a whole bunch of features.
If this sounds a bit unfamiliar to you, basically, I had managed to obtain 50% of a Dragon Ball game’s code.
This wasn’t enough to make the game work, though.
So, I used my previous scripting knowledge to infer parts of the remaining 50% of the code.
And other scripters saw my progress, they joined in. We reproduced just about all of the code, made things better, and we created Dragon Ball: Galaxy Burst, which had a maximum CCU of about 1,700 players.
You can take a look at the video here.
Dragon Ball: Galaxy Burst had 1,000,000+ visits in total.
Apart from working on the base server-sided stuff for the game, I also worked on new transformations, like this SSJG (super saiyan god).
This was my first experience with reading other people’s code on scale (since DBGB was originally based off another dragon ball game) and working with other people.
Sword Brawl (Late 2016)

After I was finished with Dragon Ball: Galaxy Burst, I realized that I wanted to make a game of my own that received players. No copying. Just plain code.
Now, instead of overthinking about what to do and doing nothing (as I’m guilty of having done recently), I assembled my team and got to work.
From the work on Dragon Ball: Ultimate Power and Dragon ball: Galaxy Burst, I had attracted a few friends, and we began working.
After a few months of hard work, we released the game and threw ads onto it.
About 1,000 visits on my first, fully original game.
Unfortunately, I don’t have any videos of this game, since it never took off.
Game Link (unplayable): https://www.roblox.com/games/576301425/ALPHA-Sword-Brawl
Pokemon: Midnight Shadow
After my Dragon Ball saga, Sword Brawl, and countless mini projects in Studio, I discovered Pokemon, and I found myself really intrigued with it.
My favorite series was definitely the Pokemon B/W and XY series.
After Sword Brawl failed, I lost the motivation I had to create games.
But after discovering Pokemon, I found myself back at it, wanting to make my own Pokemon game.
So, I began Pokemon: Midnight Shadow.
At this time, I wasn’t aware that there were already Pokemon games on the platform, like Pokemon: Brick Bronze and Project: Pokemon.
I just hopped into Studio and started scripting.
I really wish I had screenshots of this game, but I unfortunately don’t.
However, I managed to get animated sprites working (and, due to my lack of knowledge about Pokemon: Brick Bronze, thought it was the first game on Roblox with it), by splitting them into frames.
Basically, a GIF of a pokemon is like a video that is comprised of pictures, called frames.
I took the GIF and split it into however many images it was comprised of, uploaded all of them into Roblox, and played them in order, where I showed one frame at a time.
By doing this (I was 13 at this time), I was able to achieve the illusion that a video was playing inside of Roblox Studio itself – long before VideoFrames came out.
Later on, someone told me about Pokemon: Brick Bronze, which had already achieved this effect (albeit, using a different method).
After discovering Pokemon: Brick Bronze, I stopped Pokemon Midnight Shadow.
Pokemon: Breeze (2017-2018)
I played Pokemon: Brick Bronze for 1.5+ years.
It was by far my favorite game on Roblox.
At this time, there were a lot of copies of famous Roblox games out there; it was pretty normalized. This was long before Roblox had anything in their TOS about the intellectual property of Roblox developers, so the system was abused by a lot of people (including my unknowing young self).
I was 14 years old at this time.
Long story short, I obtained my own copy of Pokemon Brick Bronze, added randomizer to the game, drove it to 12K+ CCU and millions of visits, had it taken down and reuploaded multiple times, and stopped it.
Even though the copies had stopped, I silently studied every line of code inside of Pokemon: Brick Bronze for 4 years straight.
I studied day and night. Everything from the infrastructure to the individual lines of code that were used with mathematics to achieve smooth effects.
For Pokemon: Breeze, this was a huge necessity in order to add newer features.
For those who have never seen it before, Pokemon: Brick Bronze’s codebase is extremely advanced code.
I would often question “why did the developer write it this way?”
Through this process of studying and reproducing extremely advanced code, I went through a metamorphosis and became an extremely advanced scripter.
The main lesson I took away from these experiences is that copying games yields a lot more success than starting original games. But, deep inside, I longed for an original game of my own to do well.
Pokemon: Creation of Zygarde
After I was done with Pokemon: Breeze, I went all in on Pokemon: Creation of Zygarde (P:COZ).
Pokemon: Creation of Zygarde was my original Roblox Pokemon game.
At the time, the best technology in a Roblox Pokemon Game was using pixelated animated sprites, as Pokemon: Brick Bronze did.
I was deeply bent on heavily improving this old technology.
The PCOZ team found high definition versions of Pokemon sprites, and I wrote my own sprite rendering system to render the sprites.
In the video below, you can see the HD sprites on the left, and the blurry sprites on the right.
We plan on using animated sprites for our UI and 3D models for everything 3D, including battles. Left is PCOZ and right is PBB. pic.twitter.com/dZKaDy61Pa
— Script💻 (@script_ing) July 11, 2018
Later on, we decided to use the actual models from the games themselves.
This was a drastic change in the Roblox Pokemon genre, because prior to this decision, every Pokemon game had modeled their own versions of Pokemon.
We were going to use the official 3D models from the game (yes, copyright, which I’ll get to pretty soon).
Below, you can see the summary GUI that I was in the middle of writing the code for.
Still a WIP, some text has not been changed yet but here's how it looks. pic.twitter.com/fLR66L2guA
— Script💻 (@script_ing) April 29, 2018
This decision to use the official 3D models from the original Pokemon games made such a significant impact in the quality of the game that it attracted 100,000+ supporters.
Modeling Technology
Now, the original models from the Pokemon games were one large model (like one MeshPart in Roblox).
This meant that animating individual parts of the Pokemon (getting the tail to move, head to move, etc.) was impossible.
Roblox didn’t have mesh deformation technology at the time, so the only way to animate these Pokemon was by splitting the mesh into different parts in Blender (taking the entire Bulbasaur and turning its head into one mesh, each leg into another mesh, etc.)
By doing this, we were able to animate everything.
Now, the quality of our animations wasn’t as good as the professionally made versions for the original Pokemon games, because of Roblox’s lack of mesh deformation technology.
But we did what we could to make it work.
We are getting closer and closer to actually completing our very first 3D model! We'd love to have the second one done and animated by Sunday next week. After that, I can start implementing them for battling. I will post updates frequently. Thanks for the support and patience! pic.twitter.com/1KYU8KrF8M
— Script💻 (@script_ing) January 22, 2018
I remember this day very clearly.
Bulbasaur was our first model where we were able to split its parts into different limbs and animate them.
Fun fact, the head animation didn’t use Roblox’s animation editor (I manually scripted the animation itself).
We didn’t just stop there, either.

Within a month, we had rows of high quality Pokemon models all lined up.
Pokemon Takedowns
Soon, Nintendo began taking down Pokemon games because every Pokemon game violated their intellectual property (IP).
Pokemon: Brick Bronze was the first.
Slowly, every other Pokemon game went down as well.
But, that didn’t stop me, a determined 14 year old, from working on PCOZ.
Through writing tens of thousands of lines of code, I eventually attained a state where our 3D models could be used inside of battles themselves, with custom camera effects, as you can see with this Latias.
A glimpse of the unfinished wild battling! Something everyone will get to test prior to the game's release! pic.twitter.com/LHYVOFDRlp
— Script💻 (@script_ing) May 28, 2018
Animation Technology
One problem that arose, due to Roblox’s lack of mesh deformation technology, was the inability to animate tails and curvature for models.
For snake-like Pokemon, like Serperior and Rayquaza, whose animations require curvature, there was no way to get their meshes to curve.
As I developed the battling and game systems, the modeling team began researching a new way of achieving flawless sprite animation — one that would be unparalleled to anything that has been achieved in Roblox Pokemon.
Eventually, with months of research and development, we were able to get the encrypted models for the original Pokemon games themselves and use some software to extract animations themselves.
From what I understood, we would be able to get the original Pokemon animations from the games themselves, instead of using our own versions.
This would mean that, not only would our models be the best possible models, but our animations would also be the best possible animations.
We were doing it for the players (and to push the boundaries of Roblox).
It was a long process, but we were able to take the original animations from Pokemon games, split them into frames (similar to what we did for animated sprites), and play them one by one.
This was easier said than done, of course.
At 14 years old, I began looking at ways to optimize this process, so that it would be able to run, even on lower end devices.
I remember the first time we achieved this technology, it was really lag.
I worked for countless hours to optimize everything, so that this video could be taken, illustrating our new technology.
For the past SEVERAL months we've been trying to put in blender animations, and now we've done it! pic.twitter.com/jTjqNiFV2Z
— Script💻 (@script_ing) July 21, 2018
This was truly the point at which a lot of people began looking into PCOZ.
They knew that we were serious about this game.
We were going to do whatever it took to give players an awesome game.
The days that followed were with much excitement and vigor, as we added many different Pokemon into the game, with this technology.
Another issue is that this process took 1-2 hours per Pokemon… and there were 800+ Pokemon….
But we kept persisting.
We just wanted to give players the best possible experience.
We were even able to get the models to blink. It was truly remarkable.
Greninja's ready to dive into battle! #ROBLOX #RobloxDev pic.twitter.com/y5UDacMace
— Script💻 (@script_ing) July 23, 2018
Charizard's ready to soar into battle! #ROBLOX #RobloxDev pic.twitter.com/BlUlVx4eKT
— Script💻 (@script_ing) July 23, 2018
This new technology allowed us to achieve curvature in our models quite nicely, as well, as you can see from Articuno’s tail.
Articuno is freezing to enter a battle! #ROBLOX #RobloxDev #PCOZ pic.twitter.com/lKUtGh8EGL
— Script💻 (@script_ing) July 31, 2018
I just had a dream come true! Riding a Kyogre!! #Roblox #RobloxDev #PCOZ pic.twitter.com/DElk71Fo9x
— Script💻 (@script_ing) September 30, 2018
PCOZ’s End
Of course, PCOZ wasn’t legally allowed to be put on the Roblox platform.
We were violating someone else’s intellectual property.
Through the development of the game, I matured and realized that we’d be putting years of effort to create an awesome game, just for it to get taken down.
So, it had to end, to the disappoint of all of its fans.
Here's the official announcement. Also, I have changed quite a bit of TSE features. pic.twitter.com/1CHXH7r9E7
— Script💻 (@script_ing) December 17, 2018
The Sacred Element (TSE)
In the midst of uncertainty with PCOZ, I had begun making another game, called The Sacred Element.
This game would be similar to a popular online game called Wizard101.
In The Sacred Element, you’d have cards and engage in turn-based combat, similar to the Roblox game Hexaria.
#Roblox #RobloxDev pic.twitter.com/mmUkhFVinP
— Script💻 (@script_ing) October 7, 2018
I had a lot of developing this game, coming up with card ideas and attack animations.
At this time, my mindset was to just create whatever I enjoyed. It didn’t matter how long it took, or how much money it brought. I was just having fun.
— Script💻 (@script_ing) August 10, 2018
#Roblox #RobloxDev pic.twitter.com/07tNTM8wEU
— Script💻 (@script_ing) September 1, 2018
Throughout the process of TSE, I realized that creating hundreds of card images would take a long time, and I felt reconnected with my passion for turn-based games.
I wanted to create my own turn-based game, but we’ll come back to this in a bit.
Mini-Projects
I wasn’t as fully connected with The Sacred Element as I was with my previous games.
This was probably due to to working on something I cared about for a long time and not seeing it all the way through.
To cope with this, I worked on mini-projects.
One was this Fortnite inspired gun thing.
— Script💻 (@script_ing) February 10, 2019
I spent a few days creating this as well, a sword fighting system inspired by Adventure Quest Worlds.
You asked for it, here it is. Keep in mind that this is a Work-In-Progress. #Roblox #RobloxDev pic.twitter.com/8zyA80k0yy
— Script💻 (@script_ing) March 7, 2019
Elemental Adventures
That passion for a turn-based game incited me to turn The Sacred Element into Elemental Adventures, which would be my own, original, turn based game.
Now, bear in mind that I was still studying Pokemon Brick Bronze’s code at this time, to improve my scripting abilities.
Clearly, Pokemon games aren’t allowed in Roblox.
But, I could still make my own turn based game.
In fact, it didn’t even have to feature creature catching.
I could make it however I wanted.
So, here’s the first public sneak-peek I posted of Elemental Adventures, in July 7, 2019.
#Roblox #RobloxDev pic.twitter.com/lgXE5Tzk8L
— Script💻 (@script_ing) July 7, 2019
Everything in there is original, except for the encounter animation (which I used from Pokemon: Brick Bronze).
After a month or so after that was posted, I had even more of Elemental Adventures developed.
In the video above, you can see some of the UI and attack animations that I was working on at the time.
8+ months later..
We had decided that the whole game of Elemental Adventures would be much too large to release at once.
So, we worked on a Demo version throughout 2020-2022.
Throughout the time, we created several google documents, outlining the vision of Elemental Adventures, planned out the story for it, and wrote the story for the demo version of Elemental adventures in detail — which was 80+ pages.
Yes, 80+ pages of documents for the story for the demo version of Elemental Adventures.
Scripting that story took forever.
I was around 80% of the way done with the story for the demo version of Elemental Adventures.
I’ve shared some of the screenshots of the features I developed for those several years with Elemental Adventures below.
Fun fact: Dalewood City was the name of the first city that we had originally planned in Pokemon: Creation of Zygarde.
With Elemental Adventures, I wanted to create a masterpiece turn-based game that wasn’t necessarily about creature catching.
I wanted to be able to create my own fantastical places. I wanted to take the things in my imagination and put them on Roblox for the world enjoy.
When I was younger, at around 12 years old, I was reading the Percy Jackson series and I was fascinated with the concept of Greek Gods and Greek mythology in general.
But when I looked for Roblox games with Greek Gods, they were all low quality.
I wanted to bring a masterpiece of an adventure to Roblox.. and I wanted to also add Greek Gods to it.
A game with an amazing storyline, battle mechanics, elements, and fantastical creatures: a fantasy RPG.
There were so many different challenges with Elemental Adventures. Some things took 12 hours to finish.
Custom Terrain Serialization Technology
One of the features of Elemental Adventures is that some of the maps were made using a combination of Roblox’s terrain tools and Roblox’s normal building tools.
Elemental Adventures is a game where player 1 and player 2 can be in different maps and as a result, see different things.
I wanted player 1 to see the terrain for map 1 while player 2 only sees the terrain for map 2.
And if player 3 was also playing the game on map 1, I wanted player 3 to see player 1 in the same terrain.
I thought that I could use CopyRegion and PasteRegion to achieve this.
However, Roblox doesn’t allow you to achieve this effect using TerrainRegions, so I spent 8+ months making my own custom TerrainRegion framework (with help from some friends) that serializes the terrain into a string and deserializes the string back into terrain.
If that sounded confusing, it basically means that I spent 8+ months to write a system that takes all of the terrain in every map and turns it into a random sequence of letters, like “DGweF3feGREQWKMwegOfMF3f.”
And that random sequence of letters can be turned right back into terrain at any time.
It turns out that was a very hard thing to do, because there’s many limitations and considerations:
- The deserialization process (loading the terrain given the random sequence of characters) can’t cause lag for players
- The Region3 used for the serialization/deserialization can’t exceed Roblox’s maximum Region3 threshold. To combat this, my implementation used batched Region3’s for saving/loading.
- Turning a lot of terrain into a random sequence of characters will yield a lot of information. Sometimes, in trying to paste the encoded version of the terrain into a script, Roblox’s Script Editor itself broke. So, a lot of optimizations had to be in place.
- The loaded terrain must load in the exact place and not override existing terrain. Some maps have holes that are a part of the story mode for Elemental Adventures. If the terrain didn’t load in the exact place that it was saved at, the holes would appear in different locations, which would interfere with the scripts for the story mode.
But, at the end, it all worked out.
Two players were able to be in different terrains at the same time. Even with large-scale terrain, there was 0.
I still await the day that Roblox makes this a feature that doesn’t require all of this madness, lol.
Many Iterations of Turn Based Battling Systems
When I was developing Pokemon: Creation of Zygarde, I had to study Pokemon Brick Bronze’s turn-based battle engine (which was over 50,000+ lines of code long) as well as Pokemon: Showdown’s open source battle engine (which had way more).
These were my best references of a turn based battle engine system.
In that studying process, I had made many many attempts to make my own battle engines for Pokemon: Creation of Zygarde.
I remember creating my own battle engine for 3 weeks, and then starting over because I had interpreted certain things from Pokemon: Brick Bronze wrong.
This process of creating things from scratch, working on them for a long time, and starting over was frequent for Pokemon: Creation of Zygarde.
I created so many battle engines during that time that by the time I was developing Elemental Adventures, I was on my 20th iteration of a battle engine from scratch.
Turn based battle engines are extremely complicated when you have a lot of features interacting with each other.
Elemental Adventures had its own events as well, that allowed certain battle conditions to interrupt future battle conditions.
For example, if my character was wielding a sword that stopped the effects of rain on the battle 3 turns from now, the engine has to:
- Realize the player has a sword that can do that
- Wait 3 turns
- Realize it’s raining
- Realize that there’s something that clears all weather effects (the player’s sword)
- Clear the weather effects for all players
- Individually tell every player “script_ing’s sword just cleared the rain!”
- But if there’s something in the battle preventing that rain clearing ability, it has to be intercepted by that 3 turns before the effect even starts!
And all of that has to be done without using hundreds of nested if statements in an efficient way.
In practice, there are many many systems like this built into Elemental Adventures’ battle engine.
This gets even more complicated when we consider things like 2v2 battles.
Custom Fonts
I wanted Elemental Adventures to be beyond just a game.
I wanted it to be a full on experience (before corporate Roblox ruined that term).
So, I studied Pokemon Brick Bronze’s custom font creation system and traced its roots back long before 2017.
I was able to get ahold of a similar app that allowed me to create my own custom fonts and I wrote some code to map them all into Roblox that worked with the same module that Pokemon Brick Bronze used.
Now, Pokemon Brick Bronze used a pixelated font.
I wanted to do better.
So, I learned about font systems and RGB systems in computers to optimize the font of my choice for high definition rendering.
Here’s the result.
Also, I added my own version of Rich Text into it. This was long before Roblox ever had such a feature.
My custom font allowed for custom colors, mid-sentence font switching, italics, screen shakes on exclamation marks, etc.
You can even see this custom font being used in the Elemental Adventures quest system at the top left.
Elemental Adventures On Hiatus
This intrinsic motivation helped me persist with Elemental Adventures (without seeing results) for so many years…
But then, in 2022, I realized that I was going to graduate soon and that college was coming soon.
I needed a way to make money. And a lot of it.
Elemental Adventures was a passion based project.
So, I put Elemental Adventures on hiatus and started a web startup Quizzy, in the hopes that it would help me pay for college.
After working on Quizzy for 2 years, I came back to Roblox after realizing that the top Roblox games make over 6 figures a month.
At this time, knowing how large of a game Elemental Adventures was going to be, I decided to leave it on hiatus to develop BattleMania.
BattleMania
For the full story behind BattleMania, please read here.
Closing Remarks
I hope you enjoyed reading this giant story about my experience in scripting Roblox games.
If you’d like to stay in touch, please consider subscribing to Kushal Writes by scrolling down (it’s free).
Also, if you have any questions or thoughts about what you read here, please feel free to do so by emailing me.