So you wanna make an Android port of your visual novel?

If you’re following us on social networks, you already know that Being Beauteous and Ambre were both released on Google Play a few days ago. At first, I hesitated over giving you the technical details, but since Mystery Corgi dev asked me for precisions on Twitter, here’s my experience with Android ports. Warning: it’s gonna get ugly!

Ambre MM Android

It makes you proud to see your game working on a phone *__*

To get started
You finally finished your latest visual novel and you’re thinking that multimedia is the future. So, you want to make your work available on every platform possible in order to be read. The good news is that RenPy provides you with a small guide. So you start to download a succession of softwares that you will never open but that RenPy will use in your place.You’ll need Java Development Kit, Apache Ant and Android SDK. Once you’re done, you will still need to get the Ren’Py Android Packaging Tool, if you haven’t yet. This RAPT consists of a file that you’ll have to place in the Ren’Py directory you’re using. If you open RenPy, you will now be able to configure your project.

RenPy Launcher
Configuration of a Google Play Publisher Account
Here’s where things are going to get complicated. Because you can’t create a build yet, you’ll just make RenPy crash, as I did. Before going to the next step, you’ll need something important: a signing key. And nobody will explain you how to do it. From what I understood (but it’s really not clear), you’ll have to get a Google Play Publisher Account, even if you don’t want to publish your product in their store (?). In order to get that account, you have to sign in with a Google account (I think almost everybody has one) and pay a $25 USD registration fee.

Acces API

I couldn’t change the language setting on my Google Play account so you’ll have to bear with my French screenshots <_<

Once you got it, you’ll have a whole lot of options to configure. It seems that you absolutey need a OAuth client and a service account (see the API Access menu above) and for this, you’ll have to retrieve the SHA-1 certificate footprint. Which turned out to be quite a headache for me. I searched through the web how to get this from the android.keystore file generated by RenPy at the start of the operation, but in vain, nothing I tried worked. In desperation, I turned to Keul who suggested I download the HashCheck Shell. extension.Thanks to that tip, I only had to open the properties of the file to retrieve the SHA-1. I have no idea if iI did it the way it was intended to or not but configuring that account was annoying as hell. I rarely saw more uselessly complicated and it made me realize how life was easy with the community around RenPy: there’s always someone with an advice or a guide T_T.

Projets GPAt this point, you should be able to create projects and generate a key for each one (don’t lose it!).

RenPy takes care of everything…almost
Back with RenPy, you have to put the key in your game. Following the advices of Sleepy Agents I found on the net, I copypasted mine in the options.rpy file.

Clefs RenpyYou’ll also need another sequence of numbers, and once again you can’t find an easy generator to do that for you, so you’ll have to take care of it yourself (or use the simple but risky sequence that the RenPy guide is showing you as an exemple). Once those two lines are added to your code, you will finally be able to make a build.

RenPy Launcher2One last word concerning the configuration: RenPy will ask you if you want expansions for your Android port (depending of the size of the file). You will actually need both versions: the 1st one will allow you to install the game on any Android device to quietly go through your testing phase, whereas the 2nd one is crucial if you want to put the game on Google Play. The limit being of 50MB, it’s nearly impossible to have a smaller file, even with a short project.

Configuration of a Google Play store page
Let’s work on the basis that you want to put your game on Google Play, here are some tips that, I hope, will help you.

Google Store• To begin with, you need to upload your APK file. I suggest you do so by directly assigning it to the Alpha track, otherwise Google Play won’t allow you to upload an expansion file (thankfully, you’re still able to modify that anytime).
• When filling the description page of your project, you will quickly realize you have to be concise. Be careful, Google Play will try several time to encourage you to use the translation service. It may sounds harmless but those services are not free and you will soon be asked to pay an amount that isn’t that small! Unless you have money to spend, I’d advise you to do the translation yourself or just pass.
• The questionnaire you have to fill to get a rating really isn’t adapted when it comes to visual novel. And it isn’t always clear on top of that. It’s quite difficult to get what each option really means. Like this, the confusion caused me to get a 18+ rating with Garden of Oblivion on my first try because I didn’t know the difference between “far” and “close” portrayal of violence. Pay attention and don’t hesitate to fill the form again to compare the results!
• In order to sell a game, you have to use a Merchant account and for that, you’re asked informations about your company. If you don’t upgrade to Merchant account, your games will have to be free.

With all that, your app should be ready to be published. But before clicking on that fateful button, you really should make a small verification: is your game adapted to Android?

Ergonomics issues
In order to make you think a bit, here’s a sequence of issues I got when I asked Keul to test the games on his phone for me.

Finger issue

As you can admire, thanks to Keul’s finger, it’s difficult to click with the original GUI…

• Most quickmenu (you know, the navigation buttons above the textbox or below in NVL mode) were way too small. So I needed to turn some pictures into text in order to increase their sizes as I wanted (it was the case with Ambre) but also increase the space between each button.
• Needless to say the font in general had to be increased as much as possible as well to allow some reading comfort.
• It got more complicated when the games were using lots of pictures. HVNCML, especially, took me a whole afternoon to get fixed; I had to increase the background picture to put bigger buttons and space them out, which lead to text collisions since the text was scrolling under that picture. Same with the PM system. Only after many tests was I able to balance everything.
• Just as bothersome, Garden of Oblivions icons were too small and too close to each other, which meant I had to increase them and adjust their positions. Another problem: the button that should be used to make the pause menu with all the options appear was, according to Keul, not really used by people anymore. So he advised me to add a quickmenu and I had to create new buttons inspired by the existing GUI and place them accordingly. For exemple, I had to keep an eye on whether the quickmenu was running over the sprites (it was the case with the rabbit). I also had to hide that quickmenu during the puzzle phases in order not to bother the player.
• Since you can only play a game in fullscreen on Android, the Fullscreen/Window button in the Options menu became completely useless! However I decided to keep it because I didn’t want to make a hole X).

Anyway, if you don’t have to remake entirely your visual novel for an Android port, you will still need to adjust the GUI!

To conclude
Here you are, finally ready to publish your app! You still need to wait for Google Play validation (it can take a couple of hours) and your game will be available. You suffered but it was for a good cause! Fortunately for you, I’m here to tell you all I did wrong so that you’ll suffer less than I did =’D.

pythonw 2015-09-15 22-37-28-53

Screenshot of the Android version: look at the new quickmenu on the right =’)

Don’t forget that HVNCML will be released wednesday and GoO the week after that! If you have some time, try out our Android ports and tell us what you think about it, it’ll make me happy :3.

My experience as a marginalized dev: trying not to self-censor

Recently, Heiden, another game developper, asked me on Twitter if I could write about where I’m taking my inspiration from and what my motivations are. It’s a bit complicated in my case but the question is interesting enough for me to try to answer!

Inspiration: a joyful patchwork

First of all, depending of the projects, I can tap into extremely diverse source, often seemingly incompatible: classic literature classique, fairy tales, cartoons, comics, movies, videogames, anime, visual novel, mythology, etc. I’ve already mentionned some of them but here’s a more exhaustive list.

For Being Beauteous, I based the story on Disney version, especially the love song part, thinking up how the romance between the protagonists coul work without its main catalyst. Also, what’s after the usual “happy end”, how their relation can grow, what happens when they’re becoming old. I mostly applied my way of thinking to a version I didn’t particularly like. To be honest, BB is at least my 2nd or 3rd Cinderella rewriting. The other big idea I have in mind for years now implies a narcoleptic Cinderella. Also, BB is mainly born at  a time where I was discovering those kind of feelings: you can hardly pull more romantic from me and the result is still bittersweet =’).

Jaquette AmbreAmbre is my short project with the most diverse influences: as mentionned in my post-mortem, I drew a bit on World War Z by Max Brooks (the little girl who survived the zombie apocalypse chapter), the song Moment 4 Life by Nicki Minaj that illustrated the Cinderella symdrom perfectly, but also in a  news item novelized by a french lawyer.

Strangely enough, I took inspiration from a romantic comedy film I only knew because of posters on the walls of stations back when I had to take the train in 2012. It tells the story of a happy couple wrecked when the woman suddenly lose her memory in an accident, only knowing what happened before meeting her husband. And I simply asked myself what would happen if my partner had to face the same problem. Since I’ve seen a lot in my life, the answer varied depending of the memory loss and my attitude was radically different. For examle, at some point in my life, I was obsessed by being normal and I tried to kill who I was to fulfill the expectations people had for me. I suffered a lot because of those attempts and it left a mark on who I became. During that dark phase, I especially tried to find bearings and ended up copying popular media (TV, cinema, radio, magazine for women) in order to know how to behave. Looking back, the result was totally ridiculous and clumsy but I was really, genuinely, trying to match what people wanted me to be. I don’t wish anybody to experience that… Hence, Ambre can be considered a fiction of what I could have become if I didn’t cracked under the pressure and decided to follow my own path.

Inspired by real facts :p

As for How visual novel changed my life, there’s not inspiration insofar as it’s a revised collage of real IRC discussions ;). One could consider the whole team wrote this one!

ss+(2014-08-25+at+21.36)

Concept art depicting The Metamorphosis by Kafka (@Eolyus)

The original idea behind Garden of Oblivion was to create some kind of written Yume Nikki (a great experimental game) with some point & click elements. Sadly, the concept never went past that. Besides, you could consider the story-related parts are also based on my personal experience: wanting to withdraw in an imaginary world, feeling like you’re not fitting in, being unable to take decisions, etc. Incidentally, the talking animals many people said were reminiscent of Dreaming Mary are nearly all stuffed animals I own and that embody my childhood.

ld1_2_by_kinectiklover-d8ptqmw

Concept art of Hassan (@Kinect)

Wounded by Words is more complicated because everything is “real”. I did base some parts on testimonies to depict Gabriel and Hassan (as I don’t master viewpoints like those) but overall, every character has the same problem, and that’s something I recently faced: the difficulty to keep going forward when you don’t belong to the dominant viewpoint. As a young woman dealing with a disability, I often struggle to do the same things as others and I’m still poorly perceived in my own family. It’s a very complicated and disheartening feeling I wanted to share. Incidentally, Dave is only here to embody the external and hurtful view the other character have to deal with daily. He’s based on my previous internship tutor and several members of my family. Mostly my father. Sorry if you’re reading me, dad, but you’re really like that and it’s insufferable…

Milk 2015-08-23 18-14-58-84

This is not a harem…

Milk~La légende des étoiles being a huge project, my influences are even more diverse depending of the segments. The whole “harem” thingy is of course based of charage/moege and I wanted to readapt them completely in my style because I’m displeased with the current state of those games. In my vision, the main character is only a catalyst, the heroines are the ones who get the spotlight, especially their psychological development. Incidentally, each heroine is inspired by a fragment of my own personality, just like the protagonist. Hence I was really inspired by the visual novel Yume Miru Kusuri. What’s ironic is that, when I wrote Milk, it was kind of a fiction about what could happen if I were to fall in love. And I know myself so well, some parts of the story did actually happen to me later…

Gamines

Extract of the Crossing Horizons artbook (@Orties)

The segment devoted to Khzi was originally a big joke based on the most stereotyped things in adventure novels and fantasy. I tried to make fun of that and took the absurd as far as I could. Khzi herself was supposed to be a super serious and classy killer (because I like the strong independant woman type) but I ended up making her completely unpredictable, a bit like Yumiko in the anime Read or Die. The super serious and classy killer hence became Freyja.

The “Légende des étoiles” part, yet to be released, is inspired by the comic book Thorgal, Ulysses 31, and mythology in general.

 

Inspiration : another perception of the world

In general, I have a complicated relationship with writing insofar as I don’t have an author I’m a fan of, I really tap into everything I integrated with time. Even stranger, I can sometimes dip into things I don’t know directly: I really like accumulating knowledge about many things, so I can know works indirectly without having read or seen them. I can even get inspired only by what I think the work is about (often to get disapointed when I get to read/see it for real).

Milk preview ep5 name

Current Chapter menu in Milk~La légende des étoiles

I work on the assumption that it’s impossible in the 21st Century to think up of raw material: everything has been done by someone else before. So, for me, writing is a kind of alchemic process: I’m mixing many different influences and add my personal touch to come up with something. And I think creativity resides in that mixing of influences. For example, the Cinderella story has been done many times before, but it’s what I can add that makes a new version possibly interesting. It’s not the idea but the execution and the way you put a bit of yourself in it!

Considering that fact, I’m relying a lot on the meeting between those influences and the way I see the world. Since my way of thinking is kinda unique, I feel like I can write about anything only by taking over the material.

 

Motivation : message in a bottle

I read a lot when I was younger but I never really found a work that was like me. To begin with, as a woman, it’s not always easy to get properly depicted insofar as most classic and recent books only deals with male preoccupations or show stereotyped female preoccupations (shoes, shopping and prince charming, yay). And as an autist, my way of thinking is never depicted anywhere, making me feel unconcerned by most current cultural productions. Fortunately, there are hidden gems that are really worth discovering but let’s say I’m not as favored as others, who will find what they’re looking for more easily. You have to search very hard to find an autistic protagonist in a story non-related to explaining autism. Let’s be clear, it doesn’t mean interesting neurotypical stories don’t exist, only that my tastes are not the majority. That’s why I’m interested in indies: I hope to find with them more diversity than anywhere else.

Quite frankly, what motivates me to write is to try to make stories that I will like. Since I struggle to find things like me, I decided to make them. If my works manage to satisfy my peculiar expectations, I’m quite happy, and it would make me happier if others could share that vision. It would mean I’m not really the only one to think that way and that I could be useful one way or another. I guess it’s just as if I was sending a message in a bottle: I transmit a part of myself in my games in the hope that maybe, someone, somewhere, will come across it and share my vision, find some interest in it.

Milk 2015-07-18 20-10-29-27

Screenshot of Milk Episode 5, under developement

I don’t know what other developers are trying to do when they start to make games but, for me, everything echoes back to my disability: it’s at the same time my inspiration, what drives me to write, my curse and my gift. I wouldn’t want to fight as much if I didn’t have a different voice to make people hear, but I wouldn’t be struggling so much if I didn’t have a different voice in the first place. I’d like people who have a difference to be able to access as much content they’d likely enjoy as the others do. If child/teenage Helia is able to find what she likes, then I would have accomplished my mission. The road is still long before then ;).

What visual novel development taught me

Today, I want to come back to the differents projects the team made in order to comment our progression.

Indeed, even if things are slowly changing with the increase of early access games, one often only get a hold of a game through its finale version, in other words, it’s most complete and most accomplished version. An average player may get under the impression that the differents pieces are coming together thanks to some kind of evolution stone to change into a piece of art. Reality is less glamorous but way more reassuring : creating is something you have to learn. The bad news is that it involves a lot of work, the good news is that anyone can try it out. And the Träumendes Mädchen team is no exception, especially me who has the job of being the “leader”. It’s been almost three years now and I’ve learned so much thanks to my teammates, particularly with programming. So I want to draw up some kind of report.

 

June 2012 : Being Beauteous

Some of the first drafts by Morsy. She improved a lot since then!

Back then, the team had already gathered around Milk and we floundered so hard. I was aware we were jumping the gun when we started with a project this big and I really wanted to make up for that with something short. The first version of Being Beauteous was born like that and we planned to make it during some French contest that happened in a small convention. Even if it didn’t looked much, BB hold a special place in my heart because it was our first completed project. It was really simple (text and some CGs) but we did have troubles during the competition because of the GUI. So it’s only with the 2nd version (the first available one actually) that we managed to fix those bugs. Also, we slowly realized that having a translation was really important to share our works to folks around the world.

What I learned : to finish a project, to make a bug-less GUI, to understand the importance of an English translation.

 

February 2013 : 1st Episode of Milk

Another draft by Morsy. In the end, those variations never got into the game.

The deliivery of Milk’s 1st Espidode was a real ordeal because it took us like a whole year to see the end of the tunnel. It must be said that there was a lot of content to deal with for such a young team and I immediately understood that we couldn’t go on like that. After all, we were supposed to release the whole game in a row after that! I realized it was impossible and change the plan to an episodic publication. Hence why the demo became “1st episode”. It was also a chance to get to know Renpy a bit better (choosing a custom font, juggle with all the numerous sprites and numerous expressions). Milk’s presentation was really simple and we made a lot of mistakes but I think it was a prerequisite for what came after. Most of the mistakes were corrected (the GUI) or are pending for correction since then (*cough* the scenario). It should be noted that we released the visual novel both in French and English at that time, not without pain.

What I learned : to write a visual novel, to finish a bigger project (without dying), to draw a GUI, to make a siultaneous translation, to manage sprites and expressions.

 

April 2013 : Ambre

I think we all understand why Melow did the game illustrations and not me 8)

Once Milk’s Episode was behind us, I had to tackle Nanoreno! It wasn’t a technical challenge (because the story was linear)  but it sure was a litterary one. Granted the deadline was a pretty difficult thing to handle too but I planned the game not to need too much assets. But really, my personal challenge was to write a short story that would inlude some kind of memorable ending, something striking. Even thought the result wasn’t perfect, I’m relatively proud of the outcome, I think the intended result is here. Ambre was also a good chance to make progress on GUI and animation. We included some light animation for the first time with the petals on the main scene and we tried something with the leafs on the city background. Some elements you would find again in the next release.

What I learned : to write a visual novel while paying attention to the assets needed, to finish a project quickly, to write a story with a memorable ending, to join an event.

 

March 2014 : 2nd Episode of Milk

A pretty sketch by Elairin

We took almost a year on this one again but it was mostly because of the turn-over inside the team. This second episode was mostly a validation of what we made with the first one. Indeed, many project don’t get past the demo stade, so releasing a new part of the story was a symbolic move. We wanted to show we were still game and that we wouldn’t give up so easily. We took that opportunity to change the GUI (and it was way more difficult than you would imagine!) and include animated backgrounds for the first time. Well, there are only 2 or 3 of them but it was a way to slowly get accustomed to the process.

What I learned : to carry on an under way project, to include animated backgrounds, to renew a team.

 

April 2014 : HVNCML

First GUI tests by Xian

Once again, I wanted to tackle Nanoreno, and once again Milk’s production was late. In 2013 we managed to finish two weeks before the beginning of the contest, this time we finished in the middle of it! Under these circumstances, it was rather difficult to deliver. HVNCML was born a whole week after the deadline. I didn’t write any postmortem because the whole game can be considered one (with a comic point of view). Back then, it was our first technical challenge because I only wanted to try my hand at a IRC-line GUI and didn’t have much planned to use it afterwards. Well, you can consider that making some part of your life public was also a challenge. In a way…it is. This little visual novel was supposed to be a funny extra to the fans that were wondering what we were doing everyday and how our meetings looked like. Yet several people who didn’t know us played it too. It was kind of embarrasing, a bit like getting naked in front of strangers. The whole approach does suppose some trust with the audience.

What I learned : to juggle between several projects at the same time, to try an IRC-like GUI, to reveal my stupidity to the world.

 

July 2014/September 2014 : 3rd Episode of Milk

Orties trademark: writing nonsense on her drawings :p

Milk’s third episode is really seen as an exception among our works because it’s the only damn game that went “easily”. Meaning that we didn’t enconter any particular issue (except a small false note with the translation that wasn’t immediately ready). If anything could happen like that, visual novel dev would be so easy XD. It’s all the more surprising considering we had a lot of pressure due to the fact we promised this part would be ready for Japan Expo, a French convention. The third episode also marked the spread of backgrounds animation.

What I learned : to meet a non-negotiable deadline, to spread backgrounds animation, to release a game in a relaxed way.

 

August 2014 : Garden of Oblivion

A relatively accurate Ludum Dare metaphor…

In the same vein as HVNCML, Garden of Oblivion was planned as a technical challenge: I wanted to put tradionnal visual novel aside to include some point & click elements instead. With an incredibly stressful deadline (Nanoreno is a stroll in a park in omparison). If the graphic part was irreproachable, the coding part was rather…wild. The first version we returned didn’t match my expectations at all and we had to add a whole week of work to get to the result with the second version. The other challenge was for me to write directly in English with the bare minimum of preparation to fit the gamejam spirit. And I’m reserved about the final result, I could have done better. At least, I managed to include more diversity among the characters. The fact remains that the community experience was on par! Ludum Dare really is a big gathering of people and that forms bonds. If you wanna know more, read the postmortem I made right after the competition.

What I learned : to write directly in English, to jon a bigger event, to learn programming in the field, to make an hybrid VN/P&C, to discover the joy of polishing, to include a bit more diversity in a cast.

 

Spring 2015 (?) : 4th Episode of Milk

Orties really likes to write on her drawings…

Milk’s forth episode isn’t out yet but I feel I learned so much already. I think it’s starting from this point that I really felt confortable with RenPy. To the point that I now like to rummage through the script to improve what I can improve. It wouldn’t have happened without slowly getting familiar with the engine, project after project, and the help of Keul. The direct consequence is that this episode is full of small alterations: adjusting the brightness of sprites during night scenes, adjusting the height of non-human sprites, adjusting the font to be more readable, adjusting some transitions to be more dynamic, adjusting sound effect to fit the mood better, light animations on the illustrations. Currently, that’s the work I’m the most proud about and I hope those little things will make the read more interesting, even if they’re not that useful. I also started asking the artists to try different presentation styles (object on top of the background, insert chibi, CG cut in half, CG with many variations).

What I learned : to have a good command of RenPy, to use all my time doing alterations nobody will ever notice, to use sound effects effectively, to experiment different presentations.

 

April 2015 (?) : Ludum Dare 2

Since the game’s production hasn’t started, for logic reason, here’s a scene from Milk Episode 4.

Since we’re planning to enter Ludum Dare again, this part will mostly be anticipation considering we didn’t even begin the project! My main goal is to break the linearity of all our projects so far. Making choices is quite a complex thing to incorporate into a story and as a litterary person, I have trouble with that and I need to learn to write differently. It’s pretty ambitious considering the short deadline but I’ll try to stick to that goal, even if it means releasing a polished version later on. The other goal is to go out of my comfort zone with writing and talk about what I want to talk in a more…frontal manner. Indeed, many of my works address our relation to the norm and try to challenge that notion but it’s mostly told in a tacit fashion. I want to go further and stop censoring myself so much. In this perspective, I want to stage characters different from usual, under-represented ones. Like disable people. Furthermore, I plan to rest on what I learned with all the projects we made up until this point to make a game that’ll make me proud. We’ll see if we’ll manage.

What I want to learn : to make th most of what I learned so far, to write an actual interactive visual novel with branching, to make diversity an essential component of the cast, to prevent myself from self-censorship, to master Renpy enough to not have a hard time…to make a good game?

 

Conclusion

I just wanted to share another scene from Milk Episode 4.

This little overview shows that an individual (just like a team) need time to gain self-confidence and skills. Time to make mistakes, time to correct the mistakes, time to get numerous habits, time to be able to experiment and choose what one wants to do and how. I couldn’t imagine planning the Ludum Dare project years ago, I wouldn’t have felt able to! With this approach in mind (though iterations), the advices from the pros take on their full meaning: always try to make short projects before even tackling the “game of your dreams”.

Everyone need its own pace to learn but nobody can make miracles without any experience whatsoever. The issues of some visual novel Kickstarter are really enlightening in this respect: almost all the projects made by beginners (such as the ones who bragged about the campaign being their first visual novel) are currently running into difficulties and are having troubles keeping their promises. Likewise, the Katawa Shoujo spiritual heirs have disappeared and the few survivors are stuck on demo phase.

Moral : Don’t jump the gun, start small. Wait until you feel ready before shifting up a gear, it can only do you good ;).