@database @node MAIN @title "George & The Repton Clone" @{fg shine} GEORGE AND THE REPTON-CLONE@{fg text} 17/9-13/10/98 @{fg shine} UPDATED 24 November 1998@{fg text} by Harlequin Software in Blitz Basic 2.1 @{"Legal stuff " link Legalities} : Distribution/Disclaimer @{"Installation" link Install} : Game/Editor @{"Update " link update} : Speed change @{"Update 2 " link update2} : Correction to correction @{"The Game " link Game} : How to Play @{"The Editor " link Editor} : How to design and test your own levels @{"Credits " link Creds} : Whodunnit? @{"Blitz-Bug " link Bug} : Warning for Blitz Programmers @endnode @node update @title "Update" @{fg shine}UPDATE@{fg text} 24 November 1998 I got a Typhoon accelerator and discovered that the timing needed to be more precise, as some of the smaller levels speeded up with an 030. This tiny update now ensures that the game runs at 25fps on all processors. @{fg shine}@{"Splendid..." link MAIN}@{fg text} @endnode @node update2 @title "Update 2" @{fg shine}UPDATE 2@{fg text} 30 May 1999 Actually, I lied in the previous update - I sneaked another change into the last update. I added a message to the options screen that warns you if no custom-levels have been loaded. Unfortunately, the small gap between finishing the game, and making the update, was sufficient for me to forget which flag was set for this purpose, and I chose the wrong one - so the message would advise you that the custom levels were not loaded - when they were. This second update corrects this error, but probably introduces a new one :) There will be no more updates, as I am currently working on other projects. @{fg shine}@{"Splendid..." link MAIN}@{fg text} @endnode @node Install @title "Installation" @{fg shine}The Game@{fg text} Just copy the executable @{fg shine}George@{fg text} and the drawers @{fg shine}GFX@{fg text} and @{fg shine}SFX@{fg text} to the same drawer on your hard-disk. Error messages will be given if the executable can't find the SFX and GFX files. @{fg shine}The Editor@{fg text} Put the executable (GeorgeEd) anywhere on your hard disk, and copy the contents of the Fonts drawer to your Fonts directory. @{fg shine}@{"I'll do that, then..." link MAIN}@{fg text} @endnode @node Bug @title "Blitz-Bug" I was just writing the routine to check that there was enough room on the disk to save a file, and discovered a bug I haven't noticed before. I saved the DiskFree value into a .l (long type), and stored the projected filesize into a .w (word type); then compared them, i.e. @{fg shine}AnalyzeDisk@{fg text} pa$ ev.l=@{fg shine}DiskFree@{fg text} fsize.w={routine to work out size of file before saving} @{fg shine}If@{fg text} fsize" where name.dat is the name of the .dat file. You can also put this in ToolsDaemon. @{fg shine}@{"So that's loading..." link Editor}@{fg text} @endnode @node Warn @title "Warning" If you copy this program from a CD, it may be that the W and D bits will be cleared - the Editor does not check to see if files are WRITEable, and will crash if it tries to write to a write-protected file - so make sure the example.dat file is write-enabled if you alter it and want to save it. If you don't know how - click on it's icon to highlight it - press Right-Amiga + I, then click the checkboxes for Writeable and Deleteable. @{fg shine}@{"Right-oh..." link Editor}@{fg text} @endnode @node Bugs @title "Bugs" I spent an hour trying to track down a bug I thought I had that meant my program didn't free-up 560 bytes of memory the first time it ran. I recompiled an executable several times with bits taken out to find out what was causing it - I even left out the loading of the font at one stage. I left the icon 'out' and put a cli window at the bottom of Workbench; Did an AVAIL TOTAL FLUSH; Ran the program; Quitted; Did another AVAIL TOTAL FLUSH Was 560 bytes short Ran the program again; Did another Avail Total Flush Still only 560 bytes short - not 1120, as I would have thought. After an hour of doing my head in, it suddenly occurred to me to click on the program's icon, before doing the first flush. Clicked on icon so that it was selected; Did AVAIL TOTAL FLUSH; Was 560 bytes short; Doh! I vaguely remember reading (possibly on the Blitz-list) that another user was experiencing similar problems when testing his program, and don't believe that this scenario was offered as a possible cause. However, this does highlight one of those unknown features of Workbench that make it so elegant - it doesn't load the 'selected' icon unless it is required - thereby saving on memory. It's these little things that you don't normally notice, that makes Workbench such a joy to use. @{fg shine}@{"Cool..." link Editor}@{fg text} @endnode @node Legalities @title "Legalities" @{fg shine}Distribution:@{fg text} These programs are freeware. Do with them as you will - though only a nominal fee, if any, should be charged for distribution. All files should be kept together, and remain unaltered, they are: @{fg shine}George@{fg text} : the game @{fg shine}GFX@{fg text} : the graphics drawer @{fg shine}SFX@{fg text} : the sound drawer @{fg shine}GeorgeEd@{fg text} : the editor/tester @{fg shine}Example.dat@{fg text} : an example mapfile to load into the editor @{fg shine}George.font@{fg text} : the font used by the editor @{fg shine}George.Guide@{fg text} : this guide @{fg shine}Disclaimer:@{fg text} I was on holiday at the time, if they cause any damage to you or your machine. @{fg shine}@{"Super..." link MAIN}@{fg text} @endnode @node Progs @title "Programmers" It occurs to me that this program could be used for other purposes, all you need to do is redefine the George font to suit your purposes. If you have a bitmap font editor, you can change characters 160 to 194. So if you wanted to use it as a circuit-board designer (for example), you could recreate the George font with the required circuit images (though I should add, I know nothing about designing circuit boards). One thing you will need to consider, however, is the fact that some gadgets are disabled once you have used a certain number of them. I won't list the gadgets and their ascii value here, as you can see for yourself in a font editor. Also, I wouldn't attempt to use the Test button if I were you. The structure of saved files is: GEORGE ;for error checking when loading n1 ;number of maps in file (max 50) [FIRST MAP] ;this line is not in the file n2 ;width of the map n3 ;height of the map n4 ;George's X start position (0 if undefined) n5 ;George's Y start position (0 if undefined) n6 ;Number of diamonds in this map Text$ ;a line of text containing the characters for the ;first line of the map (characters between 160 and 194 ;plus character 32 for spaces. The length of this line ;depends on the map's width. Text$ ;the next line of the map as above - the number of these ;lines will depend on the map's height. So if the height ;of the map is 10, there will be 10 lines. n7 ;number of feelers (0-8) [n8 ;these lines will only be present if the number of n9 ;feelers is greater than 0 n10] ;n8=Feeler X pos, n9=Feeler Y pos, n10=Direction (0-4) ;these three lines will be reproduced for however many ;feelers there are at n7 [NEXT MAP] ;then the next map starts as at n2 above As far as the characters in the map are concerned during the game, 158 is deleted from the value of the character to get the shape number - so earth is character 160, but in the game, shape 2 is earth. Except for spaces, which are shape 0 in the game. The reason for the ordering of the graphics in the game is for speed purposes when checking falling boulders/diamonds. @{fg shine}@{"So that's other uses..." link Editor}@{fg text} @endnode @node Reqs @title "Requirements" @{fg shine}Requirements:@{fg text} AGA Amiga - at least the game needs one - the editor will probably work on any Amiga with WB 2.0 and above The program also requires the George font in the fonts drawer - this contains the graphics (for the buttons) in the latter half of the character set (easier than creating shape gadgets). @{fg shine}@{"Okay..." link Editor}@{fg text} @endnode @node What @title "What is it?" This intuition-based map-editor/tester is for designing levels for "George and the Repton-clone," a game that should be included with this program. @{fg shine}@{"So that's what it is..." link Editor}@{fg text} @endnode @node How @title "How do I use it?" @{"The Map Area " link Map} : Printing/Scrolling/Resizing @{"The Graphics Buttons" link Graphics} : Scenery/Objects @{"Testing your map " link Test} : The Help key @{"The Other Buttons " link Other} : Load/Save/Add/Delete etc. Although the normal levels are played via a main level with a number of teleporters leading to the other levels - custom levels will simply be played in the order that they are saved, one after the other. @{fg shine}@{"So that's how I use it..." link Editor}@{fg text} @endnode @node Other @title "The Other Buttons" @{fg shine}Load@{fg text} Will bring up a standard file requester with @{fg shine}.dat@{fg text} extensions shown - as all files saved have this added to the filename, unless the filename already has it. Because maps are different sizes, and have different numbers of feelers in them, file sizes can be just about anything, so for error-checking purposes, each map-file will have the word George at the start, followed by the number of maps in the file. So if you want to crash your system, you can create a file with these at the start, and the program will attempt to load it. I wouldn't recommend it, though. Loading maps will erase all maps currently in memory. @{fg shine}Save@{fg text} Will bring up a standard file requester with .dat extensions. Warnings will be given for write-protected disks, and if there is not enough room to save the file. @{fg shine}Append@{fg text} Will allow you to load a file in, and add it to the end of the current maps. So if you have three maps in memory, and append four maps from disk, you will have seven maps. As you can only create a maximum of 50 maps in one file, appending will only load upto this maximum. So if you have 45 maps in memory and append 6 from disk, only 5 will be appended - a message will appear in the message area to advise you of this. This gadget will be disabled when you have 50 maps in memory. @{fg shine}Clear@{fg text} This button will clear the current map, and resize it to 30x24. There is no UNDO feature. @{fg shine}Delete@{fg text} This gadget will be disabled until you have more than one map. It will delete the current map. There is no UNDO feature. @{fg shine}Arrows@{fg text} The arrows allow you to navigate the maps you have in memory. The first arrow will move you to the next map: the second will take you to the last map. The third arrow will take you to the first map: the fourth will move you back one map. These will be disabled/enabled as necessary. Moving to new maps will also disable/enable some of the graphic buttons, depending on the contents of the map. @{fg shine}Add@{fg text} You can have upto 50 maps in one file. If you have less than 50, clicking on add will add a map to the END of the file (you can move it when you have decided where it falls in the level of difficulty). This gadget will be disabled when you have 50 maps. @{fg shine}Copy@{fg text} I would have liked to have done a Move button, however, although Blitz Basic allows you to sort linked-lists, the command SortList requires parameters that are not sufficiently explained in the manual, and experimentation with it has failed. For this reason I have created the Copy button. Clicking on copy will copy the current map into memory - the Insert button will then be enabled. You can now delete the current map, move to where you want it, and insert it at that position. @{fg shine}Insert@{fg text} Clicking on Insert will cause a previously 'copied' map to be inserted AFTER the current map. @{fg shine}Errors@{fg text} Clicking on Errors will perform the same error-checks, and give the same messages as described with Testing your map [q.v.]. The program will not check that you have a perimeter wall all the way around the map. This won't matter in the game, as there will be an 'unseen' perimeter anyway - but you should include one so that the player has an indication of where the edges are. @{fg shine}Clear all@{fg text} Will clear all maps in memory, you will be warned if you have made changes without saving. There is no UNDO feature. @{fg shine}Quit@{fg text} You will be warned if there is any unsaved data before quitting. There are no menus so that the right-mouse button could be used, without the need for a second window. Also, the size of executable intuition programs in Blitz is notorious, because it links all the commands from any library you use, even if you don't use those individual commands. But then Blitz was intended for game writers, and I think they concentrated on that side of things. Other users have brought out third-party libraries that make the size of executables smaller, but I haven't had a chance to look at them yet, and wonder whether they contain all of the necessary commands - because if they don't - I may need to use at least one command from Blitz's libraries, which would defeat the object of the new ones. @{fg shine}@{"So they're the other buttons..." link How}@{fg text} @endnode @node Test @title "Testing Your Map" When you want to test a map, press the HELP key. You don't need to finish a map to test it, but before you can test the map, there will be a couple of error-checks, and the results of these will be displayed in the message area at the top. First: you will be warned if there is no start position. Second: you will be warned if there is no exit. Third: you will be warned if there are not an equal number of cages and feelers. Once these tests have been passed, you can use the cursor keys to move George around the map. Any feelers will be printed in white. The number of diamonds remaining will be shown in the message area at the top. @{fg shine}Boulders and feelers will not move unless you press a key@{fg text}, so if you don't want to move George, press any key other than the cursor keys and HELP. You can be killed by falling diamonds/boulders, but feelers can't kill you (they'll just go around you). Make sure that everything is enclosed within a perimeter wall - if a feeler goes off the map, the test will stop and you will be given an error message (in most instances - it may crash in others that I haven't found - as this can't happen in the game, and I wanted to use the same engine as far as possible). Boulders move two squares for each one that George moves, except in one instance. Any boulder that was above George when he moved will only drop one square - this is so that George can push it as it falls, which is necessary on some levels in the game. A test will end when, either: You die. You reach the exit and have got all the diamonds. You press the HELP key again. Your Amiga crashes (only joking, just listing all possibilities). There is a power-cut (which could get silly, really) If you die, a message will appear in the message area asking you to press a key, so that you can see what happened before the map is restored to its original state. Reaching the exit or pressing HELP will automatically restore the map. If you have tested a map, and then flip it, you ought to test it again, as boulders fall with a bias to the left, so your map may not be completable(?) the other way around. If boulders/diamonds have a choice of falling left/right, they will always fall left. If there is more than one boulder that can fall into the same hole - right will fall first, left second, and above third. Though if right is replaced as it falls, right will fall again on the next pass. i.e. it tests positions in the array in the following order: 987 654 32@{fg shine}1@{fg text} So if 2 was a hole, and 6 and 4 were boulders, 4 would fall in. Basically, the map is scanned from the bottom right corner to the left, moving up a line each time, to see if a boulder/diamond can fall. Originally I started creating a linked list of falling objects, but this was far too complicated, and affected timing, so the entire map is scanned twice from the bottom up, in the time it takes George to move from one square to the next. I did have it scanning eight times until I realized that this meant George couldn't push a boulder that had been above his head as it fell, because by the time he turned around, it was long gone - which meant some levels couldn't be completed. @{fg shine}@{"So that's how I test a map..." link How}@{fg text} @endnode @node Map @title "The Map Area" The map area is indicated by a box outlined in white. Moving the mouse over this area will cause the cursor to appear, showing the current graphic, and the X,Y position will be shown in the title-bar. To print a graphic, press the Left-mouse-button (LMB). To delete a graphic, press the Right-mouse-button (RMB). For continuous printing/deleting, keep the mouse-button pressed and move it around. @{fg shine}Map number@{fg text} The current map's number will be shown bottom-left of the screen, and the total number of maps will also be indicated. @{fg shine}Scrolling@{fg text} To scroll the current map around the area, press @{fg shine}Shift@{fg text} and the relevant cursor key. Shift was added to this function as the cursor keys are used for testing the game, and I found myself scrolling the map when I thought I was testing it. Anything scrolled off the map will be lost. @{fg shine}Map-size@{fg text} To resize the map, press @{fg shine}CTRL@{fg text} with the relevant cursor key. The size of the map will be shown on the bottom line of the screen. The maximum size for a map is 30x24 (3x3 screens in-game): the minimum size for a map is 10x8 (1 screen in-game). Resizing a map will cause data that was in the larger area of the map to be lost. Once I'd included the SHIFT key with the cursor keys for scrolling, I found myself scrolling when I wanted to resize - for this reason, any other keypress will put a message in the message area to remind you what the keys do. @{fg shine}@{"So that's the map area..." link How}@{fg text} @endnode @node Graphics @title "The Graphics Buttons" Along the top of the screen are all the graphics buttons; clicking on one of these will change the current graphic. The Blank line above these buttons is the message area, and this will indicate what your chosen graphic is - so if you click on the boulder button, the message area will state "Boulder". The cursor will change to reflect your chosen graphic. The buttons are: @{fg shine}Earth & Boulder@{fg text} Top-left is Earth, and below that is the boulder. @{fg shine}Diamonds@{fg text} Next to these are four diamonds; clicking on one of these will tell you what colour it is, and how many diamonds you currently have on the current map (as the maximum number of diamonds per map is 99). Once you have 99 diamonds (including cages - see below) the diamond buttons will become disabled, and the cursor will become earth. deleting a diamond will enable the diamond gadgets again. @{fg shine}Walls@{fg text} After the diamonds come the various wall-pieces, until you get to the cage and the teleporter. @{fg shine}Cages@{fg text} Once you have 8 cages on the map, the cage gadget will become disabled as you can only have a maximum of eight. Deleting a cage from the map will cause the gadget to become enabled again. As cages turn into diamonds, the cage button will also become disabled if you have 99 diamonds. The cursor will change to earth once you have the maximum number of cages - this applies to all gadgets where there is a maximum involved. @{fg shine}Teleporter@{fg text} Once you have put the teleporter on the map, the teleporter gadget will become disabled - deleting the teleporter will cause the gadget to become enabled again. @{fg shine}George@{fg text} Next to the cage button is the George button, which looks like a person (or as near as you can get with the pixels available). Putting George on the map indicates the start position, and the George gadget will become disabled - deleting George will enable the gadget again. @{fg shine}Feeler@{fg text} Below George is the Feeler gadget. Again, this will become disabled once you have eight Feelers on the map, as this is the maximum. Deleting a feeler will cause it to be enabled again. The radio buttons to the side of the feeler button indicate the feeler's initial direction at the start of the game - the dot next to each arrow indicates that there should be a wall next to the feeler at that position, as the feelers try to keep walls to their left. The direction stored for each feeler depends upon what is showing in the radio buttons when you click on the map - not on the feeler button. The @{fg shine}B@{fg text} in these radio buttons means that the feeler is initially boxed-in, and so has no direction. During the game, it will test to see if it is no longer boxed in, and set off in a new direction if possible. This is necessary for aesthetic purposes that I won't go in to, but you'll see in the game what will happen if a feeler has a direction when it is boxed-in. @{fg shine}Flip@{fg text} Below the teleporter button is a double arrow @{fg shine}<-->@{fg text}. Clicking on this button will flip the map from left to right. Relevant wall-parts will be changed to their opposite to reflect the change. Also, any feelers with an initial direction of up, will be changed to down, and vice versa, as the walls will now be on the opposite side of them. NOTE: Boulders and diamonds fall with a bias, so it might not be possible to complete some maps when they are flipped. @{fg shine}1UP@{fg text} Next to the flip button is the 1UP (extra life). You can put as many extra lives in the custom levels as you like, but the number of lives given to the player will never go above 9. Scrolling graphics off the map will cause relevant gadgets to be enabled again if their maximums had been reached. @{fg shine}@{"So they're the graphics buttons..." link How}@{fg text} @endnode