Instructions for version 1.0 - best viewed in monospaced font Keys ---- This allows you to define the keys your game will use. Keys K1 to K4 are not debounced, and it is recommended that these are used to control the movement of the player's sprite. Keys K5 to K7 are debounced, and as such these are probably best used for events such as firing, special weapons or to pause the game. Sprites ------- Sprites are 16x16 pixel images which make up moving parts such as the player, player bullets, enemy craft, etc. A square of 4 sprites is used to make up boss enemies. Sprites may have any number of frames, but remember to use them sparingly as each sprite frame occupies 128 bytes of code RAM. Move around the grid with the cursor, fixing and deleting pixels with SPACE or 0. X - insert sprite D - delete sprite C - clear sprite grid M - copy sprite or tile to clipboard K - copy sprite or tile from clipboard H - flip horizontally V - flip vertically N - next sprite P - previous sprite I - insert frame R - remove frame F - next frame Tiles ----- Tiles make up the background over which the action takes place, and can be used as obstacles if background collision detection is enabled. Like sprites they are 16x16 pixels, and can be placed together to form larger objects in the map editor. Unlike sprites, tiles are static and are reasonably efficient in terms of memory, so if you want to go overboard with the graphics, you will get more for your memory than with sprites. X - insert tile D - delete tile C - clear tile grid M - copy sprite or tile to clipboard K - copy sprite or tile from clipboard H - flip horizontally V - flip vertically Attack patterns --------------- Attack patterns are no more than a series of coordinates for sprites to follow. Attack pattern coordinates are relative to the window position, so the window is shown in black and green in the top-left corner of the screen. To move through each individual frame of the attack patterns use '1' and '2', with cursors to change the position of the sprite at each frame. The present frame is shown flashing. To insert an individual frame at the current position, press 'I'. The new frame will default to a position slightly offset from the last one, based on the type of scrolling. For example, for a left scroll, each new frame defaults to 2 pixels left of the last one. 1 - back one frame 2 - forward one frame I - insert new frame at cursor position R - remove current frame X - create a brand new attack wave D - delete current attack wave N - show/edit next attack pattern Map editor ---------- 1 - Select block to insert 2 - Select block to insert Y - Remove row or column X - Insert row or column T - Insert special attack pattern, bonus or boss V - Create a new level D - Delete present level N - Edit next level I - Change ink colour for present level P - Change paper colour for present level B - Change brightness level for present level The editor flips around depending on the type of scrolling used in the game. To select tile blocks in the map editor use keys '1' and '2' - the currently selected tile is shown in the bottom right of the screen. Attack patterns are part of the map data, and any attack initiated at the cursor position is shown at the bottom left. Changing colours for the present level You can change the colours for each level by pressing P to change the paper (background) colour, and I to change the ink (foreground) colour. Inserting attack waves To insert attack waves you should use the 'T' key, then press 'A' to insert an attack wave or modify the existing one. Select sprite type with cursor left and right, and the strength, ie the number of hits reuired to destroy each enemy, with cursor up and down. Attack patterns are selected with N and P, and the number of ships in each attack can be altered with 1 and 2. Inserting bonuses 2 types of bonus are available, and their effects are defined in the events section. Press 'T' to insert, then select the bonus type - 1 or 2. A bonus will then be inserted at the cursor position. Inserting bosses. Press 'T' to insert, then 'B' to insert a boss. If more than one boss has been defined, you will be prompted to select the one you wish to insert at this point. Status Panel ------------ This enables you to move items such as the score and lives counter around the status panel, wherever you choose to locate it. Move each individual item around the screen using the cursor keys, then press 0 or SPACE to select the next item on the panel. As well as the score and lives counter, there are 3 labels of up to 8 characters which can be positioned anywhere on the screen. The text descriptions for these can be amended so you don't necessarily have to go with "SCORE", "LIVES" and "STATUS". Press 'E' to edit the text description for a label, type in the text description, then press ENTER to continue moving it around the screen. If you do not wish to make use of a particular label, just enter 8 spaces and move it to an unused part of the status panel. The status panel option also allows you to move the status bar around the screen, and to manipulate its length. However, the status bar will only appear if you make use of it in the event section, and you may choose not to use it in a game. The length of the status bar can be adjusted with keys 1 and 2. Your game can use either standard height or double height text. Press 'H' to toggle between them. The double height text routine occupies a few extra bytes of code RAM. Both routines use whichever font is pointed to by the system variable at 23606, so you can set up your own if you are confident enough to do that. A good address for a font is 32768 as this space is normally taken by the SEUD editor. To load a font here just use these lines in your BASIC loader: LOAD ""CODE 32768: POKE 23606,0: POKE 23607,127 Window scrolling ---------------- You can vary the scrolling window's size and position in the Window/scrolling option. Changing the size might make your map look a mess though. Press 'T' to change the scrolling direction - the test game scrolls right to left, but there's no reason why you couldn't have it scrolling in any of the four directions. Obviously, doing so means you will have to change the attack patterns and direction of fire accordingly. Changing the window size and/or scrolling direction can alter the amount of data required for each column or row of blocks in the map, and thus invalidate the present levels. If this is the case, the program will ask if you wish to destroy the map data before allowing you to proceed. The program will automatically allocate buffer space for this window size, so making your window smaller will free up a little room in Code RAM, as well as having the bonus effect of speeding your game up. Sound ----- H - Hear present sound N - Next sound P - Previous sound X - Create new sound D - Delete sound Move around the values with the cursor keys, increasing and decreasing them with 1 and 2. SPACE or 0 will toggle noise or tone off. Once a sound has been created, an action is created in the events section. This action may then be used to play the sound at any number of events during the game. Bosses ------ Unlike standard enemies, bosses are made up of four separate sprites to form a single 32x32 pixel image, and can be made more difficult for the player to despatch. For each boss you will need to select the four sprites that make up the boss, the number of hits required to despatch it (up to 255), and the attack pattern the boss is to use. Unlike standard enemies, bosses are not removed when they reach the end of an attack pattern, but travel backwards and forwards through the pattern, repeating it until the boss is destroyed, or another event puts a stop to things. To change the boss sprites, select the quarter of the sprite you wish to change, then use up and down to select the sprite used for that part of the boss. The number of hits required to destroy the boss can be increased/decreased with keys Q and A, and the attack pattern may be selected with cursor left and right. Test Game --------- Allows you to test your creation. Press ENTER at any point to return to the editor. Events This is the part where you get to have a say about the game logic, and can change the way it works in a variety of different ways. An event is a point in the game where something has happened - and you can set up a series of actions to perform at these points, allowing you to change the behaviour of the game. For example, you may choose to make use of the status bar as an energy counter, or as ammunition, or as fuel simply by choosing an event at which the status bar is depleted, and by the actions attached to the status bar running out completely. In addition to the status bar, there is a user flag which can be set to true or false, and tested accordingly, plus a user counter which can be incremented, decremented, set to a minimum or maximum value, and tested for zero or non-zero values. Event When Occurs ----- ----------- Game Start Once at the beginning of every game Start Player Whenever the player restarts Key 1 Key 1 is pressed Key 2 Key 2 is pressed Key 3 Key 3 is pressed Key 4 Key 4 is pressed Key 5 Key 5 is pressed Key 6 Key 6 is pressed Key 7 Key 7 is pressed Main Loop 1 Repeatedly during the main game Main Loop 2 Repeatedly during the main game Launch Bullet The Fire Bullet action is initiated Destroy Alien An enemy is destroyed by the player Player Collision Player collides with an enemy or background End of Level The end of the level has been reached Collect Bonus Player has collected the bonus item Status Depleted The status bar has run out completely Action Effect ------ ------ player up move player sprite up player down move player sprite down player left move player sprite left player right move player sprite right score+10 add 10 to player's score score+20 add 20 to player's score score+50 add 50 to player's score fire bullet fire a bullet smart smart bomb, destroy all enemy sprites kill player remove one of the player's lives scrolling on switch the scrolling on scrolling off switch the scrolling off generate bonus generate a bonus at the current alien position init status replenish status bar and display it deplete status deplete status, and stop the event if status if empty zeroise counter set user counter to zero maximise counter set user counter to maximum value counter +1 add 1 to user counter, up to maximum counter -1 subtract 1 from user counter, down to zero if counter is zero only proceed if user counter is zero if counter is not zero only proceed if user counter is not zero set flag to false set user flag to false set flag to true set user flag to true if flag is false only proceed if user flag is false if flag is true only proceed if user flag is true increase FP increase player firepower (max 6 bullets on screen) reduce FP reduce player firepower (min 1 bullet on screen) waitkey wait for keypress (debounced) next level starts the next level shield make player temporarily invulnerable sound x play sound x For example, to make use of the status bar as an ammunition gauge you will need to make the first action of your fire key event the action to deplete status, and the fire bullet action should come afterwards. If the status is depleted entirely the event will stop, so the bullet will only be fired if there is some status left. You should then set up an action to replenish the ammunition, say once in the Player Start event whenever a player starts a new life, and maybe once when the player collects a bonus item. The deplete status event should be left blank, unless you wish to attribute some action - it might be a little harsh to kill the player simply for running out of ammunition. On the other hand, if you wish to use the status bar as a fuel gauge, the Status Depleted event could be used to kill the player, or maybe just move the player down towards the ground. Just use your imagination. To modify the events, use cursor up/down to select the event, then press space or 0. Once selected, move up and down through the actions for that event with the cursor keys, selecting the actions to perform with cursor left and right. Enter returns to the event selection screen. While developing your game you may wish to make it easier for testing purposes. To do this you can assign the shield action to one of the main loop events. This gives the player permanent invulnerability, allowing you to complete your creation. Just remember to remove it before you save the final version of your game! Options ------- Here you can change a number of different aspects, completely changing your game's characteristics. Options available are: 1. Aim. Lock player's fire direction to one of four directions, or alternatively fire in whatever direction the player last moved. 2. Init ammo. Number of player bullets allowed on screen when game first begins. 3. Speed. Player's bullet speed. 4/5. Counter up/down. Maximum setting for the counter. L. Lives. Number of lives the player has. R. Restart. Choose between restarting where the player dies, and beginning the level again. S. Scroll. Select automatic or push scrolling. C. BG Collisions. Enables/Disables background so player and bullets can pass through them if required. A. Animation. Cycle through player frames automatically, or choose frame based on direction player moves. Facing animation requires 4 frames for up, down, left and right. If these are not present the game will use frames from the next sprites it finds. V. Choose sprite for bonus 1. W. Choose sprite for bonus 2. X. Choose sprite for player bullets. Y. Choose sprite for player. Z. Choose sprite for explosions. Save Game --------- Saves your game to tape. Start your tape first before selecting this option, as it does not prompt for a filename, or a keypress before saving. If you are using an emulator, you will have to operate the tape browser yourself. Load Game --------- Loads a new game from tape. If you are using an emulator, you will have to operate the tape browser yourself. Emulators with no tape browser are not recommended for SEUD. Once loaded, You will need to visit the window/scrolling option and exit without making changes. SEUD will automatically re-configure various settings based on the window size and type of scrolling. If you are loading a game of a different type to the one you are editing (for example, if you are set up for vertical scrolling and load a horizontally scrolling game), one or two other settings will not be restored properly immediately upon loading, so you might need to visit the options page to change the direction of fire. The direction of fire is part of the editor code, and is only saved in finished forms of the game. Save Finished ------------- Prompts for a filename, then saves your game as a stand-alone executable code file. You will need to record a BASIC loader program onto the tape first - if you are using emulation this could prove to be tricky. the simplest program to do this would be: 10 CLEAR 29999: LOAD ""CODE : RANDOMIZE USR 48000 Of course, you might want to set up a few other things first, such as the BORDER, PAPER and INK colours, plus a title page and maybe even a border around the status panel. If this is all too complicated, you may wish to take advantage of Intro Maker, a free utility by the same author, which creates the BASIC loader and introduction screen for you automatically. Code files produced with the Save Finished option cannot be subsequently reloaded and edited in SEUD. However, once you have saved a finished version there is nothing to stop you editing the game you have just saved and saving it again. Technical information --------------------- If this section sounds like gibberish, don't worry about it. This is written for the technically-minded who might want to take SEUD a little further. You may wish to add extra items such as a font, a status panel and a front end. Unless you are using Intro Maker which automatically creates a front end for you, you will need to know which memory addresses are free and which are not. The main game code starts at address 48000. Tiles, attack patterns and level data are placed directly beneath this address - this is the data RAM referred to on the main menu screen. Everything else is placed above in the code RAM. SEUD won't tell you exactly where the start and end addresses of your finished game lie, although a tape header reading program will tell you the start address and length of the saved code file. You are safe to place code below the start of the game. A short BASIC loader program means you can clear space as low as address 24575, which will give you at least 8K of RAM from address 24576 onwards - more than enough to squeeze in a font, front end, and perhaps a compressed screen to make up the status panel. If you prefer to write a BASIC front end you should use CLEAR 32767 instead, which will give you plenty of RAM to write a front end. If you are really struggling for memory, SEUD makes use of a dummy screen buffer at the top of RAM. You can calculate the size of this buffer by adding 2 to both the height and the width of the window in character cells, multiplying them together, then multiplying the result by 8. Subtract this from 65536 and you have the address of the start of the dummy screen. So the dummy screen starts at 65536 - ((width + 2) x (height + 2) x 8). There's nothing to stop you using this area of RAM for an intro screen, but remember the game overwrites this area as soon as it starts, so don't use it again afterwards unless it is as a temporary buffer space. There is a superfluous CALL instruction at address 48001, which can be used to call an external routine at initialisation. By poking a different address into 48002 and 48003 you could modify the game to call your own routine, so for example you could call a screen decompression routine to set up the status panel. However, you should not return from your routine with interrupts enabled or the game will crash.