Reckon you’ve got coordination? It’s time to find out.
GEOMO – available now for iOS and Android! Check it out!
Reckon you’ve got coordination? It’s time to find out.
GEOMO – available now for iOS and Android! Check it out!
So I woke up today and remembered again that this site exists.
I also remembered that some sort of international holiday has passed, which atypically brings after it the beginning of a new year, so I decided a blog post might be worth contemplating.
Hence commenceth the post.
2017 brought with it a huge (yeah, it’s even in bold too!) amount of progress for both the studio and myself (hello!) personally. At the start of the year, I released my first cross-platform game, Asterun, for iOS and Android. I then started to open-source many of the components I had built, such as custom native adverts, alert dialogs and shiny sliders. Open-sourcing those components was very fulfilling, having used open-source software for most of my career it was great to begin to contribute back to others!
While all of the above was going on, I was starting to look for a new job, closer to where I had lived originally. Despite absolutely loving where I was working at the time, myself and my partner decided that we’d move back to be closer to family. I worked for a new company for a few months, and very quickly decided that I needed to escape and find something else that’d match what I was looking for from a workplace more closely. I left there without having another workplace to go to, and had a few weeks off to focus on my own adventures – continuing some freelance work, catching up on sleep, recovering from illnesses. I then received three seperate offers, and ended up turning two of them down to work with an awesome agency elsewhere in the country. Cue lots and lots of commuting… that has been very much worth it!
While taking time away from work, I managed to release GEOMO, my most recent cross-platform game! Having made a substantial amount of the components from Asterun fully reusable, building GEOMO was substantially quicker – only taking four months to go from initial planning to the release date. I’d also learnt a lot from Asterun about how to architect products more efficiently: using source control from the beginning, how to modularise functionality more efficiently, how to reduce direct references between features, and how to make code as reusable as possible. Those lesssons mean that the code is fully reusable and incredibly simple to maintain! An example of this is how shape collisions are handled, having taken the time to think through everything beforehand I was able to reuse it later on for the tutorial with no effort required at all!
One of the biggest things of the year though, has been finally deciding on a brand to continue my adventures through, rebranding to PESLO Studios earlier this year. I’d been finding it difficult to decide on what I was truely happy with, so to finally have something is awesome!
(and, whenever I’m asked about my studio, the face of confusion about what ‘PESLO’ is always outstanding!)
There were some things I would have loved to do differently though, and will be instead focussing on in the new year. “What are those things?!”, I pretend to hear you ask!
Well, I could make even more #content by spliting this into two posts, so that’s what I’m going to do!
One of the comments I get regularly about Asterun is that the advertising can be a bit irritating.
While I’m incredibly lucky that those who have played so far are understanding about the need for those adverts, as I expand my reach out to others, it’d be understandable for new players to become agitated at adverts appearing all of the time – especially low quality ones which are often downright annoying!
Here’s where CrossPromo comes into play! Let’s dump some adverts, and display our own stuff instead!
What is ‘CrossPromo’?! How do I eat it?!
A nice compromise for advertising in game is to remove the very low-quality ultra-casual mobile game adverts, with an eCPM price floor (so that those adverts which didn’t even pay well to start with aren’t shown!), and start to present my own adverts instead! It’s far more beneficial for myself – especially when just starting out – to have a way of presenting my own work to those who are already engaged and to keep those people engaged by having a high quality product which they enjoy using! Why present an advert for something of incredibly low quality and get paid very little, when I can uphold my standards and present my own work instead! CrossPromo isn’t just limited to presenting other games, it could be used to showcase special offers within your portfolio, such as a game being free to download during a certain time period or the announcement of another game being released!
CrossPromo has been in development for the past few weeks, and allows for myself (and eventually other developers too!) to create native Cocos2d-x interstitial adverts based off of properties defined in a .JSON file. The .JSON file contains all of the information required for each ‘promotion’, such as:
This file is then read into the project at runtime when the game is first loaded, and used to construct data objects which we preserve throughout the lifecycle of the application. When a CrossPromo adverts is required, we simply pass the promotion’s data object as a parameter into a class, and an advert is created! This can then be shown, instead of a low quality third-party advert!
delicious cool! What else will be part of it?!
The CrossPromo object is due to continue over time and will constantly evolve. For the next few weeks, I will be using it solely within Asterun to test how it performs and how people react towards it, before extracting it out of Asterun and open-sourcing it!
Currently, CrossPromo only allows for static, silent adverts. Future work should allow there to be animations and actions, along with proper soundscaping and further polishing. Start and end dates are also due to be added, so that you can place a time-frame on when you wish a certain promotion to be visible. Far away in the future, CrossPromo may even be able to be served over the Internet; a promotion could be defined and saved on a server, which the game requests upon loading, allowing for promotions to be updated incredibly flexibly outside of typical App Store review processes.
If you wish to stay up to date with how CrossPromo turns out, please star the repository here: https://github.com/ryanbourneuk/crosspromo and check out my Twitter here too: twitter.com/ryanbourne28!
~ fin ~
Unless you’ve been living under a suitably sized rock, you’ve probably heard that Asterun has been released and is available to play on! The release went spectacularly well: the feedback I was given was incredibly positive and helpful, it’s seeming to be mildly replayable and nothing has caught fire. Too much. 🔥
However, it is time to start planning ahead, to far and future things – my next projects!
I decided recently that while in the awkward stage between projects, where I’m still actively producing updates for Asterun and working out my future plans, to focus my efforts on finally open-sourcing some of the code I wrote that helps Asterun function! Surprisingly enough, for such a small game, Asterun requires a great deal of code to make it come to life – and lots of that is needed in almost every game going! I struggled immensely when I first started cross-platform development, as lots of things are incredibly important to make a game work well but for a relative novice are quite difficult to convert from rambly thoughts to stable code. So, instead of keeping it to myself, I decided to make it all entirely game-agnostic (i.e.: it’ll run in EVERY game, with no major work needed!), and release it for all cocos2d-x developers to grab and have fun with! So far, I’ve released all of this goodness for all to freely use:
Hopefully, be providing those for people to use, the time I spent in getting them fully functional and production-ready will save others vastly more time. I still have quite a few more parts to release, covering more obscure functionality that seems to have not been thought of before! Many are rather embedded within Asterun, and they’ll take quite some work to separate out! The next one is partway through development, and will be released as a new feature in Asterun at the same time as it’s released for others to utilise.
Perhaps I have too much free time on my hands… I really should go outside more.
… actually no. It’s cold out. Let’s write crazy amounts of code instead!
That’s where the new projects come into play! I now have 5 game ideas lined up and ready to go! Obviously, these all came to me in a very small space of time and not when I actually wanted any ideas for games – because whenever I want an idea it’s impossible to think of one! Once Asterun’s main updates are completed with the new features I’ve been drafting up, work on the next project will be started! Asterun’s updates won’t just cease to continue – as and when I discover bugs, update dependent libraries and think of cool features, it’ll be updated.
My final idea is a proper tutorial site / blog, with all of the lessons I learnt as I started cross-platform development. Believe me, lots of lessons were learnt. Lots of time was invested. Many ideas were developed, and then burnt. 🔥 It’d be cool to get a comprehensive source of tutorials made, so that others can suffer less than I did.
“But what will your next project be?! I’VE READ SO MUCH. TELL ME WHAT IT’LL BE!“
Whatever seems the coolest idea, will be the next game. And it will be amazing. Perhaps it may even be fun to play too.
~ fin. ~
I guess ‘hard’ may be a bad choice of word (although hey, clickbait titles are soooo in right now). I suppose some better choices would be challenging, demanding and testing. Challenging of my abilities, demanding of my time and other resources, and testing of my capability to learn new stuff quickly and apply it properly to my work (and also testing of my patience!).
I started cross platform development in August 2016, after having 3 relatively successful game launches on iOS in the years before that. After leaving college and going straight into full-time employment I suddenly had a decent amount of free time (yaay for escaping coursework and essay writing!) which I could invest into what I wanted to do – and that thing was games development!
… well… it was kinda carrying on what I was doing before, but this time I made it my aim to get Asterun, my personal favourite out of the games I’d made up to that point, released for both iOS and Android from the same codebase. I had looked at starting cross platform development a few years previously, but very quickly ran into issues and decided that I’d leave it for another time.
*quick 5 minute break while I choke on some pineapple juice, and proceed to need many glasses of water for my throat to feel better again. fun times right?*
My breakthrough with cross-platform development, while a eureka moment at first where I suddenly began to grasp C++ code, was dragged out over many months. To begin with, I struggled greatly with getting Cocos2d-x, the game engine Asterun is powered by, set up so I could begin coding. The documentation, while immensely better than when I first attempted to use it a few years ago, wasn’t that in-depth and I ran into issues almost immediately – some necessary steps were missed out in the instructions and meant that I spent a few weeks chasings some issues that were fixed when their (incredibly helpful and friendly) support pointed them out to me. In the end I managed to get everything set up – after reinstalling many times over!
I managed to bring lots of Asterun over from Objective-C very quickly, generally bringing one feature across to C++ every night, with a few days of testing and tweaking as I went along. (I even released one part I ported over, a cross-platform alert view class, on GitHub for anyone to take a look at and use!) This meant that generally what I added was bug-free (ha, I wish) and looked nice and shiny. Progress then slowed as I lost motivation, parts were becoming more complicated so I took a bit of a rest from it all to regain some energy.
Then boom, motivation strikes. Suddenly Asterun begins to take form, and soon after the main game and menus are completed. However, there were various third-party parts left to implement: adverts, analytics, leaderboards/achievements, notifications to name a few. This meant turning to Cocos2d-x’s solution for this: sdkbox.
Now, don’t get me wrong, sdkbox is a good product and actually functions reasonably well, but wow oh wow did it cause some issues!! For those unfamiliar with it, sdkbox allows developers to ‘easily’ integrate third-party libraries for iOS and Android so they don’t have to do crazy bridging between the different versions for different systems. If it wasn’t for sdkbox, I would probably not have moved over to cross-platform development and stayed making games for iOS. In order to install ‘plugins’ (the individual third-party libraries) you run commands in the command-prompt, such as
sdkbox install <plugin name>
It’d then take over and automatically download the plugin, before integrating it fully into the target project allowing you to jump straight into using it. Or, it should do that anyway. It appeared that, as I’d already started working within the project, sdkbox couldn’t handle integrating a plugin I requested and failed the installation. Oh, and corrupted the project build files too, meaning I had to recreate the project. Again. However, I chose to try adding the plugins in immediately on my next attempt (before adding any of my own code) and all of them were added correctly. Success! Finally! As a result, Asterun now looks like this!
Yeah! Looks neat, eh?
You’re meant to nod in agreement there.
Now I’m in the final stage – adding multiplayer. The leaderboards and achievements have been added and work very nicely, and I was incredibly proud about how somewhat professional it looked (I even did little custom icons for all of the achievements and leaderboards too!). They’re all powered and hosted by Google Play Games, which provides (what I thought anyway!) was the best cross-platform solution for what I wanted to do. However, I noticed while testing it on iOS that I couldn’t sign in with one of my accounts. The account I used for testing on Android worked, while the one I wasn’t using on Android seemed to fail on log in. The reason for this became apparent after googling for some time – account creation for Google Play Games isn’t actually supported on iOS and it isn’t planned to be supported in the near future. This meant that while I had a fully created Google account, and was presenting a screen which asked for permission for Asterun to access the account, it would not work as the account didn’t have a Google Play Games profile attached to it.
This means that when I release, very few users are actually going to be able to use the leaderboards and multiplayer on iOS.
That sucks. So damn much.
I did consider for a short while not releasing at all for iOS, however I feel it’d be better to release what I’ve got as some will be able to enjoy it, plus it looks so damn shiny on Android now. Android isn’t affected at all, anyone with a Google account will be able to sign in and play.
I suppose this entire rambly post is to show that making Asterun hasn’t exactly been a walk in the park, and while at times being incredibly challenging, has provided a great learning experience which I can now apply to any future projects! I’ve been able to finally learn C++ (by diving straight into the deep end without ever learning to swim first), get to grips with Android development, and further perfect some of my game design ideas (UI design, object pooling, physics code). It’s also inspired me to write some proper documentation for the future so people following in my footsteps won’t suffer the pain I did. When Asterun is released, my next steps are most likely to be investing some time into creating decent documentation for everyone to enjoy.
It’ll be great to write something not quite so rambly.
But today is not that day.
If you enjoyed this post and want to be updated when future ones come out or when Asterun is released, drop a follow over at twitter.com/ryanbourne28! 🙂
When starting games development many a year ago, I discovered that using the default iOS alert views in a game I carefully crafted looked rather amateurish and didn’t suit the feel of the app I’d produced at all! And, as I wanted my games to look somewhat decent, I decided that I wasn’t going to have that! I had a look around, and discovered this post (https://rombosblog.wordpress.com/2012/02/28/modal-alerts-for-cocos2d/), where someone had created a custom alert view class which I could use in my game.
Yaay! Story over… right?…
I rewrote quite a bit of it when I first played around with it and trimmed some parts out I didn’t like, and as time went on more and more edits were done to it – the first rewrite. It was made compatible with Cocos2d-objc v3 for some future projects – the second rewrite, and was then converted over to C++ for use in Cocos2d-x – the third rewrite! I decided that some others may find this rather useful, so I’ve decided to open source the entire thing here (https://github.com/ryanbourneuk/ModalAlertCocos2d-x) for everyone to use if they want to! I’m still in the process of learning C++, so it may not be the most efficient or the best written class, but it works well enough for me and the animations look cool! 😀
For more of the technical information, check it out over at GitHub (https://github.com/ryanbourneuk/ModalAlertCocos2d-x)!
So tonight I’ve been doing grown up things like paying council tax (because otherwise I get red shouty letters written in the blood of those who did not pay) and sorting out the giant mess that has been my electricity switch. But I’ve now sat back down with a fruit sala-…
Oh. I guess that means it’s blog time again.
Something I wanted to elaborate on a bit more from my post a few days ago was how there was going to be lots of big changes with the work I do, and say what those changes actually will be.
Firstly, from now on, my games will be released for iOS and Android!
<insert celebration .gif here>
I decided to move away from releasing exclusively on iOS for a huge varied range of reasons. The one that comes to my head first is that I’ve fallen more and more out of touch with some of the iOS-only features to a point where I’m not using pretty much all of them. None of my apps use iCloud, 3D touch, in-app purchases, asset slicing etc; the only iOS only feature they really rely on at the moment is Game Center. And that’s being removed soon! I’ve also grown more towards developing games for Android too; when I first started iOS development 4ish years ago I kept a good distance from Android as the development tools didn’t seem at all on-par with what Apple was offering. Plus, Android itself didn’t seem to have anywhere near as much polish as iOS did. Maybe that was my Samsung phone with the epicly terrible TouchWiz interface giving me that impression… for this blogpost we’ll just say Android in general wasn’t that great (although we all know it was the damn TouchWiz UI). Since then Android seems to have advanced so far and feels far more finished than it has before; I can now see my work being on an Android device. Don’t get me wrong, Android Studio + Eclipse still aren’t anywhere near as polished as Xcode is (unless I’m really missing something…) and the setup process was still amazingly long-winded compared to setting up the iOS tools (it literally took months to set up!); but just recently I ended up just understanding how they work more. Literally overnight I just started to understand it and be able to use it. Hence, we’re moving to making games for Android too.
Moving to cross-platform is going to involve some of the infrastructure changes I mentioned in my last post; firstly we’re ripping the actual game out, then shoving the old engine out and supergluing the new one underneath. Or… something like that anyway. Lots of the old code has been relatively easy to rewrite for the new engine (as the cross-platform version seem to not differ too much from the iOS only one, apart from that it’s in a new language), and I’ve ended up picking up C++ rather nicely. I’m still not exactly an expert and the rewrite looks rather messy, but over time I’ll pick up more knowledge and the project will get neater. We hope.
Moving from the current game engine means that the menu systems I designed outside of the code in a separate editor will have to be brought into code, which has been one of the bottlenecks of the porting process so far. Trying to bring menus across so they look exactly the same is hard. Very hard.
I’ll be removing the one native iOS feature from the application – Game Center – and replacing it with Google Play Games Services, which will work on both iOS and Android. One of the future upcoming updates for Fruit Flight and Asterun will involve integrating Google Play Games Services, and allowing players to port their score across from Game Center to a Google account. Players will be able to do this up until the cross-platform version is released; at that point Game Center will no longer be used. Currently, that’s all rather up in the air while I juggle every single part as I slot it all back into place, but that’s the plan with that so far! I will be keeping social sharing (which will use a different plugin to make it cross-platform) and I’ll also be keeping with the current advertising network I’m with now (again, yaay for plugins!), however adding those isn’t the main priority right now. Currently, I am just thankful that most of the game has translated across so nicely and I don’t want to push my luck too far yet.
Another major change (although one that isn’t seen by anyone apart from me) is that my projects will now be moved to use source-control. For those who don’t know (run away now… you still have a chance to not know!) source-control allows for changes to code files to be managed and ‘versioned’, so it is possible to jump around between revisions and work on separate features away from the main development branch. At least… that’s how I’m going to be using it! With such a huge change it makes sense to have a good way of undoing any major change I make which breaks everything, as I’ve already recreated the Asterun project 7 times after many various things have imploded. With source control, it should remove some elements of risk that changing ABSOLUTELY EVERYTHING will bring into my life. New features can be developed in a sandbox away from the main code, and if the feature breaks things I can remove it without it affecting the main project.
Those are pretty much the biggest changes going on at the moment; to summarise as this has been a rather unstructured and rambly post:
Looks about right. Yeah.
(answer: tomorrow morning)
I’ve had quite a few blogs over the past few years for my games development stuff, pretty much all of them are now down and removed forever from the interwebs (I damn well hope so anyway, that’d be rather cringey if they were still up…); and all of them died because I just stopped posting to them. Yeah, they might have been getting a decent amount of views (I literally have no idea why anyone would have even read them) but no-one ever interacted and I guess I lost interest in ever writing anything down. To be honest, the people who did view my older blogs were probably just bots anyway, but ah well.
I decided that I’d actually try to get back into the swing of doing some proper writing again about what I’ve been up to, so I’ve sat down with a cup of tea and a (very tasty!) fruit salad to ramble a bit in your general direction. I guess that’s your warning to escape now. Here be dragons… or something like that.
One of my problems with games development as that although I love designing my own projects and watching them come to life in front of me, I am exceptionally useless at actually telling anyone about them. Hence, the blogs get neglected, forgotten, and deleted; or I stop posting updates to my Facebook and Twitter pages. I still have almost no idea how to explain Fruit Flight or Asterun to anyone without reducing myself to “things fall from sky, shoot or dodge falling things to gain points for leaderboard”. I know how to explain it in my head, but as soon as someone asks me how to explain them they may as well not be my games at all. I suppose one of my problems is that I am often really afraid of anyone critiquing (yeah I spelt that right first time) my work. I judge my work waaaaay too harshly, I could end up with the most polished piece of code or the most incredible looking design but I’ll just constantly see flaws with it – the code may look ugly or the colours may be slightly too out. Then I’ll end up attempting in vain to make it look perfect or I will move onto something else and never end up telling anyone what I’ve done. That was one of my biggest issues with Fruit Flight and Asterun, I’d never want to tell anyone that I’d done something relating to the games (apart from people really close to me who I knew wouldn’t be too harsh!) as I’d worry about what they’d think of them or how they would perceive my work. I mean, they’re just games… it’s hardly like creating the next world-renowned symphony is it? Code + artwork goes in, game comes out. Hardly the most amazing thing in the world right? I’ve had so many people see what I did/do as a “waste of time” and “unimportant” I ended up thinking that is how everyone sees my work. I guess another thing is I see my work too much from the perspective of a developer instead of as the main audience of the games; the end audience doesn’t have the same vision of the games as I had while creating them so they wouldn’t care that certain artwork was wrongly sized or that the colours aren’t what I’d imagined. In the end, I ended up waiting until the games were totally finished before anyone even really knew about them, and even when the games were finished I was still worrying if people enjoyed them or not, or what they thought of my work. That ultimately affected how I publicised the release of the games I’d invested so much of my time in to.
I really should stop looking at stuff from a developer’s perspective when I’m trying to improve my work, or thinking too deeply about what others would think and focusing too much on the negatives. I feel like such an artist when I criticise my work. Let’s stop doing that. Yeah.
Now that’s more out of the way and I’ve demolished more of the fruit salad, let’s actually talk about what’s gonna be coming up soon and what’s been going on recently.
I was doing most of my games development in and around my school/college work to begin with, and now I’ve left college I’ve started work as a full time iOS developer. I’ve settled in really well, and I’m incredibly happy I chose to move over here to start work. Games development has been able to continue in my free time; and without coursework in the evenings I’ve had more time to focus on my own work.
This has meant that lots of stuff I’ve been wanting to do for ages I’ve been able to actually start, so let’s get to it…
1 : BIG changes coming up soon.
The ‘big’ wasn’t even sarcastic, compared to where I was this time last year things have taken a totally different course to what I first envisioned. I’m moving away from the game engine I used for 4ish years, after the management and the community imploded on itself, towards a different engine. This means new programming languages, new editors, new (stupid) compilers etc… but also some rather incredible new opportunities and things that although I don’t want to mention yet (didn’t we discuss this earlier…?) I’m properly excited about and that has definitely helped me to be very motivated about my next steps for my future projects.
I’m also going to be making some huge infrastructure changes within the apps I have running now, and I’m currently expecting some updates to start going out in a few months or so once I’ve decided on the best course and worked everything out. With those in place I’ll then be able to go forward with the even bigger changes – and those will be magnificent (see, even the font agrees with me).
2 : Improving communication.
I’ve been pretty terrible with updating this blog in the past or using my Facebook and Twitter pages enough, so from now on I’ll be trying to post more on what I’m doing. Quite a lot I want to keep as somewhat of a surprise, but there is tonnes I feel that I’d be able to ramble on about. Keep up to date with Facebook here and Twitter here. Please follow them and help them look more popular 😉
3 : MORE GAMES!
After I came up with the ideas for Asterun and Fruit Flight I pretty much ran dry on the idea front, every idea I had I decided to be not worth the work as I doubted it’d be liked by people or had already been done by someone else to a decent enough standard that it’d be almost impossible to improve on it. Now the App Store has become so saturated with games any new ideas seem to be taken up really quickly – I could have 10 ideas every day for a year but I’d type them into the App Store and they would already be there. That even ended up happening with Asterun, someone released an almost identical game the evening before Asterun was released – but by that point I’d kind of gone too far for the project to be cancelled. Recently though I’ve had quite a few new ideas for some projects which no one else seems to have done yet – that either means I’ve hit the jackpot or it’s gonna totally fail… but we can only wait and see. Hopefully I’ll be able to start work on the new projects within the next few months after the infrastructure changes are in place.
4 : Rebranding.
Something I like doing almost as regularly as forgetting I run a blog is rebranding my ‘business’… often because I grow tired of a name, logo design, font style, colour etc. The list just goes on and on. I’ve been considering rebranding for a little while, although I may end up just making the branding I have now a bit more polished and seem less to me like a temporary design while I make something better. Again, we go back to how I’m really critical of my work. I’ll have to continue to think about this and we’ll see where it ends up.
So yeah, that’s pretty much it for tonight. The fruit salad has disappeared and my (relatively) coherent sentences are becoming less coherent so I should probably end it here.
Same again soon? Yeah, we’ll see. I’ll definitely have the fruit salad again, that was good.
Good morning everyone!
I hope you enjoy them as much as I enjoyed making them! If you have any questions, send me a tweet at @ryanbournedev.
As you’ll see from the other recently added pages and the social media accounts, we have a release date: Monday 7th September 2015 @ 07:00 BST! This is really exciting; it’s my first independent game release so far so it’ll be really interesting to see how they both fare!