Another few days of tying up loose ends. First up came the creation of the icons for the various EXE files; after a lot of searching and experimentation, I settled on using Icon Workshop from Axialis, which enabled me to knock out the icons in next to no time. Next came a welcome diversion in the form of the Press Release and supporting materials, which will be mailed out to various news sites and organisations on release day (tomorrow...!).
A couple of tweaks to the cursor routine were necessary due to the fact that the "hand" cursor (used to represent Move Mode) wasn't always being displayed properly. I also made a slight change to the Main Window layout, shifting things down a little so that renamed Layer tabs don't interfere with the checkboxes.
After tweaking the installer files and ensuring all debug code is firmly out of the way, it looks like the Editor is finally ready for its official release tomorrow. It's hard to believe this journey started almost two years ago; indeed, reading back over the Blog makes interesting reading, although it's reassuring to see that most of the planned features made it into the final version.
I'd like to take this opportunity to thank everyone who helped out along the way, either with moral support, advice, suggestions, encouragement, or slices of actual code when my brain quite literally refused to work. Particularly, FishEd would not have been completed without the support and encouragement from Paul Maskelyne and Mark Hennessy-Barrett; Paul contributed code and advice in abundance, while Mark chipped in with ideas, feedback, and most importantly, an artist's perspective.
Notable mentions must also go out to Paul Snart, Richard Olpin, Paul Robertshaw, Gary Tonge, Stoo Cambridge, Peggy Parkes, Christine Robinson, everyone on the Blitz Forums, the regulars at YakYak, and not forgetting everyone who has pre-ordered the Editor over the last few days.
This isn't the end of this Blog: I still have a game to write, and there's every chance that a Blitz Max version of FishEd (with Mac support) will make an appearance. In the meantime, pop over to The Official Fished Website for more information.
Monday, July 31, 2006
Thursday, July 27, 2006
Friday 27th
Bug hunting was on today's agenda, and it wasn't long before problems started to present themselves. First came a problem with the Tile Range exporting function; on closer inspection, the wrong variable was being used by the routine, which made me wonder how it ever worked in the first place (unless I made some drastic changes along the way). After changing just one character to fix the bug, I updated the Docs to make a couple of things clearer.
Next came a slight problem with the Toolbar when running the Editor under Windows XP; essentially, the wrong value seems to be detected by the Editor, even though it works fine under Windows 2000. I popped a post on the Blitz forums to see if it's possible to detect the user's O/S, as that's the easiest way to fix the bug.
Next I noticed a small problem with brushes not being clipped properly at the bottom of the map; this turned out to be a missing "=", and is probably a throwback to the tweaks I made to the Brush routines recently.
A more serious bug reared its head later in the day, with the Map Properties system failing to resize maps correctly. I've had trouble with this routine on a number of occasions, so naturally I didn't feel like delving into the code yet again (particularly as I assumed it had already been fixed). After tweaking variables, testing, tweaking, and more testing, I finally managed to iron out most of the problems; I'll probably sleep on the changes and test it thoroughly tomorrow.
Finally, a breakthrough with regard to the Toolbar problem. I'd noticed that the version compiled on the Win2k machine worked fine on the XP machine - this led me to deduce that my copy of Blitz on the XP machine wasn't updated properly (and therefore contained an old Toolbar bug). After a quick installation, the compiler was updated and the Toolbar working. Good job :)
Next came a slight problem with the Toolbar when running the Editor under Windows XP; essentially, the wrong value seems to be detected by the Editor, even though it works fine under Windows 2000. I popped a post on the Blitz forums to see if it's possible to detect the user's O/S, as that's the easiest way to fix the bug.
Next I noticed a small problem with brushes not being clipped properly at the bottom of the map; this turned out to be a missing "=", and is probably a throwback to the tweaks I made to the Brush routines recently.
A more serious bug reared its head later in the day, with the Map Properties system failing to resize maps correctly. I've had trouble with this routine on a number of occasions, so naturally I didn't feel like delving into the code yet again (particularly as I assumed it had already been fixed). After tweaking variables, testing, tweaking, and more testing, I finally managed to iron out most of the problems; I'll probably sleep on the changes and test it thoroughly tomorrow.
Finally, a breakthrough with regard to the Toolbar problem. I'd noticed that the version compiled on the Win2k machine worked fine on the XP machine - this led me to deduce that my copy of Blitz on the XP machine wasn't updated properly (and therefore contained an old Toolbar bug). After a quick installation, the compiler was updated and the Toolbar working. Good job :)
Wednesday, July 26, 2006
Wednesday 26th
More progress over the last few days, after the Demo received a very warm response from those who downloaded it. First up came a tweak to the cursor routines, as I noticed that the Brush outline wasn't pulsing properly when certain panels were being viewed; while tweaking the routines slightly, I noticed a teensy amount of duplicate code which caused one cursor to flash twice as fast, so after writing a separate function everything was running a little bit more efficiently.
Next came a small change to the Test Map system, as there was no on-screen indication that the user was in Test Map mode (this took slightly longer to implement due to the fact that there are two sets of control code, and I was looking at completely the wrong one! ).
Following some feedback from the YakYak forum regarding CPU usage, I tweaked the event system so that switching to another application suspends the editor and frees up valuable processing time.
The final job on my list was a slight tweak to the INI file routine (again!) in order to store the window size (FishEd's main window can be resized to suit larger displays). This also involved tracking down a small problem with the resizing routine, which for some reason wasn't accurately centring the window vertically. Further questions arose regarding the window setup: do I create the window then resize according to the user's preference, or set up the window correctly from the outset?
After a couple of hours scratching my head, trying new things, and tweaking values, the system was working perfectly, thanks in part to the numerous initialisation routines which allow all manner of variables and arrays to be changed on the fly.
Next came a small change to the Test Map system, as there was no on-screen indication that the user was in Test Map mode (this took slightly longer to implement due to the fact that there are two sets of control code, and I was looking at completely the wrong one! ).
Following some feedback from the YakYak forum regarding CPU usage, I tweaked the event system so that switching to another application suspends the editor and frees up valuable processing time.
The final job on my list was a slight tweak to the INI file routine (again!) in order to store the window size (FishEd's main window can be resized to suit larger displays). This also involved tracking down a small problem with the resizing routine, which for some reason wasn't accurately centring the window vertically. Further questions arose regarding the window setup: do I create the window then resize according to the user's preference, or set up the window correctly from the outset?
After a couple of hours scratching my head, trying new things, and tweaking values, the system was working perfectly, thanks in part to the numerous initialisation routines which allow all manner of variables and arrays to be changed on the fly.
Saturday, July 22, 2006
Saturday 22nd
Another furious coding session today, as I'm pretty determined to get the new demo released as soon as possible. Kicked off by checking the setup routines for the Undo/Redo routines, to ensure that the buffers used are always the right size (especially important in the Resize Map routines).
Then I set to work on putting together the installer; I'd already done lots of groundwork on this, so it was a simple matter of putting the right files in the right place and hitting the "compile" button. A few tweaks were needed here and there (the demo version, for instance, has its own set of cut-down I/O routines), but the process was pretty straightforward.
As is usual when I start delving into old code, I realised I'd neglected to include a couple of variables and setup calls in the INI file routines; this was a useful experience, as I then realised one variable wasn't being stored or read properly (not that anyone would notice unless they were really paying attention...).
Next I tackled some website issues, adding an introduction page, ensuring that the various email forwarders were set up, and tweaking the download page to suit the new installer.
Then I set to work on putting together the installer; I'd already done lots of groundwork on this, so it was a simple matter of putting the right files in the right place and hitting the "compile" button. A few tweaks were needed here and there (the demo version, for instance, has its own set of cut-down I/O routines), but the process was pretty straightforward.
As is usual when I start delving into old code, I realised I'd neglected to include a couple of variables and setup calls in the INI file routines; this was a useful experience, as I then realised one variable wasn't being stored or read properly (not that anyone would notice unless they were really paying attention...).
Next I tackled some website issues, adding an introduction page, ensuring that the various email forwarders were set up, and tweaking the download page to suit the new installer.
Friday, July 21, 2006
Friday 21st
After a frantic few days clearing the decks in "the real world", I spent almost two solid days in total tackling the Undo/Redo functions. My logic seemed impeccable, but problems occurred when the user switched to a different Layer. After repeatedly tracing through the code step by painstaking step, it became apparent that an extra step needed to be inserted.
When a project is first started (or loaded), the first action performed will also save out the initial state of the current Layer; thus, when Undo is triggered, the user can step back to the start. With me so far? Now, this is all well and good until the user changes Layers and then makes an edit; using Undo to step back caused the program to miss out a critical step, that of saving the initial state of the Layer that was just activated. And then, of course, the Undo and Redo routines need to be told to ignore this extra step under certain circumstances.
To cut a very long and tedious story short, and after re-writing the routine more times than I care to remember, I finally got everything working (a number of bugs crept in, but this was down to the various Tool routines not calling the Undo Store function properly).
Once this was done, I removed a small piece of code I'd added to allow the user to change the number of Undos; after careful thought, I decided to fix the number at 99, as the invisible steps stored by the program also count towards the total and things could potentially get a bit confusing (especially for me!). Next came the task of checking all Drawing Modes to ensure that the Undo calls were in their correct spots, then another couple of tweaks to ensure that the precise screen/Layer co-ordinates are saved and restored as part of the Undo process.
With the heavyweight tasks out of the way, I set to work on a number of little tweaks and housekeeping chores: first came a small bug in the Update Map routine, which caused the program to crash if the user used drawing tools on a Layer with no Tileset loaded. Next I added the Circle Mode and Circle Fill Mode to the Tools menu (something of an oversight on my part), and updated the documentation accordingly.
The file and I/O routines underwent some tweaks, first in the form of an Undo Reset function, called whenever a Project is loaded or the user chooses New, for example. While digging through the I/O code, I noticed that the Map Set loading routine fails to accommodate maps that might be smaller or larger than the current ones (something of a throwback to the way the Editor worked in the early days). A few quick tweaks later, and the oversight was rectified.
As well as finalising the Project I/O, the final job of the night involved adding some checks to the Map loading code, allowing the user to Undo if a map file is accidentally loaded over the current Layer (this only works for Map files / single Layers, as opposed to Map Set files which load over all Layers, but is an extremely useful addition).
With just a handful of minor things to tackle tomorrow, including a new Demo Version and putting together the installer, it looks like the light at the end of the tunnel is finally here...
When a project is first started (or loaded), the first action performed will also save out the initial state of the current Layer; thus, when Undo is triggered, the user can step back to the start. With me so far? Now, this is all well and good until the user changes Layers and then makes an edit; using Undo to step back caused the program to miss out a critical step, that of saving the initial state of the Layer that was just activated. And then, of course, the Undo and Redo routines need to be told to ignore this extra step under certain circumstances.
To cut a very long and tedious story short, and after re-writing the routine more times than I care to remember, I finally got everything working (a number of bugs crept in, but this was down to the various Tool routines not calling the Undo Store function properly).
Once this was done, I removed a small piece of code I'd added to allow the user to change the number of Undos; after careful thought, I decided to fix the number at 99, as the invisible steps stored by the program also count towards the total and things could potentially get a bit confusing (especially for me!). Next came the task of checking all Drawing Modes to ensure that the Undo calls were in their correct spots, then another couple of tweaks to ensure that the precise screen/Layer co-ordinates are saved and restored as part of the Undo process.
With the heavyweight tasks out of the way, I set to work on a number of little tweaks and housekeeping chores: first came a small bug in the Update Map routine, which caused the program to crash if the user used drawing tools on a Layer with no Tileset loaded. Next I added the Circle Mode and Circle Fill Mode to the Tools menu (something of an oversight on my part), and updated the documentation accordingly.
The file and I/O routines underwent some tweaks, first in the form of an Undo Reset function, called whenever a Project is loaded or the user chooses New, for example. While digging through the I/O code, I noticed that the Map Set loading routine fails to accommodate maps that might be smaller or larger than the current ones (something of a throwback to the way the Editor worked in the early days). A few quick tweaks later, and the oversight was rectified.
As well as finalising the Project I/O, the final job of the night involved adding some checks to the Map loading code, allowing the user to Undo if a map file is accidentally loaded over the current Layer (this only works for Map files / single Layers, as opposed to Map Set files which load over all Layers, but is an extremely useful addition).
With just a handful of minor things to tackle tomorrow, including a new Demo Version and putting together the installer, it looks like the light at the end of the tunnel is finally here...
Tuesday, July 11, 2006
Tuesday 11th
Yesterday's session threw up a small bug in the system which allows Tile sizes to be changed; everything worked from going from 32x32 upwards, but not down to 16x16. More confusing still, the error was contained in the Map display routine, which should remain completely unaffected by the variables connected with Tile sizes.
I was dreading the impending hours of bug hunting, but luckily after tracing through the code a number of times, the solution suddenly presented itself (and was a quick fix, requiring a couple of variables to be reset). The problem stemmed from the fact that the Map offset wasn't being reset, and as the offsets change depending on the Tile size (because there are more/less Tiles on screen), this was causing the Map display to go a bit wonky.
After this I corrected an oversight in the Close Tileset function, which neglected to reset the Tileset's filename (and therefore, closing a Tileset then choosing Refresh Tileset caused it to pop back up again). This might actually be a nice way of bringing back a Tileset closed by accident, but for now it'll stay as-is.
Next on the agenda came a slight tweak to the Documentation, to include yesterday's new Brush grabbing system (I'm desperately keen to keep on top of these doc changes, as it's a royal pain to do lots of updates in one go).
Finished off today's session by tweaking the I/O routines. First came the task of adding error handling to the Static and Parallax loading code (when a Project file is loaded, the program needs to check that it can actually find the files specified in the paths that were saved when the project was saved). This was something of an oversight, as I'd added the code to do this for Tilesets but neglected Static and Parallax layers.
This also tied in nicely with a small tweak to allow me to specify file locations for the Tileset, Static, and Parallax images. When FishEd is released I want to include example images and an example project file; however, as the program stores the absolute path of all images loaded, and given that the actual installation drive and folder could be different on every machine, I needed to devise a way to always make my example project file look in the fished\graphics folder.
After scratching my head over this, the solution was both simple and elegant: when I save my example file, I can set a special flag that tells the program that this is my special example file. When the images are loaded in, it checks this flag and tweaks the directory so that the file is loaded from the correct place. And, rather neatly, the error handling is still in place just in case the user deletes or moves the example files.
With those tasks out of the way, I only have a handful of things left to do:
1. Finilase Project I/O to cope with any recently-added variables.
2. Remove menu options for incomplete or missing functions (which will probably appear in the next version).
3. The dreaded Undo / Redo functions
4. Test, test, test...
Hopefully I can get everything wrapped up by the weekend, which would give me and my loyal Beta Testers a couple of weeks to iron out any major bugs before the product goes gold. After that, beer and a holiday. :)
I was dreading the impending hours of bug hunting, but luckily after tracing through the code a number of times, the solution suddenly presented itself (and was a quick fix, requiring a couple of variables to be reset). The problem stemmed from the fact that the Map offset wasn't being reset, and as the offsets change depending on the Tile size (because there are more/less Tiles on screen), this was causing the Map display to go a bit wonky.
After this I corrected an oversight in the Close Tileset function, which neglected to reset the Tileset's filename (and therefore, closing a Tileset then choosing Refresh Tileset caused it to pop back up again). This might actually be a nice way of bringing back a Tileset closed by accident, but for now it'll stay as-is.
Next on the agenda came a slight tweak to the Documentation, to include yesterday's new Brush grabbing system (I'm desperately keen to keep on top of these doc changes, as it's a royal pain to do lots of updates in one go).
Finished off today's session by tweaking the I/O routines. First came the task of adding error handling to the Static and Parallax loading code (when a Project file is loaded, the program needs to check that it can actually find the files specified in the paths that were saved when the project was saved). This was something of an oversight, as I'd added the code to do this for Tilesets but neglected Static and Parallax layers.
This also tied in nicely with a small tweak to allow me to specify file locations for the Tileset, Static, and Parallax images. When FishEd is released I want to include example images and an example project file; however, as the program stores the absolute path of all images loaded, and given that the actual installation drive and folder could be different on every machine, I needed to devise a way to always make my example project file look in the fished\graphics folder.
After scratching my head over this, the solution was both simple and elegant: when I save my example file, I can set a special flag that tells the program that this is my special example file. When the images are loaded in, it checks this flag and tweaks the directory so that the file is loaded from the correct place. And, rather neatly, the error handling is still in place just in case the user deletes or moves the example files.
With those tasks out of the way, I only have a handful of things left to do:
1. Finilase Project I/O to cope with any recently-added variables.
2. Remove menu options for incomplete or missing functions (which will probably appear in the next version).
3. The dreaded Undo / Redo functions
4. Test, test, test...
Hopefully I can get everything wrapped up by the weekend, which would give me and my loyal Beta Testers a couple of weeks to iron out any major bugs before the product goes gold. After that, beer and a holiday. :)
Monday, July 10, 2006
Monday 10th
Another hectic few days of work; with the keyboard shortcuts finally completed, I set to work on the docs (which required a few tweaks as tables copied from Word aren't particularly elegant when pasted into FrontPage), bringing everything up to date and ensuring all documentation files were consistent. This also involved adding new screenshots, utilising a tileset kindly supplied by Stoo Cambridge (of Cannon Fodder fame).
The next task involved a few slight tweaks to the toolbar icons, some of which had been "borrowed" from various sources until I found time to draw my own. The "hand" icon for Move Mode also needed a slight touch-up as it used the masking colour, which in turn caused its outline to disappear on occasion.
Unable to focus on my To-Do list, yesterday I started playing with an idea I'd seen in the Jazz Creation Station (the level editor bundled with the Jazz Jackrabbit games), which allows the user to grab Brushes directly from the Tiles Panel. After making some tweaks to the existing grab routines, it was a fairly straightforward process to implement, and now it's much easier to grab chunks of geometry that may be scattered across several Tiles.
The next task involved a few slight tweaks to the toolbar icons, some of which had been "borrowed" from various sources until I found time to draw my own. The "hand" icon for Move Mode also needed a slight touch-up as it used the masking colour, which in turn caused its outline to disappear on occasion.
Unable to focus on my To-Do list, yesterday I started playing with an idea I'd seen in the Jazz Creation Station (the level editor bundled with the Jazz Jackrabbit games), which allows the user to grab Brushes directly from the Tiles Panel. After making some tweaks to the existing grab routines, it was a fairly straightforward process to implement, and now it's much easier to grab chunks of geometry that may be scattered across several Tiles.
Wednesday, July 5, 2006
Wednesday 5th
The past few days have been spent knee-deep in tweaks and refinements, kicking off with the conversion of the HTML documentation to a Word file (which will, in turn, make it easier to produce a proper Windows help file and a PDF).
The next major task was to finish off the keyboard input and finalise the keyboard shortcuts on the various menus. Despite being a relatively simple task, this ended up spanning a couple of days, for a number of reasons; firstly, as the program grew and evolved, certain shortcuts that initially made sense no longer did. Plus, after careful experimentation it became clear than not every menu action needed a keyboard equivalent. And finally, certain features needed to be made more consistent with the likes of, say, PhotoShop.
While changing keyboard logic and moving checks and function calls, I did manage to track down some more obscure bugs, as well as adding and tweaking some of the menu commands (which means that my lovely docs are now out of date...!).
The next major task was to finish off the keyboard input and finalise the keyboard shortcuts on the various menus. Despite being a relatively simple task, this ended up spanning a couple of days, for a number of reasons; firstly, as the program grew and evolved, certain shortcuts that initially made sense no longer did. Plus, after careful experimentation it became clear than not every menu action needed a keyboard equivalent. And finally, certain features needed to be made more consistent with the likes of, say, PhotoShop.
While changing keyboard logic and moving checks and function calls, I did manage to track down some more obscure bugs, as well as adding and tweaking some of the menu commands (which means that my lovely docs are now out of date...!).
Saturday, July 1, 2006
Saturday 1st
The past few days have been spent sorting out an EULA (End User License Agreement), as well as working on the installation system and chipping away at bugs. Yesterday was spent tracking down a small bug in the Dump Map system, which was consistently failing to dump the correct Layer. The problem? A mis-typed variable. Such is life. :) I also had to tweak the documentation; any slight change now has to be added straight away, lest I lose track and end up with less than adequate documentation (I've spent so much time on them so far, there's no point getting lazy at this stage).
Today saw a couple of tweaks to the Map rotation code, to allow the current Layer, all Layers, or all visible Layers to be rotated. This was a relatively simple addition, and like so many recent tweaks it only came to light when methodically going through the docs and seeing how things worked in practise.
As I was uploading some files today, I noticed that it's now almost two years since FishEd was started (that might sound like a long time, but on average I was scraping only a couple of hours' coding time for an average of five days a week). Regardless, I now have a definite goal in mind: get FishEd released on the second anniversary of its inception (just over four weeks...! ).
Today saw a couple of tweaks to the Map rotation code, to allow the current Layer, all Layers, or all visible Layers to be rotated. This was a relatively simple addition, and like so many recent tweaks it only came to light when methodically going through the docs and seeing how things worked in practise.
As I was uploading some files today, I noticed that it's now almost two years since FishEd was started (that might sound like a long time, but on average I was scraping only a couple of hours' coding time for an average of five days a week). Regardless, I now have a definite goal in mind: get FishEd released on the second anniversary of its inception (just over four weeks...! ).
Subscribe to:
Posts (Atom)
