Acorn Space Invaders Upload Manifest
I had a suggestion made to me that I included upload times and dates, so I thought I'd bung this index page up and stick the details on this. It's not pretty, I know, but I'd rather spend time on the coding than beautifying a temporary manifest page... Click the links below to bring up the listings...
|
Date
|
Download
|
Notes
|
||
|
Source
|
Packed
|
Archive
|
||
| 09/05/08 | Nothing new on the Invaders front, but made extensive additions to LibASH. The updated version can be found here. Be sure to read the help file included as a couple of things will be changing for future releases. Compatibility has remained for this one... | |||
| 08/05/08 | ![]() |
![]() |
![]() |
Removed virtually all displayed messages from the code and encoded them in their own file which is loaded at runtime. Knocked up a couple of routines to load them and a fast search routine. Running the two packed versions (pre string-removal & post string-removal) side by side shows no noticable difference in speed. Investigating into doing this for a lot of the other fixed strings too. In the process of creating a hashed up development environment containing various tools and code used to create the data used by the game. Although present in the archive, this is far from complete. |
| 02/05/08 | ![]() |
![]() |
![]() |
Made a few more minor optimisations to the title sequence code. Removed some dead code that was used for debug only. Added pause game functionality. Updated archive, as graphics files have changed. Now I've got a stable version out, I'm going to have a weekend without worrying about it... Screenshot of the updated controls screen is here. |
| 30/04/08 | ![]() |
![]() |
![]() |
Imported my FNcopy_object() function into LibASH, as this seemed to be the best place for it. Called it FNash_blockcopy() and documented it. Optimised the title sequence code a little more by re-writing the section of it that deals with the time-out/keypresses. This can be considered a stable release of what exists, although there's a lot more to be done. |
| 29/04/08 | ![]() |
![]() |
Fixed a minor issue in LibASH. Didn't affect Invaders code, but could have affected other stuff. | |
| 28/04/08 | ![]() |
![]() |
![]() |
Finally nailed that memory trashing (I think) down to the fact that claimed memory isn't zero'd by either LibASH or the underlying OS_Heap calls. I've played a few runs straight on it now and it has yet to produce either the straight desktop bail, the "miss_-1-2" bug or the dodgy collision detection, so let's hope... With the move to LibASH, I've been able to tag each block I create with some extra information retrievable using LibASH calls. With this I've been able to implement a much more elegant solution to FNcopy_object(). In other news, I have gained Steve's permission to distribute my version of LibASH based on his code. Also, I've changed the method that I use to create the text based listings produced here, so please let me know if there are any problems with the new method. Thought it about time to include an updated archive too... Removed zero-fill fix from Invaders code and added block fill with arbitrary value to LibASH to perform the same function. (Seemed much more appropriate there.) The posted files today HAVE been updated with these changes, so has the stand-alone LibASH. |
| 24/04/08 | ![]() |
![]() |
Added some more functionality to LibASH (My implementation of Steve Revill's ASH). I'll put these past him and post the whole lot up when complete. Did a little more prodding around and "Chucked a grenade down an apparently empty foxhole and came up with a body..." Well... At least part of one... Seems, now that I've got the bounds checking added to LibASH, that one of the object blocks defined in the title sequence is over-running allocated space somehow. Personally, I can't see how it could. (Possibly a bug in what I'm doing in LibASH?!?) Anyhow... That seems like the next most logical probing point... | |
| 23/04/08 | ![]() |
![]() |
Completed transition to LibASH and managed to fix the memory leak. Tweaked with a few bounds checks to try and find the cause of the memory trashing, with no luck. Re-wrote the error trapping code. Scanned through the code and updated some of the comments where the code had been altered over time to more accurately describe what is currently going on. Modified the initialisation code to display on the screen what is actually going on step by step a la Doom series games rather than just using the simplified "Loading Data... Please wait..." message that I had before. Re-hashed the file prescence detection code as a result. | |
| 12/04/08 | ![]() |
![]() |
![]() |
This is the first release using Steve Revill's ASH (Application Slot Heap) manager for BASIC... I think I've matched all claims with frees, but I'll need to go over this with a fine toothed comb to see if I've missed anything here. A couple of things to do here... I'll post a copy of LibASH back to Steve and see if he's happy with the changes and simple documentation I've had a go with, then I'll make it available for download. (With his permission...) For now, I've promised Steve a credit screen with his name on it for the use of ASH... So here it is... |
| 09/04/08 | ![]() |
Don't look too excited with this, but I managed to get the invaders firing for long enough today to take these screenshots. Missile 1 | Missile 2 These show both types of missiles the invaders can shoot. However, I'm still not able to get it reliable enough to do much more than that. In further progress, I've managed to shrink down several over-inflated object sizes amongst similar optimisations. Please ignore the reference to LIBRARY"<Invaders$Dir>.Resources.Logger" and the associated PROC calls starting PROClog_ as these are part of my in-house logger and are exist in this version in attempt to try and shed some light on why the memory is getting trashed. | ||
| 07/04/08 | ![]() |
![]() |
I've modified the rack firing code since last time to explicitly set invfire%(i%)!type% to either 1 or 2 using a call to FNpct(25) (Returns TRUE 25% of the time.). We always start off with a type of 1 and the speed is set for that type. We then call FNpct(25) and set to type 2 if this comes back TRUE. We also set the speed accordingly... In which case... How come I'm STILL getting -1 as a value of type!?!?! FNtoggle() should toggle a value between 0 & 1. So how the hell am I getting -2 here for the frame!?!?! I actually had it working as it should, the first time I ran it. It was when I ran it again to take screenshots for this page, that it started playing up again... | |
| 05/04/08 | ![]() |
![]() |
Wierd goings on here... I've been advised that re-numbering the crunched code and saving it out will sometimes break it, so I tried running it without re-numbering it first... No change from the other day. Graphics still display fine and collision detection is still screwy. Looking at the raw un-compressed source is even more strange... I've set my own in-house logger on this and here are the results... Any help here would be much appreciated. | |
| 03/04/08 | ![]() |
![]() |
Got the invader's missiles hooked up now... Well... Of sorts anyhow... I'll post a code snippet of the routine in the source file that does the work, but I'm getting some strange behavour here. In the unpacked source, I'm getting "Sprite not Found" errors. In the same piece of code after it's been through the masher, the graphics are displaying fine, only the collision detection seems... Well... Not to detect anything... The missile just sails right through the base... | |
| 02/04/08 | ![]() |
![]() |
![]() |
Got a bit more optimisation done. Re-engineered how the credits screen was being displayed. This has now killed off a lot of the repeated calls and extra lines in the first part of the title sequence. We are now loading the strings in encrypted form from a file. The line spacing is also embedded in this file. Very close to getting the invader's missiles hooked up now. Submitted the archive again due to the inclusion of this new strings file... |
| 31/03/08 | ![]() |
![]() |
![]() |
Got the vast majority of the invader missile logic laid out. Not hooked up yet, however, I can't see any problems, as I've been using similar code all over. Another update to the archive, as the graphics files have changed again... Re-posted the error handler window code here as the comments at the top of the code still referred to the old code. (Oops!!) |
| 26/03/08 | ![]() |
![]() |
Added music fade, optimised the title sequence code a little and tacked on a credit screen to the beginning of it. Pictures here. Re-wrote the rack advance code so it behaves a lot more like the original game. As a consequence, it's now a lot harder. Currently testing an idea that will allow me to implement the invaders ability to fire at the player's base. | |
| 25/03/08 | ![]() |
![]() |
Added the simple fix for the ongoing music bug described yesterday. I'll probably do a cheap fade out or something like that when I've finally got this tidyied up a bit. Here is a screenshot of the updated Keyboard Controls screen with the extra key added. | |
| 24/03/08 | ![]() |
![]() |
![]() |
Got the rack logic completed. Invaders still don't fire yet, but at least the game recognises when the left and right columns have been hit and will re-size the rack accordingly. This also follows for the bottom row. I've also used TrackerModule v4.01 by Hugo Fiennes to add a temporary soundtrack to the mix. This can be toggled on and off with the "M" key at any time. Currently doesn't kill the module off when the program exits. This should be a simple fix, but I just haven't got around to it yet. Therefore music will continue to play ad-infinitum. To stop the music, just hit F12 and "RMKill TrackerModule" fromt he command line. Written a simple, but tidy error handler window for use with module loading. I wrote something very similar to this before, but the problem with it was that the code needed modification for each different project. The new one utilises a modified version of my LibCLI code to take the desired application and the error message from parameters on the command line. |
| 05/03/08 | ![]() |
![]() |
![]() |
Man!!! This is actually starting to look more of a professional conversion and less of a programming tutorial example all the time!! Optimised and trimmed down the attract mode code a little and added a third screen displaying keyboard controls. Included the full archive this time, as the graphics files have been changed. Finally... I just thought I'd consolidate all the important screenshots in one entry here so it is easier to see where I'm at... Score Advance Table, Keyboard Controls and HiTable make up the attract mode. In-Game 1, In-Game 2, Finale 1 and Finale 2 are some screenshots I've taken of gameplay. Finally... Entry 1 and Entry 2 show the HiScore name entry screen working. There is still some essential logic missing... The rack is a fixed size and doesn't yet recognise when you shave a column from either side, or a row from the bottom. The invaders don't shoot. There is no sound. But it's getting there... |
| 03/03/08 | Finally had time to sit down and sort out the HiTable entry screen properly... Removed some of the kludges that initially made it work and fixed the errors that those kludges were intended to work around. Have got a few screenshots as a result of this work. Entry 1 | Entry 2 | HiTable. | |||
| 29/02/08 | Wrote the string length checking code I overlooked when writing the user input part of the HiScore entry code... Still can't find the cause of those "Subscript out of Range" errors, but I've had some helpful pointers from you guys out in Newsgroup land... Thank you... | |||
| 27/02/08 | Written HiScore entry screen. Still stumbling on a few bugs, particularly with array subscripts, but I think I know why this time. I'm just posting listings here for now, but as soon as I can get the damn thing to work properly I'll get some screenshots of it in action. Some of the code re-organisation I did last week broke some more obscure parts of the code. Where these have been spotted, they have been corrected. | |||
| 20/02/08 | Re-written border generation code to actually draw a border by repeating a set of tiles, rather than with a fixed size box bitmap. More re-ordering and re-structuring of the code, adding of a couple of sections and updating various comments with more up to date information. Archive with new graphics included. | |||
| 19/02/08 | Fixed HUD lives display on finale screen. Various other minor fixes made thanks to suggestions made on the Newsgroups... | |||
| 15/02/08 | Added code that I'd missed out of the finale that meant the game would continue, effectively making the player invulnerable to the rack hitting the base. Re-organised some of the code. Removed the code link between FNfs_filesize() & FNfs_find() as this is no longer needed due to the re-org... Added a bounding box to GAME OVER!!! text. Might do some others like this too... | |||
| 14/02/08 | Continuing on from
yesterday, I've found the underlying cause of the "Subscript out of
Range" failures I was getting in the rack collision detection code,
fixed it and removed those ugly kludges from PROCevnt_fr_moverack.
Tweaked the rack advance rate to work at 5px rather than the 3px I had
previously set it at. Also have some screenshots from both the finale
and in game. In-game 1 | In-game 2 | In-game 3 | Finale 1 | Finale 2 |
|||
|
13/02/08
|
Quite a profitable day today...
Got the rack advance
hooked up, the rack advancing down the screen and the finale if
the bottom row of invaders ever gets as far as the base.
Introduced another GFX glitch in the process of moving the rack down
the screen. Got both of these cleaned up. Included an archive update,
as the contents of the sprite files have changed.
|
|||
|
06/02/08
|
After spending the afternoon
writing a rudimentary event logger, I finally got the last of the bugs
nailed in the invader collision detection. This got rid of that ugly
"Subscript out of Range" failure I was getting every so often. Seems
like BBC BASIC rounds up as well as down when it comes to stuffing
floating point (real) values into integer variables.
|
|||
|
03/02/08
|
Undid a couple of changes that
caused most, if not all of the problems of yesterday. Got the collision
detection near enough nailed. Hooked up invader scoring.
|
|||
|
02/02/08
|
Re-written collision detection
code which now sort of works. Fails after a while with "Subscript Out
of Range". Can't see why this is currently. Debugged and optimised
PROCrack_redraw and changed a few internal values around here and
there. Now correctly displays explosion graphic. Also thought it about
time to include an updated archive.
|
|||
|
30/01/08
|
Included a number of
optimisations that I've spotted and corrected the bug that prevented
the screenshot feature from working during attract mode. Removed the
invader collision detection code as it wasn't doing anything useful...
I'm thinking it'll probably be easier to try and re-write this bit from
scratch than try and figure out where I went wrong. The packed code
here has been produced by a highly customised version of MH's
BASCrunch. However, it still needs work to get it behaving how I want
it to. Please report any incosistencies between the src and packed
code...
|
|||
|
27/01/08
|
Included a couple of
optimisations suggested to me by folks on the newsgroups. Still no
further forward in regards to the collision detection. What I've done
should work... I can't see what I've missed here.
|
|||
|
18/01/08
|
Started
work on the invaders collision detection. From what I can make out, the
code I've written should work. Not only doesn't it work, it doesn't
make a blind bit of difference to how the game plays, neither does it
actaully fail with an error!! This has me stumped!!
|
|||
|
09/01/08
|
Fixed
the saucers... They now appear as they should. The values that affected
the frequency of appearance were skewed by the effect of adding all the
rack handling code into the loop. (What I'd done was to fudge the
figures before I'd written the invader handling code. These figures
have now been re-fudged...)
|
|||
|
04/01/08
|
Thanks
to Ste on the comp.sys.acorn.programmer newsgroup, I've been able to
gain so much of a speed increase with the graphics that I've had to use
enforced delay loops to slow certain things down a bit!!! Thanks Ste...
Invaders now move in real time due to the move from BBC BASICs PLOT
&ED x%,y% to SYS "OS_SpriteOp"...
|
|||
|
20/12/07
|
Been
busy working nights for nearly two weeks now, haven't had nearly enough
time to devote to this properly. Tidyied up the code a bit and broke
down the code that displayed the rack of invaders into PROCrack_init,
which is called every time a new rack is setup, and PROCrack_redraw,
which will redraw the rack after each change of position. I've also
written the PROCevnt_fr_moverack routine which is called on the VBlank
to deal with rack movement, invader AI and collision detection etc.
Still no invader AI or collision detection at present though. Code is
now hellishly slow... I seriously need to find some optimisations
somewhere.
|
|||
|
09/12/07
|
More
fiddling today than anything else really... Fixed an oversight in
PROChud_scorehit() where I hadn't updated it to use the new player%
object introduced yesterday.
|
|||
|
08/12/07
|
Finally
got the invaders
to display, although they don't actually do anything yet... Tidyied up
the HUD code a little and padded score & hiscore values with
spaces rather than zeros... Introduced player% object to collect data
on current score, lives & rack etc...
|
|||
|
06/12/07
|
Added
the concept of racks to the HiScore
table. For those eagle-eyed amongst you, you'd have spotted
this feature making it's way onto the HUD yesterday... Score is now
totalled up when you hit the saucer. Just about managed to capture some
animation shots of the various stages of saucer destruction... Shot1 | Shot2 | Shot3 | Shot4 | Shot5
|
|||
|
05/12/07
|
Finished
designing the lowercase character set and got it hooked up. Removed the
hack that converted all names in the hiscore table to uppercase. (This
was to get around the lack of a lowercase charset and was always a
temporary measure.) Added HUD to ingame display. (Lives, Rack, Score
& HiScore e.t.c) Finally posted a couple more screenshots... Revised HiScore table,
In-Game shot with the
HUD up and running.
|
|||
|
02/12/07
|
Fixed
issue where FNcopy_object() was creating objects of a fixed size (52
bytes) even if the source object was smaller.
|
|||
|
01/12/07
|
Tidyied
up the code by creating font size properties in the screen% "object".
Reduced the size of the screen% "object" and those used by the title
sequence. (I don't need a full 52 bytes for these.)
|
|||
|
28/11/07
|
Another
fairly fruitful day resulted in the other half of the attract mode
popping up without a hitch... Resulting in another screenshot.
|
|||
|
26/11/07
|
Had
one of those evenings where everything seemed to hook up perfectly
first time of trying, so I got a
spoiler together for those of you who are interested out
there... Thanks to all on comp.sys.acorn.programmer for their help so
far... Their insights have been invaluable...
|
|||
|
25/11/07
|
Fixed
the artifact problem, mainly thanks to Druck... Also re-coded the title
in preperation for the cycle between Score Advance & HiScore
tables. Not much actually started yet though.
|
|||
|
24/11/07
|
Re-hashed
saucer explosion and added a few more animation frames. Also, in the
root level of this archive is the file ScrnDump. I've highlighted the
artifact problem in red...
|
|||
|
22/11/07
|
Initial
try-it-out version... Posted here to hope that someone can shed light
on the Black is not Black artifact problem...
|
|||
|
21/11/07
|
FNcopy_object()
added. Changed image removal code to use RECTANGLE FILL rather than
blacked out copies of the images in the spritefile.
|
|||
|
20/11/07
|
Interim
version. Collision detection added. Saucer logic split into three
stages.
|
|||
|
19/11/07
|
Initial
saucer logic. No collision detection logic.
|
|||
Source
(Commented code, Meaningful variable & PROC/FN names.)
Packed (As source, but put through a BASIC masher.)
Archive (Full project archive. Includes source & packed code
and graphics/data files.)
Archives are in SparkFS format.