Current dev changelog for 2.1: (not released yet, FYI)
2.2:
*Attempted to resolve DPI-related issues. .NET/winforms was resizing things to fit the new DPI, but I needed "pixel perfect" calculations. Seems to work (tested on 120DPI on Win7 and XP with no issues)
resolved by forcing the Game PictureBox to a specific pixel size in both the main game and the editor. Also fixed some resizing issues on the splash.
*Added Left Pane to the Editor. Has nothing, currently. Not sure what to add to it. a Toolbox of Blocks? maybe a Task pane?
*made Editor more friendly to resizing. (Editor portion itself remains static, everything else sizes around it)
*Installer now respects where you actually want the game installed.
*changed default music to BASESTOMP instead of BASEC ("Ode to the square wave")
*fixed delay being set wrongly on the LaserSpinBall (for the terminator behaviour)
*fixed /FILELOG parameter, saved to appdata rather than executable directory. Oh by the way there is a /FILELOG parameter. Also switched
important segments of code to use Trace.WriteLine() rather than Debug.Print (so it will show up in the log files for the release build)
*Enabled "ShieldPowerup" which creates a Strongblock beneath the paddle.
*fixed "cLevel::DrawIntroBitmap", now it actually centers properly. Applied this fix to other locations as well, and centralized
bitmap font size measurements.
*fixed "Frozen" paddle behaviour
*changed terminator powerup to use paddle energy, as well as changing it's first-level to a more useful shotgun (rather than a pea shooter)
*added Charger powerup whose explicit purpose is to charge the paddle. (Energy wise)
*fixed odd behaviour from balls bouncing at a shallow angle to the right wall
*now uses the Windows API Code pack to support things like win7 Taskbar progress bar (in splash screen).
also improved handling of errors during initialization.
*tweaked StickyPaddleBehaviour; when shift is pressed, the vector for all the balls stuck to it are drawn rather than the top one on the stack.
*added a field for each level to set the maximum number of balls.
*Terminator behaviour now uses up power
*changed GamePowerup: powerups are not hard-coded but instead enumerated just blocks. Technically, they already were, I was just ignoring the enumerated values.
the powerup chances are acquired by calling a static "PowerupChance" method; if none is found, 1 is returned. (This will make it possible to add new powerups to the game via scripts).
*hopefully fixed font clipping issues. You'd expect MeasureString() to actually measure the string but apparently not.
*increased volume of "spitfire" sound effect
*fixed Another XP/ non-composited oversight with the pause screen
*Made cheat/value entry screens friendlier for single core machines (more cooperative)
*changed FileDialogs to start in sensible locations (browsing for levelSet's starts you in the levelSet's folder)
+Added Undo/Redo to the Editor. Rudimentary, but works OK. At least now I don't have to pull hair out when I accidentally delete a bunch of blocks...
+Added Icons to various elements. retitled Set Properties Window (frmCreatorProperties didn't really have the feel I was going for)
+added "Silent" property to InvincibleBlock (useful in editor for caging balls).
+added a "Shell" item (mimics the koopa shell from SMB; breaks/damages bricks to either side but slides along their top
+added a few Triggers/Events
-removed hard-coded references to "Consolas" font. Now refers to INI setting monospace in the "game" section comma delimited list, first entry found will be used.)
Also redefined some more internals... now there is a "minecraftblock" that, if minecraft is installed, will actually read the terrain.png from it's jar file and allow the use of blocks from minecraft. Totally pointless, but oh well.
Works much better now. I'd even go so far as to say slick. Errors during load now make the splash screen turn red (and on win7 the taskbar button as well) and stop- clicking will close it (instead of trying to open the main game window), and you can copy the initialization information (for reporting problems) Only caveat for the entire thing is the sound library. You'd think that playing Ogg files would be pretty simple- it's Open, after all. Not the case. Every single one I've found that actually works either required x86, wasn't truly free (like BASS.NET, which I'm using now) or required some goofy bunch of dlls that didn't even work properly (DragonOgg). And XNA laughably only supports WAV files, which makes it nothing more than a glorified PlaySound() API.
Thankfully at least the sound support is done with adapter classes, so if I ever find a sound library that can play Ogg files and works (and so forth) I'll only need to write another implementation of that same interface. Heck, as it is now, a entirely new sound system could be used by merely writing a new dll and plonking it in the proper place and changing the INI.