GEORGE II (THE INFINITE JIGSAW) WRITTEN IN BLITZ BASIC 2.1 THERE IS NO ERROR CHECKING YET, SO YOU NEED 1.2mb OF CHIP-MEM FREE AND KEEP ALL THE PROGRAM BITS IN THE SAME DRAWER. REQUIRES A CD32 JOYPAD AND AN AGA AMIGA THE GAME This is a one-level-preview. I can't design lots of levels yet, because I'm still uncertain as to what will be in the game, and as the ordering of the graphic shapes is important for the speed, I see no point in designing loads of levels that will have to be changed. However, I think it shows how fast it will be, and how accurate the sprite detection is. In the final game, there will be a main map, which gives you access to the 100 levels. There will be 4 jigsaw-pieces to find on each level, and if you find all of the pieces in the game, you get to see the rendered picture at the end. If you collect 100 diamonds, you will be awarded an extra life. Power-ups take the form of different coloured-boing-balls that appear when you hit special blocks with George's head. RED & WHITE : Gives George a cap to protect his head, so that he can break certain blocks. At the moment he can only break blocks above him - but will be able to break blocks at the side and below. GREEN & WHITE: Extra life - not in this preview. BLUE & WHITE: Gives George a leather jacket and shades - and, ultimately, some sort of missile - George can break blocks without a cap in this mode because he's hard. BLACK & WHITE: Temporary invincibility - not in this preview. The boing-balls will bounce away if given the opportunity. At the moment the bouncing routine is not realistic enough, as I intended for a power-up to give George the ability to run - and if I'd incorporated proper bouncing off slopes, George wouldn't have been able to catch the power-ups. However, I've changed my mind, and George can now run all the time, so I will update the ball-bouncing routine. If you have no power-up, you will be given a red and white boing-ball - if you have one already, you will be given a blue boing-ball, and your red one will be stored - see centre top of screen to see what power-up is stored (a 'dash' means none). CONTROLS: IN-GAME: DIRECTION : Walk left/right, roll left/right, look up (for when I've implemented picking-up/throwing. PLAY/PAUSE: Pause (continue/quit) RED : Jump - hold it down to jump higher - will jump higher still if you have momentum. BLUE : Divebomb - like jump but more powerful for killing baddies. GREEN : Run - George jumps further when running. YELLOW : Nothing yet, though possibly fire. >> : Activate stored power-up - as with SELECT in Mario. << : Temporarily lets you see what Invincible George looks like. DURING INFORMATION MESSAGES: If George hits his head on an information block, a message will appear at the top of the screen. PLAY/PAUSE: Pause/Continue message. << : Speed message up. >> : Slow message down. YELLOW : Exit message. THE STATUS BAR: The status-bar (at the top of the screen) shows: HEART : How many lives you have. DIAMOND: How many diamonds you have - will revert to zero if you get 100 and award an extra life. RAINBOW JIGSAW : How many jigsaw-pieces you have found on the current level all four must be found and the exit reached to be awarded one of the 100 game pieces, and an extra life. >> : Currently stored power-up. 4-COLOURED JIGSAW : Number of pieces to find in the game. CLOCK : Time remaining - a message will appear at 99 to let you know that time is running short. PLAYING Jump on baddies heads to kill them - at the moment, one hit will suffice, but in the final game, different baddies will take different hits, and have different modes of attack. If you release jump whilst in the air and then press and hold it when you bounce on a baddie, you will jump even higher. I've still to implement sliding/rolling down steep slopes to kill baddies. If a baddie gets you, you will flash briefly. THINGS TO DO: SWIMMING 8-WAY SCROLLING INERTIA LIFTS (not looking forward to) MORE GRAPHICS DIFFERENT LEVELS MAIN MAP SOME SORT OF MISSILE TO FIRE IN 'HARD-GEORGE' MODE BREAKING CRACKS IN GROUND TO FIND HIDDEN TUNNELS, OR PLACES TO DUCK BREAKING BLOCKS FROM THE SIDE (WITH HIGH SPEED ROLL) AND FROM ABOVE WITH A DIVEBOMB. SOUND EFFECTS MUSIC IS UNLIKELY FOR A NUMBER OF REASONS - PUT A CD ON SUB-GAMES PICKING UP/THROWING BLOCKS/STUNNED-BADDIES WORRIED ABOUT MEMORY, AS THE EXECUTABLE WILL BE ABOUT 6-700K WHEN THE MAPS HAVE BEEN CONVERTED INTO DATA STATEMENTS - AND THE GAME NEEDS ABOUT A MEG OF CHIP-MEM FOR THE BITMAPS, AS THERE ARE 2 960x768, 32-COLOUR BITMAPS FOR DOUBLE-BUFFERED SCROLLING. HOPEFULLY, THE FINAL VERSION WILL NOT REQUIRE EXTRA MEMORY. THINGS TO FIX: At the moment, if you jump on two baddies at the same time, the detection routine acts as though one of the baddies got you - this is because if you are jumping, or standing on the ground, you can't be falling on their heads, and after hitting a baddy on the head, the JUMPING flag is reset so that you bounce off - this means that when it tests the next baddy, the routine thinks you are jumping - this should be easy enough to fix - just set jumping after the routine has checked all baddies. When a baddie turns around, there is a frame in between where they face the screen - this looks odd on some baddies if it occurs at the wrong point in their animation - especially noticeable with the fish. Sometimes earth is blocked at a fish's starting point instead of water. ---------------------------------------------------------------------- ---------------------------- NOTES FOR BLITZ-PROGRAMMERS: ---------------------------- I'm not on the net, but I do read the Blitz-list, so here are a couple of contributions for other Blitz users that I hope you might find useful. SHAPE/SPRITE-DETECTION Although Blitz provides a number of methods for sprite/shape detection I've found that the fastest is this: Alter the HANDLE of your main character's shapes so that it is at the bottom right corner. Leave the HANDLE for the baddies at the top left. Then to test for collision IF (MainCharacterX-BaddyX) > -1 IF (MainCharacterX-BaddyX) < (MaincharacterWidth+BaddyWidth) IF (MainCharacterY-BaddyY) > -1 IF (MainCharacterY-BaddyY) < (MainCharacterHeight+BaddyHeight) ShapesHaveCollided ENDIF ENDIF ENDIF ENDIF Although Blitz provides Rects/ShapesHit, they require the coordinates X1, Y1, X2, Y2 and the shape's number for both shapes passing to them, where the above simply exits when a condition isn't met - and it may well be in some games that MainCharacterWidth/Height and BaddyWidth/Height will be constants anyway - so no loading registers with those variables. SCROLLING BlockScroll is too slow for this type of game, as baddies and power-ups are active 5 blocks before, after, above and below the screen - so I would have to blockscroll almost two screens. There is a way to do scrolling that this program uses, which involves blocking only 8 tiles when walking, and 16 when running, each frame - this spreads the workload out, and is much, much faster. The scenery graphics are 16x16 pixel blocks. On a 256 high screen, you can fit 16 of these blocks from top to bottom. First of all, make sure the first column off the right of the screen has been drawn. Then for each pixel the screen scrolls right, you block one graphic off the right of the screen. To find out which block in the column you are on (assuming X is the left edge of the screen): Y=(X and $0F) and for it's screen position Y=(X and $0F) lsl 4 By the time you've scrolled sixteen pixels, you've blocked a whole column and are ready to start on the next. You can also look ahead to see at what point the bitmap will have to be flipped back to the start, and block behind you as you go along, so that it is already prepared. This method means that if you scroll 4 pixels per frame (as when George is running in this game), you block 4 blocks ahead, and 4 blocks behind. Another alternative (using BlockScroll) is to blockscroll 16x256 pixel strips each frame, thereby spreading the workload so that you're not blockscrolling a whole screen at a time. Scrolling left uses exactly the same method, but the blocks will be drawn from bottom to top. 8-way scrolling is slightly more complicated, but can still be done, you just need to block twice as many graphics each frame - 16 when walking and 32 when running. This game actually blocks the graphics 5 blocks in advance of appearing on screen so that baddies/powerups can go off screen - as they act according to the colours in the bitmap - might have been better to make the baddies act according to the array instead, but I don't think it would be appropriate for this game because of the way I've done other things. VIC E BABES 18/01/99