Contents

The Beginning

Here is where it all begins for me as an engineer.

Introduction

Since I was a kid I had this feeling of creating new things. It could be anything. But I had to create. I remember that my and I were always drawing some cards on paper and we created a new card game like Yugioh or Pokemon. I wanted my own card game, with my own rules and my own characters. I was only 7 or 8 years old.

When I was not creating a new game to play, I was playing a new game that someone else created. I played on my father’s computer because I did not have a video game at the time. But this was not a problem for me, I discovered that existed something called “emulators” and I could play games from Gameboy and Super Nintendo. I could play any game I wanted. Well, at least the ones I could find the ROM for the emulator.

As I got a bit older, my father bought me a video game, Nintendo 64. It was different than what I was used to, the Gameboy or SNES (emulated, of course). It was amazing, with 3D graphics and an interesting game of a little guy in green clothes that wakes up in his place with a little shiny flying ball talking to him. The game was The Legend of Zelda Ocarina of Time. I had no idea how this game was going to change my life.

Well, I got obsessed with LoZ, it took me a long time to finish it (I was a kid with no English skills by the time fighting the Water Temple…) but I did finish it.

By the time I was a teenager, obsessed with games, RPGs, and new challenges. What else was coming?

First steps

When I was 11 or 12 years old I discovered online games. Before that time I just played games with my friends using another controller on the video game or sharing the keyboard on the computer. I used the internet mostly to look for new stuff to play or download a new ROM.

I discovered an interesting online game that some of my friends were playing. It was called Ragnarok Online and it was amazing. We could create a party to level up our characters and create guilds to fight for the Emperium at the War of Emperium (aka WoE) with other guilds. You could have characters specialized in magic, healing, buffing and debuffing, damage, and so on. Then I discovered other amazing RPG online games and had a lot of fun with them all, but Ragnarok was different for me and I’ll tell you why.

The main server was limited to level 99 at that time, and it took a long time to level up and develop the characters. People created alternative servers with custom configuration and custom stuff, like classes, items, and equipment. That way I could have a character in the main server and test builds and other classes in alternative servers. Or just have fun on full PVP servers, which everywhere in the server was PVP allowed.

After some time, I got tired. The main server was full of bots and cheaters. Almost all alternative servers were pay-to-win. I wanted to have fun and not spend money on VIP subscriptions or custom equipment. So… what if I build my own server?

Then I started researching how to build a Ragnarok server. I needed an emulator that would be the server (wtf?) and I needed a client (wtf??). Ok, let’s look for some tutorials then.

I read a bunch of tutorials (both in Portuguese and English, which I started studying :nerd_face:) and I could run on my computer a simple server that used text files as the database. It was a simple instance, but I managed to run it and play it for some time.

Until now, I was just following tutorials instructions, but I started to understand what a server and a client was (this was not covered in detail in those tutorials…), there would be something that we as users need to run on our computer and something that would run somewhere else that we did not see, which would manage data, nice!

The next step was to evolve my simple server to a more robust one, using a real database, since text databases were not ideal (at least that was what tutorials were saying, databases are better than text files, I was ok with that). I locally deployed something called MySQL database and managed that with phpMyAdmin. It was so awesome. Now my Ragnarok data was being stored in a cool database much more secure than a text file (I needed to type username and password!).

But my friends were not able to play on my server. It was running on my computer and I had no idea how they would be able to connect and play. Is there something related to those IP addresses that I saw people talking about in those Ragnarok emulator’s forums? Well, let’s discover that…

Turns out that my computer would need to provide a connection to the emulator (or server), so the client on their computer would be able to connect and play. I remember that I came up with a solution for that, but it was not so good and the connection was too slow, the game lagged a lot. Well, the best option would be to pay somewhere to host the emulator and the database.

There were companies that specialized in hosting online game servers, and I discovered one that had a free tier or something like that, that we could use for a while and then upgrade the server as we needed (nothing like those cloud services we have today, but it was pretty decent by the time).

Done. I had my custom emulator and database hosted on the internet (it wasn’t called cloud back then) and my friends and I could play together. Sweet!

First code

We started discussing how to increment the server since we started inviting other people to play that invited other people and so on. We had something like 50 to 100 people playing on our server, but the quests and NPCs were always the same and we got tired, we needed something new.

I knew that NPCs, quests, and other stuff were scripted in the emulator, and it was possible to create a new script to be used in the game. But it was greek to me. I mean, look at that:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
prt_castle,43,30,3	script	Charles Orleans#cook	4_M_OILMAN,{
	if (MaxWeight - Weight < 2000) {
		mes "[Charles Orleans]";
		mes "Just one second.";
    ...

prt_castle,44,30,5	script	Wickebine#cook	4_F_JOB_ASSASSIN,{
	disablenpc "Wickebine#cook";
	end;

OnInit:
	disablenpc "Wickebine#cook";
	end;

OnEnable:
	enablenpc "Wickebine#cook";
	end;

OnDisable:
	disablenpc "Wickebine#cook";
	end;
}
...

I did not understand. I had no idea where to begin. There was some Scripting section in the forums, some tutorials, and how-to guides. Let’s take a look…

I learned that each script had some rules and specific commands. Things started to make sense, but I still had no idea how I could create one from scratch. First, I started a dummy script in which an NPC would say something to the player using the player’s name on the message. I didn’t know, but it was my first Hello World script. And indeed he said Hello fellow <user>!, something like that.

Now that I have an awesome script, it’s time to bring more features into it. Well, I didn’t know how to program, but I know that I had a ton of scripts in the emulator folder. Actually, there was a folder dedicated to scripts. Any type of script, an NPC, a quest, city features, anything. I started copying and pasting code into my new awesome NPC until I had the behavior I wanted in-game.

Following this process, I managed to create a couple of buggy scripts for NPCs and events. Well, they were not great, and I used the Windows XP notepad for that… But they kinda worked most of the time, but sometimes they stopped working for unknown reasons for me at the time. No problem, we were having fun on the server, and I had fun learning how to do my first codes.

Some years later

Well, fast-forwarding from 12 years old to 17 years old, I was finishing high school. I wasn’t a great student, more of a mediocre student with mediocre grades. What would I do being mediocre in college? Would I even be capable of joining college?

For that, I need to thank my parents, especially my father for being tough on me when I was procrastinating to study and get better grades. I remember that every weekend he woke me up early in the morning to go to the library to study until it was time for lunch. Then we returned home to lunch and I could finally rest.

In the year 2013, I joined college. I chose Computer Engineering to study, it was a bit different than Computer Science, it has some Electrical Engineer stuff, in which I was interested as well. I made friends. A lot of friends. It was awesome, I was learning and having fun, going to happy hours, skipping classes to play cards and snooker while having some beer (looks like I was having more fun than learning, huh?)

In my 2nd semester at college, I applied to a trainee program and got accepted. The job was easy, I basically needed to be available at my desk if anyone had issues with their computer, then I would restart the computer and my job was done. For some unknown reason, the money was good too. But I wanted more. Not exactly money (it’s always good, right?) but I wanted more challenge or a project.

I had a group of friends that wanted to build a game. I think every programmer had this I want to build a game phase in their lives (or still has). And we had good programmers in this group (well, computer science/engineering students with good grades in programming classes. Don’t ask me about calculus grades, I believe some of them didn’t even finish the first calculus course until these days…).

We kinda agree that we would be a company that would develop mobile games. We were very creative at the time. We would create games with amazing stories and charismatic characters. We had designers and storytellers on the team. We had good developers. We had a leader. I mean, what could go wrong?

What could go wrong?

We didn’t know about software development process. Scrum, Kanban, and even Waterfall were not familiar terms for any of us. Well, I think not at least, I can’t remember anyone mentioning good software development processes. We had this guy, the manager guy, which was the person responsible to unite this amazing group and the one who had good game ideas (they were truly good ideas). He did everything following his intuition, and I admire him for that. We were about 8 to 10 people in this group. The manager guy decided we were going to deliver small artifacts, each one of us, including him, and we would present to the group our work at every meeting. Seems familiar, huh? Looks like a Scrum event. Not a daily, but maybe a weekly? Doesn’t matter, we were organized and focused on our deliveries.

I didn’t know anything about games. I just finished the Algorithms and Data Structures class. Actually, almost every programmer in the team had finished this class with me (and others had failed…). The developers decided that Unity would be a good way to go. We started building Unity deliverables, like characters controllers and other stuff. We were still learning how Unity works, and how to create and control stuff.

After some weeks (or months) people started to be upset. Some stopped going to the meetings, others did not care if they would deliver their artifacts or not. No one was being paid for that, so why would they even care? People decided the group and the “company” were not a priority and did not deserve the sacrifice to do something for the team.

We decided to stop the activities to build a game. The designers stopped working on their design, the storytellers stopped working on their stories and the developers stopped working on their code. That wasn’t so disappointing, everyone was still in college, and we got exams and different schedules. The hype disappeared, turns out that we actually enjoyed being together and having meetings to drink coffee and eat snacks, but not in a professional way, having the pressure to deliver something, and dealing with others’ critiques.

Some of us decided we did not want to stop. Maybe creating a game was too much work for a bunch of freshmen in college, we could try something easier and creative. We started talking about apps and what we could do. Doors were beginning to open for us. Wait a sec. Doors. Open. So… what if we opened doors… with our phones? Omg, that’s it. One of the devs in the group built a poorly designed mobile app that toggled a lock image to open and closed state. Bam! We got it. We just needed to truly make the app unlock real doors, nothing much.