After the long Christmas break, it's time to come back to my interview series. Today's guest is a PhD student at my university and he has just released a brand new Android game written in... C#. He's going to tell us how he did it, what technologies he used and why he chose them. I have to say that I had never heard about most of those tools before talking to him. I'm pretty sure that they will be surprising to you as well. Without further ado, here's what our q&a session looked like.
Bartek: Tell us something about yourself. Who are you? Where do you live? What do you do in life?
Mateusz: Hi, my name is Mateusz Cicheński and I'm from Poland. I'm currently doing my PhD at Poznan University of Technology and so I'm living in this city. Designing games is one of my hobbies and as most designers I have tons of ideas and just not enough time to implement them all.
Bartek: When did your Android adventure start and how? Why did you decide to do it?
Mateusz: It's the second question and I already have to give you a long story. I started last year, bringing an implementation of my prototype game from WPF (C#/XAML) to the native Android API. I used Open GL ES for rendering, but I was unhappy with the result. I decided that I need a different approach and reach more platforms with a single code base - I picked libgdx for this purpose and quickly made a new implementation which was available for PCs, Linux and of course Android. This app was available for nearly 3 months and because I was doing different things I just decided to take it down, as I was unhappy with the download rates. Now I'm giving Android yet another chance using a different toolset - MonoGame and Xamarin.Android - but I still need more time to learn the platform.
Bartek: What was your first app? Could you describe it shortly?
Mateusz: I think that my first fully finished game was an implementation of NotChess (http://homepages.di.fc.ul.pt/~jpn/gv/notchess.htm) made as a project for one of the courses at the university. It's basically a board game with only rooks and knigts, however the rooks can only move by one field. Also, after moving a given piece it will change to the other one (the rook will turn into a knight and the knight will turn into a rook). Obviously your task is to eliminate the pieces of your opponent from the board. You can see what it looked like on this page: http://warsztat.gd/projects/notchessthegame
Mateusz: I think that my first fully finished game was an implementation of NotChess (http://homepages.di.fc.ul.pt/~jpn/gv/notchess.htm) made as a project for one of the courses at the university. It's basically a board game with only rooks and knigts, however the rooks can only move by one field. Also, after moving a given piece it will change to the other one (the rook will turn into a knight and the knight will turn into a rook). Obviously your task is to eliminate the pieces of your opponent from the board. You can see what it looked like on this page: http://warsztat.gd/projects/notchessthegame
Bartek: Why didn't you just leave the app on Google Play and decided to take it down instead?
Mateusz: Here is my reasoning: the app I made for Windows Phone 8 was made totally from scratch and I didn't reuse the code from the Android port or the initial prototype written in C#/XAML. What does it mean? First, I included a lot more features in the Windows Phone 8 app - among others - Azure high scores, Skydrive integration, MS Live authentication, support for proximity devices (e.g. NFC tags, tap&share levels), and even the gameplay evolved. This meant that the Android version was missing all those functionalities even though it had the same name for the app. But that's not everything - the actual visuals were also updated and I really enjoyed the much cleaner style I was able to make using the Windows Phone SDK when compared to the Open GL version from Android. Have you ever seen a game made by the same developer on two different platforms that looked totally different? And lastly - the code for WP8 was written in C#, while the Android version was written in Java - if I wanted to support both versions simultaneously I would need to update both code bases every time, which is not ideal. That's why I decided to look for a different solution that will let me reuse most of the code in C# and that's how I came across MonoGame. Also, the game wasn't very popular on Android, not even reaching 100 downloads, so I thought that I should avoid confusing users, who might have both a WP8 device and an Android device (phone + tablet for instance) and download the game on both machines. Taking all of that into account I decided to go for the Windows Phone with this game and take the Android version down.
Bartek: How did you learn how to create apps? What resources were you using?
Mateusz: I have a pretty solid programming skills background from the lectures at the university and for the last year I've been developing apps for Windows Phone 8 using technologies I was familiar with (C#/XAML). Mainly as a reference I'm using documentation and channel9.msdn.com for those projects. If we talk about Android, I'm currently using the official developer guides and also documentation from Xamarin.Android, but nothing in particular.
Bartek: What libraries/frameworks do you use? Why did you choose them?
Mateusz: Currently I'm using MonoGame (open source implementation of XNA 4.x) and Xamarin.Android to run my games on Android. So far I've made one game using this combo (Infinite Snake) and even though I'm not 100% happy with the result, I'm quite satisfied with the simplicity it took me to make that game using these tools. There are still things I need to reconsider and pay more attention to, like the app lifecycle, which is totally different when compared to Windows Phone (and I believe iOS as well) and actually makes it a little bit harder to keep everything user friendly and smooth. I do hope that with more and more projects done I will just keep getting better.
Mateusz: Here is my reasoning: the app I made for Windows Phone 8 was made totally from scratch and I didn't reuse the code from the Android port or the initial prototype written in C#/XAML. What does it mean? First, I included a lot more features in the Windows Phone 8 app - among others - Azure high scores, Skydrive integration, MS Live authentication, support for proximity devices (e.g. NFC tags, tap&share levels), and even the gameplay evolved. This meant that the Android version was missing all those functionalities even though it had the same name for the app. But that's not everything - the actual visuals were also updated and I really enjoyed the much cleaner style I was able to make using the Windows Phone SDK when compared to the Open GL version from Android. Have you ever seen a game made by the same developer on two different platforms that looked totally different? And lastly - the code for WP8 was written in C#, while the Android version was written in Java - if I wanted to support both versions simultaneously I would need to update both code bases every time, which is not ideal. That's why I decided to look for a different solution that will let me reuse most of the code in C# and that's how I came across MonoGame. Also, the game wasn't very popular on Android, not even reaching 100 downloads, so I thought that I should avoid confusing users, who might have both a WP8 device and an Android device (phone + tablet for instance) and download the game on both machines. Taking all of that into account I decided to go for the Windows Phone with this game and take the Android version down.
Bartek: How did you learn how to create apps? What resources were you using?
Mateusz: I have a pretty solid programming skills background from the lectures at the university and for the last year I've been developing apps for Windows Phone 8 using technologies I was familiar with (C#/XAML). Mainly as a reference I'm using documentation and channel9.msdn.com for those projects. If we talk about Android, I'm currently using the official developer guides and also documentation from Xamarin.Android, but nothing in particular.
Bartek: What libraries/frameworks do you use? Why did you choose them?
Infinite Snake |
Bartek: What are your thoughts on Xamarin.Android? Would you recommend it to other developers? What are its main advantages/disadvantages compared to libgdx?
Mateusz: Xamarin.Android is just used as a tool in the pipeline to generate an Android version of the project. The question should be about the comparison between libgdx and MonoGame - the latter one being just an implementation of XNA 4.x. This basically means that if you are familiar with XNA (or even have an existing project that you would like to port), then you don't have to learn it all over again. A prime example would be the game Bastion by Supergiant Games, which was ported to the other platforms using MonoGame as it was written originally in XNA. You still probably will find some differences, but mainly you shouldn't feel lost. I cannot tell you much about it as I just started using it, but it seems to be a pretty solid option to use. From my point of view it was more natural to use it - C# vs Java - but probably you can achieve the same results. Also, it is very easy to start with some 2D games in XNA/MonoGame, which wasn't the case when I used libgdx (so I went straight for Open GL there), but that's my subjective opinion.
Bartek: Where do you take app/game ideas from? How do you know if they have a chance to be successful?
Mateusz: I steal them. No. I don't! :P
Basically, the ideas come to my mind in different situations. It's like when you see a movie or listen to a song and you think "hey, that's cool, I could use it in my game". From time to time you just figure out something that might be cool without any particular "direct" motivation, but it's always based on what you've experienced yourself. However, it's not just making yet another Candy Crush Saga clone - you extend the idea, exploit its strengths or try to balance it out to be more enjoyable. Every now and then you innovate, think about things nobody has imagined - and then you become a millionaire selling your brilliant game or you just live your life unaware that your idea was worth all that money.
For me it's a hobby and whenever I think about something that I believe might be fun, I try to implement a prototype. To make a final game you just have to take the right prototypes and merge them together so they make sense. However, I can't tell you if those prototype ideas will be successful. I think that this will be verified by the players who picked your game - if there are not many, then either the idea was not that good or you should think about improving the way in which you present the game content and talk to the players - if they can't understand what they have to do, then they won't play the game. Which doesn't mean that you have to forget about your super crazy idea for a RPG dungeon puzzle rogue like a platform game controlled with just one tap - but it's much harder to make the player understand his actions in such mixed genres when compared to games that are good at one thing, e.g. puzzle or platforming, so you have to spend more time to think about your design. At least in theory. ;)
Bartek: Where do you get resources from?
Mateusz: I've been making soundless games so far, but if I put some sound effects or music, I will record them myself, because I have some basic skills playing the piano and the guitar. If I manage to think about bigger production, then probably there will be a person responsible for that part.
I also make graphic assets myself - they are not very complex and don't require much skill. Most of my games use squares or circles as the representation of the game state, so I guess almost anyone could provide me with some graphic assets with enough quality. This doesn't mean that I wouldn't like to improve, but for prototyping purposes I believe that I don't need anything looking great. (which I won't recommend to anyone - that's probably why my first Android game had almost no downloads - you have to appeal to potential player so he will actually download your game!)
Bartek: What other programming tools do you use?
Mateusz: I'm using Team Foundation Server, which is a versioning system from Microsoft. However, depending on the project I've been switching to git or SVN. For my graphics I'm using Adobe Illustrator (an overkill, I know) and for music I would be using Cubase which I got with my external sound interface. For programming I'm using Visual Studio 2013 and Resharper, plus obviously Xamarin.Android and it's Xamarin Studio.
Bartek: How long does is take you to make a single app?
Mateusz: It depends on how complex the game is and how much time I can spend on developing it each week. Infinite Snake, for instance, was started at the beginning of this year and after three days I had the first version on Google Play available to download. However, it's just a classic snake, so I didn't even spend time on designing the gameplay. My other projects take me from 4 to 8 weeks to accomplish, however I'm publishing them only if I'm satisfied enough with the result. :)
Bartek: How much are you making on your apps?
Mateusz: From Android - nothing. I still haven't got enough time to figure out how to configure some ad providers in the framework I'm using and I decided to use my time to make a useful app rather then "useless, but with ads" if you know what I mean. My Windows Phone projects are not bringing much revenue either - I do support it with ads, but because of the low volume of distribution I get around 4 PLN (~$1.25) per month from them. However I'm taking part in Nokia DVLUP campaign, because they offer some great rewards just for being with them and creating apps for Windows Phone.
Mateusz: Xamarin.Android is just used as a tool in the pipeline to generate an Android version of the project. The question should be about the comparison between libgdx and MonoGame - the latter one being just an implementation of XNA 4.x. This basically means that if you are familiar with XNA (or even have an existing project that you would like to port), then you don't have to learn it all over again. A prime example would be the game Bastion by Supergiant Games, which was ported to the other platforms using MonoGame as it was written originally in XNA. You still probably will find some differences, but mainly you shouldn't feel lost. I cannot tell you much about it as I just started using it, but it seems to be a pretty solid option to use. From my point of view it was more natural to use it - C# vs Java - but probably you can achieve the same results. Also, it is very easy to start with some 2D games in XNA/MonoGame, which wasn't the case when I used libgdx (so I went straight for Open GL there), but that's my subjective opinion.
Bartek: Where do you take app/game ideas from? How do you know if they have a chance to be successful?
Mateusz: I steal them. No. I don't! :P
Basically, the ideas come to my mind in different situations. It's like when you see a movie or listen to a song and you think "hey, that's cool, I could use it in my game". From time to time you just figure out something that might be cool without any particular "direct" motivation, but it's always based on what you've experienced yourself. However, it's not just making yet another Candy Crush Saga clone - you extend the idea, exploit its strengths or try to balance it out to be more enjoyable. Every now and then you innovate, think about things nobody has imagined - and then you become a millionaire selling your brilliant game or you just live your life unaware that your idea was worth all that money.
For me it's a hobby and whenever I think about something that I believe might be fun, I try to implement a prototype. To make a final game you just have to take the right prototypes and merge them together so they make sense. However, I can't tell you if those prototype ideas will be successful. I think that this will be verified by the players who picked your game - if there are not many, then either the idea was not that good or you should think about improving the way in which you present the game content and talk to the players - if they can't understand what they have to do, then they won't play the game. Which doesn't mean that you have to forget about your super crazy idea for a RPG dungeon puzzle rogue like a platform game controlled with just one tap - but it's much harder to make the player understand his actions in such mixed genres when compared to games that are good at one thing, e.g. puzzle or platforming, so you have to spend more time to think about your design. At least in theory. ;)
Bartek: Where do you get resources from?
Mateusz: I've been making soundless games so far, but if I put some sound effects or music, I will record them myself, because I have some basic skills playing the piano and the guitar. If I manage to think about bigger production, then probably there will be a person responsible for that part.
I also make graphic assets myself - they are not very complex and don't require much skill. Most of my games use squares or circles as the representation of the game state, so I guess almost anyone could provide me with some graphic assets with enough quality. This doesn't mean that I wouldn't like to improve, but for prototyping purposes I believe that I don't need anything looking great. (which I won't recommend to anyone - that's probably why my first Android game had almost no downloads - you have to appeal to potential player so he will actually download your game!)
Bartek: What other programming tools do you use?
Mateusz: I'm using Team Foundation Server, which is a versioning system from Microsoft. However, depending on the project I've been switching to git or SVN. For my graphics I'm using Adobe Illustrator (an overkill, I know) and for music I would be using Cubase which I got with my external sound interface. For programming I'm using Visual Studio 2013 and Resharper, plus obviously Xamarin.Android and it's Xamarin Studio.
Bartek: How long does is take you to make a single app?
Mateusz: It depends on how complex the game is and how much time I can spend on developing it each week. Infinite Snake, for instance, was started at the beginning of this year and after three days I had the first version on Google Play available to download. However, it's just a classic snake, so I didn't even spend time on designing the gameplay. My other projects take me from 4 to 8 weeks to accomplish, however I'm publishing them only if I'm satisfied enough with the result. :)
Bartek: How much are you making on your apps?
Mateusz: From Android - nothing. I still haven't got enough time to figure out how to configure some ad providers in the framework I'm using and I decided to use my time to make a useful app rather then "useless, but with ads" if you know what I mean. My Windows Phone projects are not bringing much revenue either - I do support it with ads, but because of the low volume of distribution I get around 4 PLN (~$1.25) per month from them. However I'm taking part in Nokia DVLUP campaign, because they offer some great rewards just for being with them and creating apps for Windows Phone.
Bartek: Can you say some more about the Nokia DVLUP campaing? What is it exactly?
Mateusz: Nokia DVLUP is a reward system which tries to help developers become more successful. How? They give you a lot of challenges that you can complete for which you get XP points and the same amount of PTS (just points ;) ). The XP is used to show how long you have been with the program and how many challenges you completed. However, the PTS is used to get rewards - from coupons to popular shops, through accessories for your mobile device, to such great rewards as XBox One or Lumia 1520. You don't have to pay anything to be a member of the program, and if you make apps for WP8 and they meet the requirements for the challenges - you can benefit from it. Obviously you cannot just publish million apps without any functionality, but on the other hand they post updates about different APIs and tutorials to help developers create better apps. You can also choose as a reward a consultation about your app to improve it and bring even more users, or you can use the points to promote your app with ad campaigns. In other words - a lot of great stuff! :)
Bartek: Where do you find hackathons/contests to take part in?
Mateusz: The InternAppHack was actually organized during my internship at MS and it was just a great opportunity to jump into mobile development for Windows Phone. However, the rules were a little bit different from what you can find in most hackatons, as you had about 1 month to create your app. They provided additional lectures on WP8, Azure and SkyDrive and so the whole event was really interesting. As you can see the longer period to submit a project to the competition let me create a better user experience and improve the game a lot, so I try to avoid time-restricted hackatons in which you have 1 or 2 days to create "something". Quality over speed and quantity. I prefer to spend time polishing the idea rather than fast-coding the game.
Bartek: How do you monetize your apps? What ad networks do you use if any? Do you have any advice on it for others?
Mateusz: I'm using Microsoft Advertising for Windows Phone and used to employ AdMob for Android. Haven't looked into the market much so I can't tell you if these are the best available ones.
Bartek: Which ones of your apps were the biggest success and which ones were below expectations? Why?
Mateusz: So far the biggest success was Squared for Windows Phone, which was awarded 3rd place in a hackaton amongst 48 other submissions. I'm still waiting for Android success and I'm currently working on some ideas that I hope will be interesting. For the apps that are below expectations I think it would be Squared again - it was the game I firstly made on Android, but didn't get much attention and I was unhappy with the visual part of it, so I decided to take it down. Implementing it for Windows Phone was just an opportunity which turned out so well that I decided to make some more projects for that platform. Now I'm trying to figure out a way of developing for both platforms at the same time - fingers crossed for the results - but it's pretty hard without marketing yourself.
Bartek: Do you use any marketing techniques or ASO to promote your apps?
Mateusz: Not really. I just send them to my friends (using Facebook, forums, e-mails etc.) and try to keep project updates on warsztat.gd. They are purely for fun and to learn new things - maybe someday it will be my way of living, but first I want to finish my PhD. :)
Bartek: What are your favourite Android games/apps?
Mateusz: I don't use Android on a day to day basis. I used to have HTC Desire with Android 2.2 (which was pretty unlucky, because full Open GL ES support started from Android 2.3 and I really didn't want to write low level things during my development), but now I have Lumia 920. This honestly doesn't change much, because I'm using my phone for what it was designed for - calls and messaging. If I play some games they are just random things found in the app stores, but I just don't have enough time to enjoy myself playing on a mobile device - I prefer playing games on PC if I can choose.
Bartek: What Android devices do you own?
Mateusz: Currently none. I used to have HTC Desire and for development I'm borrowing my moms' Sony Xperia J. And of course I have the emulator! ;)
Bartek: What Android blogs/sites do you read regularly?
Mateusz: None, but I don't read much about other platforms either, so I guess I'm not favouring any of them.
Bartek: What are your plans for the future? What do you want to create/achieve?
Mateusz: First I want to finish my PhD. After that we will see what future holds. This classic job interview question I will always fail to answer: "What will you be doing in 5 years?". ;)
Bartek: What advice would you give to other developers (something that you wish you had known before yourself)?
Mateusz: Never ever assume that documentation is right and emulator is perfect - test everything yourself on the real device, as it is surprising how they are different from emulators. And in general, it's always better to test things in real life, because then you know for sure and you can avoid unnecessary complications. Which is not that easy with so many Android devices... And actually one of the bugs I found in Infinite Snake was not occuring to me - I had to debug it remotely with my friend over phone describing what happens on his screen... terrible! But the more you know the better you can prepare for next time.
Bartek: Where can people find you on the Internet?
Mateusz: I mostly use these channels:
Facebook: https://www.facebook.com/mateusz.cichenski
YouTube: http://www.youtube.com/user/hrkm1
Soundcloud: https://soundcloud.com/hrkm
Google Play: https://play.google.com/store/apps/developer?id=Mateusz+Ciche%C5%84ski
Windows Phone Store: http://www.windowsphone.com/pl-PL/store/publishers?publisherId=Mateusz%2BCiche%25c5%2584ski
I hope you liked the interview and some fresh views on Android and Windows Phone programming. Perhaps it will encourage you to look into other platforms as well (if you aren't already publishing for them). I'm thinking about porting my Blobby Volley to work on other devices as well. It's getting more and more downloads every day, so maybe Apple and Microsoft fans should be given a chance to play it as well. For now, there are still a lot of bugs to fix, but almost 2,000 new users every day make me believe that my work is actually worth it. More stats will be published in one of the next posts. Stay tuned and come back for another piece of content in about a week.
I'm really like your interview. It help me understand works of other developers,
ReplyDeleteand make me have motivation to do my apps (not game) :D
Thanks for your interviews!
(From VN)
Thank you for the nice words! The interviews motivate me as well and they give me a fresh view on new technologies and tools. I will keep doing them and I hope to surprise you in a positive way with other kinds of content as well.
Delete