There are so many ways to make rocks!
My moodboard is filled with beautiful artworks and techniques. To make my own rocks I started by refreshing my sculpting and texture painting skills in Blender. Time really flies when I’m playing with this stuff. It’s a lof fun.
However I needed to make a full range of shapes and formations in reasonable time. So I started over with procedural shapes, tweaked them using simple displacement-based edits and focused on making everything fit into the game nicely. Quite happy with the result.
The trees took a long time to get right. I used the Modular Tree Addon for the trunks. I tried using hair particle effects to grow leaves like I did for the corn & wheat but it didn’t look right. So I took a small patch of leaves and stamped it all over the basic shape by using the shrinkwrap modifier. Laborious, yes, but also precise and 100% under my control.
As part of my Blender practice session, I tried to re-create the icon of Sketch.
Here’s the original:
I found two different shapes that could match this image in an orthographic view.
And a third shape with a flat top if we use a perspective camera and level it vertically with the mid section of the object:
To match the lighting I used a big front light and two emissive surfaces at the bottom and top. I skipped the highlighted edges to save time.
And a little spinning GIF as a bonus:
I need some sort of system to help me finish this game. It is now actually easier to list the things to do, instead of things that are done.
Jira? No, thanks. Catnap Games is not a large company. It’s just me. Hopefully I will get some help with the audio but that’s it. An Excel table is just fine.
- Completion %
- About a hundred now
- Edit as needed
The completion % is a rough estimate but 100% means truly done, I don’t need to touch it again. All items at 100% means the game is actually ready to ship (build & upload).
Some things to check before releasing a mobile application. Slightly iOS specific.
- Start in different orientations
- Start app with no internet connection
- Delete all user data. Is the first start behaving correctly?
- Install and use previous version of app. User data migrated correctly?
- Dark mode support working? Switching on any screen?
- OS-wide font size applied?
- Locale/language changes applied correctly?
- Accesibility labels for everything?
- Initial start without internet
- Try using each page of the app without internet
- Turn off internet, go back to previous page
- Is network outage during video playback handled well?
- Wake up after a long time (week-month). Detected & refreshed?
- Is the app usable on a slow or unreliable network connection?
Layout & navigation
- Rotate back and forth each page
- Rotate and go back to previous page
- Play fullscreen video, rotate during playback, close. Layout updated correctly?
- Blurry text anywhere? Enable highlighting of misaligned layers in Simulator
- During a call, does the double height status bar break any layouts?
- Tap a button 2-3 times really quickly. Only one screen instance created?
- Look for navigation loops. Detail -> push info -> push detail -> push info etc.
- All buttons/elements trigger on touch up and NOT touch down?
- All disabled/highlighted/hover/pushed states displayed correctly?
- Are buttons large enough to hit on small screen?
Lists & views
- Do all lists scroll to top after changing the sorting order?
- Do all views show an “empty results” text when no data is available?
- Showing a loading indicator when loading data takes >1s?
- Is analytics tracking working? Correct tracking IDs?
- Crash reports actually sent and saved? Symbolication working?
- Keep app running, use whole day, overnight. Still performing well?
- Open & close a screen (open detail, go back). Repeat ~15 times. If it leaks memory it can eventually lead to a crash.
- Is the keyboard mode correct for all input fields?
- Email keyboard layout for email input, numeric for phone numbers etc.
- Placeholder text in fields that need it?
- Is there a clear “X” button in fields that need it?
- In email input fields, is the email format verified?
- If maximum length is specified for fields, is the limit really applied? Even when a longer text is pasted? From input fields to local storage, to server and back?
- If no maximum was specified, does the app actually work with very long inputs, long words, special characters? Does it break any layout, internal DB, server backend API?
- Is it easy to hide the onscreen keyboard when needed?
- Does auto-completion work as it should? Does it limit the number of results after typing a single letter? Does input still work when auto-completion API is offline?
- Make a search, open one of the results, go back. Is the search text still there?
- Does search for empty string work correctly? Single letter? Spaces? Special @#?:/ unicode emoji characters? Extra long strings? Extra long words?
- Put phone to sleep and on again
- Switch to another app and back
- Simulate memory warning, go back to previous page
- Simulate incoming call. App resumes correctly when call ends?
Date & time
- Date formatting correct for different locale settings? No broken layouts?
- Does it handle daylight saving changes correctly? Really?
- Does it handle timezone changes correctly? Start app, suspend, change timezone, resume app. Works?
- Does social sharing actually work? Posts appear on FB/Twitter site? Correct title, body, images, links?
- Correct Facebook app ID?
- Does sharing work with and without the official Facebook/Twitter app installed on the device? Automatic login through the app?
- Does the app show correct feedback message after sending/cancelling/failing?
- Is the sharing email correctly formatted? In GMail, Outlook and Mail? On a mobile device?
Storage & output
- If the app has some web caching mechanism, does it correctly restrict itself from using too much storage?
- Does the app behave correctly when the device storage is full? (Load music or videos to your device to fill it up OR place simulator folder in a APFS volume/disk image with limited size)
- Does the app correctly handle having its cache folders deleted by iOS? (Run in simulator and delete using Finder)
- Does the app limit its console output in Release mode? ie. no excess debug information printed – only errors.
- Acknowledgements page up to date with all 3rd party code/asset licensing info?
- Is it possible to turn off usage tracking? Is the user warned about usage tracking on first start?
- If the app has a built-in browser, is it OK to receive a 17+ rating in the app store?
- Fully functional on all supported OS versions?
- Is it possible to run and use the last supported version on older devices/systems? Legacy API?
- Does the app support all screen sizes in both orientations?
To practice using Sketch I re-created my menu designs in it and turned them into a clickable prototype. It’s nice to have an overview of what’s already in the game and it can serve as a framework for future extensions or changes to the UI.
Sketch is quite nice for simple things like this. The reusable symbols are very limited and I had to be careful not to fall into Blender mode for basic navigation but other than that everything was quick and easy.
Finally. During the development of Superforce, I took a shortcut and didn’t implement proper zoom for the game rendering pipeline. The game did fine without it but I wanted to have it in Devastro 2.
Adding zoom took a while. Besides game objects and the tile map, I also had to support it in all the editor gadgets, such as navmesh nodes and material grid overlays.
Now I can use zoom in the editor to get a better overview of the maps. I will also add a slight +/- zoom to the camera shake effect after explosions.
Shortly after its initial release as online shareware, the first Devastro game had been released in Russia, fully localized. Without any specific scenario in mind, I thought it would be good to make the new game easy to localize as well.
I added support for localization of all texts, including menu items and cutscene dialogs. Texts that had previously been hardcoded are now extracted into an external, easily editable text file and language can be switched at runtime.
I wanted to better understand what’s happening in the Box2D physics system. To visualize the Box2D objects in an overlay, I added an implementation of the b2Draw class.
Now when I tell Box2D to draw its debug info, it will do so through this class, using my renderer and the active camera.
Based on the environment moodboards, I created the first batch of models for the farm/countryside environment.
I then wasted an entire evening trying to properly import them into the game. My Blender render script was broken and it took me a while to figure out what was wrong.
Now that I have the assets available in the level editor, I’m going to try them out and adjust the scale for each model. I can do this interactively by resizing the sprites directly in-game. When the scale is dialed in I’ll adjust the model size in Blender and do a new render.
I’m also going to extend the render script in a similar way the character animation export works – render multiple angles to add variety and let me reuse models more often.