So here I am - landed on the continent of North America, settled the majority of administration work, had a taste of all registered courses, and now typing in front of my tiny laptop which takes 5 minutes to enter Unity3D Play Mode.
It is high time, or so I think, to pen down my experience of these months of developing TBC2, despite the easy yet tedious multi-variable calculus assignment.
In a spring afternoon, I stepped into my office in this city to which I have never been, right on the second day of interviewing at US embassy for my F-1 visa.
Everything just happened so quickly - I saw the hiring information of the indie Game Studio that always produces Touhou Game (I am big, big fan of Touhou Project), sent in my resume, got some phone interviews, and we decided that I flew to Shenzhen and started working. This is something I always wanted, but parents disagreed against my decision - I have debated, with both my parents and myself, whether I should go. The debate did not end until the last day of departure.
I took a 2-hour train from Guangzhou, where the US embassy locates, to Shenzhen. I hope to propose my own project - a 2D scroll-view game featuring Cirno I planned long ago, but in this office I was welcomed by a piece of shocking news: The developer, previously in charge of TBC2, sexually harassed our illustration artist, punched my boss in his face, and left Shenzhen.
That was a complicated story that involves lawsuits - but the simple aftermath is that he left this unfinished project hanging in the air for several months already. The original Steam release date long passed, TBC2 forever stays at its EA stage.
My boss hoped that I could take over ASAP. This is also why, two months ago, he suddenly asked me whether I could come earlier.
So I did. Forget about Cirno, I told myself. There would be another chance that I could make this game, eventually, I told myself. It is not your first suspended project, I told myself.
Maybe because that I have played TBC2 EA demo before, or perhaps thanks to my years of Unity3D development experience, TBC2’s codes were not difficult to understand. I started from implementing tiny feature requests and fixing trivial bugs to familiarize myself with its design architecture, and gradually moved to more bottom-layer structures. I progressed fast yet steadily.
To be frank, there are parts that are elegant, and parts that are ugly; I fixed a lot, but also learned a lot. The best part, I think, is the implementation of buff system which does not rely blindly on Unity3D’s Coroutine
but instead abstracts a ScheduledFunction
that checks status regularly every 0.5s, greatly improving performance.
But, in all honesty, many classes are not done well (in the sense of blatant violation of Object-oriented design). There are too many Singletons, the Bullet
class are too “omnipotent”, the ways that art resources are loaded is not async
… For some of these, I let it be. It is too costly and dangerous to rewrite some classes. However, whereever I feel a must, I re-implement the feature. Simply changing the way the art resources are loaded to asynchronous (by using Unity3D’s Asset Bundle) saves several Gigabytes of run-time memory!
While fixing stuff, I create new stuff too. The csv parser for loading in-game data, the inventory system (backpack, store, items), the Steam DLC manager (how to check purchase of DLCs, load character unlock information, prevent players from getting DLCs for free), several new dungeons (the one-blood mode, the all-star mode, and the endless mode - the last is deceivingly difficult to implement), and many, many other modules.
Working with a team of artists, designer and the PM is not always easy. Do not get this wrong - they are the most friendly. However, as the youngest teammate and the only programmer in this project, I felt pressured. This might be too self-centralizing - but I felt that I was that pillar. I felt that they held me in high expectations. I could not break, or the project is over.
Fortunately, I did well and fast. After the game is done, I even had ample time to create 5 character DLC packs containing 20+ new playable characters, each with five skills and unique attribute, on top of the 12 base characters. I relied on some previous developer’s work in the base game, but DLCs are all my independent work. Our base game, up to today, sold 50k+ copies on Steam, and my DLC packs sold 10k+ copies. (I seem to repeat these figures a lot these days as I am submitting application essays and resumes.) Brilliant, unbelievable success, said my boss. We are a indie studio, and 95% of the indie games in China are not making money. Out of the 5%, selling 1k copies is standard, selling 10k copies is rare, but - TBC2 sold 15k copies just in the first month of release.
“Write about this success on your resume. Tell your story to your future employer.” My boss said.
He was greatly satisfied with my work, and was prepared to write recommendation letters. He knew that I would not stay in an indie studio forever.
I still remember that, the first week in Shenzhen, they brought me out for a dinner. The restaurant impressed me with its unreasonably long queue and unreasonably lofty price. Even with a reservation, we still waited outside for half an hour. The food was good and yet, I think, does not worth the price or the wait. Perhaps because of my four years of regularly interacting with Korean food in Singapore, I remained unamazed by the army stew. However, I did still enjoy the food. On the table, Men were talking, about real estate, about politics and about cars. Women - including our head artist - could not interject, and thus concentrated on the food mainly. I was sitting the middle, both physically and psychologically, not sure about which group to belong to. It was a bit awkward, but that was perfectly normal. Who paid the bill? I think it was our boss.
Several of us went back to the office that night, including me, my boss and another developer in charge of another project. It is that night, I think, I first introduced myself fully - not the introduction I gave on the first day. I told my stories, and they shared theirs. I remembered that I pondered over something deep and philosophical, but now I cannot recall what that was.
If this were a mere, standard, normal internship, I could have ended this several paragraphs ago. It was not. It was a unique opportunity that did not reject me because I had not been to college yet, and in this job I assumed heavier a role than many college interns. It was a group of Touhou fans who attracted me, as another Touhou fan, and we were making Touhou games - it is my dream, but also their dreams. I could not imagine working with this group of nice people, and I never dare to envision such a happy period of time. My future internship or work will never, I think, have these style of interpersonal relation.
I am not sure whether the word “friendship” is suitable for our relation - probably not. Our boss and his wife brought us to his home for dinner. His house (or, his parent’s house?) has his game consoles and his home province’s specialty cuisine. I was told the story of ever-leaking air-conditioner in the office. I learnt about eye caring from our artist. We went to the swimming pool several times. I went to hospital for my right knee twice. I remembered the pie in the front of the hospital. I night run once in Bao’an Park while texting them.
And my personal memories in those months: The Changfen breakfast just besides our studio. Cooking in my 2000-RMB-per-month hostel room. Staying awake until 1:00PM on the bed. Playing Mole’s World with my friends. Not much actually - I spent almost my entirety in the studio.
This evening I called my boss up, discussing future collaboration possibilities. Here I was at 9pm, he 12pm the next day. I am busy, so he is. Many things happened. The studio was relocated. The other developer also left the studio to continue his college education in the US. The new game, Mystia’s Izakaya, is about to release in a few months. We both sound tired and excited.
- Post link: https://reimirno.github.io/2021/08/29/TBC2-Memorial/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
GitHub Discussions