The Lost Adventures is finally getting into a releasable state. Major bugs are solved and game assets are polished to the max. The only task remaining is testing it on a variety of devices that can have a lot of different sizes. Over the years I collected quite some iDevices. The Lost Adventures is a universal compatible game targeting iOS8 till current iOS version (now 12). I discovered that the game didn’t run smoothly on the lowest specced device show below, and that’s the iPad Mini 1. In the last post I mentioned that this was a problem in the A* algorithm I used. It was really slow and not optimized. Now it runs OK on that iPad. On all devices I get a decent framerate! And the game is compatible, I still need to check for memory leaks though!
Author: Admin
Revisiting AStar performance
I was testing on an ipad Mini 1 and saw there was a noticable lag when the pathfinding had to do its work. I always knew this was not optimally coded. It also was a lot of code, and a lot of code is hard to optimize. So I integrated another AStar implementation into my game that runs much faster. To notice the lag more evidently I zoomed my map out for a factor of 4 to reach a far away target tile.
Now it runs smoothly on low end iOS 9 compatible devices like the iphone 5 and ipad air and up.
See the difference in this video :
Final Push with Icon Hell
I am going to the gruesome phase of the final push towards the Apple App store.
It is fun to make a game, but it ain’t fun to get all the other assets in the game in order to get the approval of Apple to submit a review request.
That is what I call : Icon Hell!
And hell it was…..
When I started making this game I had the icon assets managed by Cocos2D. This is nice, because with a small number of icons you can get a releasable archive. This was always messy of course, but it worked. Then Apple started with a mechanism called Icon and Launch Assets. This is nice because dependending on the target version you can provide icons from iphone4 until the latest iphoneXS Max.
All is well, all icons and launch screens of various sizes dragged in.
But I knew I wasn’t done. You have to edit info.plist a number of times. Got this error first (did not expect a first time right).
So i scoured the internet and I tried to insert this into info.plist :
<key>CFBundleIconFiles</key> <array> <string>Icon-60@2x</string> <string>Icon-76@1x</string> <string>Icon-76@2x</string> </array>
When I validated my project (Xcode 9.4.1), I got a valid archive message!? Was this my lucky day?
Nope, I sent the archive to apple for real now to let the validation happen on Apple’s servers.
Then I thought… Icon-76@2x is the correct icon size for that?
After validating a load of times, I discovered that CFBundleIconFiles does not help me at all providing the correct icons.
I removed these completely and started looking for answers on the big bad web….
After many hours and countless stackoverflow suggestions I found a stackoverflow post and it mentioned something about the Target Membership.
This is how my Icon Asset settings looked before I corrected it :
This was some remnant of the Cocos2D setup ( I know I should move towards a new framework 🙂 ). So i selected the correct target membership (what’s this for anyway? ) And now it looks like this.
I was certain this was the correct format so this was definitely an improvement. But one validation gave me this :
This was a lot easier, because of the support of iOS 7 I needed to add the following xml to info.plist
<key>UILaunchImages</key> <array> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>Default</string> <key>UILaunchImageOrientation</key> <string>Portrait</string> <key>UILaunchImageSize</key> <string>{320, 568}</string> </dict> </array>
Now the problems are completely gone and can make builds for testing etcetera.
One thing bugged me though :
<key>CFBundleShortVersionString</key> <string>1.0.0</string> <key>CFBundleVersion</key> <string>3</string>
CFBundleShortVersionString corresponds with Version in the Xcode label and CFBundleVersion corresponds with the Build label. That was a head scratcher too! I think Apple will never name things as they appear in the GUI.
LipSync in The Lost Adventures
A lot I invested in creating dialogues because it is one of the greatest gameplay features in Point and Click adventures alongside puzzles.
My characters lacked believable mouth movement and that bugged me. So after I found the right software to do this, I added lipsync to my point and click adventure engine. But I needed to invest a great deal in tooling to be able to support a quick pipeline of voice recording files to in game voice acting.
I have lip-syncing for over quite a few months, but I finally made it stable in the last weeks.
I recently started adding some youtube videos recording the progress of the game and ‘LipSync’ is the first episode…. Here it is :
Added a funny dialog to ‘The Lost Adventures’
As the Lost Adventures is a very lengthy project (1yrs & and a few months now). I decided to make a special dialog, just for fun.
Everybody that codes nowadays have heard of a site called Stack overflow
Off course it’s bad practice to use this site too much, but it’s sometimes convenient to use when you are stuck with a problem. Especially when the error message are confusing and totally meaningless.
I made this after I had frustratingly looked at an error in my game and luckily stackoverflow helped me fix that.
The Search for the holy Pixel Editor
During the making of my Adventure “The Lost Adventures” I downloaded some character sprites from the internet first and used some assets from archived projects.
I edited these with Gimp, my normal workhorse for doing stuff. But they looked horrible, and It looked really like developer art, and it took too much of my time.
Gimp is good at graphics manipulation but not specifically doing well at the pixel level.
A good pixel art tool is all about zooming in out, you have to do this as often as you can.
It’s important that you can get direct feedback if your pixel you just painted looks good on the sprite as it will appear in your game this way.
An ideal device to zoom in and out quickly is pinching and zooming pixel editor. Tablet has a few drawbacks too, like selecting portions of your sprite and moving them.
I have tried lots free and non free.
Lets list some of them here (ranked from best to worst, off course after writing this post, some apps can be improved in the meantime):
Non Free
Pixaki : (cons:resize canvas and magic wand are missing – pros:dropbox export, iCloud import, great pinching and zooming)
Pixels: (cons:awkward interface – pros:animation support and support for dropbox)
EDGE Touch : cons (only iPhone, but looks ok on iPad, no dropbox or iCloud support – pros : intuitive interface, layers)
PixArtist: (cons:no cloud support, not in european store – pros: great pinching and zooming)
Pixure:(cons:dropbox,iCloud?,selecting an action is a two way process – pros:watch app, iPhone and iPad support)
Pixel Dude:(cons:selecting colors is problematic – pros:dropbox support, iPhone and iPad support)
Sprite Something: (cons:non-intuitive editor,dropbox support is troublesome – pros:animation editor, iPhone and iPad support)
Free
Dottable
Make Pixel Art
Bitdraw
Repin Pixel Art Studio
Desktop Apps
WIP : Savegames screen
Making save games is one of the most critical parts of an adventure game. I had a simple ‘save the game when you exit the room’ procedure before I created this. This was sufficient for a while, but I needed more flexibility. The player will be able to save the game at any time anyway. I have created a draft interface for making save-games. It will definitely be more polished in the future, but I wanted to get this thing coded. I need this badly for testing all the rooms, because it’s more convenient to load certain states by specially prepped save-games. As you can see it shows a small thumbnail scaled down but still pixelated when you click what I call a save-slot. A descriptive date will be shown on the thumbnail so the player knows exactly when he saved it. Players can add a title when they want to. This is not in the game right now. but these features will be in it. As you can see, I can play tic-tac-toe with this screen. So it’s now a game within a game!
Work in Progress : Elevator to switch between rooms
I have a lot of rooms (about 10 rooms for each Act) There will be around 40 in total. I need to be able to switch really quick to test them. It’s a typical smorgasbord of buttons to do just that. Such a ‘switch’ screen will not be in the game because that would break the immersion of the game.
I really wanted to make this ‘real’ transition room quickly, because it can be part of the game. It is a shown in a special way because it is projected from the side completely. The only thing Dave can do is press the buttons. Depending on the floor the speed of the transition is faster when the floor destination is farther from the current floor. Lang’s building is very futuristic, so such a turbo lift could be expected. The elevator is what I expected too be, I had made the art in pieces long before I made the movement so It was really coding all the movement. A lua script is driving the animation as all the other rooms.
Still, this is all not set in stone because I am not convinced the player should see the buttons all the time. I could centre the buttons when the player activates the panel and show some stuff buried in the concrete. The elevator created a new puzzle for the adventure, getting an elevator pass… The elevator above is an animated gif so click the preview thumbnail to look at it. It’s quite hypnotic…!
Animated Gif of the Angry Guard and status development
In anticipation of the animation function in Pixaki I discovered that the updated Pixely app has an animation function that can export to gif. I added the frames of the angry guard character (a small character in The Lost Adventures) and create an animated gif.
It really looks if he is about to beat you up!
The Lost Adventures engine is almost feature complete and I am about to leave pre-production. There will probably missing some features, but they are not necessary for the main story and adventure gameplay.
The adventure engine has the following features :
- Voice acting support in dialogs
- Animation system controlled by Lua scripting
- Game state saving (no saving interface yet!)
- Follow and zoomcamera controllable with scripting
- Dialog tree support
- Scripted background music and sound
- Inventory management
- A star path finding for tilemaps
- All kinds of scripting events , wait, walk to, move to etc..
- System describing stuff in the world including voice support
Wish list :
- Save interface
- Loading screen
- Character animation for seperate parts, mouth and arm gestures
Created font rendering node for the dialogs
I had some serious trouble with my arcade true type font. Because ttf only have one color, I pondered about pre rendered fonts on a bitmap sprite sheet.
Initially I liked this idea, but I like the true type font because it’s quick and resizes really nicely. But the problem is that If I wanted multicolour characters this won’t do. So what did I do? Well, I made two CCLabelTTF nodes and drew them over each other. One node as an outline and one for the fill. This worked very well, except for multiple lines…. The truetype font node shifted a pixel or so on each row. This is because of the rounding errors in the “how many text can fit in a certain box” calculation in the True Type rendering. Look at the green coloured arcade text. Its the TTF version. Some of the characters are smeared across each other and that sucks big time. So what to do then? Wrestle with bitmaps and aliasing again? No not again!
The orange coloured is drawn block for block by Cocos2D primitives rendered on a texture. A sprite for each character is created from those textures. But with this new approach I had to create the “how many text can fit in a certain box” algorithm for my solution too. Plus all the font input had to be made too, so it took me about 6 hours to make this. But this is a very important aspect of the game, so it deserves the quality it has now. On the plus side I can make lowercase characters, making the game even more authentic to the likes of Indiana Jones and the Fate of Atlantis. Another plus is memory consumption, my solution uses less memory than the TTF one. Another plus is that I also aligned every line of text in the dialogs, just because I was on it anyway.