Apple Spider (Casual arcade action)

UPDATE: GAME IS NOW RELEASED ON GOOGLE PLAY!
NOW ON AMAZON APPSTORE FOR FIRE TABLETS!

Hi everyone! Apple Spider is my first release-worthy project in Defold, and it’s been a great experience so far.

The general idea: Spiders are taking over your apple orchard, so you need to fight them off. Throw apples to smash them and make Apple Spider (like apple cider… I know it’s a terrible pun, but I’m a dad :crazy_face:). Spiders appear on-screen in random spots. The speed of generation increases as you level-up. You have a few styles of attack (hand, package, and gatling gun), and some special items to help you (rain and bug spray).

I suppose it’s a casual arcade game? This evolved from me joking around with a clicker game concept, and gradually adding more complexity until it seemed fun.

I’ve spent many hours fine tuning the difficulty progression, and designing the scoring system to encourage some strategy. For example, there are bonuses if you do not waste any ammo.

Also trying quite hard to make the UI & overall experience feel semi-professional as well.

I’m likely going to target Android and Amazon first, then maybe try out Facebook Instant Games.

Gameplay clip:

What I’m liking about Defold (compared to LibGDX):

  • Development feels so much faster! The speed at which I can experiment feels so much higher. I attribute a lot of this to the message passing system and choice of a dynamic scripting language.
  • Integrated editor and tooling. Atlases, fonts, particle fx, are all way quicker to create & update.
  • Effortless performance.
  • Automatic asset loading.

Challenges so far with Defold:

  • Lua has taken some getting used to. I’m so used to C# and JS in my day job.
  • I’m starting to wish Amazon was considered a different native platform. I have to use a different advertising SDK for Amazon release, since many ad networks aren’t fully supported on Fire devices. I had success using the Enhance extension, and configuring it to use Amazon & Vungle ad networks. On the Play Store I was likely just going to use Unity ads to keep the bundle smaller. Anyone know of a simple way to handle this, besides maintaining an Amazon-specific git branch?
16 Likes

Looking great and fun! The only thing that comes to my mind now is that the background is not in the art style of the rest and if you don’t want to change that, it could be good to at least blur it a little bit or tint it, so the rest of the game is in contrast :wink:

5 Likes

I appreciate the feedback! :grinning:

The background is an interesting topic, actually. I apologize if I get long-winded here, but maybe someone wants to know how the sausage is made.

The first prototype that led to this game was a simple clicker, where you threw toilet paper at a photo of a crowd. I really like mixed media art, and contrasting cartoon graphics to a real photo felt right to me. Eventually, I added viruses that you threw the TP at, as if the hoarders thought they could stop the virus if they bought enough toilet paper! Of course that idea was banned by Google & Amazon for violating their “sensitive events” policies. Tech giants do not have a sense of humor…

Screenshot from TP Madness:

After those policy rejections, I pivoted the subject matter to squashing spiders since it might appeal to a larger audience. After few adult beverages with my wife, we landed on “Apple Spider”, and I loved it :laughing:

Keeping the spirit of the prototype’s art direction, I found a great apple orchard photo on Unsplash, and messed with the saturation & levels in GIMP to make it stand out a bit less.

One upside is that the photo background makes it harder to see some of the smaller spiders, so it adds a tiny bit of challenge. I worry that blurring it will change that, but I will definitely give it a try.

Long-term, it might be neat to replace that photo with more of a live background, with rustling leaves and other details. Maybe some day I’ll have the time and energy!

2 Likes

Nice work! To continue on the background topic, my concern would be that while visibility might be an added challenge, it risks being a challenge that doesn’t feel good or fair. I would liken it to intentionally adding a delay between clicking the mouse and the intended consequence of a click - it would make it harder to aim (or whatever the action is), but I think most would describe it as “poor usability” that just feels bad/wrong, rather than see it as a genuine design choice.

I think your idea about adding movement to the background (e.g. rustling leaves, like you say), would have the effect of short-circuiting our in-built movement detection system, and in my opinion would achieve your goal of having the spiders be difficult to detect in a way that feels legitimate to players.

3 Likes

Great points on usability (and in effect, accessibility). I really appreciate all of this advice.

I’ll likely start prototyping some background changes in the coming days. In addition to the animation, it could be fun to add layers as well.

I was able to spend a few hours on the game today, and prototype a new background/play area design.
Most of the time was spent drawing somes leaves in Inkscape. I enjoy art, but it sure is time consuming!

First I simply tried blurring the background and adjusting the “curves” to make the game objects stand out more. I’m not a big fan of how it turned out on its own, since it makes it too easy to see the spiders.

With blurred background:

The next iteration was to randomly scatter some leaves & apples around the edges of the screen. The z-index is also varied, so roughly 10-20% of the leaves with cover a spider if it crawls underneath. I’ll need to develop a more advanced algorithm to place the foliage, but I’m liking where this is going!

Prototype with leaves & apples around the edges:

1 Like

Not sure if this is any better, but I’ve made some adjustments to the foliage placement algorithm. It’s very likely that I will end up spending way too much time on this. :laughing:

On init, some layers of leaves & apples are generated. Not sure if it’s super obvious in the screenshot, but the placements follow a curve along the edges, to frame the scene.

The top layer of leaves have a z-index greater than the spiders. This gives them small areas to hide as they move around.

Update: Constrained the leaf angles on top/bottom/left/right.

3 Likes

Hey @SkaterDad did you ever release this game somewhere?

@britzl Thanks for asking.

I think the game itself is now ready. I haven’t had as much time to work on it lately, but I have made a few tweaks and polished things here & there.

I see the new Defold beta was just released, so I’ll do another quick round of testing with the new display cutout setting. Hopefully I can release this week on Google Play, and then Amazon the following week.

Long-term, I do want the game to extend into the cutout area, but need to get the notch height to move my UI down. I made a native extension that worked great in isolation, and great on toy projects with other extensions, but then caused a runtime crash on my full game. (Cryptic error was “Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR)”. Will continue investigating and learning about JNI and C++. I was pretty pleased I was able to figure out how to return multiple values!

2 Likes

I think the game is nearly ready for public release!

Many thanks to the Defold team for their quick fixes which made it possible.

In the past weeks, I’ve mostly been polishing, squashing bugs, and getting feedback from my friends.

I also changed the “Rewarded Video Ad”, so that you can skip to Level 10 with nearly the maximum possible points. Previously, I had given more special items (the rain and bug spray seen in the screenshots) to people for watching the ad, but this seemed unfair to everyone else. Skipping to Level 10 seemed like a more desirable reward to me, since those earlier levels are slower paced. If you want a high score, and want it fast, you get to jump right into the action now!

One subtle bug that I fixed tonight: I was using rendercam.shake(5,10), and rendercam.stop_shaking() to enhance the experience when using the gatling gun. One day I noticed that the gun was no longer centered on the screen (comparing to the UI buttons). I didn’t have any code which moved the gun’s “position.x”, so this was very confusing.

Eventually, I realized that when I stopped the camera shake before completion, the camera was no longer in it’s initial position. I can see why it’s coded that way, but I certainly wasn’t expecting this. Added the following line of code after stopping the shake, and all is well now.

rendercam.stop_shaking()
go.set_position(vmath.vector3(0,0,0), "camera")
2 Likes

In typical indie game fashion, I’ve basically sat on my hands for 2 weeks… Releasing to the public is something I’m kind of dreading in an odd way. I had ambitions of making a trailer, and nicer marketing graphics for the stores, but I just don’t have the time/energy/motivation for that stuff anymore.

Tonight, I decided to just go for it. :grimacing:
apple_spider_releasing

Update: This might be the quickest review period Google has given me. The production release is already approved and rolled out!

Should I make a post in the Showcase forum? Don’t really want to spam my game everywhere, but I’ll post there if the Defold team would prefer.

6 Likes

I think it’s nice to be able to follow along while a game is developed and also post release from a single forum thread like this. Keep posting here if you want to!

2 Likes

Since release, my wife has been playing the game quite a lot. I asked her how she likes the gameplay, and she said something like: “I don’t know, I just want to beat your high score!”. :rofl:

She did manage to beat my score, and also reach a higher level!

In marketing news, I still didn’t have any time or desire to make promotional materials, but decided to Tweet about it anyway. I’d really appreciate any follows/retweets/hearts!

I think my next move will be porting this to Amazon devices. From my past experiments, this will mean replacing the Unity ads extension with Enhance, which allows me to use Vungle and Amazon ad networks. The Fire devices don’t have Google Play services, so compatibility with most ad networks is non-existent.

Last time I was able to manage this by a git branch, but I may just completely copy the project and try to sync up any gameplay changes.

Has anyone seen if Amazon has an actively maintained service for leaderboards & achievements? GameCircle is gone.

2 Likes

I finally started working on porting to Amazon Appstore!

My previous post explains the extension differences, and I did end up creating a duplicate project.

My experience with Enhance has been pleasant so far. That service is really a clever idea. Adding both Amazon & Vungle add a lot of weight to the project, but it should be okay.

Right now I’m mostly troubleshooting.

  • I experienced some crashes when switching to the Amazon IAP provider (made a PR to the Defold IAP extension to fix).
  • The Enhance Amazon Ads integration is logging errors about HTTP requests instead of HTTPS, so I’ve sent Enhance support a message about it. Seems to be preventing Amazon ads from working.
  • Vungle is logging messages that it can’t fill my ad placements, so I’m unable to test if the rewarded ad & interstitials are even configured correctly. The app is set up in “test mode” on the Vungle site, so no idea why it’s failing right now… This worked really well on the last game I had experimented with.

I will likely also package up a stripped-down “Premium” version with no ads or IAP. Doubt I’ll bother releasing that to Google Play, since I know it will do better on Amazon.

3 Likes

Well… mysterious errors really bother me, so I couldn’t leave this alone. I’m sure I could work with Vungle or Enhance support to solve this, but… I’m not that kind of programmer.

Instead, I forked DefVideoAds and made a Vungle ads native extension. My first idea was to make it a drop-in replacement with the same API, but the SDKs seem different enough that I abandoned that idea. I’ve got the extension working on a test app (after much debugging!), so I’m quite pleased.

Next I’ll test it out on my real game!

2 Likes

In the last 24 hours, I’ve learned something very important about how Vungle works.

If you tell them your app will be released on the Amazon Appstore, they are making a big assumption that you are only intending to run on Amazon Fire devices. If you attempt to load those ads on a regular Android phone, error messages get logged and ads (even test ones) will not be served.

If you want to use their ads, release on Amazon, and also support non-Amazon devices, you will need to set up 2 apps in Vungle’s dashboard, and upload 2 APKs to Amazon (selecting device compat).

As soon as I tried the game on a Fire Tablet, the ads worked great. Might have a bug or two to work out with the extension, but it’s 90% there!

UPDATE: The extension seems to work, I just needed some code changes in my game to check for the ad loading status more often.

Bonuses of building my own Vungle extension vs relying on Enhance: Smaller APK. The apk from enhance w/ Amazon and Vungle was over 20MB. I’m at ~14.5MB right now with only Vungle. The Amazon ads SDK is ~500KB if I choose to add it later.

4 Likes

The Vungle extension seems to work great on Fire tablets, so it’s now in the Asset Portal!

I also managed to get the game released to production on Amazon! If anyone has a Fire tablet, please check it out. Feedback is very welcome.

A moment of panic today:
After promoting my release from Testing to Production, I noticed my IAPs were still not working (Amazon doesn’t seem to let you test them without using some weird side loaded apk…). Logcat showed error messages that it couldn’t launch some Amazon testclient intent.

  • I tried changing proguard file to match the docs… no luck.
  • I carefully read the docs and compared to the extension-iap source… nothing obvious.
  • I uninstalled the app, then reinstalled… it works now.

The lesson here: users on in your testing program will need to re-install the app after it’s released. Amazon does stuff to your uploaded APK to inject the IAP libraries, and they are not present in the test version. Google Play is sooooo much better at this workflow!

4 Likes

I finally upgraded to Defold 1.2.174 last night (from 1.2.172)!

Had a bit of a rough start, since I had to hunt down Britzl’s post on converting an existing certificate into a keystore, but it wasn’t too difficult thanks to his shell script. I’m on Windows, but it worked great using Git Bash.

I then encountered crashes a second or two into the game launching, which turned out to be a known problem with DefVideoAds that was already fixed. Once I updated that, everything seems to run great.

Next up was upgrading extension-gpgs to 2.0.0, which was recently announced. No issues there, worked first try.

Finally I decided to try the latest DefReview, which added support for Android in-app reviews. Previously, I had a star button that would open a dialog asking the user to review, with a button that launched the Play Store page. The extension worked perfectly, and I really like the UX!

Many thanks to @AGulev for the great extensions!

I’m hoping to explore Instant Apps soon, but need to figure out what modifications are necessary to be compatible. UPDATE: Just skimmed the official Instant Play Games checklists, and this will be interesting… Seems worth it, but definitely requires some effort to meet their guidelines.

4 Likes

I’ve published my first Internal Test with Android Instant!

The requirements are odd, and the manifest & version numbering have to be different than the main game, so I ended up copying the project (again).

Luckily the game logic and assets are unchanged between these 3 versions (Play Store, Instant, and Amazon), so updating them isn’t so bad.

Here’s what I had to do for Instant Games, per their checklist:

  1. No fullscreen video ads. I just commented out the code that shows video ads, and implemented a banner ad. This required moving some UI elements down a bit.
  2. No ads until 3 minutes into the gameplay session. (except for rewarded ads) To accomplish this, I used a timer.delay(180,.....) before showing the banner ad.
  3. Followed the defold docs for the instant extension. No issues there, it was very complete and accurate.
  4. Set version number of my normal game to 1000+ (was in the 50’s), and set the Instant one to 100+. Instant games need a smaller version than the full installable game to allow android to consider it an update. I released the normal version with the larger version number ahead of this instant release.

That’s about all it took. Seems to work okay in testing, but the game did randomly close once. Need to figure out why, and get more of my testers to try it out.

3 Likes

I’m really close to releasing on Google Play Instant!

One of their recommendations is to have a good video of gameplay footage. Up to now, I just had a short 5 second clip.

I’ve edited skateboarding videos in the past, so I knew I could do better. Here’s my first draft of a trailer, using Davinci Resolve 16.

Can I get some feedback and suggestions? I feel like I should do something more dynamic with the phone and text popups. That main logo transition is too slow as well.

2 Likes