Previous Post

0.9.2 - Stable release

Next Post
0.9.2 - Stable release
1 / 3
DESCRIPTION

Hello, this is HoneyBadger speaking.

As you may have guessed, this release was all about mobile development. It was a new experience for me, but it turned out to be far less intimidating than expected. Modern Android app development is quite accessible to any programmer - most of the rough edges have long been smoothed out.

In the end, I managed to create a native wrapper for our game with no fewer than three rendering modes. Completely overkill! I’ll be removing all experimental modes soon and rewriting everything for a standard WebView - it handles the job just fine. Still, we had to go through quite a number of beta versions while fixing issues caused by adapting the game to its new environment.

Memory and CPU limitations turned out to be the main challenge. I went through all rendering and game object update operations with a fine-tooth comb. We also had to introduce a platform-specific asset build pipeline earlier than expected. For example, many textures used in Spine animations had to be converted into compressed formats to reduce memory usage.

We also needed to implement a new system for loading and unloading unused assets. This resulted in a three-tier memory management system:

Load all assets into memory for smoother gameplay, at the cost of longer initial loading times.

Load assets on demand (the current default behavior).

Or switch to an aggressive memory-saving mode, unloading everything unnecessary at the earliest opportunity. Naturally, this is the only available option for mobile devices. I also enabled this option by default for PCs with 8GB of RAM or less.

Overall, these changes have also improved the performance of the desktop version (if anyone was even having issues with it).

And of course, there are platform-specific quirks to deal with:

Android constantly tries to kill background apps, but now the game manages to save progress before that happens.

Full UI adaptation for touchscreens will take more time, but the virtual gamepad with auto-hide already covers most needs.

I decided to request as few permissions as possible, so players now choose a specific directory on startup where the game can store its files. This also solved the issue of save files being lost in other potentially accessible storage locations.

For minimum hardware requirements, we used the Redmi 10C as a baseline device, which also served as our main testing platform. You can compare its specs with your own device. Pay special attention to the single-core score - it’s the main bottleneck for our game on mobile.

As you can see, this phone is far from a flagship. Yet even on it, we managed to achieve a stable (if not perfectly smooth) 60 FPS. The device no longer overheats, and the app doesn’t crash due to memory shortages. And we’re not done optimizing yet.

P.S. I’d also like to highlight the heroic effort of our dear friend 워터딥치, who suddenly appeared in the translators’ chat and casually announced that he had translated the entire game into Korean. All five thousand lines. That’s how it goes.

Привет, HoneyBadger на связи.

Как вы уже догадались, этот релиз прошёл под флагом мобильной разработки. Это был новый для меня опыт, но всё оказалось далеко не так страшно. Современная разработка приложений на андроид вполне доступна любому программисту. Все острые углы давно сглажены.

В итоге мне удалось создать нативную обёртку для нашей игры аж с тремя видами рендера. Это было полностью избыточно! Чуть позже я избавлюсь от всех экспериментальных режимов и перепишу всё для стандартного WebView, он вполне справляется. И всё же потребовалось выпустить большое количество бета-версий, во время исправления проблем, вызванных адаптацией игры к новой среде обитания.

Ограничения памяти и процессора стали главным испытанием. Я прошёлся с лупой по всем операциям рендера и обновления игровых объектов. Раньше времени пришлось создавать схему сборки ассетов под различные платформы. Например множество текстур для spine-анимаций пришлось конвертировать в компрессионные, чтобы снизить нагрузку на память.

Также появилась необходимость создать новую схему загрузки и выгрузки неиспользуемых ассетов. Что привело к появлению опции трёхуровневого контроля над использованием памяти:

Загрузить все ассеты в память и увеличить плавность игры, за счёт увеличенного времени первичной загрузки.

Загружать по требованию, как сейчас.

Или перейти в режим жёсткой экономии и утилизировать всё ненужное, при первом удобном случае. Естественно, это единственная доступная опция для мобильных устройств. Эту опцию я так же включил по умолчанию для ПК с 8гб оперативной памяти и меньше.

В конце концов всё это положительно сказалось и на производительности десктопной версии (если у кого-то вообще могут быть с ней проблемы)

И конечно нельзя обойти стороной прочие особенности платформы:

Андроид всегда стремится убить любое приложение в фоновом режиме, но теперь игра успевает сохраниться до того как это произойдёт.

Полная адаптация интерфейсов под тачскрин потребует ещё много времени, но виртуальный геймпад с функцией автоскрытия покрывает большинство нужд уже сейчас.

Я решил что чем меньше прав мы запрашиваем - тем лучше, поэтому игрок при старте выбирает конкретную директорию, к которой у игры будет доступ и где она будет хранить свои файлы. Что также решило проблему утери файлов сохранений из прочих, потенциально доступных приложению, хранилищ.

В качестве образца для минимальных аппаратных требований был выбран Redmi 10C и он же стал основной тестовой платформой. Можете сравнить его характеристики со своими. Обратите внимание на single-core score, это основное бутылочное горлышко для нашей игры на мобильных девайсах.

Как видите, этот телефон мягко говоря не флагман. Но даже на нём нам удалось поддерживать, может и не совсем плавные, но стабильные 60 FPS. Телефон больше не перегревается и приложение не падает от нехватки памяти. А возможности оптимизации ещё не исчерпаны.

P.S. Отдельно хочу отметить героизм нашего дорогого друга 워터딥치즈. Который внезапно ворвался в чат переводчиков и заявил, что перевёл всю игру на корейский. Все пять тысяч строк. Такие дела.

List of changes 0.9.0 version:

add: android; mobile version

add: event; alien abduction

add: localization; full translation into korean (tnx 워터딥치즈)

add: items; multiple throwable items

add: items; random maps rocks

add: input; cheat menu touch zone

add: visual; common endings screen

add: visual; water bottle bust sprite

add: mechanics; damage types basic support

add: system; async user data handling

add: system; compressed textures support

add: system; auto save improvements

add: backward compatibility; safe character images

add: optimization; global asset/memory priority manager

add: optimization; three-level memory management settings

add: optimization; improved culling

add: optimization; disabled updating of game object logic during full-screen blur

add: optimization; remove unneseccary blending/clear render calls

add: optimization; overlay containers idle rendering

add: optimization; window layer idle rendering

add: optimization; map spriteset is a regular container now

add: optimization; remove pixi-picture dependency

add: optimization; spines binary format

add: optimization; prevent background update/render on fullscreen images

add: optimization; clear sound presets duplicates

add: optimization; remove unused sound files

add: misc; additional information option for the fps counter (electron)

fix: event logic; mr. fredricksen door text and lust requirements

fix: event logic; mr. fredricksen events return zoom to default

fix: event logic; cazador scene loincloth/naked handling

fix: event logic; bandits loose scene naked/loincloth partial handling

fix: electron; local config handling

fix: out of bounds; global map

fix: input; scene save input box special keys

fix: input; allow touch outside canvas for event fast forward/msg close

fix: input; FPS counter canvas interactivity

fix: mechanics; obsessive repetition of random encounters

fix: passability; gym event dumbbells/rope stuck

fix: game logic; the lack of ability to use brass knuckles in combat

fix: game logic; memory autosave

fix: visual; missed bust presets

fix: visual; main overlay effect

fix: visual; loincloth map character boots

fix: visual; battle clothing destruction

fix: visual; mr. fredricksen dream spine

fix: visual; battle health indicator status icons offset

fix: visual; shady sands tile map

fix: visual; the busts in some scenes did not remain on screen

fix: visual; shady sands sleep memory lights

fix: backward compatibility; 0.3.6 and below

fix: backward compatibility; problem with patches, especially 0.7.0

fix: misc; missing localization examples

fix: misc; missing troubleshooting readme

fix: misc; launch from network SMB storage

fix: misc; debug report error logging

fix: misc; remove windows build launcher

List of changes 0.9.1 version:

fix: visual; compression artifacts in the alien abduction spine

List of changes 0.9.2 version:

fix: alien abduction scene on android crash

fix: resize during scene loading crash

Dvoika PATREON 76 favs
VIEWS1
FILES3 files
POSTEDFeb 25, 2026
ARCHIVEDFeb 25, 2026