Dev Log

More stuff from today:

-Fixed wrong things like "raw_splash_radius", etc, from showing on dragon's fire ball tooltip  
-Added dragon's summon/boost animations  
-Fixed "s" glitch in wave bar UI for endless bonus battles  
-Fixed UI status effect offsets  
-Added Eztli's final transformation  
    -Fixed hermit shop visual glitch  
    -Fixed party screen item tooltips randomly not showing special effects  
    -Fixed azra's position in sidequest 3  

Version 0.9.47 is up on the test server now, for Windows at least. Will try to work on a browser build tomorrow.

Hey, version 0.9.48 just went up. I’m uploading the release and debug builds.

Cheat codes in debug mode:
F1 - instawin battle
F2 - hurt your defenders
F3 - hurt selected thing - reduce health by half
F4 - weaken selected thing - reduce hp to 1
F5 - kill selected thing
F6 - kill selected thing (but allow it to spawn things if a spawner)
F7 - force boss to teleport (if they’re a teleporter)
F8 - kill exalted boss (ie, eztli)
F9 - kill sorceror friend (ie, zelemir)

This is to help root out some bugs related to eztli teleporting.

Other than that, I’ve got a lot of various fixes in this time. Didn’t do a very good job of keeping track of them, but I’m whittling down the bug list.

— Begin quote from ____

This is to help root out some bugs related to eztli teleporting.

— End quote

@testers: there are two issues, bug 442 and bug 445, that might or might not be related. One is spell icon stuck in old location when Eztli teleported while preparing a spell (this happenned to me several times) and one is Eztli simply failing to reappear in a new location. So if you’ve got time to spare, grab the debug build and try to chase Eztli around with F7 a lot, especially when he’s about to cast a spell or about to lose a health bar (esp. the last but one).

Indeed, right - that’s what the F7 cheat code is for. Hopefully by being able to force teleportation it will be easier to reproduce the bug.

Anyways, here’s what’s new in 0.9.49:

-Fixed dragon’s lighting in final cutscene
-Fixed gaps between tabs and menu on recruit screen
-Show reward screen after final battle
-Made sure bonus battles are fixed
-Fixed dark status showing incorreclty
-Fixed recruit screen offset glitch
-Fixed broken cutscene
-Fixed battle UI glitch
-Fixed phased enemies ā€œeatingā€ arrows
-Fix Eztli UI offset
-Tweaked targeting options

This last one I’ll mention a bit about. There were a lot of little bugs I fixed here.

Cargo
First, ā€œcargoā€, ie, the hit points of spawned enemies ā€œinsideā€ a splitter, were not being correctly accounted for under target ā€œstrong.ā€ Now a splitter with lots of cargo that’s almost dead counts as being ā€œstrongerā€ than some other dude with more raw HP showing.

Optimize effects + armor
Next, optimize effect was handling armor in precisely the wrong way. The idea behind ā€œoptimize effectā€ is to make sure your attacks with status effects and special flavors are used in the best possible way, more or less. So if you’ve got poison, you want to hit an unpoisoned enemy, and if everything in range is poisoned, you hit the one with the least poison. Etc.
For attacks with armor break / pierce, what we did was check for enemies that have armor and favor those as those attack flavors would have no impact on unarmored enemies. The boolean was flipped the wrong way, so setting a knight to target ā€œ!ā€ would actually make him avoid armored enemies. Fixed.

Best chance + armor
The ā€œbest chanceā€ targeting option is for when you want to make sure you don’t waste an attack on an enemy likely to dodge it, or resist the attack. This was NOT taking armor into account, only dodge, darkness, and strengths. However, when you think about it, armor is just damage resistance, so that should totally be taken into account. In 0.9.49, it does this. So if you have a berserker set to ā€œstrongā€ and ā€œ%ā€, he will favor an unarmored enemy over an armored one, since more damage gets through on the unarmored.

Best chance + dark/light
Dark enemies had a lot of glitches that I fixed. Apart from visual stuff, apparently for a while now dark enemies would go from 75% chance to dodge to 100% after they had been lit up and recovered their darkness. Besides this, the ā€œbest chanceā€ target option was not taking into account whether a dark enemy was lit up, so all of them were considered bad targets under this option.

I fixed this now, and went a little further by putting a slight thumb on the scale for when dark enemies are lit up. So, all things being equal, if there’s a dark enemy that’s lit up, and a normal enemy, the defender will target the dark enemy. This is because that dark cloud will go back up eventually and its a more valuable target. I thought about doing this for phasing (ie, slight targeting favor to phasing enemies when they are solid), too, but figured that would be bad because phasing usually happens in quick, tight patterns, so if you target a phased enemy, your attack could miss by the time it lands as the enemy phases out. This would be the exact opposite of what the ā€œbest chanceā€ target option is supposed to do - avoid wasting attacks.

The slight target bias towards dark creeps that are lit up is just a 10% weight, so it will only apply when all other targeting considerations things are equal.

Boss targeting
Some testers had complained that targeting bosses was kind of complicated. ā€œStrongā€ is a good way to target them, especially stationary ones like Zelemir and Eztli, but this keeps you from being able to target normal ā€œstrongā€ enemies, such as cultists and splitters. What I came up with was a special targeting option that only shows up in boss battles. This looks like a skull, and it’s pressed by default. When it’s down it means, ā€œallow the boss to be targeted.ā€ When it’s up it means ā€œignore the boss unless there’s other targets.ā€

So by default it’s the regular targeting behavior - the boss is an enemy like any other. If it’s off, the boss has the absolute lowest priority before any other targeting settings are considered.

Save settings feedback
When my wife was playing the game, she was always getting confused as to whether her current targeting settings for a defender were saved or not. So, if the current targeting settings are not the same as the ones that have been saved for that defender, the save button will turn dark red. When they’re saved, it becomes blue. When you change options, it will update this so you always know what the settings situation is. Hopefully that should be a nice help.

How targeting works
Also, a quick explanation of how the targeting logic works. The entire thing works by comparing newly available targets to your defender’s current best one. It does this whenever a new enemy enters range and/or an attack becomes available. So, if I can accurately say ā€œyes A is a better target than B given these target settingsā€ than the whole thing Just Worksā„¢.

The algorithm goes through a series of checks, trying to see if it has enough info to determine whether A or B is better. If they’re equal under that check’s criteria, it continues to the next one.

If "target_boss" is off -> Is A or B a boss?  -> Favor whichever one isn't
If "target_chance" ->Favor whichever has least chance to dodge, resist, and armor-absorb my attack
If "target_effect"  -> If my attack has flavors -> Favor whichever has the least of my flavors affecting it right now
If we haven't found a target yet, go by default target setting. (Fast/Strong/Weak/First/Last,etc)  

ā€œtarget_cheapā€ and ā€œtarget_bulldogā€ don’t enter into this because they do other things.

This has some interesting emergent properties. Since this check is done on an A vs. B individual level, it actually sorts groups pretty effectively. So if you have some strong dark enemies that are currently unlit, and some weaker vanilla enemies, all of which with different hp due to battle damage, and you targeting options are ā€œstrongā€ and ā€œbest chance,ā€ you will attack the strongest non-dark enemy. This is because first all the dark enemies get eliminated whenever compared to a non-dark enemy, and when it compares two non-darks, they are equal in terms of ā€œbest chanceā€ so it falls through and then sorts by which has the most health (since you’re targeting ā€œstrongā€).

The question is just which order to do these in. What exactly do we want to happen when we have BOTH ā€œ!ā€ and ā€œ%ā€ on at once? Which is more important? I can imagine a case for both of them, but if anyone feels strongly (besides coyot, I mean, I already have his vote :slight_smile: - effect > chance) let me know so I can think it through.

Tyvon is fixing up some of the old sprites that he wanted to give a second pass to, and I’m busy tying up the last few loose ends. Windows builds are up on the test server as I type this, both release and debug mode, and I’ll get release mode builds up for Mac + Linux shortly.

We have had reports that people using Mountain Lion are getting scare screens on installing the game because Apple, in its infinite wisdom, has created a new feature called GateKeeper that won’t let you install applications from shady, unverified developers like us without digging into your OS system permissions. We’re not quite sure what we have to do about this - we’ll be releasing with other distribution partners, so we’ll talk to them if they have some pipeline for it, and if not we’ll go directly through apple and get the full anal probe or whatever it takes for them to stop labeling our games as malware :stuck_out_tongue:

Anyway, the current build fixes the worst bugs people have reported and from the looks of it the content is all there. All that’s left is a few Heisenbugs I’m trying to reproduce, a short list of visual glitches, an unpolished cutscene, and some old sprites that need replacing in the final ā€œpuppet shows.ā€ Oh, and two new music tracks we need to put in. And I need to update the credits.

Bunch of little stuff, but it all adds up. It’s like picking up crumbs off the floor one at a time.

Thanks a lot for the boss toggle! (ofc for the fixes too).
And sorry to bomb you with new bugs almost as fast as you can close them. You’ll get a break, I’m going away for the next week :slight_smile:

As for the effect vs. chance, I don’t actually have a strong opinion (maybe I had when I originally suggested the whole feature, I don’t remember). In fact, I quite like it as it is now, chance > effect. As long as we KNOW exactly how it works, we can be in control - if I want a defender to maximize his effect distribution even at the cost of dodge/armor waste, I know to untick %.

Nice work Lars!! :smiley:

A few item/economy tweaks will be going into the next build:

  • Respec costs, maxed at 1000, were a bit too low for late in the game, and were getting trivially cheap in NG+. I doubt I’ll ever hit the ā€œrightā€ formula for this, but we’re going for now with (Lvl)*(Lvl-5)*5 (min 100). I know that’s weird, but it works out pretty well. The idea is that respec should generally be an option, but one that you need to consider whether it’s worth the small cost associated with it. Respec costs at a few major milestones:

5: 100
10: 250
15: 750
20: 1500
30: 3750
40: 7000
50: 11250
60: 16500

  • Unique items for the standard game have their bonuses boosted a little, especially the first few. Hopefully there will less of ā€œooh, nice new unique weapon, but I already have stuff better than thisā€ going on. I’m sure it’ll occasionally happen, but this should be improved.

  • Non-unique weapons in NG+ have had stats and costs increased. Specifically, the first non-unique weapon in NG+ is now stronger (and more expensive) than the last one in the standard game. Costs also increase faster, as playtests were showing that players had way too much gold sitting around in NG+ (a straight no-grind playthrough of NG+ should yield about 3 million gold). Top of the line equipment now costs 50k - 60k each. What can I say? You pay for quality. :slight_smile:

Hey, guys–I’ve been lurking on these boards for weeks watching the progress and getting more and more excited to see the Gold edition when you get it finished. I have a non-development question for you–for those of us who own the game and will be getting the Gold edition as an upgrade, are you going to provide a way for us to pay a little more for all of this work you’re doing? I want to make sure you know how very much I appreciate all it when I finally get the chance to play more DQ awesomeness!

Thanks dsrtrosy! I don’t think we have a method of leaving extra tips, but you could always buy a copy for a friend. :slight_smile:

You have FLC (if that happens.) What’s the important thing you were telling us about?

Didn’t have time for a full dev log post today, but just FYI version 0.9.52 is up with bugfixes, tweaks, balance changes, and some more missing graphics holes plugged.

Yo, sorry for the lack of updates recently.

Anyways, I’ve just uploaded version 0.9.53 for all operating systems to the test server. This IS a release candidate.

There’s a lot of new stuff in this build:
-Fixed tutorial targeting bug
-Fixed Azra’s lighting in some cutscenes
-orthogonal ice shards*
-Fixed Ice mage projectile offsets
-Fixed Ranger projectile offsets
-New icons/thumbnails for the installed app
-New music tracks
-Lightning comes out of Azra’s hands correctly
-Fixed puppet sprites
-fixed book descriptions
-fixed Ozimal offset
-Fixed Projectile offset Splitter (apc)
-Fixed character palletes
-Added sprite portrait of zelemir
-Added unazra sprite portrait
-Added generic portraits
-Fixed pre-set level crystals (now their damage is tied to your crystal spell)
-shade markos’ soup pot
-added sq7 dialogue

*What this means: Since ice shards can penetrate and hit multiple targets, it stinks if it veers off diagonally when it’s being aimed mostly horizontally. You don’t want it missing out on a few targets just because a direct line between wrenna’s staff and an enemy is slightly off horizontal/vertical. So, what it does now, is it flies towards its initial target, and if the vector is mostly orthogonal, it will ā€œeven outā€ its trajectory after the first hit. This is a pretty subtle effect, but should make the attack hit more enemies on average and help you maximize the usefulness of additional piercings.

This is a REAL release candidate. This build is pretty much ready to go, everything is in. All I’ve got left is to prepare the demo/web builds, as well as add some cryptography to the system so that the updater can verify that whatever it downloads on update actually came from us and is not a man-in-the-middle attack with a malware payload. It’s got basic security in already, but I want to tighten it up.

There’s still some bugs here and there on the bug server and I will do my best to attend to those before final release, but I’ve cleared out pretty much everything non-minor that I can actually reproduce.

Quick update:

Making great progress, I’ve almost got everything ready for launch. With luck I’ll have some new builds (including all the demos, compatibility mode, and web builds) soon. Might not drop until tomorrow.

— Begin quote from "larsiusprime"

Might not drop until tomorrow.

— End quote

Does this mean we can expect it today, or that we can expect it Monday?

That’s the real RC, not the Test Build? Also, you use plain text code?

Hey guys, had some crazy stuff happen over the weekend. Anyways, furiously compiling builds and trying to upload them now.

I’ve been able to stabilize a lot of the demo/browser build variants. If I don’t get them all up tonight, I should be able to drop them on the server tomorrow morning.

We really want to launch gold on our own site before PAX. So, let’s see if we can make that happen. You guys have been amazing with your bug reports and I’m trying to fix them as fast as you’re logging them.

The last full version build came back with a few bugs, so I guess what I’m uploading now isn’t RC any more since I have known issues now that I need to fix - but we’re daaaang close! Anyways, Anthony might have a few final balance tweaks here and there, and if I can fix all the bugs you guys keep reporting, then we should be able to ship this week, hopefully.

If you’re super impatient and want to play the game sooner, then just PM me and ask to help us test :slight_smile:

Don’t have time for a full changelog, but I’ve fixed a lot of the bugs in the database, and most notably:
-Spells were not reflecting the true costs in the skills data, instead were using some obsolete values from way back when. However, we’d balanced their power towards this ā€œwrongā€ cost. Now that I’ve fixed the bug, some spells are now a lot cheaper. Anthony might adjust the cost again tomorrow, we’ll see.

Okey, dokey, just a quick FYI,

I’ve uploaded version 0.9.54, Release Candidate 2 (even though it’s not REALLY an RC since I know there’s technically a few new bugs I haven’t squashed JUST yet…)

But anyway. Lots of new versions:
-Full version (the thing I usually upload)
-Compatibility mode (sans AIR, just a standalone projector + dependent asset files in one handy zip)
-Demo version
-Browser demo version

Please test them all. I only have windows builds for the above, but will try to get cross platform builds out tomorrow for version 0.9.55, Release Candidate 3.
Also Note: compatibility mode does not have mod support, or resolution switching, as those features require Adobe AIR. Also it saves your games as flash cookies because it doesn’t have permission to write to the hard drive, but you can still manually export save files, since it has permission to do that if its prompted by the user. Beware of CCLeaner! It eats flash cookies!

Sorry for the lack of updates yesterday. I’m working hard on one last final feature - upgrading the security check on the auto-updater.

Finally got this working yesterday, and from now on all new test builds will have this feature enabled (though they’ll be looking for their files on a different server location than the final released version).

In addition to the simple HTTPS security that was on the old version, the new auto-updater uses public/private key cryptography. This way, even if our entire website and update server were completely compromised and all the update payloads were replaced with malware, you would still be secure. Here’s how it works:

On my end:

  1. When I compile and package the game installers, I run openssl and calculate an SHA256 hash of each installer package.
  2. I then sign each of these hashes with my private key to generate a ā€œsignatureā€ for that file.
  3. I upload the installer binaries and their signature files to the update server.

On your end:

  1. You run defender’s quest and it detects an update
  2. It downloads the relevant installer package and signature file for your OS
  3. When both downloads are finished, it calculates the SHA256 hash* of the installer package and stores it in memory
  4. It decrypts the signature file using my public key, which is embedded in the game client
  5. Decrypting the signature file should output an SHA256 hash of the original file.
  6. If the decrypted hash matches the one calculated from the downloaded installer, it means that installer is identical to the one I signed with my private key.

*I’m using a special alchemy library that wraps openssl

If the hashes don’t match, the game trashes the downloaded data and outputs an error message. Additionally, the game runs this check BEFORE it writes the downloaded bytes to disk, so nothing even hits your hard drive until it can verify that the file is kosher.

I’ve tested it, and it seems to be working. Changing even one byte on the update file without generating a fresh signature will cause the update to fail, which is exactly the behavior I want. This will trigger if the file has been tampered with, or if the download was incomplete, both legitimate fail conditions.

I also spent all day yesterday working on a unified build process for the game. Since we’re supporting multiple OS’s, browser builds, and various demo iterations, the process for ā€œdeployingā€ the game has grown a bit bigger than ā€œcompile and upload.ā€ At first this was manageable, but now it’s gotten so many manual steps that I just had to take a day to write scripts to automate as much of it as I can. My biggest gripe is that using the NativeApp API requires you to have no less than three computers to do a full deploy - one windows box, one mac box, and one linux box.

So, rather than messing around with a USB stick and a bunch of tedious copy-pasting, I finally got off my butt, networked my computers, and set up a plethora of batch and shell scripts to do all that for me. I still haven’t gotten it down to http://www.joelonsoftware.com/articles/fog0000000043.html, but maybe I’ll get there one day.

This will save me all kinds of time. It used to take all day to baby-sit a full public deploy process. Hopefully I can shave that down to about an hour with this framework. Now that we’ll be shipping on Steam, as well as Desura, GamersGate, Impulse, Kongregate, and our own site, this will be essential.

Worked some more on my build process and ironed out all the kinks and bugs I could find. Verified that the auto-updater works as intended on all platforms, mac, win, and linux. At least, it worked for me :slight_smile:

Also I fixed the huge horrible memory leak everyone’s been telling me about. Hopefully there aren’t any more lurking in the shadows :stuck_out_tongue:

The new version is 0.9.55. I’m uploading the windows build as soon as I can but it might take a bit to get the rest up. After 0.9.55, I’m going to upload 0.9.56 to the update test server, so I can test deploying that way on actual users besides myself. So, you’ll get 0.9.56 by running 0.9.55 and detecting the auto-update.

Is it just me? The 0.9.55 installer seems to claim it’s 0.9.54! (And it doesn’t pull 0.9.56 either)

It’s not just you - it is actually version 0.9.55, I just forgot to copy the version text file to the right place. There’s a chink in my build process’ armor after all.