NEO Scavenger Mobile - The Final Week

Here, we use "Final" in the Hollywood sense :)

Seriously, though, Tiago nailed a bunch of bugs last week. And while I only killed a few, there were several major crash bugs among our combined lists. The good news is that our issue list is dwindling to the last handful, and most of them are the lowest pre-launch priority or near to it. I think we only have 2-3 crash bugs left open, and they are there only because they're hard to make happen. So maybe we're closer to done than I give credit for?

Today, I fixed another crash bug involving combat. It happened when the player and NPC both target the same creature in battle, and kill it. The battle removes the dead creature, and switches the player's target to one of the remaining combatants. And if that combatant was also targeting the dead creature, the UI crashes trying to show the sprite for that target. (I.e. null reference)

I started thinking about ways to cache the sprite for a target, say for an extra turn or two, so it would be there even after the target leaves battle. But the more I thought about it, I realized it would require a lot of extra code, and possibly introduce new errors or memory leaks.

Instead, what I've added is an "Escaped/Deceased" sprite that can be used if the target is missing from battle. It should be clear enough what happened, and if not, the message logs are there to help.

Next up: a bug Tiago found when NPCs try to equip their best weapon. And it's a null reference. Surprise! Looks like there's somewhere in the code that an NPC's item gets destroyed but the AI code still refers to it.

And what's worse, it's really hard to trigger. I spawned all kinds of DMC guards and Bad Muthas all over the place, and watched whole platoons cut each other down. And nada. I'm almost wondering if I should just blindly try to fix the error by adding a null handler where it happens.

We'll see tomorrow. But fingers are crossed that we're nearing the end!

NEO Scavenger Giveaway Fixed!

Hey Folks! Daley just sent word that they've fixed the giveaway, so if you ran into errors before, now's your chance.

IMAGE(http://bluebottlegames.com/img/screenshots/screenshot-2017-02-01.png)

For reals this time.

15 Steam keys are up for grabs, and the only qualification is posting a comment on the NationFusion contest page.

As before, the wittier and more relevant the comment, the more chance it has of winning. So if you've been saving up your NEO Scavenger jokes or anecdotes, here's the big payoff :)

Thanks all, for your patience with the earlier glitch. And good luck!

Encounter Trigger Fixed, Battles Next

Hey Folks! Just a quick note today, as I'm running late for making dinner.

The encounter trigger fix is in, and required some more strategic placement of null reference handling in the inventory UI. Basically, when the player used the sign at the Last Chance diner in the sprawl (or any encounter trigger item), the encounter would delete it on the first page (to avoid the player using again while already inside the diner, recursively entering it).

Unfortunately, this all happened midway through the "use item" code in the UI, so the game did all this stuff to clean up the used item after it was destroyed. Guess what next? That's right. Our friend null reference.

Once that was fixed, it was off to the next null reference issue: battles.

It seems that if I throw a bunch of DMC guards and Bad Muthas into a hex, and enter their battle, I get a null ref when one dies. My target specifically, I think. I'm guessing this is due to their sprite or combat "pair" data being deleted and the battle UI trying to display it. But I need more time to sort out what or why.

But that's for Monday. It's weekend time, so have a good one, all!

Giveaway Errors, and Bug Fixing

Hey Folks! First up, let me apologize for the issues you've encountered with NationFusion's giveaway. Apparently, this is a bigger issue than originally thought, and they're working on a fix. The good news is that it's still going to happen, but it'll take some more time to sort out.

In other news, I'm still working on crash bugs.

I stumbled upon a crash while crafting a shotgun with a strap, and in the process of fixing that, I broke a memory leak fix. Ugh. So one full day later, I've finally got both fixed at the same time. I had to take one big destroy() call out, and sprinkle it strategically around in other places to avoid killing items prematurely when crafting.

Fortunately, this seems to not only fix the bug, but also improves memory leaks a bit. Hopefully, no side effects as a result, but we're on the lookout.

A second issue I've encountered involved items changing modes, such as with flashlights. It seems that if you tried to turn a flashlight on and failed, and later found one that worked, the one that fails after that might crash the game. Really. This is the type of bug we're down to fixing.

As it turned out, this was again due to memory leak fixes being too aggressive. Or more accurately, being too aggressive because of inaccurate bookkeeping. The failed "turn on" was trying to destroy the "on" mode too many times, which is why this only happened after a few flashlights were spawned and switched on/off. But, fixed now!

And lastly, I'm on the heels of a crash bug when trying to revisit the Last Chance diner. This appears to be a problem with (again) memory leak fixes destroying the sign object in the hex, but somehow leaving it in the hex's list of objects to draw. It seems like it's being removed correctly from the hex, so I'm unsure why it tries to draw the next time the hex is rendered.

That'll be tomorrow's task.

I guess the bright side of all this is that these are pretty esoteric bugs. They'll happen for a fraction of the users, usually long into the game. And with autosave, it should only be a minor setback. But still, it'd be nice to launch without a thousand bad reviews :)

NationFusion Is Giving Away Steam Keys for NEO Scavenger Right Now

Alert! Alert!

IMAGE(http://bluebottlegames.com/img/screenshots/screenshot-2017-02-01.png)

They Are Literally Giving Copies Away! (Actually Literally)

15 Steam keys are up for grabs, and the only qualification is posting a comment here. (Note: that means the NationFusion.com site, not bluebottlegames.com)

Of course, the wittier and more relevant the comment, the more chance it has of winning. So dust off those fingers (if that's a thing), and get cracking!

Update: If you're having trouble posting a comment there, you're not alone. NationFusion is aware of the issue and working to correct it.

iOS Testing Going Well, and Music!

Hey Folks! Some good news from today's testing, as iOS seems to be a significantly better build. And Josh's new tracks are solid, as always!

Tiago updated the iOS builds this morning, so I loaded them onto my iPad 3 to see how our fixes/memleak changes were working. And I have to say, it's darned near done.

I played a full hour on iPad, exploring, battling, scavenging, crafting, and item arranging. Four separate music tracks came and went, one of them the long, looped one. Everything just...worked. Even memory, though it would spike when loading a music track, would recover a moment or two later with a garbage collection, and the game stayed well within our prescribed limits for the whole hour.

There were a few minor issues over that time, but one big one. It crashed a little after an hour when I tried to talk to some DMC guards. Reloading crashed, too. But reloading a second time placed me back in the game in the turn just before that, so autosave saved the day! (And incidentally, talking to a DMC guard after a reload worked fine.)

We'll be looking to fix that crash, of course. And whatever other bugs we can. But if a player can go a full hour without incident, and then reload 1 or 2 times to recover...well, I could live with that. But then, I'm a pretty forgiving person :)

Anyway, that's looking a lot better than I was expecting!

And what's more, Josh has sent me a pack of bonus tracks to check out. He's been chomping at the bit to replace one of the earlier tracks we approved for a while now. It's a great track, and I've told him not to worry about it. But he insisted on at least trying.

These new tracks give me a better understanding of why.

Basically, the old track was awesome, but had a tendency to steal the show. Instead of amplifying the current game mood, it would rather dominate it and change everything. And, it went through a few phases where it almost told a story. These things all make for interesting listening, but they can conflict with or blot-out what's going on in the game. Plus, the style was a bit different than what most of the other tracks seemed to be.

The new tracks are more ambient and subtle. They swell in, and instead of dominating the scene, they amplify what's already going on. Like most of Josh's original NEO Scavenger tracks, these help the story be told, rather than talking over it.

I still have to sort out which ones make the most sense. There are 7, and my current feeling is 2-3 of them are good fits. But as with any artistic decision, it helps to walk away for a bit and come back with a fresh perspective before making the call.

So a good day, despite my lack of "actual work." Maybe I'll get around to that tomorrow ;)

No Work Day

Hey Folks! Slow news day today. Unfortunately, I had almost a complete day of errands to run, and just got to the office now. So not much to report.

Tiago says we killed the majority of the severe bugs last week, though, and testing is looking good. Mostly lesser issues and polish left on the board again. I'll have to take it for a spin tomorrow and see if I can repro anything on my end.

Also, Josh's got a new batch of music for me to check out, so that's always something to look forward to :)

Have a good night, all!

Hacking and Flashlight Bugs

Hey Folks! Another round of bug fixes today. This time involving hardware items.

Yesterday's errant laptop turned out to be due to hacking encounters not using the treasure encounters provide as a reward directly. Instead, it compares the player's items to the reward, and if there is a certain kind of match, the player item is mode-switched. But the comparison object was never cleaned-up, hence the extra laptop in memory after a hacking encounter.

In the process, I also discovered a leak due to items being loaded from a save game. Default items that came with a container get replaced by save game data, and this was only partially covered. Some items, such as hardware, had their own way of doing this, and needed handling, too.

Once the laptop was fixed, I started playtesting. And before too long, I discovered another crash bug. This time, it was flashlights.

Apparently, the ChangeMode() function on items wasn't correctly updating the template's "use count." Each template, from which items are derived, has a counter to keep track of how many items use it. Sort of a manual reference counter like those garbage collectors use.

In the case of ChangeMode, however, it was possible for the mode change to fail (usually due to lack of charges). And if that happened, it would briefly switch to the new mode, then back to the old one. And the way it was coded, the old and new template items could both end up destroyed even though the item finished reverting to normal and using one of them (the old one).

So I updated ChangeMode() to account for this increment/decrement in use count, and all seems well now. It was tricky to find, but easy to solve. Sound familiar? :)

Anyway, yay more stability! Also, yay weekend! It was a pretty productive week, and I'm feeling a bit better about things. So I think I'll enjoy the weekend this time. See y'all Monday!

Bugs and Taxes

Hey Folks! Had a pretty good continuation of yesterday's bug-fixing. Plus, taxes!

The taxes were sort of old news, as I've already done them and was just waiting for a PIN from the IRS. And true to the IRS's style of late, it came way sooner than they promised. They are one government organization that sends things out fast! Now if only we could simplify some of those forms... :)

The bug fixes today involved newspapers, deleting items, and hacking.

Newspapers were sometimes appearing with multiple headlines extending beyond the screen. And I had a hunch that it was mucking with the template newspaper for each new headline, appending text each time. Sure enough, the place where the newspapers are conjured was providing the original copy of the template instead of a copy, so every new paper had the previous papers' headlines before its own. A pretty easy fix.

The deleting items was a bit trickier, and I only stumbled upon it while trying to fix hacking.

Basically, I was getting a huge amount of laptops and their contents being leaked when testing hacking. And after some probing, it turns out that destroying an item in-game (such as with the context menu) doesn't destroy the object in memory. It just removes it from the ground, letting it float away into RAM. So I added some code to explicitly destroy items deleted this way, but ran into more issues.

As it would happen, there is more than one way to delete an item in-game. The context menu is one way, but so is the destroy cursor. And for that matter, the mobile and desktop code for this are in two separate places. So, after fixing all three locations, I think I have that wrapped-up.

Finally, hacking. This one turned out a bit trickier to solve. Encounters would clear items from the previous screen before awarding new items. But, in the case of hacking, it still needed a reference to the previous screen's item in order to change that item's mode to the new hacked item. I ended up having to split the code between that which removes it from the UI, and that which destroys it in memory. It does the former midway through updating the encounter, and the latter at the end.

I finally seem to have that working, and it fixes the hacking bug. But one issue remains: there is one leaked laptop in memory, and a lot of electric charges and data files. It could be stuff orphaned in the encounter, or temporary encounter items, or...something else? Anyway, I need to look into that tomorrow. Not a bad day, though!

Bug Thwacking, and Stats Are Improving!

Hey Folks! Another day of testing and fixing here. I'm happy to report that several of our top-priority crash bugs have been relegated to "verify" status, as either we explicitly added a fix for them, or else cannot reproduce them anymore. Plus, stability is up and memory leaks are down!

One of the big fixes today involved player condition null pointer bugs, which occurred due to my memory leak fix for them a while back. Each turn, a creature's update cycle loops through all the conditions on that creature and advances their timer. It then removes expired conditions, and applies new ones that are part of chains, etc.

Unfortunately, this can sometimes mean conditions later in the list are removed by changes from earlier in the list, and because we are now explicitly destroying conditions when removed, they're null when we get to them in the loop. As it turns out, this was simple to fix, because the loop was based on a snapshot of the condition list created before the loop began. All I had to do was add a check for each snapshotted condition to see if it had been removed from the live list, and skip it if so. And as a result, we haven't seen the bug again! (So far.)

A second fix is still in testing, but seems to be related to switching UI screens away from crafting. The game tries to destroy all the crafting item clones used in that UI, and in rare cases, that also destroys the real-world version of the item. I stumbled upon this when sterilizing water in a can over a fire, and later, the game tried to check all my items for an encounter. It ended up crashing when trying to get items on the destroyed water drop.

I think I've got this fixed now. Basically, I detach all proxy items from the crafting clone versions before destroying/clearing the UI now. Originally, I only did it for items that had an owner or slot or container, but I think items in a stack were getting missed by this. And more to the point, I'm not sure there is actually any situation where a proxy should be deleted by clearing crafting. That would destroy the real-world item, and that should only happen to specific items as a result of crafting confirmation, not emptying the UI.

And whether related to the above two fixes or not, Tiago was unable to reproduce a couple of the other null reference issues we had on our hit list during his tests. So we might've killed two (or more) birds with one stone.

And better yet, he was able to get ~1 hour of playtesting in before dying, with no crashes! That's a huge improvement over the last week or two since we've been memleak fixing. It's pretty close to pre-memleak fixes, which is about where we want for launch.

Furthermore, the memleak fixes appear to be helping! He only briefly exceeded the 250MB highwater mark that would crash some older mobile devices. And even then, it might've been due to some debugging stuff he was doing (e.g. spawning thousands of electrical charges that didn't get cleaned up) He also noticed some audio-related behaviors that might help him solve both memory use by audio and some hitching/stuttering bugs.

So all in all, a pretty good day! Maybe we can continue the momentum tomorrow?

Pages