After 6+ years of Unreal Engine usage, I wanted to take a slight break from C++ and learn something new. In late 2025, I gave Epic Games' UEFN a go, but after a couple of weeks, I found it to be rather lacklustre and overly restrictive for my liking. This resulted in a shift of platform to Roblox Studio, a whole new language and environment to learn.
I was expecting this to be a massive challenge as the vast majority of my game developer journey has revolved around Unreal Engine and local, single-player games. Since Roblox is an online platform, understanding the difference between local and server scripts is a must. I found out rather quickly how critical it is to ensure that the scripts are not only written correctly but also placed in the correct file path. This was not something I was used to since actor scripts in Unreal can be stored basically anywhere, as long as you can successfully cast to the object.
Although the amount of implemented content this week was lacking compared to previous weeks, the goal was not to add new major content but to instead enhance the gameplay of what I already had. The whole idea of this game is to allow the player to create their own perfect build by using different materials for each part of their weapon. At the current stage of development, we have different materials, each affecting different stats of the weapon.
In the last week, I wanted to implement ways of giving more character to the materials and weapons as a whole. I did this by creating a status effect system that would allow for more diverse builds and gameplay elements. There were a few different ways of implementing this, but I decided to go with a level system where the game would add up all the different levels of a specific status effect and combine them. For example:
Blade: Poison I
Guard: Poison II
Handle: Slow I
Total: Poison II, Slow I
This would allow people to make their builds around certain status effects, if they wish to do so. I wanted to start small with this system by implementing the following:
A damage over time (poison)
A self-heal
Something that affects an enemy without taking damage (slow)
The ability to spawn an outside factor that can affect targets (a rockfall attack)
I've been fairly disappointed with the rate of development in the last few weeks, but times like this are to be expected when working on a long-term project. To counter the burnout, I decided to reduce the amount of work hours I was putting into the project with the aim to regain the motivation in the future.
That aside, I decided to work on another boss that the player will encounter in the early stages of the game. I wanted to take a different approach this time and create an entirely stationary boss, meaning the player would have to play differently compared to the first one I designed.
I knew it would be a challenge, as these types of boss battles can be notoriously boring, so there was a lot of experimenting with different attack patterns, and I do not doubt that these will change in the future. I began by implementing an "invulnerability" attribute that I can apply to any enemy. This attribute will help me control the pace of the battle.
To keep things challenging, I added some immune phases where the boss will become "shielded" by a randomly selected boss ally, and to remove the immunity, the player has to locate and kill them. I'm a little 50/50 on this addition, purely because I have the assumption that players would want to "speed kill" bosses, and the use of randomisation and immunity may remove the enjoyment of this.
Due to the nature of the boss battle, there is going to be a lot more traveling involved for the player. This has the potential to become a fair bit boring for the player, and to "spice things up" a little, I implemented a poisonous floor that would apply a DOT (damage over time) to the player when they step on it. The player can use the stepping stones provided to get to the Druid King's shields.
To be honest, after 2 months of constant boss designing, I'm starting to get a little bored with it, and I have the feeling that a break from doing so will not only benefit me but also the overall quality of the game. That being said, I want to divert my focus to the content that is already present in the game, and so I'm going to create a status effect system that will allow for more unique and exciting gameplay.
I'm looking forward to sharing all of this new content with you in the following weeks, and I'm excited to hear any feedback!
This week didn't consist of much; I primarily focused on creating an "activation" system. Something that would allow me to control the current flow and state of the game. I want to improve the scale and progression of the game, and to do so, I created a "totem" of sorts, which, when activated, will spawn the boss corresponding to that area.
The activation system works by sending an activation ID, and the scripts that use the system will listen for their designated ID. If the IDs match, then an "Activate" function will be called. Since this is a system that I'm going to use throughout the entirety of the game, I really want to make sure that it is as scalable and easy to use as possible.
On a side note, this week I hit the 400 mark in terms of development hours. I can't wait to see the state of the game after the next 400!
Coming into this week, I wanted to focus on utilising my previous fortnight's work and create the first boss fight for the player. I want each boss' theme to match their character and environment. By creating a boss that matches the player's environment, it creates a sense of familiarity but also a new experience. The attacks and enemy types the player will encounter during these battles will be exclusive, meaning that the player is going to have to adapt.
I want to avoid taking the easy route of CTRL C / CTRL V'ing a standard enemy and just increasing their health/damage. I began by creating 3 attacks:
Close quarters jump slam attack, which punishes the player for getting too close by dealing heavy damage and applying large amounts of knockback.
A medium-ranged melee attack that deals light amounts of damage and knockback.
A falling boulder attack, which punishes the player for being too far away from the boss by dropping boulders around the further outskirts of the arena.
In the future, I intend to build upon these attacks by improving their effectiveness and even adding more attacks if necessary. For now, this boss battle will be more than enough to challenge a player who desires stronger gear.
Although I've made really strong progress since starting my Roblox Studio journey, I have come to understand that my code (especially at the start) can DEFINITELY be improved. Because of this, the main goal of the last week wasn't to make new and exciting content but to go back and enhance the already-made content and to only build upon what is already there.
I was really starting to get bored with the classic 2x2 box area, which I was using to test my new additions. I took this as an opportunity to use Roblox Studio's built-in "Terrain" tool. In my previous Unreal Engine endeavours, I had rarely utilised its equivalent tool, finding there to be better options for my use cases. Nonetheless, I decided to give Roblox's version a go. Instantly, I knew this wasn't the route I wanted to take, as I wanted to maintain the "Roblox" aesthetic with my project. Using the terrain generator, I found the shapes and materials to be overly realistic for a Roblox game; the high detail and overcomplex materials didn't sit right with me.
Content Filling:
Anyone can create an environment, but not everyone can create an environment that people actually want to explore. Considering the goal is for players to explore and discover new secrets, I reckon it's a good idea to give this area some TLC. I want to reward those who go out of their way to find new areas. This will usually be by giving them a new boss to battle, but it also opens the door for unique events and awards.
Boss Battles:
Throughout each area, there will be a handful of arenas that the player can stumble across. Each arena will contain its own unique boss fight, offering new and unique loot which will be much stronger than what they are used to. I want item farming to be a key but also enjoyable part of this game, so it's important that it is actually enjoyable and rewarding enough for the player. To do so, I intend to utilise the boss's environment to create a new experience for the player.
It's been about a month since I first loaded up Roblox Studio for the first time. I was expecting the learning curve to be much greater, but I was fortunately able to adapt to the new language quickly.
The first week mainly consisted of getting to grips with the new engine and understanding the fundamentals. The usage of different services, such as the "Replicated Storage" and "Server Script Service," was completely new to me.
What am I actually making?:
I've always wanted to make a Borderlands-inspired MMO RPG where players are able to find and battle a wide range of bosses that drop unique loot. I was inspired by the "weapon part" system that allowed for parts of a gun to contribute to the overall stats. In this instance, instead of using a gun to kill enemies, the player will use a sword, which is separated into 3 different parts (for now): the blade, guard, and handle.
The player will come across different materials of different rarities throughout their journey, all of them having unique stats. The player can use these materials to create weapon parts, which they can use to make a new sword.
TLDR: An MMO RPG weapon crafting game where the player can craft their own swords to fight bosses.
Using OOP to create an enemy parent class:
I mainly focused on implementing OOP (Object Oriented Programming)-based scripts, where I created a main base script for an enemy that will allow me to easily create new and unique enemies without having to repeat my code.
Creating a sword tool:
Because of the weapon part system, creating a sword script for every sword would be a great waste of time. So instead, I create a sword script that takes the player's sword values from the player's inventory and calculates the new values when the player equips the sword. This meant that I only needed 1 script.