The Tale of a Newbie Programmer

Do you know Sora, our newest crew member? Please enjoy this self-introduction. We’re giving the floor to him now!

Hello! You may have not heard about me before, as I quietly slipped into the crew.

I come bearing the mame of my favorite character: Sora as my nickname. I discovered 100% Orange Juice through a friend back in 2016. If I had to quickly give an introduction: I live in France, am 24 years old at the time I’m writing this, and I love heavy metal music. Atreyu’s band is my personal favorite. \m/

My favorite hobbies are pretty much: gaming, creating things, drawing, and hugging my Sora & Suguri plushies.

I joined the Fruitbats on the 10th January 2020. It’s my first professional experience as a programmer, and I was super excited to get started. After setting up the project files and everything, I got assigned my very first task: making the master volume option, which needed both UI modification, and save file changes.

The game engine used, Luna3D, is made in a very specific way which does not use OOP everywhere – I just got out of intense C++ practice before getting hired, so seeing old methods of coding felt a bit threatening at first.

The fun part of working with a brand new environment was first getting my bearings, finding what does what, and putting those two together into a decent code. Thanks to the team, I asked whenever I needed help, and I had my answers quite fast. Something I wasn’t used to though, is that logic and drawing are both handled in two different places, which I was not doing before. That said, a lot of the basic concepts were completely unknown to me as I had no previous experience with them. 7 hours of work were needed before I managed to get a decent result that worked quite well. Later on, I kept on going with other voice options, as well as other tiny changes here and there.

The first big project I had to handle on my own was one of the new Playground mini-games: Poppo Shooting. It went through several prototypes, the one that comes to mind being stationary balloons, and a score based gameplay. It got changed later to moving balloons carrying rewards.

It was also the first time I had to tackle the wonderful network code, and managing the AI behavior. When starting the development, I was unsure of which direction I should go, there wasn’t (from my understanding back then) any hitbox functionality, which was crucial for a balloon & dart based game, which was the base idea. A quick search on google led me to an SDL example, which I could adapt to our code. And miracle of miracles, it worked. Besides that, some of you might remember that the CPU was really bad at this minigame. I came back to it weeks later (I think it was a few days before School Crashers event ended) and improved the AI by a lot, giving them priorities, a (way) better aim, and decision management.

Afterwards came some QoL features, such as saving the lobby name & password between game sessions, and changing those in the lobby directly if you were the host. The previous experience I gathered made that way easier for me to implement. It was the first time I had to bother Tony (Rive, our lead programmer) for some AoS2 code snippet, which I took about 30 minutes (and a lot of re-explanations) to understand. If you read that Tony, please forgive me!

The next “big” feature I made was the integration of the Rich Presence feature of Steam & Discord, as well as fixing steam invites so they would make you join your friend’s lobby directly. It took a lot of effort to debug, but in the end everything worked quite well. The funny part was working with an old framework (discord-rpc) which has no more support at all. I remember having some issue about the game invitations, but trying to email discord would redirect me to a server that gives support to the newer version and not the old, which was not helping me at all. But in the end, I eventually found out the issue myself and corrected it. We had to implement a way to retrieve Steam avatars and convert it into a usable texture, which took me a lot of research in order to know how to do it, as I had little to none knowledge about how DirectX works. With the help of hexun, we managed to get the avatars working together, which were added later in the lobby screen.

Later on, the project I have probably spent the most hours on (a full month and a half!) was handling, along with trackftv (yet another of our programmers), the Bounty Hunters event. While Track was creating the quest & bounty side of the game mode, I was creating the shops as well as thinking of items. It was a lot of suffering fun to debug all of this. (And even if some horrible desyncs got through when it was put live, we managed to fix it quite rapidly.) The one thing I remember the most is all the panel layering issues we had – Basically, the panels had way too many things on them at once, which completely messed up the layers (For example, BH shops going over Arthur’s shops, like competition was a crime!)

Thankfully, Track managed to fix all of it… I think. I’m sure we’ll have to look back at it again once we’ll tackle the remastered version of Bounty Hunt!

You can notice here that we originally planned items to be locked behind your current Norma level.

Lately, you saw me pulling out the official modding support. It was something I really was looking forward to, knowing that I came myself from the modding scene in other games. The whole system took about 20 hours of work. It’s of course not yet finished. A lot more is coming for it, including the much requested Steam Workshop support. I don’t have any big details to share about the system overall, just that it was a second take at it after failing the first time a few weeks back. But I’m glad that today so many people enjoy making custom skins for their favorite units.

I could expand that list of projects even more, but some things have yet to remain private for now. I’m super happy to be a part of this wonderful team, and I can’t wait to see how far we’ll be going together!

Editor’s note: everyone be nice to Sora!

One thought on “The Tale of a Newbie Programmer

Leave a reply to Janus N Sanity (@novus_ultimus) Cancel reply