The game concept is simply “survive as long as you can and get the highest score possible”. There will be an endless spawn of familiar bosses from the Classic Mode but with difficulty slightly boosted. Although it is an ever repeating gameplay, there is some form of long term progression where the player will get stronger permanently for every round cleared.
After clearing each round, the player will permanently obtain 2 things; one is an assignable passive point, another is a random passive skill. There are a total of 16 passive skills, each with 5 upgradeable levels. Leveling these skills will improve the survivability for the player, thus achieving a higher score after every playthrough.
There is an autosave feature after defeating each boss. So it is safe to quit the game after clearing each round and resume at a later time.
That’s it. Hope you will enjoy this new add on. Here’s short trailer video (Link)
Wow. It has been more than 1 and a half years since the last post. The excuse is that shortly after Laser Droplets was released last year, quite a lot of things have happened to my personal life, so I kind of stopped updating this website.
Early this year, I suddenly decided to add new content to Laser Droplets and have since been working on it during my free time. Now that it is finally completed, I thought it would be a good time to post something.
Boss Rush Mode
It is actually just a simple add on mode where the boss will be spawned endlessly and the aim is to try to surpass your previous high score. To make it more interesting, there are 16 passive skills that will be permanently gained while playing to help the player survive longer. Thus achieving a higher score for every playthrough.
Although the concept is simple, the effort to implement and code is strangely more than what I expected. The number of new scripts that I wrote for this new mode is almost as much as the number of old scripts and not to mention that I have to design and draw 16 new icons.
Going Forward
With this done, I will need to start thinking about the next game to make. Right now, I have many different ideas in mind. But these many ideas, are each by itself mini independent ideas that are unable to come together. A lot of time is still required before these ideas can be arranged into something implementable.
Could be a small RPG, could be a mini puzzle game, could be a point and click game… But one thing for sure is that it will be a 2D game. Doing 3D games is simply unimaginable for me at this point. I may also spend some time playing around with Unreal Engine 5, but it is unlikely that I will be switching to it from Unity.
After using Hexo for more than a month, I finally figured out how to pin a post to the top. The catch is that this only works for the default Landscape Theme (Link). And also, I achieved this through trial and error, so I am not sure what I did was even right or wrong or if there is a better way.
When I do a quick google search on how to pin posts in hexo, the only results are to either install some external plugin, or modify the code as seen in this GitHub comment (Link). I decided not to go with the external plugin method, so that only left me with the approach of modifying the code. According to the above link, all I need to do is to add a front-matter to my posts and edit my template file. Ok.. So.. which file is it?
It took me several hours to figured out that the file in question is “archive.ejs” under the path “/themes/landscape(renamed)/layout/_partial/archive.ejs”. For people like me, who uses the newer version of Hexo, it seems that the default landscape theme has been merged together as part of the core Hexo package. So the “hack” I did was to redownload the landscape theme from GitHub (Link), rename it to something else, and treat it like as if I am using a different theme. (To be honest, I am not sure if that “hack” was required, or if there is a better way.)
The original archive.ejs:
1 2 3 4 5 6 7 8 9 10 11
<% if (pagination == 2){ %> <% page.posts.each(function(post){ %> <%- partial('article', {post: post, index: true}) %> <% }) %> <% } else { %> <% var last; %> <% page.posts.each(function(post, i){ %> <% var year = post.date.year(); %> . . .
Changes so that it will pin a post that has the custom Front-matter: pinned: true
<% if (pagination == 2){ %> <% if (page.current == 1){ %> <% site.posts.each(function(post){ %> <% if (post.pinned == true){ %> <%- partial('pinned', {post: post, index: true}) %> <% } %> <% }) %> <% } %> <% page.posts.each(function(post){ %> <% if (page.current == 1){ %> <% if (post.pinned == false || post.pinned == null){ %> <%- partial('article', {post: post, index: true}) %> <% } %> <% } else { %> <%- partial('article', {post: post, index: true}) %> <% } %> <% }) %> <% } else { %> <% var last; %> <% page.posts.each(function(post, i){ %> <% var year = post.date.year(); %> . . .
Note that I only changed the top section of the if/else statement (original file: from line 2 to 4), everything after that stays the same. BTW, I have no idea what exactly does if (pagination == 2) checks for. From my trial and error, all I know is that it has to be there otherwise no post will be displayed.
These changes are coded based on a number of my personal preferences.
First, I prefer to use a custom Front-matter called pinned, and set to true in the posts that are to be pinned (As recommeded by the GitHub comment above). Adding Front-matter to posts should be pretty straightforward. (Link)
Second, it is hardcoded to only show pinned post on page 1.
Note that I used the variable site.posts.each instead of page.posts.each. Because according to the documentation on Variables (Link), page.posts.each only returns the posts that are in that page. Meaning if the pinned post is in another page due to pagination, it will not be returned as a search result.
Also note that I have used the “partial ‘pinned’” instead of the default “partial ‘article’”. It is actually just a duplicate of the partial ‘article’, the only change I did was to replace the date with the word “PINNED”.
Third, if the posts to be pinned also happen to be on page 1, it will not show up as a normal post in chronological order. However it will still shows up normally in other pages. This is to avoid showing duplicates of the same post in the same page.
Well, I guess that’s it. I somehow got it to work without actually knowing what more than half the code actually means :P
When I was developing Laser Droplets, I did ask myself whether should the game support multiple languages just like every other games out there. The answer to myself back then was “Just complete the game first and think about that later.” Well, the game is completed and it’s on Steam for a week already, so should I add another language?
From the sales data of this 1 week, about 17 copies are sold as of writing this post (Well I guess it’s not bad, I was expecting 0 haha. A big Thank You to all these people out there who are willing to try out my game. Thanks again.) Of these, most are from US, but I also noticed a handful of buyers are from China. So I guess it’s time to add another language, the only other language that I know, Mandarin (Simplified Chinese). The best part is that I can have the translation done for free, by myself :P
So I went back to look at my game again, but I realised it was never coded or designed in a way that it could scale to support multiple languages. Luckily, this is such a simple game, that in terms of “language support”, all I need to translate are the UI related stuffs, there is no storyline, no voice over, etc. So with some code restructuring, I managed to make it such that it is reasonably easy to add multiple language support with minimal hardcoding.
虽然我会听说读写中文,但我在生活中是很少写中文字的。回想起来,这还是我第一次尝试翻译一样东西。第一次翻译就选择了一整个游戏,看来野心是有点太大了哈哈。尽管这是个非常小的游戏,但还是有点挑战性的。尤其是对我这个初学者来说。因为不只是从英文翻译成中文,还得考虑到如何修改 Unity Editor 与 C# Scripts 的部分。在翻译的过程中,有好多个词汇是我完全不知到如何翻译,尤其是那些有关游戏的词汇。我上网查了查,但也没查出什么好结果,只好靠“感觉”来翻译了。所以如果有些翻译错误还请原谅。我对中文字的 Font 不太了解,而因时间关系就选用了系统里基本的 Font。所以翻译后有点不好看。以后会抽出点时间,看能找些比较好看的吗。
For those interested, the above paragraph translates to: Although I know Chinese language, but I seldom write in Chinese. Come to think of it, this is the first time I tried translating something. It is perhaps too ambitious to have chosen to translate an entire game as my first attempt to translate something. Although this is a very small game, it’s still quite challenging, especially for a beginner like me. Because not only I have to translate, I have to modify parts in the Unity Editor and C# Scripts. While translating, there are quite a number of words that I have totally no idea how to translate, especially words related to the game. I did try searching online, but didn’t really found anything, so I ended up using my “feeling” to translate those words. Please forgive me if there are any translation errors. I am not familiar with how fonts work for the Chinese language and due to time constraints, I went with the default system font. The result doesn’t look nice. I will spend some time in the future to research on Chinese fonts and see if I can find something better.
Latest version that includes the Simplified Chinese Language Support is uploaded. Version 1.1.1