|Tuesday April 9th, 2013|
Recently updated BASeBlock to version 2.8.0, then a bugfix release for 2.8.1. It can be found here.
I should also mention that it has been on github for a while now; I recently pushed the latest changes, this can be found here. That repository also includes the "BCUpdate" Library I wrote for handling automatic updates. This is also used in BCJobClock. it essentially communicates with a remote hosted page through PHP/MySQL. The actual PHP source is not available, however it should be relatively simple to mirror the appropriate response format and fork the main library.
I've taken a break from C# for the last few weeks, not entirely on purpose, mind you- I simply don't have any "active" projects in it. BASeBlock is a game and while I think it's great, I also think I ought to start another, more ambitious project. In the meantime, I've worked on my Minecraft Bukkit Plugin, BASeCamp Survival Chests and have added several features to that, as well as adding a few suggested features from the comments. It has spurred me to write another piece on C# and Java, mostly because I haven't written a nice long piece on anything for a bit.
|Friday, February 15, 2013|
reworked the page design on the main landing page (that is, here) a bit, mostly regarding Stylesheets. I dumped background images in favour of neutral, solid colors, and tries to make the page flow more "naturally".
Originally, I wanted to actually rewrite the index page from scratch, until I decided that was overdoing it, since I really am quite content with the current design/layout. I much prefer the new style, as well. I of course backed up the old stylesheet so I can revert for whatever reason.
|Tuesday January 29th 2013|
I found quite a few crash bugs in BASeBlock 2.7.0, so I've fixed the ones I found. I will be uploading the new version shortly. (2.7.1). This version also has some changed content. The "GameCharacter" now uses original art (as crappy as it is) rather than placeholder Mario sprites. I also added a few Introduction strings that I forget and whose specifics aren't important.
While I'm here, may as well mention one of my other more recent projects- "BASeCamp Survival/Chests". It's a plugin for the Bukkit Minecraft server that adds a few interesting features for the purpose of multiplayer contests.
|Monday January 28th 2013|
BASeBlock has been updated to version 188.8.131.52. Changes:
This is more a "maintenance" type of update, which fixes a few bugs and adds a bit of content here and there, but doesn't make major changes. Hopefully I can start updating it more frequently, rather than having months go by between updates, but we'll see how it goes.
- Added "WoodBlock". This block can only take damage from hits that occur on it's side. Logic being you need to hit it "in the grain".
- Tweaked the drawing of "Cracked" blocks to work more generically. This also fixed some visual issues with the old method.
- Fixed a few crash bugs. Also re-added a music file that was missing from the installer.
- Majorly refactored the internal event system. Now the events use the "C# standard practice". This has no outward effect, but I also fixed a few race conditions while I was there too, so that's a win as well.
|Friday December 21st 2012|
BASeBlock has been updated to version 184.108.40.206: Major Changes:
This represents a lot of work; this is just a very basic list of the changes I could remember. There were also a few updates I prepared but ended up abandoning due to a few issues that came up, so I might have missed some rather large features . This was supposed to be 220.127.116.11 but I bumped it up to 18.104.22.168 for some reason which I don't remember (but I do remember I did have a good reason).
- Tweaked Splash Screen/About box. Assembly view (when used as about box) now sizes properly, and displays icons for each item, too. It also is enabled for sorting User size.
- rewrite the SandBlock, and made it visible in the Editor. Note that it still works a bit oddly, and has some clipping issues, but it works much better than it did previously (which is why it's now visible, duh)
- Made some fixes to the Editor, and fixed some attributes and assignments.
- Rewrite the LaserShot, so it can now bounce off blocks.
- refactored some parts of the editor. The outward appearance is the same but the code is a lot better to work with now.
- Added Game Statistics. These are not yet displayed anywhere, though. (They are tracked per levelset as well as globally).
- Added bosses. These are not yet present in the game's default Levels and capabilities, however. To check it out, use "eyeboss" as a cheat. The cheat menu is accessible with Control+Shift+C.
- tweaked Highscores being shown, now it will go faster if the mousebutton is pressed, similar to the score display.
- removed the original startup sound (level startup) now the only two are the various Arkanoid reinstrumentations.
- added numbounces field to temporary ball behaviour: ball now bounces a given number of times before suiciding itself. Naturally, this defaults to 1, so that all the code that existed before works the same. Used initially for...
- LaserSpin Powerup, and tweaked corresponding Terminator Behaviour. Ball moves slower and shoots lasers faster, which is fine since the lasers bounce, as indicated before. Has a rather negative impact on performance....
- Fixed the SoundDataListEditor again.
- Lasers also bounce off of the Polygon blocks- other changes to the core classes have increased some of the capabilities with regard to Editing.
- Added SwitchBlock, which allows setting a GroupID. when all Switches of a given GroupID are all on or all off, the Active or Inactive Trigger ID's of each are fired.
- Allows Dropping of supported files on the Editor to load them
- All destructive operations (that would reset or replace the active LevelSet data which has not been saved) now have a confirmation dialog.
- Added a drop down for Undo and Redo, to Undo or Redo to a given stack position. This might be in the previous version but I seem to remember working on it recently.
- Fixed "QueuedSoundManager" which is used for some music and the introduction sounds.
- Selection in Editor uses rainbow hues, to make it easier to see with some block colours.
|Saturday December 15th 2012|
Added some jQuery to the main site. I had an idea to use AJAX for some sort of "update" widget. It would be neat (IMO) since it would use the exact same server-side logic that is already used by the Updater:
There is of course a rather big difference. First we wouldn't need to manage a download at all. Just provide a link to the download page. eg, downloads/php?dlID=21 would download the latest version of BASeBlock.
The only thing is I cannot really think of a good reason for such a feature to exist. Best I can think of would be to use the Update data (which includes products and versions) in some sort of marquee style widget beneath the navigation menu, which could be interesting.
|Thursday December 13th 2012|
-Added github button to navigation bar. This might require a Full refresh (Control F5 in most browsers).
-Removed the Downloads display on the downloads page. The counts for items seems to be resetting for some spurious reason. Bit of a shame, I kind of liked when ti was working and I could keep track of the numbers without using the cPanel analytics.
|Tuesday December 11th 2012|
Like an old camera, I can't seem to focus lately. Even so, however, I finally decided to give BASeBlock the run-down and catalog a few bugs and issues I encountered. A quick synopsis:
There are various other small issues I want to work out before I do another release. This is going to introduce a good number of new features all across the board. I also want to make a standard set of levels that show the capabilities of the game's internal logic, and essentially it's "Engine" to it's fullest extent; Enemies, bosses, various blocks that you don't normally see, etcetera. I'm still not sure I trust the GameCharacter stuff, though I have to admit it still works fairly well. There are some interesting clipping issues where the character can essentially clip through any wall if they jump at a corner at the right angle; and this usually results in death, because the ejection code will often eject the player out the wrong end; basically, They'll get shot out of the level. Not a desired result, obviously. Within the confines of that and as long as the levels are fairly simple, it works OK. Usually, the problems with the GameCharacter arise when the movement multiplier get's too high, which makes it more likely for the character to get into a block, and thus more likely that they will cause the ejection routine to work improperly. I've yet to determine what causes it. I'm going to focus more on making the game moer feature complete and making a levelset that could be called a "standard" set of levels that takes advantage of the games capabilities. After that, perhaps another one that showcases extensibility via new blocks and/or GameObjects.
- The Sound Data List Editor was annoyingly broken.
Editing the name of a embedded sound file made the textbox lose focus and other events fire which causes it to clear. The single character is inserted in the name and it shows up in the ListViewItem, but it is incredibly annoying because changing the name involves clicking the item, adding a letter, clicking the item, adding a letter, etc. This thought I f ixed this previously but apparently not. I fixed this by changing the Textbox validation code to the Validate Event, rather than the Change event, because I work on this project alone I think I know who might have made that mistake...
- Lasers didn't bounce off of Polygon blocks properly, and they destroyed the polygonblock. This, I've partly resolved, it was originally using the rect of the block for some reason. which doesn't exactly work for polygon blocks, since they override that particular behaviour. It still bounces weird, will need to finish resolving that.
Some other minor issues, particularly with object use and the PropertyGrid. Specifically, the SpawnEnemyEvent. This is editable- by clicking the ellipsis on LevelEvents and adding a SpawnEnemyEvent via the dialog. However, the class was using the wrong attributes; I was using the Editor attribute to define a UITypeEditor; but, I was passing in a Type that was in fact a TypeConverter (and thus I should have been using a TypeConverter Attribute). This resulted in an Exception. I resolved this in two steps. First, I facepalmed, then I changed the line from:
And changed it to the correct:
Funny how you need to use a TypeConverter as a TypeConverter. Strange that.
|Wednesday Nov 7th 2012|
Bukkit is a server mod for Minecraft which makes it easy to develop plugins that add functionality. I wrote news entries regarding BCPixArt previously, which attempts to read in images and turn them into various blocks. More recently I have taken to the task of populating chests with random materials. My project on this can be found here. I'm particularly proud of the random names it generates for items. "Spanish mail of blazing sitting", "Katana of inept dreaming" etc. Occasionally it gives items a ridiculous "lore" value as well. The default configs also have capabilities that add a few "easter egg" items.
|Thursday, Nov 1st, 2012, 12:35AM|
Site has been down for about 24 hours. Turns out that when you get shared hosting you do indeed get what you pay for. Though it could very well be that MySQL is corrupting my blog database every few months, too. Hard to say, really. it's possible nobody noticed. I certainly didn't at the time.
|Wednesday, October 24th, 2012, 7:00AM|
In the planning stages of a design overhaul to the main landing page. Too early to say what will change, in fact I might not change it at all. I mgiht switch the "news" entries so they
|Monday, October 8th, 2012, 7:00PM|
re-added (or rather, uncommented the relevant portions) of page code that show the random images in the top left. I decided that while it makes sense to have them not visible on some of the unlinked pages that I give to potential employers, hiding it from the rest of the site for the same reason is a bit silly. So those are back.
I've revisited BCJobClock and have started some maintenance, and hopefully will be hired to add further features to the program from the original client. BASeBlock's latest release is rather big compared to the old one, which some more major refactorings, noew objects and gameplay mechanics to go around. I should be able to release another version soon. (Of the latter, the Former, BCJobClock, is not available from my site yet, if ever).
|Saturday, September 22nd, 2012, 12:16AM|
News for the site itself is rather low. I haven't had a lot of internet time over the last while since I don't have it at home any more. I have however used this time to write a rather long series of articles, aimed around the subject of programming language performance and ease of use, and whatnot. Currently I have 7 complete posts ready to publish; I have published three of the series and am researching the appropriate information to create a few more. Essentially it looks at how different languages implement the same algorithm; which ones take more code, which ones are more concise thanks to ease of use provided by what many typify as scripting language features. I found it very interesting. Particularly since the fastest language was not what I expected.
I have been doing quite a bit of work on BASeBlock as well, I have refactored some code, changed the lasers so they bounce off blocks, revised the udnerlying code so that there are a number of different "shoot" type powerups, rather than just the one that get's upgraded. The later abilities of that former code would never be witnessed without cheats (how would you get 10 or more "Terminator" powerups?). I made then separate and mutually exclusive as well. I did quite a bit of work on the underlying parts, refactoring some of the core settings classes as well as a few other base classes to add functionality that escapes me at the moment, a couple new editor features for aligning blocks and selecting certain sets of them, etc.
THe big benefit of no internet is that I have much fewer distractions, which can only be a good thing, really.
|Tuesday, August 30th, 2012|
BASeBlock has been updated to version 2.4.1.
|Tuesday, August 21st, 2012|
Having recently installed BASeBlock (the latest release version, 22.214.171.124) on my laptop, I've come to find that the "Games Explorer" functionality breaks everything :/ Well, not everything- for some reason the shortcut claims that it's not a valid program. since it seems related to Games Explorer I have to conclude I messed up creating the .GDF file for the game. I will investigate this problem.
After a quick investigation... I'm not really sure what the issue is. Working with .GDF data is a pain :/ In any case, the error message I have received after install reads that "play.lnk" in games explorer is not a valid win32 Application, which comes as no real surprise, in retrospect.
|Sunday, August 5th, 2012|
Not really related to the site, but I fixed my Laptop's "original" hard drive. Not so much "fixed" (it still is problematic) but I cordoned off the trouble spot by creating a 60GB empty partition in front of the actual system partition, which avoids the damaged part of the disk (or something...). Now that I have it running windows I was able to do several things, some of which I can't actually discuss due to MS NDA's. What I can tell you- and as I detail in a Blog entry, is that I was able to test some of the things that had been reported as broken. I was unable to reproduce any of the issues, and both immediate and "normal" updates still worked fine. I did touch it up a lot and fixed a few UI and other issues, particularly the annoying flicker that resulted when the entire Listview was invalidated and redrawn (fixed by invalidating only the relevant portions).
Of course, changes to the Update library are relevant to BASeBlock. I've been working on making more of the actual updating logic more partitioned into the- well, Update library. It should, ideally, just require a single call to a static function at startup for all the updating requirements which does all the work. As it is now, each application needs it's own logic for this and it's usually all the same with a few changes so it makes more sense to separate it as much as possible. This should make Updating in BASeCamp applications smoother and easier to manage. BASeBlock itself, I don't think the source I have is the latest version, since VS2010 claims it is an older solution (but I definitely updated the solution file to using 2010) so I might have copied it to the 2010 projects folder (rather than keep it in the 2008 folder) before that upgrade. I made a few changes since and I don't want to lose those so I'll leave BASeBlock's dev state as-is. I did get my desktop PC back but space is an issue and there isn't anywhere to properly set it up yet. It does however make an excellent footstool, albeit an expensive one.
To add a bit of bitterness to the above, it is very possible that I will lose the domain for bc-programming.com in October when it comes up for renewal, which is a bit of a problem.
|Wednesday, July 25th, 2012|
Update: I did not get the aforementioned job. Which is pretty much what I expected.
In other news, having an MVP award is far more useless than I would have expected for this situation. I'd continue, but the main landing page is no place for such things.
-Development has frozen. I have the source code on an external drive (in case my desktop is somehow damaged in storage or something) but I cannot really work on it because all I have is MonoDevelop on this machine, whose hard drive is on the verge of failure and probably wouldn't take a Windows installation, let alone VS2008/2010 without suffering from catastrophic HD problems. (Even trying to make small samples or working on the more general classes like the obfuscation class I wrote causes huge pauses as the hard drive decides whether or not to burst into flames).
I've pretty much abandoned every other project anyway, so it doesn't matter. Obviously VB6 is out of the question on Linux for obvious reasons which gives me a good excuse not to work on BCSearch.
|Tuesday, July 19th, 2012|
--redacted the over-optimistic tripe that used to be here--
|Tuesday, July 3rd, 2012|
Not a huge amount to detail here: I may have thought up a good way to get BASeBlock's Polygon blocks working with the PlatformObjects (enemies, players, etcetera) without having to make massive changes across the board.
More importantly, I'm trying to decide what to do with BCJobClock. I'm thinking I could go with a method similar to what I tried for BASeBlock. Since BCJobClock is more "businessey" than BASeBlock, on account of, well, not being a game, I am thinking of tying it into my ProductKey code as I did for BASeBlock. Unlike BASeBlock, however, which doesn't actually run any differently whether registered or unregistered, my thought is to make purchase required before the program works properly, or only allow a "demo mode" which inconveniences the business process. Naturally, I will work to iron out the issues that I basically duct-taped when the client started to encounter scalability problems (good thing I made a lot of things options in the INI file!).
Another improvement I want to try is to get it working with SQL Server as well as MySQL Server. The only reason I didn't use SQL Server to begin with was because I couldn't get it installed properly. I was actually a bit dissapointed that MySQL Server installed so much easier than MS SQL Server on Windows. The two use a bit of different syntax, but thankfully my queries are already part of a separate interface that currently only has a MySQL implementation (as well as one for Access/Jet that I used for very early testing). The program will then be easily swapped about to use various implementations based on it's settings.
At that point, of course, the big problem will be marketing, and trying to find businesses that could benefit from the product. The first and most obvious possibilities being automotive repair shops; the second being PC Repair shops. This was part of the reason I was looking for a partner in the likes of Northwest Forest Products, since they have expertise in that area (I would hope so).
|Sunday, July 1st, 2012|
Returning to BASeBlock after that excursion to XNA4 with BCDodgerX, and I've managed to add Polygon Blocks. Essentially it allows the creation of arbitrary polygons. I think the collision code would only work for convex polygons, but if so one can simulate non-convex polygons using 2 or more convex polygons anyway. I still have to figure out how I'm going to get platformObjects (the shells, GameCharacter, and that stuff) working with it, though. Right now they work, but they only "collide" with the rectangle bounds of the object. Getting them working properly with the polygons is going to be a pain because I just got those PlatformObjects working well. (Of course I can always just revert from my local SVN repository if I cannot get it working.
Here is an example level, shown in the editor:
I've been making some tweaks to the various UITypeEditors that are used for the Editor's PropertyGrid, to make editing some things easier, made some fixes to the grid locking feature, as well as smoothing out a few UI elements. I'm tempted to upload this version as it is as 2.5, but would rather figure out how I'm going to get PlatformObjects working admirably with Polygon blocks first. (it's not necessary, really, since levels could simply not include both, but it would add a lot to the game if they worked properly)
Oh, and in other news I am now a 2012 C# Microsoft MVP. I thought that was pretty awesome.
|Monday, June 18th, 2012|
My latest project, BCDodgerX now has a initial release :D
I also purged the News page here so that older entries are in an archive file. This reduces the bandwidth load a bit.
|Tuesday, June 12th, 2012|
I've made changes (but not uploaded them) for BCSearch (fixing several bugs) and BASeBlock, and more prevalently, I've started a new project, BCDodgerX, which is a rewrite of my BCDodger Program using XNA.
I also wrote a article about freelancing, and in particular revolving around freelancer.com.