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 🙂
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!
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
Allow recovering password via email
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:
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
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!
Any Device via the Official web version, just point your browser there and you’ll always get the latest version.
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
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.
BUT, it works… I managed to have something to experiment with!
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:
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.
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.
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 🙂 )
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.
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)
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.
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.
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.
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.
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.
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.
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!!
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
Generate tombstone page with player info on death
Allow sharing tombstone page on twitter and facebook
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
Prevent issue when throwing potions only 1 shot spent
Prevent keyboard actions when modal dialog present
Generate manual and wiki text automatically
Added build scripts for web, android and desktop, including different level of audio quality.
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.
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
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).
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.
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.
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.
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.
I made a fun, challenging game and got to work with Okuroy and Ashton around a theme that people loves.