작성일 :

As this is a post-production review, you might find it more enjoyable to read this after you’ve had a chance to play the game first.



BOB - Basis Of Bitwise Download - Google Play Store
BOB - Basis Of Bitwise Download - App Store



Promotion video

Production Background

I have a strong interest in Gamification.

In fact, it’s not just an interest, it’s a dream and one of my life goals to become well-known in this field.

I have loved games since I was young.

Many people have a negative perception of games,

But I am convinced that I have gained many positive aspects in life through games.

Through the raid leader activity in a game called ‘World of Warcraft’, I was able to develop strong social skills and leadership.

From a game called ‘League of Legends’, I learned about the harm of excessive competition and how deeply people can immerse themselves in the element of ‘competition’.

From a case of a game called ‘Heroes of the Storm’, which is of the same genre as ‘League of Legends’ but failed at the box office, I learned about the drawbacks of ‘communism’

Beyond these well-known games, I’ve truly been able to learn a lot of life-helping lessons through a diverse array of games.

Of course, it’s not true that all aspects of games are positive.

There are certainly negative aspects to games.

However, I believe that the causes of these negative elements lie more in the other aspects that inevitably draw one into the game world, rather than in the ‘game’ itself.

I think ‘game addiction’ is not a ‘disease’, but a ‘symptom’.

It’s a ‘symptom’ that appears due to the real ‘disease’ caused by various problems.

Because I have these thoughts, I think I’m very interested in ‘Gamification’.

I will deal with related stories separately in the future.



Therefore, even if it’s in a simple way, I wanted to create a game that actively applies ‘Gamification’…



To create a stepping stone for the growth I need…



That game is BOB - Basis Of Bitwise.





Firstly, the goal of making this game was to create a stepping stone.

A stepping stone needed for me, who still lacks references in the field of gamification.

Therefore, one of the things I considered most among various elements was the possibility of ‘promotion’.



In fact, I wanted to make a game based on topics I like or want to learn about.

However, considering the production goal of this game, I chose the topic of ‘bit operation’.


At the time of production, and still now, I belong to a community called 42Seoul, which is comprised of people who dream of becoming developers.

In this community, there are about 2,000 members in the 42Seoul channel alone, and including 42Paris, 42Tokyo, etc., more than 100,000 people belong to channels worldwide.

I wanted to take advantage of this aspect.

So, when considering the topic of the game, I prioritized the following:

  1. A topic that developers or aspiring developers would be interested in learning about
  2. A topic that aligns with my gamification philosophy of ‘making unfamiliar things naturally enjoyable to learn’


As a result of considering these points, I chose bit operation as the topic.

Actually, I believe bit operation, being the most basic principle of computers, is not at all difficult once you become familiar with it.

However, since many aspects of the development field have advanced, you can proceed with development relatively conveniently even if you don’t know the principles.

Nevertheless, I believe that knowing the ‘basic principles’ of anything is very important.

It’s a concept too important to be excluded simply because it’s ‘hard to learn’.

And in many aspects such as coding tests, algorithm solving, networking, setting item flags in games, bit operation becomes a great tool.

But I, too, have had thoughts like ‘Do I really need to learn this?’, so I understand the difficulty of learning.

Therefore, I wanted to help people overcome these obstacles and enable them to ‘learn about bit operations in a fun and familiar way’.



One of my favorite phrases related to learning is, "It's not difficult, it's just unfamiliar."

As we live, we often have to learn new things.

I believe that usually, learning new things is challenging because they are 'unfamiliar',

but sometimes, people seem to think they are hard because they are 'difficult'.



Deep aspects of fields established as a discipline, such as physics, philosophy, mathematics, etc.,

and fields that require art and a high degree of physical ability… I consider these to be truly ‘difficult’,

and for ordinary people, many things such as memorizing multiplication tables, correct postures for fitness exercises, how to use new electronic devices, etc.,

I believe the difficulty in learning them is not because they are 'difficult', but because they are 'unfamiliar'.



As the era progresses, and thanks to the efforts of many wonderful people,

the things that were difficult are gradually decreasing, and the things that are just unfamiliar are increasing.



I also want to convey to people that “many of the things they find hard to learn are just unfamiliar, and it’s okay once they become familiar.”




Through the element of 'fun',




And through the channel of 'games'.



GameDesign

Since I was working on the development alone, the planning was just a matter of jotting things down in a notebook.

Since I only wrote enough for me to understand,

there’s a really big barrier to conveying the planned content to others in this notebook.🥲

Although it’s embarrassing, I’ll reveal just a part of it.

The notebook...(click to enlarge)


The notebook...(click to enlarge)


Since I’ve already explained the biggest game designing intent in the production background above,

I want to explain the other parts I focused on while game designing.



Firstly, game resources.

My drawing skills are really poor.

So, my goal was to make a game that could be created with as simple drawings as possible.

In fact, it’s even awkward to call it ‘drawing’.

It’s a little sad that this was one of the main focuses of the planning…



The second focus was, ‘how can one learn naturally while playing?’

In other words, I tried my best to design it so that ‘learning’ itself is not the goal, but ‘gameplay’ itself becomes the goal, and ‘learning’ naturally occurs.

For instance, unlike games named ‘Q-Play’ or ‘QuizQuiz’ that drive users’ learning by ‘posing and solving problems’,

I focused on planning the game in a way that learning about bitwise operations occurs naturally as one goes through the game process of matching blocks.



The third thing was not to write the plan too detailed.

Actually, this point could be a big disadvantage in case of collaboration, but as I was developing alone, there was an advantage that the plan didn’t have to be detailed.

I actively utilized this point, wrote down the overall big picture in the plan, and documented the remaining parts using GitHub issues as they came up.

Thanks to this, the time spent on documentation significantly reduced.



However, I only reduced the resources spent on ‘documenting for conveying to others’,

I was very meticulous about ‘documenting for myself, to check the progress of the project at every opportunity’.


I made every task into an issue, linked issues to commits, and recorded the progress of each issue. (Click to enlarge)





Prototype

In fact, there were many prototypes.

The first prototype

I tried adjusting the number of operator buttons, adding items to remove or change desired blocks,

adjusting effects for design purposes in advance, and I created various prototypes regarding the layout of the UI and the game progression.

But of course, the most important thing was the initial planning intention of ‘learning easily while playing through familiarity’,

so I gradually designed it to be easy and naturally playable by anyone, excluding complex and difficult parts as much as possible.

In fact, even after finishing the development, I still regret removing the part where I match decimal and binary blocks and the part with block change items.

However, I’m satisfied that I ended up creating a game that can be played without being overly complex.




Development

Client

The client development was carried out with Unity.

Initially, I had two choices of commercial engines, Unreal Engine and Unity. At that time,

I was more familiar with C++ than C#, but…


  1. Due to the fact that I was developing alone
  2. The game is to be released on mobile


I chose Unity, which has a relatively more active ‘Asset Store’ and community, and is friendly to mobile.

At the beginning of the project development, mentor Jongpil Kim’s help with handling Unity was incredibly helpful.

Actually, I was really thankful not only for Unity, but also for guidance on the direction of the project, issue management, and most importantly, for the emotional support in many ways.

I sincerely thank him again and again.



The client development itself was really fun.

Being able to implement exactly what I want and see it directly is the big charm of client development.

Moreover, since I was also planning, the fun seemed to double.

However, there are some regrettable parts when I think about it now because I developed it while studying design patterns and the C# language…

particularly, abusing the singleton pattern too much, and unnecessarily inheriting and overriding when doing object-oriented programming (based on current thinking).


Also, when using external plugins during development, dependency issues between plugins often occurred, which were really difficult and frustrating to solve.

But I thought that if I just sat down and searched for something, typed some code, and tried it, it would move forward. So I just sat down and did something.

It may be a bit of a brute force approach, but I kept reassuring myself and continued to make gradual progress by sitting, searching, and modifying code.



Another challenging part was the issue of mobile optimization.

When I inserted flashy effects and cool animations, they worked really well on PC,

but on mobile, there were issues such as overheating and stuttering when the C# garbage collector was running.

In such cases, I checked and corrected the popping parts using the Unity profiler,

and proceeded with optimization through resolution and frame-related optimization settings, and lectures by Unity evangelists.



The disappointment when my cool project, developed hard on PC, ended up rapidly draining the battery by turning into a hot hand warmer on mobile is really indescribable.

However, the joy when I first played my game running well on mobile after learning and applying various optimization techniques was also indescribable.

Optimization is one of the very important yet difficult aspects in mobile game development.

In addition, I encountered and learned about various problems while developing, such as issues related to different resolutions across mobile devices, branching of settings values between Android and iOS.



After the project launch, I plan to gradually library the optimization techniques I used and post them on GitHub,

and I plan to post well-organized issues and error resolution situations related to other optimization and Unity settings on my blog.





Resource

In fact, I used to work as a game business PM.

The role of a game business PM is not about the fun of the game,

but rather about setting up a business model, planning, and progressing projects under the KPI of ‘How can we make more money from this game?’.

Also, being a PM in a business team often requires frequent communication with the development team.

At that time, I understood concepts related to resource management, such as sprite atlas, batching, and draw calls, which I heard through the grapevine.

I think this served as a good foundation for this development.

I tried to make the sprites into atlases, and I managed the resources while studying a little more, not just the concepts I knew.

However, there were some disappointing aspects as I studied.

For example, Unity has a setting that automatically atlases all sprites.

You just need to check one option.



For art resources, I was initially at a level where I couldn’t even draw a good circle or square,

But gradually I improved and at some point, I was able to make icons and animations at a reasonable level.


Fun arts!




Knowing that I am not yet capable of drawing sophisticated and cool arts,

I deliberately set the game art concept to give a bit of a scribble feel.

I set it to feel like a primary school student taking notes while studying.





Server

For the server, I used Firebase.

What I wanted was just to store the nicknames and highest scores of users on the server,

to load the ranking for each user, so I didn’t implement my own server.

In addition, it was attractive that Unity and Firebase are very compatible based on Android.

As of July 2023, there is a compatibility issue between Firebase SDK, cocoapods, and ruby on iOS M2.


Unity and Firebase are designed to be easily connected,

Once you study and understand the basic concepts, you can easily develop them.

In fact, because they are simple features, it is insufficient to call it a game server,

I am very happy to have created my own game that directly connects the client and the server and updates user information.



Also, user login is done through Google Play Games Service on Android,

On iOS, it is done through the Game Center.

If the user is not connected to the network or cannot use the two platforms,

After identifying user information on the client, a unique UUID (Universally Unique Identifier) is generated using the C# Guid class, registered on the server, and able to send and receive requests.




BM

In fact, it was not easy to set a BM as the game was intended for production experience and educational purposes.

If ads keep coming out in educational games or if it induces gacha…

Therefore, I set up a BM to encourage sponsorship with simple reward ads and IAP.





Localization

The languages supported by the game are Korean, English, and French.

There was no problem with localization in Korean and English, but French was a bit tricky.

Even with English, if you use an internet translator, many awkward sentences come out,

Because I don’t know French at all, if I use a translator, I can’t even tell if there is a wrong sentence.

Therefore, I proceeded with localization while communicating with a friend who is fluent in French.








Market Management

This greatly helped me as I worked as a game business PM.

Privacy policy, terms of service, ad restrictions for children under 14, market targets, etc.,

Based on the experience of solving various issues that I encountered during my work, I was able to solve them familiarly.




And finally, on July 15, 2023, I released BOB - Basis Of Bitwise.





It was a fun journey.




Closing

I will post my experience on solving issues, code, Unity settings, etc. during the development stage on the blog in the future.

I also plan to write a review after the live service.

Thank you for reading the long post.

I hope you enjoyed it.

Thank you to everyone who played and read the reviews.

Thank you.

From soo:bak