Another awesome update is available! This one was delayed a bit by issues with my main dev macbook laptop, which decided to stop working properly and I haven’t been able to fix completely even after using all the spells I know. At least I now have a legit excuse for not releasing the iOS version 🙂
Standard Edition
Any Device via the Official web version, just point your browser there and you’ll always get the latest version.
I also did an initial full pixel-art version of the new trailer, since my macbook is no longer operational (I’m not even sure the current work on the trailer is safe), that will take a little bit more.I intend again for this version to be the final way feature wise for the release on iOS and Steam. But that doesn’t mean much… I have had the same intent for about a year.Check the full changes log below!
The entrance to the Temple of Ananias
Bigger roomsResetting password via email
User Experience
Animation for player!
Add dungeon entrance
Make monsters and player shake when hit
Replace integrity with description for weapons and armor
Allow moving by tapping any floor tile
Allow switching weapons using Tab
Allow throwing items with keyboard (“T”)
Allow switching targets (Tab) and confirming (Enter) or cancelling actions(Esc) with keyboard.
Reduce 1 minute of dungeon silence
Online
Allow recovering password via email
Gameplay
Implement two handed weapons (Can’t wear shield at the same time)
Add two handed bonus for some weapons. (Staffs, spears, etc)
Increase size of rooms
Generate rocks and reagents as a separate item group (more reagents to play with)
Multiple types of room per level
Remove “No spells used” Conduct when using a scroll
Some months ago I wrote about the pain that it was to create a new build, I’d like to update that with my current setup which is much better tho not still super optimal.
I have reduced the manual steps prone to failure as well as the bandwidth cost. The release and announcement part is still manual tho, so I still don’t to release for all platforms and forget to announce thru all channels.
The cocoon.io parts have been removed in favor of a pure Cordova/Crosswalk approach, which have made possible lots of automatisation.
Still, what takes more time is the manual process to be done for each different storefront via its own web interface. Each one requires different info, and all uploads have to be started and monitored manually. It’s pretty uncommon for a store to supply a command line tool.
This is the current process executed for each new release of Ananias:
Packaging
Mark the new version in the source code (client and server)
Execute the packaging script for each platform, it does the following:
Generate a new JS bundle using browserify
Generate the player’s manual
Copy the required assets based on the platform
Do platform specific things like using cordova/crosswalk, nw.js, signing and zipaligning APKs, etc.
These are currently shell scripts, no fancy gulp or grunt for now
Rename and zip the executable packages for Windows, Mac and Linux (Should add this to the script)
Execute the cordova build for iOS
Build changes log from git commit messages
Distribution
Upload new build to web (ananiasgame.com/play) (About 15MB) (Only Standard edition)
Deploy new server version and restart (About 1MB) (including executing migration database scripts)
Upload to itch.io via web interface (About 200MB )
Sign in to google play developers console
Summarize change log for Google Play
Upload both x86 and arm APKs (About 100 MB)
Upload both APKs to Amazon via web interface (About 100MB)
Upload to indiegamestand via web interface (About 200MB)
Upload to gamejolt via web interface (About 200MB) (Only Standard Edition)
Upload to IndieDB via web interface (About 200MB) (Only Standard Edition)
Open xcarchive in xcode organizer
Submit package to App Store
Wait for processing
Go to iTunes Connect
Go to Testflight / External Testing
Select new build to test
Wait for beta review
Go back to Testflight / External Testing
Set the new build as active.
The process should be executed twice, once for the Standard Edition and then again for the Fellowship edition.
The dream of having a single web endpoint, and have all the clients deal with the updating is still far from happening.
The changelog may look small, but a lot of work went into this one. I decided to jump into it, put on the pixel artist hat and make the animations for monsters myself… the game looks much more alive now! The last version was also a bit too easy, so I had to address that. Finally, attack spells are much much cheaper now, so I hope the magic-user classes are more powerful now.
Another visible change is the return of the “Portrait” mode for mobile, it seems a lot of people liked it, since it allows seeing the map and the object inspector all the time, and it can be used with a single hand. I still like more the more compact Chibi UI, but I understand it’s a valid choice if your screen is big enough!
Standard Edition
Any Device via the Official web version, just point your browser there and you’ll always get the latest version.
Remove intrinsic “noise” penalty for Paladin and Barbarian
Reduce chance of enemies alerting nearby monsters
Reduce strength of alerts by enemies (their cries for help now reach less rooms)
Increase HP for deep enemies and bosses
Add more enemies per floor on deep floors
User Experience
Idle animations for all enemies and monsters!
Added back portrait mode for mobile
Bugfixes
Fix crash when using brewed potions while hallucinating
Fix issue with some actions breaking the flow when on chemistry mode
Steam and iOS versions
I keep shortening the list in order to make this happen more quickly. Right now it’s down to two items:
Idle animation for player. This isn’t simple since it requires building the animation frames dynamically based on what the player is wearing.
A new trailer, I will remove the animation sequence and replace it all with pixel art footage from the game.
Merchandise
Production of Dumeril statues and the new t-shirts is still halted. I haven’t been able to push neither of these forward, I’m investing whatever little time I have directly into the game development.
Pokemon Go recaptured the people’s imagination of what could be done in a game mixing reality and virtuality. However, after the initial joy, many people started complaining about the lost potential and how they screwed up by not adding some features that could have made the game a more complete experience…
I myself continue playing, but I agree the experience has degraded over time into grinding endlessly for candy in order to evolve my Pokemon, and rarely finding a new one even tho my Pokedex is still fairly empty.
But complaining is too easy, how about actually going ahead and trying to fill these gaps?
I couldn’t get the idea off my head, so even in times like now when I have very little spare time, I jumped into it. This is my very own effort to create a location based monster training game: Professor Slash’s Energy Radar
Professor Slash’s Pokemon radar is able to detect different sources of Pokemon energy around you.A wild Rattata appears…. Go Charmander!
Gameplay
Use your phone to track different kinds of “energy sources”. Walk to them and once you are close enough you will be attacked by a wild Pokemon, then you have to weaken it by fighting using the Pokemon in your team… the wild Pokemon won’t just stay there dancing for you tho, it will attack back using its own techniques. You can switch Pokemon on your team anytime to take advantage of their skills and types.
Once the Pokemon is weak enough you can try catching it by throwing a Pokeball, your chances of capturing it depend on how weak it is. If all your Pokemon are defeated, you will lose your chance to capture it and won’t be able to face other wild Pokemon until they have recovered (they will recover their hit points with time or you can take them to a Pokemon center by walking close enough to one of the towns in the fantasy world).
The energy sources around you are based on your location in the fantasy world (Kanto in this case). The game map is overlaid on the real world as a 8km x 8km area (approximately), so you have to walk around your city in order to find different types of Pokemon. Even without connecting to a server, all players find themselves around the same in-game location and get to see the same energy sources .
You can train your Pokemon by fighting wild Pokemon or another trainers via Bluetooth. Stronger Pokemon stand a change against powerful wild Pokemon you want to catch.
Creating a working prototype
Creating a full game following this design would be a huge enterprise, beyond what my limited time and resources currently allow. However these ideas haunted me, and I set myself to create a working minimal product which could at least be used to validate them in real life.
The result is a huge mess of code which works pretty decently for the time I was able to invest. An obvious next step in case I continue pursuing this development is doing some massive refactors (all game logic is currently implemented as a single huge monolithic 747 LOC JavaScript module) and optimizations (basically I didn’t care about the CPU for this version so I do lots of redundant calculations, and I don’t really want to talk about the rendering strategy 😛 )
BUT, it works… I managed to have something to experiment with!
Overall Architecture
One of the things I am going for is being completelyserver-less while still allowing social interaction between players. This is of course to allow infinite scalability and not having to worry about server loads (One of the main headaches Niantic had/has)
I chose to create an hybrid JS Cordova app just because it would allow for much quicker prototyping while at the same time giving me access to the device services I knew I was going to require:
GPS sensor
Compass
Accelerometer
Camera
Vibration
Server-less social interactions
This, I think, is the core of the app. I used the seedramdom module from David Bau which contains seedable PRNGs that I could seed using a combination of the different locations, time of the day and other parameters. All this in order to make the same energy sources show up at a given time for two players being on the same location, this way there could be social interaction (Hey! There’s a Dragonite near me, come and get it!)
Also, everything is local here. You don’t even have to create an account, all your progress in saved in your device.
Geo tracking
This one is of course one of the main features, since you need to move around in order to interact with the world. The cordova-plugin-geolocation provides you latitude, longitude, and even altitude, along with a precision value.
A lot of processing is then done to convert from geospatial references to physical distances in meters. It is a pretty interesting topic I had already visited back on the times of Expedition. This answer, derived from the Wikipedia article, was super useful.
Of course, GPS is still far from precise (and I’m not sure if that’s ever going to change!), some postprocessing and filtering is needed to smooth the sensor readings and eliminate noise.
Current GPS support is awesome, but its accuracy limits make some kind of interactions people are dreaming with impossible. I can understand why Niantic had to force some design choices around the restrictions of current technology.
Walking detection
Used the cordova-plugin-device-motion to get the x, y and z acceleration values using the phone’s accelerometer in order to try to find out if the player is walking, main goal was not having wild battles triggered while phone is lying on a table or you are holding in your hands without moving.
In the end after some experimentation I was able to provide a fairly accurate approximation via a Kalman filter (I don’t know what that is, I just followed this answer from StackOverflow 🙂 )
Directional radar
In order to make it easier to get to the energy sources, the radar rotates based on the direction you are heading.
I used the cordova-plugin-device-orientation plugin for this, it gives you a 0 to 360 degrees value for orientation, then I applied a simple transformation to the position of the energy sources in the radar.
Pokemon Combat rules
As someone who loved the original Pokemon games, one of the main things I wanted was having Pokemon battles be an important factor in the game; here’s some of the differences.
Catching Pokemon
Pokemon Go: Using a razz-berry in order to get the Pokemon to love you, then throwing the Pokeball (with a finger gesture, slight skill involved) and hope it doesn’t break free.
My own: Weaken them in battle (risking losing the battle or killing them), then throwing a Pokeball (catch chance based on how weak and how rare)
Training Pokemon
Pokemon Go: Feed them candy and stardust. Get more Pokemon of the same time in order to grind them into candy and repeat the process.
My own: Battle wild Pokemon and other trainers to get experience and level up.
Battling Pokemons
Pokemon Go: Pokemon have a simple and a special attack. Tap the screen as fast as you can to use the simple attack and accumulate energy for the special attack.
My own: Turn based, select the best attack to do based on your advantages and the status of the fight. Pokemon have a max of 4 attacks including status effects.
I implemented a veeeery basic combat system, implementing the full combat rules would of course be a lot of work. I would initially target for the first generation rule set, I did some research around and found some already existing JavaScript games which could be useful. The alternative would be having a simplified system.
Bluetooth P2P Connectivity
An obvious social feature is allowing players to combat each other; following the server-less approach, I picked basic Bluetooth communication to establish a peer to peer link.
Used cordova-plugin-networking-bluetooth from Franco Bugnano, who has some interesting blog posts on the topic. This only seems to work on Android, which is good enough for me 🙂
Some samples of the current bluetooth connection flow, for now I’m just establishing the connection and sending a simple message from a player to another and back, future work would be establishing the complete battle flow.
Vibration feedback
Used when starting a battle and when the pokemon are hit. Just a small detail that the cordova-plugin-vibration plugin allows to do very easily 😉
Augmented Reality on battles
As a final touch, I used the com.ezartech.ezar.videooverlay plugin from EzarTech in order to show the video in the background while on battle. Future work: Use accelerometer to relocate monster, allow snapping pictures.
More stuff?
Some other things I think may fit the game:
Adding some activities you can do without walking around (say once you are home). Playing around with your Pokemon or making them train by fighting each other could be an option.
Why bother doing this?
Obviously, I don’t have the license to the Pokemon franchise so I can’t release this game as one my own so.. why bother doing this?
For my personal enjoyment (and my friend’s), I want to provide a different (better?) experience for a location-based Pokemon game.
I want to know how far is it possible to go today with hybrid apps and Cordova with regards of extended smarphone functions.
I always wanted to make use of some features that modern smartphones have and apply them into something fun.
I’m creating this as an engine, in the future I may actually use it to release a game under one of my IPs.
I needed to get it off my list, after building this prototype now I can live a peaceful life at last.
If you would be interested on giving this a shot, drop me a line 🙂
This is the fourth edition of The Kramora Times, you favorite and more reliable source for all Ananias-related information. You can now subscribe to receive this newsletter in your email too!
Ananias Version 1.76 released!
It’s been over two months since the last release of Ananias. I had set myself the goal of the next version going straight into Steam.
Alas, I have to change plans again… I jumped into some projects and I don’t feel I can handle the workload of the release and all that is related to it while responding to these other projects responsibly.
However, I have to say this is very close to the scope I have planned for Steam. May be next version will finally be it? I have been saying this for months now.
Conduct Tracking
There were some important internal changes, specially in the packaging system (Using Cordova and Crosswalk without passing thru cocoon.io for much quicker development and release). They are likely to break things so I hope players are patient.
I also added an in-game manual (also accessible from the website, here). Bits of it are generated directly from the game source code, in order to keep it up to date! The wiki was also updated, with data generated from the game.
Sample of the manual
Another big thing is that you can now also generate tombstones for your characters and share them with your friends. See this one for example!
So, with all the work that went into this one, and given that I won’t be able to work back on the game for the following one or two months, I’m releasing this version. Check out the list of exciting changes below!!
Standard Edition
Any Device via the Official web version, just point your browser there and you’ll always get the latest version.
Add Zinc potion to recover from paralysis, blind, confusion and hallucination
Grant upgrade bonuses if 100% level explored
Make deep level enemies stronger
Tweaks on fleeing AI
Add Sir Glenn NPC, guaranteed crossbow at level 7
Social
Generate tombstone page with player info on death
Allow sharing tombstone page on twitter and facebook
User Experience
Add in-game manual you can check anytime, including bestiary
Change UX for mixing reagents
Play random dungeon music instead of tied to level
Remove Dungeon Crawl Stone Soup title
Make better use of space in dialogs in small screens
Prevent unselecting pet when cycling thru shepherd
Added extended title theme
Add option to Exit Game on desktop
Show stats when dying or winning
Show level summary on completion
Mouse movement in desktop with invisible arrows
Bugfixes
Prevent issue when throwing potions only 1 shot spent
Prevent keyboard actions when modal dialog present
Other
Generate manual and wiki text automatically
Added build scripts for web, android and desktop, including different level of audio quality.
Steam Version
Pending things for the release:
Detailed GFX for weapons and armor. May be important, not sure if I’ll be able to get an artist for it.
Adding more plot and may be even random stories. After talking with Thomas Biskup on the Roguelike celebration, I have reconsidered this and I think I should invest a bit on it.
Stealth mechanics, make it so that monsters not always notice players (add fov) may be even add fov for players?
Berserk tactics, extreme attack bonus when naked for some classes.
Also pending for this is the new trailer, preparing promotional material and setting up a Thunderclap campaign (probably). All these will require money so I hope I can get support for it from the hardcore Ananias believers!
Roguelike Celebration 2016 – A missed chance?
As described on a previous post, I went to this unique event on San Francisco last month. It was a great chance to meet roguelike developers and players.
Sadly, I missed this chance to promote the game in what was possibly the best targeted event in the world for Ananias’ potential players. I should have brought some info about it or pitched the game more… however time was pretty short, and I’m glad I got to share time with the amazing devs there at least.
Dumeril Sage statues: production halted
There have been some issues with the production of the Dumeril Sage statues… the process is just too hard for me to handle, I don’t have a partner who can take of all of it to deliver finished products and at a good pace. May be it’s not time yet for this. At least I have managed to deliver some of the statues to people I really esteem and I hope they are enjoying them.
The latest batch of statues, no flame, no staff, sometime they’ll be complete
An alternative I’m considering is having smaller statues and using 3d printing instead. It’s a bit expensive but may be much easier to handle.
For the t-shirts I am thinking on having an alternate design that can be printed on higher quality shirts (more durable). Thanks to all who already pre-ordered for your patience, I’m hoping to deliver a good quality product.
CatCafe is an arcade game where you have to fed the cats in the bar while avoiding other cats who jump at you. If you take too long to deliver the food, or if a cat makes you drop it, you will lose one heart.
Each stage represents one day of work, and in order to complete it you have to survive until 5:00PM. Stages vary on their obstacles layout and the amount of cats you have to deal with at the same time. There are two difficulty levels, survive for seven days and you’ll win.
Learning more about real time / arcade games and physics systems.
I missed last year’s “A Game By Its Cover” jam and I really wanted to participate because I love Famicases and I have the power to develop games.
I wanted to make a fun, light game that anyone can play without instructions but is still challenging.
Everybody loves cats
Design
For this game I followed a process I rarely do: I had no idea how the game would play when I started developing! All I had was a couple of very rough ideas for gameplay, first off the famicase description:
Cat Cafe Dessert Panic! Is an action-adventure game where you, as Pera, are the waitress at a cafe for cats. The cats are excited to eat, and they’ll do anything to get in your way. Do not drop the desserts or it’s game over!
And then, some ideas I got directly from the artist who drew the famicase:
“[…] like frogger except you’re trying to avoid cats and not cars, and if they hit you you lose your food […] instead of top-down view, it’s side scrolling (I guess jumping over cats).”
So I just started building a stage for it… an area where the waitress could move around, and cats would follow her and jump over her. It was only after playing around with it a bit, to get a feeling of what would be fun, that an actual “game” starting shaping up.
All I knew is I wanted to make a simple game that could be controlled with only the directional keys. In that sense, I guess the gameplay was defined in an “organic” way, without giving it too much thought from the upstart.
One of the things that got me thinking tho was whether having obstacles on the field was easier or harder. It was easier because it meant less cats would be chasing you around, but harder because you could get stuck on the obstacles and be savaged by the cats.
I guess I could have gone the statistics way and just play a lot of games (automatically?) and check the scores and lost hearts to draw a conclusion. In the end I opted to make the number of obstacles increase with the levels, but having a level amidst each one where there’s a single obstacle. I made this to encourage approaching the solution to each level differently, as you need different tactics to survive on each (I think that, in the end, both are equally hard).
Code
Development of the game span from July 21 to July 31. I started by replicating the structure of other game I had made recently (Lorenzo), since I knew they were going to be similar.
The game is made on Javascript and uses phaser.io with its arcade physics subsystem (making a lot more of use of it compared to Lorenzo, though still not FULL usage). Single characters like Pera, Shoey and Lali are represented as objects, while the rest of character types (Cats) are represented as classes. There is also a single object representing the game where all initialization is done, and it also acts as the main game controller.
Being a game developed for a jam, the code is a bit messy as it just kept growing as I was defining the gameplay and refining the user experience, you can find it at github here.
Art
CatCafe was created for the “A Game By Its Cover” Game Jam, where developers were asked to pick a fictional famicase (From famiCase16) and create a game around it. This influenced the choice for aesthetics, to try to match the famicom/NES style (without being strict at all about it, specially regarding sprite color count limitations). The comic style depicted on the famicase also influenced the style for the in game characters.
I contacted Diana Pacheco (okuroy), asking if she would be interested on working on the project… we had previously worked together in the development of Failure Pixal (back on 2008, the art she made for that project was never released sadly) and kept in touch since then. She made an awesome tileset with very fluid animations for both the cats and Pera, as well as an amazing pixel art rendition of the original famicase cover.
Meanwhile, I worked on the stage itself. It was a single stage, I based the design in this screen from Déjà Vu on the NES.
I expanded it a bit to get the initial stage
I also read a bit on the Catnip Circle webcomic (read it!), to get a glimpse of the universe where Pera lives, it eventually evolved to include some of its elements, as well as to accommodate to the border-less sprites that Diana was making.
Finally Diana complemented the stage with her pixelart skills, putting some fancy stuff around to make it look better.
Music and Sounds
Initially, I planned to do the music and sounds with a guy from the jam forums, unfortunately he wasn’t able to participate…
Then Ashton came to the rescue! I had already worked with him in ArcherFire and Ananias, and he really liked how the game was shaping up. He created a couple of great tunes in a very short time, as well as lots of very fitting SFX.
TV-like appearance and responsiveness
In addition to constraining to a low resolution stage (256×240), additional processing is done in order to make the game appear more NES-like, this includes stretching the display so that it fits a 4:3 ratio (similar to a standard TV set) as well as rendering some scanlines over it.
In order to do this, first thing I do is detecting if the current window dimensions allow for stretching by increasing the width of it by 33% of the height. If not I just resort to phaser’s SHOW_ALL scaling option (and I hide the TV/Scanlines overlay, thus making it look like a standard phaser game).
If it fits, I do a manual USER_SCALE, and relocate the TV overlay so it matches with the autopositioning and scaling of the canvas on viewport size change.
Additional filters like simulating the round “bulge” of a fat CRT TV were considered and even implemented but ultimately dismissed (at least for an initial version) because they would have required considerable additional effort. They were based on an article by Zachstronaut which pointed out the idea to use webgl shaders via glfx.js to postprocess canvas frames on the fly. The main issue I had was that since the game canvas was very low resultion (256×240), and it was scaled by means of CSS instead of redrawing over a big canvas, the shader that did the bulge effect caused a lot of aliasing on the pixel art… I think it would look much better if the effect was applied to a bigger canvas with most pixel data, but I didn’t have enough time to check.
Mobile
I used Photonstorm Virtual Joystick in order to allow input on mobile devices. At first I used the DPad implementation which worked but had the great issue of not allowing diagonal movement (which is critical to the game), so then I changed it to use one of the “stick” implementations, which worked pretty great.
Conclusion
I made a fun, challenging game and got to work with Okuroy and Ashton around a theme that people loves.
Pera and Shoey from Gatto Grosso – Image by Cassie Freire
I have been working in this project for about one month now since the latest release of Ananias. The idea came to my mind some months ago and it took a while for it to evolve into what it is now: I wanted to create a program that would emulate an environment for people to explore in real life.
The initial plans
My initial design was for a round space with 5 interconnected rooms, the program would generate a room layout telling the party what rooms they could move to, and it would be seamless (no levels). I also thought a lot on the best way to represent it, even wondering if I should use some sort of devices on each room for player input, and some kind of lights to represent the room exits.
The idea continued evolving, in the end I went for something much more practical: a bigger open space where the party could move in the four cardinal directions from room to room, and there would be a mobile app handled by a Game Master, which would guide the group through the dungeon.
Having planned my participation on the Hearth of Britannia, Lifeblood of the Hearth 3 event, I set to finish the program up to an useable state so that it could be used there. I created an open source repo for it, and pushed forward to create an initial version so I could do a live test with some friends, which went pretty nice and gave me lots of feedback to make it better.
The first group of Adventurers to ever use EXODUS
I continued working on it, flew to Austin for the event and ran 4 games there. Happily, the players liked it quite a bit and even on-site I continued doing some tweaks. In between flights and some time after coming back home, I polished the user experience so anyone could use it.
During the event, I was able to test both full party sessions and also one on one (2 players), even did a test without Game Master (i.e. the Game Master acting as Dungeon Dweller). It worked pretty nice!
Some tweaks before the second session, working from the Creekside Manor on Castleton
And here it is… EXODUS is ready to be used by other people!
Get some soft plastic sticks that can work as swords (or better yet, get some LARP weapons)
Get at least someone else to play with (ideally 4 or more people), and meet in an open place.
Create a new game in EXODUS, then use the program to move from room to room; have someone in the adventurers party map the dungeon (in real paper) so you don’t get lost.
When moving around, lots of things can happen:
You will find monsters to fight with, each one with different skills.
You will fall into traps, some of which you can try to evade.
You will find healing items, dangerous treasure chests and mysterious fountains.
Some of the players act as dungeon dwellers, they represent the monsters in combat.
At your disposal there’s also a lot of magic spells you can use to either attack enemies or support your party.
There’s a manual with more info if you want to take a look…
Would you like to set up a game in your local community? Contact me if you have any questions about it, I’d be happy to answer!
The current build and deploy process for Ananias takes a lot of time and requires lots of focus and bandwidth. Everything is done manually (and is thus prone to errors). Most of times I just can’t afford to release for all platforms, and I forget to announce thru all channels.
The cocoon.io parts are a bit cumbersome since they don’t have a CLI and it requires some back and forth, while also adding a dependency to an online service (for how long is it going to work?) I’m going to experiment with some native crosswalk builds to see if that step can be saved.
But probably what takes more time is the manual process to be done for each different storefront via its own web interface. Each one requires different info, and all uploads have to be started and monitored manually. It’s pretty uncommon for a store to supply a command line tool.
May be I should automatize parts of this? Someday I may do that, in any case it’d simplify packaging but wouldn’t make distribution any easier.
This is the current process executed for each new release of Ananias:
Mark the new version in the source code (client and server)
Generate a new JS bundle using browserify
Upload new build to web (ananiasgame.com/play) (About 15MB) (Only Standard edition)
Deploy new server version and restart (About 1MB) (including executing migration database scripts)
Use nwbuild to generate the executable packages for Windows, Mac and Linux
Rename the directories and zip them
Upload to itch.io via web interface (About 200MB )
Zip web directory
Update config on cocoon.io for next version
Upload web directory to cocoon.io (About 15MB)
Hit the build button on cocoon.io, wait for build to finish
Download APK packages from cocoon.io (About 150 MB)
Unzip package, copy release APKs (one per architecture, x86+arm7) to APK directory
Run script to sign and align APKs
Sign in to google play developers console
Upload both APK (About 100 MB)
Build change log from git commit messages
Summarize change log for Google Play
Upload both APKs to Amazon via web interface (About 100MB)
Upload to indiegamestand via web interface (About 200MB)
Upload to gamejolt via web interface (About 200MB) (Only Standard Edition)
Upload to IndieDB via web interface (About 200MB) (Only Standard Edition)
Set cocoon.io for iOS builds
Hit the build button, wait for build to finish
Download xcarchive (About 50MB)
Open xcarchive in xcode organizer
Submit to App Store
Wait for processing
Go to iTunes Connect
Go to Testflight / External Testing
Select new build to test
Wait for beta review
Go back to Testflight / External Testing
Set the new build as active.
The process should be executed twice, once for the Standard Edition and then again for the Fellowship edition.
THIS IS A LOT OF WORK. WHY CAN’T IT BE SIMPLER? This process takes out HOURS (Not exaggerating) of valuable and scarce development time for an Indie dev.
Why can’t I just simply update a single web endpoint, and have all the clients deal with the updating? they have to deal with it anyways, they just have to do it with their own, different store.
Also, the game is already multiplatform, if your platform has an HTML5 browser, like all modern platforms, you can play the game (Yes, you can even play the game on a PS4), then why go through all this?
I understand the advantages of having a downloaded app… people wants to feel they own the app, and they want to play their games while offline or in poor network conditions.
It would be awesome if the app could automatically check and download the updated scripts and required assets. This is not a new idea… some people has already tried but there are some obstacles:
Both Play Store and the AppStore are not very clear about their support of this model. You may be risking your app being taken down for not complying with the terms of service. They are also not MEANT to work like this, so you are always fighting against their nature.
For in-dev games, the player wouldn’t be notified a new version exists unless he runs the game or you implement some kind of push notifications.
The system has to work perfectly, if it doesn’t then your players will be stuck with an old version, or will be unable to play offline, or will end up with a malfunctioning app.
Another thing to consider is that this would prevent players from updating the web runtime in which the game runs, although I guess that may be fixed via a normal update.
If the player uninstalls the app or erases its data cache, they will have to redownload all assets.
There is a cordova plugin (cordova-app-loader) which adds support for “hot updates”. It seems to work but has some issues (based on what people reports). I don’t know of any similar tool for node-webkit / NW.js, I guess it’d have to be done manually.