Fix Fake-out, Crafting Fix, and Store Updates

Hey Folks! We had a brief celebratory moment this morning when we thought the crash bug was fixed. But after more testing, it appears there was a false success. My iPad 3 is still crashing intermittently when on encounter screens.

What's interesting, though, is that this is even after fixing memory leaks. The memory footprint was rock-solid for several minutes before the crash, and no spike/allocation could be found prior to the crash. It just...crashed. (This was using XCode's Instruments, no less. So I'm fairly confident in the metrics.)

So if not memory, then what?

I also managed to find another iPad 3 user to verify the crashes, which is again both good and bad. Bad because it isn't just my machine, but good for the same reason. At least now we know it's an architecture-bound issue, and not just some settings/installation thing unique to me (and potentially many other users in the future).

In any case, the investigation continues.

I did manage to solve that crafting bug, though. It was down to a destructable tool ingredient with a consumed ingredient inside causing a sort of race condition. The game helpfully tries to restore any items inside a destroyed tool during crafting, but in this case, that item was meant to be destroyed (and was in a separate code section). I ended up having to add a null-check in the restoration code section to make sure it didn't try to clone a destroyed item.

The website is still having issues, but they're going to get me setup in their git repo so I can start making edits myself. Since I wrote many of the pages, I can probably nip the user logic errors in the bud pretty quickly.

Finally, I've started uploading screenshot assets to the Apple and Google stores. It took a while to get good ones (showing interesting samples of gameplay, and also in each aspect ratio), but I have a good stable to work from now. The next trick is making sure they're ideal sizes for each store.

Apple was actually really easy in this regard, with specific requirements per phone/tablet section. (Expected, since they have fewer devices in their range.)

Google, on the other hand, is really vague. "Provide smartphone, 7-inch, and 10-inch" versions of each screenshot to be featured in both phone and tablet sections. Okay, fine. But what does that mean? How do I denote a 7-inch screenshot aside from just putting it in the appropriate slot? Or is that what they're saying? Like many things Google, it's probably really logical, just unclear to noobs :)

Anyway, moderate progress today. Could be better, but also worse. Hopefully, we have a stroke of genius soon!

Memleak Is Back, and Brought His Minion, Crafting Bug

Hey Folks! No fix for the iPad 3 crash bug yet, but the situation is developing.

It turns out this may be a memory leak after all. Tiago got his hands on an iPad 2 for testing, and while the timing is different, the outcome is similar. He was also able to spot some weird memory usage patterns. Up until now, I've erroneously thought my iPad 3's memory usage was stable, but could confirm in my latest tests that it was going nutso. Like MB/s increases and then garbage collection.

What's more, the increases start fast and small, and get slower and larger as time passes. This could just be a memory reporting idiosyncrasy, but I think Tiago is confirming it in memory profiling tools outside of the game, as well.

So what does this mean? Well, for one thing, maybe our memory leak has returned. Or else we have a new one that is quite aggressive and sudden. I guess the good news is that we have a better idea what we're looking for now, and maybe even some crash logging to help. But no fix just yet.

I also stumbled across a bug during some testing today. I decided to start an earnest playtest as a way to start collecting useful screenshots for the App Store. And while crafting boiled water in a whiskey bottle, I managed to crash the game.

This sounded familiar, and checking over my issue list, I found why: one of the beta testers noted a similar crafting issue a couple weeks ago. One which I was not able to reproduce.

The trick, it turns out, was that I had to craft boiled water with a whiskey bottle while the water was inside. Water outside the bottle won't do it. From the looks of it, the water in the bottle is getting destroyed/nullified before the recipe is done with it, possibly as a result of destroying the bottle before dealing with the water? I'll have to look into it more tomorrow.

But 100% repro steps are a great start! Now if we could just figure out the source of that leak...

Setbacks On Two Fronts

Hey Folks! Unfortunately, both the iOS and website situations experienced some setbacks today.

The draw call optimizations Tiago recently made haven't stopped the crashing on my iPad3. We think it has affected the rate, possibly for the better. But we're still seeing crashes in the ballpark of 1-5 minutes on encounter screens, and 0:40-2:00 on the hex map. Still short enough durations that regular users will hit them in normal play.

The good news is that disabling the message window (1 lass draw call) may have fixed this, so at least we have a way to avoid the issue. (Thanks, ra1 for the idea!) The tricky part will be finding a way to take advantage of this without hiding important UI items.

On the website project, the full version download feature revealed some serious flaws. It makes it possible for any registered user to download the game if they know the special URL. That, and Yukon customers have no way to get their special versions.

I've asked the web devs if this means we should revert to the old (current site) way of handling files. They think it might be the same effort to go either way, but that it'd be ideal to push forward and use official plugins and features of the CMS instead of homebrew systems. I can see their point, particularly since my reasons for hiring them is so I can offload web maintenance and dev. So we'll see where this goes.

Not a great day for dev, unfortunately.

In other news, Josh's latest track is in, and has a decidedly "Tech Noir (Terminator) meets Mass Effect club" vibe, which is perfect. Old and new simultaneously :) It's slated for use in techno-club style venues on stations and colonies in the space prototype. (Think Shadowrun Genesis bar music.)

Also, the accountants finished my corporate tax return. Nothing owed nor refunded, which is good. But yet another expense. This should be it for the year, though!

Hopefully, more successful news tomorrow. Fingers crossed!

Building On OSX, Draw Call Culling

Hey Folks! Hope everyone had a good weekend. We did some local neighborhood clean-up volunteering, and yet another round of home improvement/move-in/cleaning. So pretty busy! We celebrated our hard work by getting tipsy on a bottle of Semillon, eating cheese, pickles, and bagels, and watching Arrival. Would do again :)

Today, I decided to bite the bullet and try to figure out building the iOS version on my MacBook. Up until now, Tiago has owned this process. (Indeed, his mobile expertise was a big part of why I contracted him!) He also graciously created a wiki for me a while back to show me how to build and test iOS locally on my iPad. I've sort of been dreading trying this, but with the project nearing launch, I'm going to need to know a bit more about how this works.

Overall, the process has been slow, and error-prone. But it has also been progressing steadily, which isn't always the case with Haxe stuff. I had a few minor updates on OSX to get out of the way, and then went through the process of installing Haxe and haxelibs (which is actually not too bad).

Getting the correct versions of libs is a bit trickier, as some need custom versions, recompiling, etc. But I think I got most of that squared away, too.

Getting XCode to play nice with Haxe is voodoo from my point of view. If it weren't for Tiago's wiki, I'd be lost. So I was fortunately able to stumble around the foreign IDE with his map in hand, and am now at the point where I can start the build process.

Unfortunately, that's where my progress ends for the day. I seem to be running into a compile error in the generated C++ code that tries to cast an item handle into an int, but no valid conversion exists. My first instinct was that this might be a lib mismatch. But my attempts to realign libs hasn't helped yet. I'll try again tomorrow.

Meanwhile, Tiago is refactoring a bunch of the mobile project to use fewer draw calls. Our operating assumption is that the random crashes I see on iPad 3 are due to excessive draw calls. And since they only occur on screens with 3+ calls, that seems like a sound assumption.

He's making progress, but there are several UI screens that each need their own solution to reduce draw calls. So he has a bit further to go before we know more.

Not very glamorous, as you can see. But necessary work, all the same!

Bugs Decimated, New Site Update

Hey Folks! It was a super productive day today, I'm happy to report. Lots of bugs solved, a possible solution on the horizon for one of the remaining major bugs, and a new website update!

The bug squashing began with changing the way auto sort works on mobile. The teensy button was really hard to hit with touchscreen, and especially so on smartphones. And there wasn't enough room to make the button bigger in each of the places it got used, since it could appear in some tight UI spots like between backpack and shoulder grids, or between ground and paper doll info.

So after some thinking, I decided to try a different approach: context menus!

I mean, why not? We have them now. They work for things like using, mode switching, emptying, and rotating items. Why not also use them to auto sort an item's contents?

So that's what I did. All the auto sort buttons are gone now, and a new (bigger) button is in the context menu for any slotted item. And since the ground didn't have a visible slot item, I added one!


Behold the new ground slot.

This new slot art does two things: first, it makes it possible to conjure a context menu for the ground (to auto-sort, mainly). And second, it (hopefully) makes the ground slot just a bit clearer to new users, who often report not understanding what that left grid represents. This won't nail it for them, but it's a step forward.

I also did some weeding/pruning in the context menu to remove some redundant options. Stack/Single was in there because there didn't used to be a way to change cursor modes on mobile, and there is now. I also removed rotate options from slotted items, since this is pointless as they reset to zero rotation in their slots.

I also fixed a tutorial bug that was causing them to be shown over and over, as well as a bug that cause crafting items to disappear when returning from the main menu.

Meanwhile, Tiago may have found a way to stack trace my iPad 3 crashes remotely, so there's hope we have a fix soon! Current bets are on too many draw calls on some screens.

Finally, the web developers have informed me they have a new game file upload/download system in place. The new site had some issues with this before, and there is now a way to handle it. A few kinks to sort out, but I think this'll work.

Not a bad way to end the week, eh? Have a good weekend, all!

Cursor Modes, Grid Placement, Auto Sort

Hey Folks! A few more bugs fixed today, as we try to reach issue-count: 0. (Or at least, issues above 6 severity: 0.)

I managed to figure out what was wrong with my cursor mode tray toggle, and got that checked-in today. As is often the case with game code, simplicity solved the problems. It was trying to do tray in/out logic in two places, and they ended up stepping on each other's toes. Consolidating that logic in one place did the trick.

Tiago's grid-placement helper code is also in. Previously, he added code to help users place an item via tapping. If the tap target overlapped something and there was space nearby, it would add to the space instead of swapping. This was good, except in cases where the user wanted to swap and/or no space was nearby.

His new code swaps if there is no space, but uses empty space when it can. And if the user is really particular about where the item goes, they can use the precision drag and it will do what you tell it.

Finally, I'm looking into ways to increase the size of the auto-sort button. Currently, it's 10x10 pixels, which can be hard to tap on a small screen.

The solution seems easy at first: just make it bigger! However, the UI doesn't have enough room in some places. (Notably, the backpack and left shoulder slots barely have enough room for these buttons as-is, especially when large containers are slotted.)

So I'm considering other options. One thought is to just add a new context button to containers to "auto sort." This seems pretty non-intrusive. However, this wouldn't work on the ground (no item to tap on for a context menu). It isn't necessarily the first place people would look, either.

Though, I guess it at least is more intuitive than the unlabeled buttons there now. Plus, there might just be enough space above ground to add a slot image for the ground. I could add an item to it, as well, similar to the open ground camp sprite, to make it clearer that the grid corresponds to the ground.

Food for thought tonight!

Wrists Fixed, Debugs Suppressed, Cursor Toggle Expandable

Hey Folks! Busy day today. And I mean actual dev work!

I spent a good chunk of the day weeding through our issue list and closing what I could. A couple of tasks were in "Verify" status, and were able to be closed by referencing some inbox messages I had from testers.

I also discovered why my iPad 3 was haunted. It was, I'm afriad, because I am an idiot. I tried to verify the bug on PC using 16:9 mode, but the bug only appears in 4:3 mode. Once I realized that, I could reproduce (and fix) the bug.

I also did a final check on some debugging code I added a while back for memory leak checks. Most of it had been suppressed in release builds, but there were still two instances where it got called. It might've caused null reference bugs in discharging and slotting items, but then again, trace commands are suppressed anyway in release, so maybe this was averted? In any case, all memleak debug traces are consistently suppressed now.

Finally, I started work on another sliding UI tray, similar to the action buttons found in 16:9 mode. This one is for the cursor mode toggle in 16:9 mode, which can be really tricky to tap on a small screen. I'm changing it such that tapping the entire cluster slides it out into the screen a bit to make all buttons far enough from the edge to tap on small screens. Once out, tapping any button does the button thing, and tapping anywhere else on the screen slides it closed.

Except it's still a bit wonky right now. Sliding when it shouldn't, etc. I should be able to shore that up tomorrow, though. See you then!

Haunted iPad 3, and Bug Run-Down

Hey Folks! Mainly testing and bug management today, as I ran through the latest test build on my Android phone and iPad 3.

I'm starting to think my iPad 3 is haunted. I've now found a second bug which only seems to affect my iPad 3: paper doll wrist slot sprite is in the wrong place. My Android phone, and even the debug PC build, are both fine. All use the same build number. And I even deleted/restarted/reinstalled on my iPad without any luck. Tiago says it was working again for him, too, so I don't think it affects his devices.

Between this and the crash that only happens on my device, is it my device? Is my iPad 3 telling me something through NEO Scavenger Mobile?

I also had a chance to test one of Tiago's item screen improvements, and I think it's going to be a big win. Basically, it was really easy to mis-tap an item's destination when fitting into a tight space, causing it to swap out another nearby item. And then you'd go to put that item back down, and it'd swap out a different item. So annoying!

His new code does a few point checks around the tap target to see if there's a good place to fit without swapping, and if it finds one, it puts it there instead. And it feels so much nicer now. Very predictable.

The only problem is that swapping is now really hard to do. I think his code is supposed to allow swapping as a fall-back option if open grid placement fails, but right now, it's falling-back to returning item to its origin. We're looking into that now.

There are a few other new UI/UX bugs, as well. Going to need to roll up our sleeves to fix/add a few things for creature comfort. But I think most of the bugs are on the down slope now. Fixes are in, and it's mostly testing, verifying, and closing.

Sooo so ready for this thing to be done :)

Triage, Updating Records, and New Buttons

Hey Folks! Hope everyone had a good weekend. We kicked serious housekeeping butt during ours. Fixing, cleaning, and otherwise getting our house in order. We used Trello :)

Back at the office, I was off to a late start as I had some further account-updating to do. New addresses, confirmations, and phone calls. Plus some invoicing and organizing.

Once that was done, I turned my attention to the GitLab issue list. Over the past month, several of the tasks had started to stagnate, and the issue weights were coming into question. It was all in need of a refresh.

After the triage, I was able to close a few, demote a couple, and check-into a couple more for accuracy/status. It caused me to double-check things like Achievements and Leaderboards, and as it turns out, they weren't working! On Android, anyway. The Game Center had an overhaul recently which necessitated re-publishing the Leaderboard. We're currently awaiting the GC to update so we can test again.

I also chased down some more details on user-submitted bugs for help in reproducing them on our end. Some seem to happen only on certain devices, so we're somewhat at a loss for how to fix them. Tiago managed to find someone with an iPad 2, however, so he can borrow that for in-house testing on what we think might be a low-memory/performance issue.

Finally, I pumped-out some new button art for the attack mode, combat target, and message window widgets. Each used to be a bit on the tiny side for small screens, and we found a 150% scaling seemed to feel more comfortable. So I re-skinned the button art to be this new size, and adjusted layout files on 16:9 and 4:3 accordingly.

I guess not a bad day, all things considered! Still plenty to tackle, though, before we can consider launching. Various crash and store-related things to either fix or verify. Gotta be getting close, though!

Light Testing, and Role Playing!

Hey Folks! As some of you may have seen on twitter, today was a bit special and unusual. I did some honest-to-goodness role-playing! With actual people!

I was joined by @unormal (Caves of Qud dev), @JustASquid (Airscape: The Fall of Gravity dev), and @Mjoshua (Trailer Producer extraordinaire) to try out @WritNelson's Ellipses RPG in an adventure setting called "2 Jacked to Hack." And, well, I'll let Brian's doodle summarize:

Right! So that should clear things up.

Seriously, though, it was a blast to go completely off the rails of reality for a few hours. And if you're looking for an interesting pen and paper RP system with a low barrier to entry, check out Ellipses RPG!

I did manage to do a few responsible things today, as well. Some more address updating with various vendors and services, reviewing (and approving!) Josh's revised track from yesterday, some brief iPad testing, and the start of some new UI art for buttons that got bigger on mobile. Nothing I'm going to get a bonus check for or anything, but it does keep the loose ends from piling-up.

Anyway, it was a refreshing change of pace. And reminds me that maybe I need to make an effort to be more social :) Have a good weekend, all!