ARThings v2.3 Released!

Download v2.3 now!

It’s been kind of a long development cycle but we decided to launch this release with some features which include the following:

  1. Update to ARCore 1.20
  2. Added support for OpenGL ES 3.0
  3. Added Push Notifications
  4. New monster: Added the Cacodemon!
  5. Added ability to toggle God Mode in the Cheats section under the Settings menu
  6. Made some changes to spawn pickup items closer to player to lower the difficulty
  7. Capped the rendering framerate to resolve some FPS inconsistencies
  8. HUD change: Added screen flash effect when picking up items
  9. Fixed some crashes causing app instability

Here’s a preview of an early Alpha version of v2.3 that shows the Cacodemon in action:

Alpha of v2.3 showing the Cacodemon and God Mode. Note that in this alpha Depth API Depth Occlusion has been disabled and the screen flash effect when picking up items is still under development.

We haven’t made a blog post on other releases after v2.0 (5 months ago!) so here’s what we’ve incorporated since then:

v2.2 – v2.2.3

  1. Fixed some issues with OpenGL alpha blending
  2. Added Firebase Crashlytics to debug an OpenGL Shader compilation issue in some affected devices

v2.1

  1. Updated to ARCore 1.19
  2. Enabled Depth API Depth Occlusion for supported devices
  3. Made some rendering frame rate tweaks
  4. Made a change to spawn monsters at least 2 meters away from the player

ARThings v2.0 Released!

After a long period of Development Hell, we’re proud to release ARThings v2.0.

Download v2.0 now!

We added support for floating monsters (Lost Souls, Cacodemons, etc.) however v2.0 only spawns Lost Souls. We also added the Chainsaw due to popular demand, so you can saw “Pinkies” to the tune of I Sawed Demons.

Adding the Chainsaw required some changes to the sound effects implementation, so we refactored this code quite a bit. The Vanilla Doom code handles the playing and stopping of sounds, and the unique sound effects of the Chainsaw make use of this, particularly the switching between the idle, attack and hit frames of the Chainsaw. So we had to do some work in the sound code to replicate this same behavior in ARThings. We also updated ARCore to v1.17 in this version.

Anyways below are 2 videos that showcase these features:

ARThings v1.9 Released… Finally!

Download v1.9 now!

We recently released v1.9 of ARThings, which included a couple of new features (addition of a new monster and weapon) and some under-the-hood improvements.

We also introduced 3 new achievements and some game difficulty balancing. We discovered some major bugs (pre v1.9) with monster spawning that made the game incredibly difficult – monsters spawn too frequently, and these bugs are fixed in v1.9.

Below is a clip of a pre-alpha version of v1.9 showcasing a rough implementation of the Plasma Gun:

Plasma Gun and Zombieman Gibbing!

Below are the full release notes, we hope you enjoy!

  1. Added spawning of Baron of Hells
  2. Added spawning of Plasma Gun when killing Baron of Hells
  3. Reduced the frequency of Chaingunners spawning
  4. Added gib animation for Zombies, Imps and Shotgun Guys
  5. Added some logic to make missiles explode when too far
  6. Fixed thrust and friction implementation that was not working before
  7. Added 3 new achievements – Picking up Plasma Gun, Killing Baron of Hell (Boss) and Gibbing a monster
  8. Added spawning of Blue Armor
  9. Added spawning of clips, 4 shotgun shells and cells
  10. Fixed bug of monsters spawning when they’re not supposed to

ARThings v1.8 Released!

Download v1.8 now!

This is a light release and the last one before the start of 2020. We introduced 2 Leaderboards:

  • Most kills in a single round.
  • Total kills for all rounds.

We also display Top kills in a single round in the HUD (displayed in green color).

I took a video of v1.8 today, which includes footage of unlocking some achievements – including unlocking and picking up the Super Shotgun before I was mowed down by demons:

Merry Christmas!

Configuring Google Play Game Services for Android Debug and Release Apps

While developing an Android app with Google Play Game Services integration a developer needs the following for testing Game Services features:

1. Ability to test in a Android debug app (signed with debug certificate) with unpublished achievements using a tester account.

2. Ability to test in a Android release app (signed with release certification), fully signed by Google Play with a published Game Services configuration.

Google provides some documentation on how to setup Game Services for Android. This documentation clearly outlines the configuration process:

  1. Setting Up Google Play Game Services
  2. Getting Started with Play Game Services for Android

However, despite these guides some developers might face some stumbling blocks along the way. After dealing with this myself, I’ve outlined below some general guidelines on how accomplish the configuration for both Android debug and release apps published to Google Play.

Testing in Debug Mode

To test in debug mode, you need to create a Linked App inside the Game Services configuration that corresponds to your Android debug app. The Client ID used by this Linked App needs to use the SHA1 fingerprint of the Android debug keystore (debug.keystore). Typically, for Windows users this keystore is located in the following path:

C:\Users\{your Windows username}\.android\debug.keystore

To find the fingerprint of this keystore all you need to do is run the following in the command prompt:

keytool -list -v -keystore "C:\Users\{your Windows username}\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

This command will spit out the SHA1 fingerprint of the certificate:

Certificate chain length: 1

Certificate[1]:

Owner: C=US, O=Android, CN=Android Debug

Issuer: C=US, O=Android, CN=Android Debug

Serial number: 1

Valid from: Thu Jul 07 15:17:58 EDT 2016 until: Sat Jun 30 15:17:58 EDT 2046

Certificate fingerprints:

         SHA1: [SHA1 fingerprint]

         SHA256: [SHA256 fingerprint]

Signature algorithm name: SHA1withRSA

Subject Public Key Algorithm: 1024-bit RSA key

Version: 1

You can then copy paste the SHA1 fingerprint into the SHA1 fingerprint of the Client ID needed by Game Services and you should be good to go.

If for some reason you can’t find the keystore there’s another way to find out the SHA1 fingerprint based on the Android app’s generated apk. The Android SDK Build Tools come with a nice little tool called “apksigner” that can be accessed through the command line via the following path

C:\Users\{your Windows username}\AppData\Local\Android\sdk\build-tools\{version}

The “apksigner” tool takes the path of an apk and returns information about the certificate that the apk was signed with. Below is an example of the command line:

apksigner verify --print-certs C:\{Your apk path}\app-debug.apk

This will spit out the SHA256, SHA1 and MD5 fingerprints of the keystore the apk was signed with:

Signer #1 certificate DN: C=US, O=Android, CN=Android Debug

Signer #1 certificate SHA-256 digest: [SHA-256 fingerprint]

Signer #1 certificate SHA-1 digest: [SHA-1 fingerprint]

Signer #1 certificate MD5 digest: [MD5 fingerprint]

Testing in Release Mode

The above instructions also apply for Release Mode, but with one small change: You need to use the SHA1 fingerprint of the certificate that Google Play uses to sign the release apk with in Google Play (called the “App signing certificate”, NOT the certificate you use to bundle your apk in release mode (called the “Upload Certificate”) from the “Build -> Generate Signed Bundle / APK” option in Android Studio.

Getting the SHA1 fingerprint of the App signing certificate is very simple. Go to Google Play Console, click on your app and navigate to the “Release Management -> App signing” section. In the “App signing certificate” section (screenshot below), use the SHA1 certificate fingerprint (masked in the screenshot below) for your release app Client ID.

The important thing here is to use SHA-1 fingerprint of the App signing certificate, NOT the Upload certificate.

In a nutshell, here’s the overall approach:

  1. Testing Game Services for debug Android: Create a Linked App using using a Client ID using the SHA1 fingerprint of Android’s default debug keystore (debug.keystore).
  2. Testing Game Services for release Android app in the Play Store: Create a Linked App using a Client ID using the SHA1 fingerprint of the “App signing certificate”.

ARThings v1.7 released!

Download v1.7 here!

After a small period of development hell, we finally released ARThings v1.6 last Saturday. This release is a big step into making ARThings more of a game experience versus just a mere technical demo. We’ve still got a long way to go, but we’re ok with taking baby steps and experimenting with new features.

The main addition in v1.6 is the integration of Google Play Game Services, supporting the following 3 achievements:

  1. Killing 30 monsters in a row without dying
  2. Picking up the Chaingun
  3. Picking up the Super Shotgun

Below are the full v1.6 release notes:

1. ARCore 1.13 update
2. Google Play Game Services integration with 3 achievements 
3. AR Session filter -> limited camera capture rate to 30fps and prevented the use of depth sensor
4. Added the Super Shotgun (awarded as a gift but won't give you spoilers on how to get it!)
2. HUD changes

Version 1.6 ended up having a bug with Google Sign In, so we made an emergency v1.7 release with the following changes:

1. ARCore 1.14 update
2. Google Play Game Services update to 19.0.0
3. Disabled AR Session filtering -> camera capture rate and use of depth sensor is not limited anymore
4. Settings menu -> Added Player Id to Signed In message
5. Settings menu -> Added icon to achievement button
6. Settings menu -> Positioned Sign Out button at the bottom
7. Updated Sign In error dialogs to display more informational messages
8. Sign out -> Updated sign out handling code
9. Game Services -> Released achievements buffer to fix memory leak
10. Fixed memory leaks in Game Services static member variables

Below is a short video of v1.7 – it doesn’t showcase all the features of this release (like the Super Shotgun) since I was killed repeatedly before I was able to unlock it but I’ll post a video of the Super Shotgun soon!

Check out the Google Play Game Services Sign In pop-up. Also, you can hear me huffing & puffing (I’m out of shape) and cursing in Spanish multiple times as I fail to unlock the “30 kills in a row” achievement.

FilmScout Released!

We are happy to announce the official release of FilmScout for iOS and Android.

FilmScout lets you keep track of your favorite filmmaker’s projects. You can search for information on your favorite movies and TV shows, check the filmmaking team, explore their works, and follow them to keep track of their upcoming projects.

Right now, you can track filmmakers in the following roles:

– Director
– Screenwriter/Writer
– Composer
– Cinematographer/Director of Photography
– Editor

Feel free to write to us with any feedback you have!

Handling AWS SNS notifications in Ruby on Rails

Today I’m going to share with you how to handle AWS SNS notifications in a Ruby on Rails app. An SNS topic publishes every message it receives to every subscriber, and our app is subscribed to receive these messages via HTTP.

SNS messages come in 2 types:

  • SubscriptionConfirmation: Is sent when a subscription is created to confirm that the endpoint is up an running. The confirm_subscription method handles this.
  • Notification: Once the subscription is confirmed, all the following messages will be of this type. These are the messages that are sent to a topic and then fanned out to every subscriber out there.

The verify_request_authenticity method is called first to verify the authenticity of the SNS message. It checks that the message is not empty and verifies its origin using the MessageVerifier class. Finally, the create method parses the message content accordingly.

I hope this can be of great help to everyone out there. Feel free to comment if you have any questions or feedback.

# frozen_string_literal: true

# Notifications coming from SNS
class NotificationsController < ActionController::Base
  before_action :verify_request_authenticity

  # @url /notifications
  #
  # @action POST
  #
  # Broadcasts a SNS message to an ActionCable channel
  #
  #
  def create
    case message_body['Type']
    when 'SubscriptionConfirmation'
      confirm_subscription ? (head :ok) : (head :bad_request)
    when 'Notification'
      message = JSON.parse(message_body['Message'])
      BroadcastExecutionNotificationJob.perform_later(message)
      head :ok
    end
  end

  private

  def verify_request_authenticity
    head :unauthorized if raw_post.blank? || !message_verifier.authentic?(raw_post)
  end

  def raw_post
    @raw_post ||= request.raw_post
  end

  def message_body
    @message_body ||= JSON.parse(raw_post)
  end

  def message_verifier
    @message_verifier ||= Aws::SNS::MessageVerifier.new
  end

  def confirm_subscription
    AWS_SNS_CLIENT.confirm_subscription(
      topic_arn: message_body['TopicArn'],
      token: message_body['Token']
    )
    true
  rescue Aws::SNS::Errors::ServiceError => e
    Rails.logger.info(e.message)
    false
  end
end

The Breach (Doom 2 WAD) Released!

Helldorado Team’s Doom WAD portfolio hasn’t been particularly illustrious. In fact until this year its been nonexistent. Can we recall the overly hyped Confessions from the Flesh – announced back in May of 2006 but cancelled after only 2 days of development?

Let’s recount Helldorado Team’s various attempt at WAD building for a moment:

  • Exhumed – began in 2012 as a single map for ZDoom. Much more progress was made compared to Confessions but after 3 weeks the team lost interest. Development resumed in December 2018 but yet again scope creep derailed the project when the team tried to incorporate countless features to showcase GZDoom advanced capabilities. The project was shelved by end of December.
  • Septic Shock – After Exhumed, the development team decided to keep it simple. The goal was to build a single Boom-compatible map for Doom 2 and avoid the development pitfall every Doom mapping newcomer faces – getting carried away with ZDoom features. Development began in January 1st 2019 but the project was put on hold in mid February due to other priorities.

Despite the aforementioned facepalms, we’re proud to celebrate the breaking of this vicious cycle. Today we release Helldorado Team’s first Doom WAD – The Breach. It’s a Boom-compatible 2-map WAD for Doom 2. You can download the WAD by downloading the breach.rar file from the original Doomworld thread:

Doomworld: The Breach – 2 Techbase maps

How to play? If you are newcomer to Doom and its source ports, you can download a Doom source port such as PrBoom+ or GZDoom and drag and drop breach.wad over to the source port executable. The WAD requires Doom 2 so make sure Doom2.wad is in the same folder as the source port executable.

Screenshots below:

MAP01: The Pass
MAP02: Perimeter

ARThings v1.4 released!

It’s been a little bit over a month but finally v1.4 is out. We already covered what’s new on our previous sneak peek post, but below is a laundry list of some of the major changes:

  • Added the Imp monster
  • Added player damage and player death, plus player’s ability to retry after dying
  • Random spawning of health and armor items
  • Some changes to the HUD

Check out some of the action below, any feedback is welcome for v1.5!

Download v1.4 from Google Play now!