; ** START OF BLITZ 2 SOURCE ** ; EVIL INSECTS ; ============ ; Last changed: 30-06-94 (still 45 days and then...I'm 18) ; Author: Matthijs Hollemans ; Van Vlaanderenstraat 8 ; 4791 EP Klundert ; The Netherlands ; Tel: (INT. CODE+) 01682-4367 ; This is the CHEATMODE, type it in correctly and you will be ; given 9 lives! ; ; Today the world is full of evil, ; Today the world is mean, ; But in the future near, ; Insects will be so evil, ; No man has ever seen, ; Or dared to fear. ; Anyway, for anybody who is interested in a perfect example of ; how-not-to-code a cool game, here's the complete source of ; EVIL INSECTS. I have exclusively for you documented almost ; every single line of this source, so you probably won't have ; any problems understanding this code. (Hmmm) ; This source is about 1700 lines long, but that's mainly because ; of the level-definition data statements in the set_baddies part. ; The game displays everything with 50 frames a second. ; To achieve this, I had to cut down the number of enemies and ; also their size. Some of the shapes in the shapes-files are ; unused, mainly because they are ugly and I am lazy. ; Well, that's all I'm gonna say about this source, except for ; some legal stuff. You may not recompile this source and ; distribute it under the name EVIL INSECTS. I don't really care ; if you modify it somewhat and give it another name and spread ; it all over the world, as long as you don't say I screwed it. ; You may also use some parts of this source in your own programs ; if you like, coz I don't really care for copyrights about this ; code. ; Oh yeah, thanx to Mark Sibly and Simon Armstrong and all ; those dudes at ACID for creating the best Amiga programming ; language, BLITZ 2! (If it wasn't for them I'd still be ; struggling with AMOS!) NoCli WBStartup ; This would be user-friendly, wouldn't it? SetErr: Goto finish: End SetErr ; Stupid-but-easy-error handler If ExecVersion<39 Then Goto AGA_Only ; Show Alert! BLITZ ; Joepie! DisplayOff ; Turn off display QAMIGA ; Bwerk! Just a quick leave from Blitz ; Initialisation ; -------------- BitMap 0,320,200,7 ; Initialise bitmaps BitMap 1,320,200,7 ; for game-play BitMap 3,320,200,7 ; and bitmaps for intro BitMap 4,320,200,7 ; and hiscore stuff LoadBitMap 0,"GFX1",0 ; Load backdrop and palette CopyBitMap 0,1 ; Make bitmaps 0 and 1 the same CopyBitMap 0,3 ; Bitmap 3 looks like bitmap 0 Use BitMap 3 ; (NOT !!!) Boxf 58,16,260,164,0 ; Clear center of screen Line 57,22,57,158,0 Line 261,22,261,158,0 Line 56,25,56,155,0 Line 262,25,262,155,0 CopyBitMap 3,4 ; Make bitmaps 3 and 4 the same LoadBlitzFont 0,"EVILINSECTS.font" ; Load font (must be in FONTS:) ; NOTE: The reason for the shapenumbers not starting at 0, is the ; fact that I had created another file which contained font shapes ; ,but because blitting these on screen meant an enormous ; decrease in speed (no more 50 frames/sec.) I dropped that file ; and used a BlitzFont instead. LoadShapes 36,"GFX2" ; Load main character shapes LoadShapes 67,"GFX3" ; Load the rest of the shapes LoadSound 0,"SND1" ; Load explosion sample LoadSound 1,"SND2" ; Load shooting sample LoadSound 2,"SND3" ; Load main-character-is-hit sample LoadSound 3,"SND4" ; Load main-character-collects-coin sample LoadSound 4,"SND5" ; Load baddie-drops-projectile sample LoadMedModule 0,"SND0" If NTSC Then bse=44 Else bse=64 ; Screen is positioned InitCopList 0,bse,200,$10007,8,128,0 ; depending on NTSC/PAL mode VWait 100 ; Wait for disk-access to finish BLITZ ; Yeah, hurt me, hurt me CreateDisplay 0 ; Create AGA-screen (tadaa, 128 colours) DisplayPalette 0,0 ; Show palette BlitzKeys On ; Allow keys to be read in Blitz-mode ; Set hotspots ; ------------ Restore hotspot_data For t=36 To 66 ; Set main-character hot-spots Read hot_x,hot_y Handle t,hot_x,hot_y Next t hotspot_data Data 10,5,8,9,8,12,8,13,13,9,9,12,6,13,21,5,20,5,19,5,15,5,16,5,21,5,20,5,19,5,15,5,16,5 Data 11,5,11,5,8,5,9,5,12,5,13,5,12,5,9,5,6,5,11,5,10,5,10,5,10,5,10,5 For t=67 To 95 ; Set other shape's hot-spots MidHandle t Next t MidHandle 98 ; Set variables ; ------------- Dim anm(79) ; Array holding main character animation data Dim star_anm(20) ; Array holding star animation data Dim explo_anm(20) ; Array holding explosion anim data Gosub set_anim ; Jump to routine to fill above arrays hitot=10 ; Number of names to store in Dim hiname$(hitot),hiscore.l(hitot) ; hiscore-array Gosub init_hiscores ; Init hiscores mxlen=10 ; Max. length of names in hiscore-array accel=.35 ; Accelleration of main character friction=.4 ; Friction when slowing down left_border=68 ; Borders of playing-area right_border=251 num_levels=50 ; Number of levels max_baddies=8 ; Max.number of bad-guys per level Buffer 0,16384 ; Set buffers for blitting Buffer 1,16384 ; on both bitmaps 0 and 1 NEWTYPE .fallingthing ; Some falling object structure x.q ; X-position y ; Y-position vel ; Speed End NEWTYPE Dim List bomb.fallingthing(2) ; List of projectiles DEFTYPE.fallingthing coin ; Coin-definition (= Power-up) DEFTYPE.fallingthing stone ; Stone-definition NEWTYPE .bad ; Baddie (or is it spelled Baddy? Who cares...) x.q ; X-position y ; Y-position image ; What baddie looks like status ; 0=Alive 2=Hit(=Dead) heading ; -1=Left 1=Right hit_cnt ; Counter for explosion anim dropped ; True if baddie dropped projectile drop_cnt ; Counter for dropped projectile End NEWTYPE Dim List baddie.bad(max_baddies) ; List with baddie data Dim num_baddies(num_levels) ; Number of baddies in certain level Dim baddie_speed(num_levels) ; Baddie-speed in certain level Dim attack_mood(num_levels) ; Random seed of attack in level Dim drop_time(num_levels) ; Number of frames after which a ; baddie may drop a projectile again Dim baddie_image(num_levels,max_baddies) ; Image of bad-dudes Dim baddie_initx(num_levels,max_baddies) ; Initial X-position Dim baddie_inity(num_levels,max_baddies) ; Initial Y-position Gosub set_baddies ; Put all baddie-data in the right arrays DisplayBitMap 0,3 ; Show bitmap 3 (still empty) DisplayOn ; Turn on display ; Intro ; ----- .intro Gosub clear_stuff ; Clear indicators StartMedModule 0 ; Start music SetInt 5 ; Use VBlank interrupt to play music PlayMed End SetInt VWait 25 ; Wait some frames (because of the ESC-key, that's why!) Repeat Use BitMap 4 ; Put intro info on bitmap 4 Boxf 58,16,260,164,0 ; Clear center of screen Line 57,22,57,158,0 Line 261,22,261,158,0 Line 56,25,56,155,0 Line 262,25,262,155,0 Blit 98,160,55 ; Put EVIL-INSECTS logo on screen BitMapOutput 4 Colour 48:Locate 10,12 ; Print some info about me (hehe) NPrint "Fantasy Freaks @1994" Colour 51:Locate 15,14 NPrint "Created by" Colour 54:Locate 11,15 NPrint "Matthijs Hollemans" ; That's me (stupid name, huh? Well, I'm Dutch, that explains it, doesn't it?) Colour 57:Locate 10,18 NPrint "Press FIRE to start!" ; This is what you should do to start this magnificent game (ahum) DisplayBitMap 0,4 tm.l=0 Repeat ; Continue after certain time or after user input VWait tm+1 If RawStatus($45)=True ; 'ESC'ape key VWait Pop Repeat:Pop Repeat:Goto finish EndIf If Joyb(1)=1 ; Fire button (Joystick 2) Pop Repeat:Pop Repeat:Goto new_game EndIf Until tm>500 Gosub SHOWHISCORES ; Show some hiscores for a change tm.l=0 Repeat ; Continue again after certain time or after user input VWait tm+1 If RawStatus($45)=True ; 'ESC'ape key VWait Pop Repeat:Pop Repeat:Goto finish EndIf If Joyb(1)=1 Pop Repeat:Pop Repeat:Goto new_game EndIf Until tm>500 Forever ; New game ; -------- new_game ; A new game starts... ClrInt 5 StopMed ; ...but first a module stops! db=0 ; Double-buffering counter DisplayBitMap 0,db ; Display play-screen Use BitMap 3 ; And remove intro-stuff from intro-bitmap Boxf 58,16,260,164,0 ; Clear center of screen Line 57,22,57,158,0 Line 261,22,261,158,0 Line 56,25,56,155,0 Line 262,25,262,155,0 CopyBitMap 3,4 ; Make bitmaps 3 and 4 look the same Colour 1,0 ; Set printing colour score.l=0 ; Your score lives=4 ; The number of lives you have left you_x.w=160 ; Main character X-position level=0 ; First level (how obvious...) coin\x=0,0,0 ; Reset coin-data coin_type=0 ; What coin does. 1=Extra life 2=Speed up 3=Stone speed stone\x=0,0,2 ; Reset stone-data max_speed=3 ; Maximum speed of main dude last_moved=0 ; Previous direction of movement (-1,1) ; New Level ; --------- new_level ; Gosh, a new level ClearList bomb() ; Remove all projeciles (bombs) from list ClearList baddie() ; Remove all bad-guys from their list no_coin=True ; True if no coin has fallen no_stone=True ; True if no stone is falling image=no_move_image ; Reset main character anim level+1 ; Increase level-counter If level>num_levels Then Goto game_completed ResetList baddie() ; Init baddies for this level For t=0 To num_baddies(level)-1 If AddItem(baddie()) baddie()\image=baddie_image(level,t) baddie()\x=baddie_initx(level,t) baddie()\y=baddie_inity(level,t) baddie()\heading=-1 baddie()\status=0 EndIf Next t For t=0 To 1 ; Print number of lives , just for the good looks... BitMapOutput t Locate 2,8.65 Print lives ; Print score Locate 23,23.2 Print score Next t ; Init Fleet ; ---------- db=1-db ; Hihi (if you'd know how many time had passed before I found out that this was the answer to some stupid problem...) For star_step=0 To 6 ; Star anim-frames For funky=0 To 2 ; Waiting loop VWait DisplayBitMap 0,db ; db=1-db ; Double buffering stuff Use BitMap db ; UnBuffer db BBlit db,anm(image),you_x,129 ; Draw main character ResetList baddie() For t=0 To num_baddies(level)-1 If NextItem(baddie()) USEPATH baddie() BBlit db,67+star_step,\x,\y ; Blit stars at bad-dude EndIf ; locations Next t Next funky ; Nice variable name, ain't it? Next star_step you_hit=False ; You are hit if this flag sais True hit_cnt=0 ; And this counter counts (syyeaaahh!) UnBuffer db Gosub draw_all ; Draw baddies and main character DisplayBitMap 0,db ; Show it VWait 50 ; New life ; -------- new_life ; Something like New-Age but different speed=0 ; Speed of main character If no_stone=False ; Stone must keep on falling even if you died (and still have lives left, that is) was_fired=True ; True if you have just fired your gun Else fired=False EndIf fire_cnt=0 ; Counter used by firing-routines now_moved=0 ; Current direction of movement image=no_move_image ; Current image of main character already_right=False ; Has something to do with running-routines already_left=False ; This one too you_hit=False ; True if you are hit by projectile hit_cnt=0 ; Counter if you are hit ; MAIN LOOP ; --------- .main ; Inspiring label Repeat VWait ; DisplayBitMap 0,db ; db=1-db ; Do double buffering Use BitMap db ; UnBuffer db ; If you_hit=False Gosub check_stick ; Check player actions Else hit_cnt+1 EndIf Gosub baddies ; Update bad-guys Gosub stones ; Handle falling-stone routines Gosub bombs ; Handle projectiles Gosub coin ; Handle falling coin ResetList baddie() ; Check for new level (i.e. all baddies nr=0 ; must be dead) While NextItem(baddie()) nr+1 Wend If nr=0 Pop Repeat: Goto new_level ; New level! EndIf Gosub draw_all ; Update screen (blit all kinds of things) If hit_cnt>17 Then Pop Repeat: Goto dead_dude ; You are one dead person If RawStatus($19)=True ;

ause key Repeat VWait 10 Until RawStatus($19)=True VWait 10 EndIf If RawStatus($45)=True ; ape key UnBuffer 0 UnBuffer 1 Goto intro EndIf Forever ; There ain't no escape from the main-loop (unless the ESC-key) ; You have lost a life ; -------------------- dead_dude ; Sais it all, doesn't it... lives-1 ; Decrease number of lives If lives<0 Then lives=0 : Goto game_over max_speed-1 ; Decrease maximum speed (hehe) If max_speed<3 Then max_speed=3 stone\vel-1 ; This is kinda mean, but hey, nobody ever said I was a nice guy... (except for my mum) If stone\vel<2 Then stone\vel=2 Goto new_life ; Typical, all game coders seem to believe in re-incarnation ; Game completed ; -------------- .game_completed ; I hope you won't get this far, because the well-done screen sucks (just like the rest of the game) UnBuffer 0 UnBuffer 1 Use BitMap 3 Boxf 58,16,260,164,0 ; Clear center of screen Line 57,22,57,158,0 Line 261,22,261,158,0 Line 56,25,56,155,0 Line 262,25,262,155,0 BitMapOutput 3 Colour 1 Locate 13,7 NPrint "GAME COMPLETED" Colour 51 Locate 8,11 NPrint "You are a most excellent" Colour 54 Locate 13,12 NPrint "insect killer!" Colour 57 temp$="Your score: "+Str$(score) Locate 20-Len(temp$)/2,15 NPrint temp$ DisplayBitMap 0,3 Repeat Until Joyb(1)=1 VWait 10 Goto hiscores ; Game over ; --------- .game_over ; You will be seeing this a lot or you must be one of those dudes who cheat (lamer!) UnBuffer 0 UnBuffer 1 ResetList baddie() ; Remove all left-over baddies While NextItem(baddie()) KillItem baddie() Wend Use BitMap 3 Boxf 58,16,260,164,0 ; Clear center of screen Line 57,22,57,158,0 Line 261,22,261,158,0 Line 56,25,56,155,0 Line 262,25,262,155,0 BitMapOutput 3 Colour 1 Locate 15,7 NPrint "GAME OVER" Colour 51 Locate 9,11 NPrint "You are a most unlucky" Colour 54 Locate 13,12 NPrint "insect killer!" Colour 57 temp$="Your score: "+Str$(score) Locate 20-Len(temp$)/2,15 NPrint temp$ DisplayBitMap 0,3 Repeat Until Joyb(1)=1 VWait 10 Goto hiscores ; Check player actions ; -------------------- .check_stick If fired=True ; You have fired your gun If fire_cnt=1 ; Play a nice shootin' sample Sound 1,1 EndIf fire_cnt+1 If fire_cnt<8 ; Show shooting-animation image+1 Else If last_moved=-1 image=shoot_left_end Else image=shoot_right_end EndIf EndIf If fire_cnt=8 ; Initialise magic stars stars=True ; and calculate the position star_cnt=-1 ; where they have to show up If last_moved=-1 dest_x=you_x-78 dest_y=15 If dest_x<=left_border-13 delta_x=you_x-left_border dest_y=113-Int((delta_x/78)*115) dest_x=left_border-13 EndIf Else dest_x=you_x+78 dest_y=15 If dest_x=>right_border+12 delta_x=right_border-you_x dest_y=113-Int((delta_x/78)*115) dest_x=right_border+12 EndIf EndIf EndIf If fire_cnt=28 If dest_xleft_border-13 stone\x=dest_x,11 ; <--+ no_stone=False ; | EndIf ; Make stone fall from ceiling, EndIf ; if maximum not reached and ceiling ; was hit If fire_cnt=28 fired=False ; Stop firing speed=0 was_fired=True ;fire_wait=0 EndIf Goto leave0 EndIf If Joyb(1)=1 AND no_stone=True ; Fire button pressed fired=True fire_cnt=-1 If last_moved=-1 ; Calculate image image=shoot_left_start Else image=shoot_right_start EndIf Goto leave0 EndIf now_moved=Joyx(1) ; Find out what direction user is pushing joystick in If was_fired=True ; After firing, return the right If now_moved=-1 ; shape image=run_left_start EndIf If now_moved=1 image=run_right_start EndIf If now_moved=0 image=no_move_image EndIf was_fired=False EndIf If now_moved=-1 ; Joystick left already_right=False ; Calculate image If already_left=False image=run_left_start already_left=True Else If image=max_speed ; Calculate speed speed=max_speed EndIf you_x+speed ; Change position EndIf If now_moved=0 ; No joystick movement already_right=False already_left=False If last_moved=-1 ; Previous direction was left If image0 ; Calculate speed speed-friction Else speed=0 EndIf you_x+speed ; Calculate position EndIf EndIf If speed=0 AND now_moved=0 ; No movement image image=no_move_image ; i.e. main character does not move EndIf If you_xright_border ; Check right border you_x=right_border speed=0 EndIf If now_moved<>0 ; Remember previous movement last_moved=now_moved EndIf leave0 Return ; Update screen ; ------------- .draw_all If you_hit=False If fire_cnt=>3 AND fire_cnt<=12 ; Draw flame from gun If last_moved=-1 BBlit db,97,you_x-20,109,128 Else BBlit db,96,you_x+10,109,128 EndIf EndIf EndIf If you_hit=True If db=0 image=die_image Else image=no_move_image EndIf EndIf BBlit db,anm(image),you_x,129 ; Draw main character ResetList baddie() While NextItem(baddie()) BBlit db,baddie()\image,baddie()\x,baddie()\y ; Draw baddies Wend If no_coin=False BBlit db,coin_image,coin\x,coin\y ; Draw coin EndIf If no_stone=False BBlit db,81,stone\x,stone\y ; Draw stone EndIf ResetList bomb() While NextItem(bomb()) BBlit db,86,bomb()\x,bomb()\y ; Draw projectiles (= bombs) Wend If stars=True star_cnt+1 If star_cnt<20 BBlit db,star_anm(star_cnt),dest_x,dest_y ; Draw magic stars Else stars=False EndIf EndIf ; Print number of lives BitMapOutput db Locate 2,8.65 Print lives ; Print score Locate 23,23.2 Print score Return ; Create animation arrays ; ----------------------- .set_anim Restore anim_data For t=0 To 79 ; Main character animation array Read temp anm(t)=temp Next t anim_data Data 36 ; no_move (0) Data 37,37,37,37,37,38,38,38,39 ; Shoot_right (1-9) Data 40,40,40,40,40,41,41,41,42 ; Shoot_left (10-18) Data 43,43,43,44,44,44,45,45,45,46 ; Run_right Data 46,46,47,47,47,48,48,48,49,49 ; (19-48) Data 49,50,50,50,51,51,51,52,52,52 ; Data 53,53,53,54,54,54,55,55,55,56 ; Run_left Data 56,56,57,57,57,58,58,58,59,59 ; (49-78) Data 59,60,60,60,61,61,61,62,62,62 ; Data 63 ; Die_image (79) run_right_start=19 ; Some variables containing start and end run_right_end=48 ; positions of some anims in the anm()-array run_left_start=49 run_left_end=78 die_image=79 shoot_right_start=1 shoot_right_end=9 shoot_left_start=10 shoot_left_end=18 no_move_image=0 Restore star_data For t=0 To 20 ; Magic stars animation array Read temp star_anm(t)=temp Next t star_data Data 67,67,67,68,68,68,69,69,69 Data 70,70,70,71,71,71,72,72,72 Data 73,73,73 Restore explo_data ; Explosion animation array For t=0 To 20 Read temp explo_anm(t)=temp Next t explo_data Data 74,74,74,75,75,75,76,76,76 Data 77,77,77,78,78,78,79,79,79 Data 80,80,80 Return ; Handle falling stones ; --------------------- .stones If no_stone=False ; Only do the following if a stone is falling stone\y+stone\vel ; Update positions If stone\y>162 ; Check if stone doesn't fall through floor no_stone=True Else ResetList baddie() ; Check for baddie-hit While NextItem(baddie()) If baddie()\status<>2 ; Don't check for hit if baddie is already hit If ShapesHit(81,stone\x,stone\y,baddie()\image,baddie()\x,baddie()\y)=True ; Yikes! baddie()\status=2 baddie()\hit_cnt=-1 ; Baddie is hit no_stone=True score+(baddie()\image-86)*100 ; Add score to keep player happy If score>999999999 Then score=999999999 Sound 0,2 ; Play sample Pop While : Goto nex2 EndIf EndIf Wend EndIf EndIf nex2 Return ; Handle projectiles dropped by baddies ; ------------------------------------- .bombs ; Update positions ResetList bomb() While NextItem(bomb()) USEPATH bomb() \y+\vel ; Update positions If \y>162 ; Check if bomb doesn't fall through floor KillItem bomb() Else If RectsHit(\x-3,\y-2,6,4,you_x-10,124,18,41) ; Check for player-hit you_hit=True ; Main character is hit Sound 2,4 ; And you can hear it too KillItem bomb() ; Projectile disappears Pop While: Goto nex1 EndIf EndIf Wend nex1 If you_hit=True ; If you are hit, all other projectiles ResetList bomb() ; also disappear While NextItem(bomb()) KillItem bomb() Wend EndIf Return ; Handle baddies ; -------------- .baddies ResetList baddie() While NextItem(baddie()) USEPATH baddie() \x+\heading*baddie_speed(level) ; Update position If \xright_border ; Check right border \x=right_border \heading=-1 ; Adapt heading EndIf If \dropped=True ; Increase drop counter if dropped \drop_cnt+1 EndIf If \drop_cnt>drop_time(level) ; Baddie may drop again if drop counter is more than drop_time(level) \dropped=False EndIf If \status<>2 ; Baddie can only drop if he's not hit and he has not dropped a projectile yet If \dropped=False If Int(Rnd(1000))159 Then no_coin=True ; until coin hits the floor If RectsHit(coin\x-5,coin\y-5,10,10,you_x-10,124,18,41) ; Check for a coin-main dude hit no_coin=True Sound 3,1 ; Player picked up coin, play sample (Hurray...) If coin_type=1 ; Extra life-coin lives+1:score+250 ; Add life and score If lives>9 Then lives=9 EndIf If coin_type=2 ; Extra speed-coin max_speed+1: score+150 ; Add speed and score If max_speed>6 Then max_speed=6 EndIf If coin_type=3 ; Extra stone-speed-coin stone\vel+1:score+200 ; Add stone-speed and score If stone\vel>5 Then stone\vel=5 EndIf EndIf EndIf Return ; Initialise baddies for every level ; ---------------------------------- .set_baddies Restore baddie_data For t=1 To num_levels ; Read the following stuff in some arrays Read num_baddies(t) ; (explanation of these in the Initialise Read baddie_speed(t) ; section of this source) Read attack_mood(t) Read drop_time(t) For u=0 To num_baddies(t)-1 Read baddie_image(t,u) Read baddie_initx(t,u) Read baddie_inity(t,u) Next u Next t baddie_data ; These are a lot of data-statements containing ; * Level1 * ; initial coordinates and all (50 levels!) Data 3 ; num_baddies Data 1 ; baddie_speed Data 1 ; attack_mood Data 50 ; drop_time Data 87,130,60 Data 87,160,60 Data 87,190,60 ; * Level2 * Data 5 ; num_baddies Data 1 ; baddie_speed Data 2 ; attack_mood Data 75 ; drop_time Data 87,120,60 Data 87,140,60 Data 87,160,60 Data 87,180,60 Data 87,200,60 ; * Level3 * Data 4 ; num_baddies Data 1 ; baddie_speed Data 3 ; attack_mood Data 30 ; drop_time Data 88,130,60 Data 87,150,60 Data 87,170,60 Data 88,190,60 ; * Level4 * Data 7 ; num_baddies Data 1 ; baddie_speed Data 3 ; attack_mood Data 20 ; drop_time Data 88,120,60 Data 87,140,50 Data 87,140,70 Data 88,160,60 Data 87,180,50 Data 87,180,70 Data 88,200,60 ; * Level5 * Data 6 ; num_baddies Data 1 ; baddie_speed Data 4 ; attack_mood Data 10 ; drop_time Data 90,110,60 Data 88,130,60 Data 87,150,60 Data 87,170,60 Data 88,190,60 Data 90,210,60 ; * Level6 * Data 6 ; num_baddies Data 1 ; baddie_speed Data 4 ; attack_mood Data 50 ; drop_time Data 90,131,50 Data 88,150,50 Data 87,150,70 Data 87,170,70 Data 88,170,50 Data 90,190,50 ; * Level7 * Data 7 ; num_baddies Data 1 ; baddie_speed Data 5 ; attack_mood Data 40 ; drop_time Data 88,130,42 Data 88,130,60 Data 88,130,78 Data 90,160,60 Data 88,190,42 Data 88,190,60 Data 88,190,78 ; * Level8 * Data 7 ; num_baddies Data 1 ; baddie_speed Data 5 ; attack_mood Data 30 ; drop_time Data 91,120,50 Data 91,120,70 Data 90,140,60 Data 88,160,60 Data 90,180,60 Data 91,200,50 Data 91,200,70 ; * Level9 * Data 7 ; num_baddies Data 1 ; baddie_speed Data 6 ; attack_mood Data 20 ; drop_time Data 91,120,50 Data 87,120,70 Data 90,140,60 Data 88,160,70 Data 90,180,60 Data 91,200,50 Data 87,200,70 ; * Level10 * Data 7 ; num_baddies Data 1 ; baddie_speed Data 6 ; attack_mood Data 10 ; drop_time Data 91,110,42 Data 90,130,60 Data 88,150,78 Data 87,160,42 Data 88,170,78 Data 90,190,60 Data 91,210,42 ; * Level11 * Data 3 ; num_baddies Data 2 ; baddie_speed Data 2 ; attack_mood Data 50 ; drop_time Data 90,140,42 Data 90,160,60 Data 90,180,78 ; * Level12 * Data 5 ; num_baddies Data 2 ; baddie_speed Data 2 ; attack_mood Data 40 ; drop_time Data 91,120,42 Data 91,140,60 Data 92,160,78 Data 91,180,60 Data 91,200,42 ; * Level13 * Data 5 ; num_baddies Data 2 ; baddie_speed Data 3 ; attack_mood Data 30 ; drop_time Data 90,120,78 Data 91,140,60 Data 92,160,42 Data 91,180,60 Data 90,200,78 ; * Level14 * Data 6 ; num_baddies Data 2 ; baddie_speed Data 3 ; attack_mood Data 20 ; drop_time Data 92,120,78 Data 91,140,60 Data 90,160,42 Data 92,160,78 Data 91,180,60 Data 90,200,42 ; * Level15 * Data 7 ; num_baddies Data 2 ; baddie_speed Data 4 ; attack_mood Data 10 ; drop_time Data 88,110,50 Data 91,130,50 Data 90,130,70 Data 87,160,50 Data 91,190,50 Data 90,190,70 Data 88,210,50 ; * Level16 * Data 7 ; num_baddies Data 2 ; baddie_speed Data 4 ; attack_mood Data 50 ; drop_time Data 92,120,50 Data 88,140,50 Data 90,150,70 Data 91,160,50 Data 91,170,70 Data 88,180,50 Data 92,200,50 ; * Level17 * Data 7 ; num_baddies Data 2 ; baddie_speed Data 5 ; attack_mood Data 40 ; drop_time Data 87,130,42 Data 92,130,60 Data 91,130,78 Data 93,160,78 Data 91,190,78 Data 92,190,60 Data 87,190,42 ; * Level18 * Data 7 ; num_baddies Data 2 ; baddie_speed Data 5 ; attack_mood Data 30 ; drop_time Data 87,110,50 Data 92,110,70 Data 91,130,60 Data 93,160,60 Data 91,190,60 Data 87,210,50 Data 92,210,70 ; * Level19 * Data 7 ; num_baddies Data 2 ; baddie_speed Data 6 ; attack_mood Data 20 ; drop_time Data 92,120,42 Data 92,120,60 Data 92,120,78 Data 93,160,60 Data 94,200,42 Data 94,200,60 Data 94,200,78 ; * Level20 * Data 7 ; num_baddies Data 2 ; baddie_speed Data 6 ; attack_mood Data 10 ; drop_time Data 93,130,50 Data 93,150,50 Data 93,170,50 Data 93,190,50 Data 94,140,70 Data 94,160,70 Data 94,180,70 ; * Level21 * Data 3 ; num_baddies Data 3 ; baddie_speed Data 2 ; attack_mood Data 50 ; drop_time Data 93,180,42 Data 94,160,60 Data 92,140,78 ; * Level22 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 2 ; attack_mood Data 40 ; drop_time Data 91,100,42 Data 92,120,60 Data 93,140,78 Data 87,160,60 Data 93,180,78 Data 92,200,60 Data 91,220,42 ; * Level23 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 3 ; attack_mood Data 30 ; drop_time Data 90,100,78 Data 91,120,60 Data 92,140,42 Data 88,160,60 Data 92,180,42 Data 91,200,60 Data 90,220,78 ; * Level24 * Data 6 ; num_baddies Data 3 ; baddie_speed Data 3 ; attack_mood Data 20 ; drop_time Data 92,120,42 Data 91,140,60 Data 90,160,78 Data 92,160,42 Data 91,180,60 Data 90,200,78 ; * Level25 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 4 ; attack_mood Data 10 ; drop_time Data 88,110,70 Data 91,130,70 Data 90,130,50 Data 87,160,70 Data 91,190,70 Data 90,190,50 Data 88,210,70 ; * Level26 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 4 ; attack_mood Data 50 ; drop_time Data 92,120,70 Data 88,140,70 Data 90,140,50 Data 91,160,70 Data 88,180,70 Data 90,180,50 Data 92,200,70 ; * Level27 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 5 ; attack_mood Data 40 ; drop_time Data 87,130,78 Data 92,130,60 Data 91,130,42 Data 93,160,42 Data 91,190,42 Data 92,190,60 Data 87,190,78 ; * Level28 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 5 ; attack_mood Data 30 ; drop_time Data 90,120,60 Data 92,140,42 Data 91,140,60 Data 94,160,78 Data 91,180,60 Data 92,180,42 Data 90,200,60 ; * Level29 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 6 ; attack_mood Data 20 ; drop_time Data 92,120,42 Data 92,120,60 Data 92,120,78 Data 93,160,60 Data 94,200,42 Data 94,200,60 Data 94,200,78 ; * Level30 * Data 7 ; num_baddies Data 3 ; baddie_speed Data 6 ; attack_mood Data 10 ; drop_time Data 87,120,60 Data 88,140,42 Data 90,140,78 Data 88,160,42 Data 90,160,78 Data 88,180,42 Data 90,180,78 Return ; * Level31 * Data 5 ; num_baddies Data 4 ; baddie_speed Data 3 ; attack_mood Data 50 ; drop_time Data 93,140,42 Data 93,140,78 Data 94,160,60 Data 95,180,78 Data 95,180,42 ; * Level32 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 3 ; attack_mood Data 40 ; drop_time Data 91,130,78 Data 92,110,60 Data 93,130,42 Data 87,160,42 Data 93,190,42 Data 92,210,60 Data 91,190,78 ; * Level33 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 4 ; attack_mood Data 30 ; drop_time Data 91,130,42 Data 92,110,60 Data 93,130,78 Data 87,160,78 Data 93,190,78 Data 92,210,60 Data 91,190,42 ; * Level34 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 4 ; attack_mood Data 20 ; drop_time Data 95,100,78 Data 95,120,60 Data 95,140,42 Data 88,160,60 Data 95,180,78 Data 95,200,60 Data 95,220,42 ; * Level35 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 5 ; attack_mood Data 10 ; drop_time Data 90,120,60 Data 92,140,78 Data 91,140,60 Data 94,160,42 Data 91,180,60 Data 92,180,78 Data 90,200,60 ; * Level36 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 5 ; attack_mood Data 50 ; drop_time Data 94,140,50 Data 94,160,50 Data 94,180,50 Data 93,130,70 Data 93,150,70 Data 93,170,70 Data 93,190,70 ; * Level37 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 6 ; attack_mood Data 40 ; drop_time Data 95,140,42 Data 90,140,60 Data 95,140,78 Data 90,160,78 Data 95,180,42 Data 90,180,60 Data 95,180,78 ; * Level38 * Data 6 ; num_baddies Data 4 ; baddie_speed Data 6 ; attack_mood Data 30 ; drop_time Data 91,130,60 Data 91,140,42 Data 91,140,78 Data 92,180,42 Data 92,193,60 Data 92,180,78 ; * Level39 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 7 ; attack_mood Data 20 ; drop_time Data 92,140,42 Data 92,160,42 Data 92,180,42 Data 93,140,60 Data 93,160,60 Data 93,180,60 Data 95,160,78 ; * Level40 * Data 7 ; num_baddies Data 4 ; baddie_speed Data 7 ; attack_mood Data 10 ; drop_time Data 87,130,42 Data 87,150,42 Data 87,170,42 Data 87,190,42 Data 91,160,60 Data 88,140,78 Data 88,180,78 ; * Level41 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 5 ; attack_mood Data 50 ; drop_time Data 90,100,78 Data 90,120,60 Data 90,140,42 Data 90,160,60 Data 90,180,78 Data 90,200,60 Data 90,220,42 ; * Level42 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 10 ; attack_mood Data 40 ; drop_time Data 93,140,42 Data 93,180,78 Data 87,200,60 Data 87,220,42 Data 92,100,42 Data 92,120,60 Data 92,140,78 ; * Level43 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 10 ; attack_mood Data 30 ; drop_time Data 93,140,78 Data 93,180,42 Data 87,200,60 Data 87,220,78 Data 92,100,78 Data 92,120,60 Data 92,140,42 ; * Level44 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 15 ; attack_mood Data 20 ; drop_time Data 95,100,42 Data 95,120,60 Data 95,140,78 Data 88,160,60 Data 95,180,42 Data 95,200,60 Data 95,220,78 ; * Level45 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 15 ; attack_mood Data 10 ; drop_time Data 93,100,60 Data 94,140,60 Data 94,160,42 Data 94,160,60 Data 94,160,78 Data 94,180,60 Data 93,220,60 ; * Level46 * Data 6 ; num_baddies Data 5 ; baddie_speed Data 20 ; attack_mood Data 10 ; drop_time Data 93,120,50 Data 93,140,50 Data 94,120,70 Data 93,180,50 Data 93,200,50 Data 94,200,70 ; * Level47 * Data 6 ; num_baddies Data 5 ; baddie_speed Data 30 ; attack_mood Data 20 ; drop_time Data 95,120,60 Data 90,150,60 Data 90,150,78 Data 90,170,60 Data 90,170,78 Data 95,200,60 ; * Level48 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 40 ; attack_mood Data 10; drop_time Data 91,120,42 Data 91,120,78 Data 87,140,60 Data 87,160,78 Data 87,180,60 Data 92,200,42 Data 92,200,78 ; * Level49 * Data 6 ; num_baddies Data 5 ; baddie_speed Data 60 ; attack_mood Data 5 ; drop_time Data 92,100,70 Data 93,140,50 Data 93,140,70 Data 94,180,50 Data 94,180,70 Data 95,220,70 ; * Level50 * Data 7 ; num_baddies Data 5 ; baddie_speed Data 70 ; attack_mood Data 1 ; drop_time Data 95,100,42 Data 95,160,42 Data 95,220,42 Data 95,120,60 Data 95,160,60 Data 95,200,60 Data 95,160,78 Return ; Clear lives and score-indicators on bitmap 0 and 1 ; -------------------------------------------------- clear_stuff For t=0 To 1 Use BitMap t Boxf 11,68,27,76,0 ; Just draw some black filled boxes Boxf 179,184,261,192,0 Next t Return ; Initialise hiscores ; ------------------- init_hiscores Restore INIT_DATA ; This hiscore table is displayed every time For t=1 To hitot ; you have booted up this game Read hiname$(t),hiscore(t) Next t INIT_DATA Data$ "MATTHIJS " Data.l 10000 Data$ "PAUL " Data.l 9000 Data$ "NOL " Data.l 8000 Data$ "GUIDO " Data.l 7000 Data$ "RENE " Data.l 6000 Data$ "FRANK " Data.l 5000 Data$ "BING BONG " Data.l 4000 Data$ "SCHREUT " Data.l 3000 Data$ "MUM " Data.l 2000 Data$ "DAD " Data.l 1000 Return ; Handle hiscore-routines ; ----------------------- .hiscores hinr=0 ; Check if you have got a hiscore For t=1 To hitot If score=>hiscore(t) Then hinr=t : Pop For : Goto CON0 Next t CON0 If hinr<>0 ; You've got a hiscore For t=hitot To hinr Step -1 ; Move other scores down hiscore(t)=hiscore(t-1) hiname$(t)=hiname$(t-1) Next t hiscore(hinr)=score ; Insert yours in the array hiname$(hinr)="" Gosub SHOWHISCORES ; Show hiscores and... Gosub ENTERNAME ; ...ask for your name Goto intro ; Return to intro Else Goto intro ; You've got no hiscore, so return to intro EndIf ; Enter name (belongs to Hiscore routines) ; ---------------------------------------- ENTERNAME name$="" ; Reset name, position and colour pos=0 Colour 47+hinr START_INPT k$="" BlitzKeys Off ; Kind of primitive way to clear keyboard BlitzKeys On ; buffer, but it works (with no buffer clearing, you would see all the P's you had pressed for Pause-mode) Repeat k$=UCase$(Inkey$) ; Wait for input from keyboard If Joyb(1)=1 Then Goto FINISHED_INPT ; or joystick (Fire) Until k$<>"" kk=Asc(k$) If kk=13 Then Goto FINISHED_INPT ; Return If kk=32 Then Goto DISPLAY_INPT ; Space If kk=8 Then Goto BACKSPACE ; Backspace (really?) If kk<65 OR kk>91 Then Goto START_INPT ; No valid key DISPLAY_INPT ; Add input to name string If pos0 ; If position is not 0 then remove last character pos-1 ; from string Else pos=0 EndIf name$=Left$(name$,pos) Goto DISPLAY2 FINISHED_INPT ; Return was pressed, input is finished hiname$(hinr)=name$ ; Add name to hiscore array Return ; Show hiscores ; ------------- SHOWHISCORES DisplayBitMap 0,4 ; Show intro screen (or empty screen) Use BitMap 3 ; Draw hiscore table on bitmap 3 Boxf 58,16,260,164,0 ; Clear center of screen Line 57,22,57,158,0 Line 261,22,261,158,0 Line 56,25,56,155,0 Line 262,25,262,155,0 BitMapOutput 3 Colour 1,0 Locate 11,4.5 NPrint "TODAY'S HIGHSCORES" For t=1 To hitot Colour 47+t Locate 10,7+t NPrint hiname$(t) hs$=Str$(hiscore(t)) temp=Len(hs$) hs$=String$(" ",mxlen-temp)+hs$ Locate 20,7+t NPrint hs$ Next t DisplayBitMap 0,3 ; And show this bitmap Return ; Show Alert for those with a Kickstart version less than 39.x ; ------------------------------------------------------------ AGA_Only ; This is weird, I had to use some old AMOS-code, because I couldn't get some C-code working... n$=Chr$(0)+Chr$(188)+Chr$(15)+"Sorry folks, this is an AGA-game."+Chr$(0)+Chr$(1) n$+Chr$(0)+Chr$(136)+Chr$(30)+"You cannot play EVIL INSECTS without a machine"+Chr$(0)+Chr$(1) n$+Chr$(0)+Chr$(196)+Chr$(39)+"with an AGA-compatible chipset."+Chr$(0)+Chr$(1) n$+Chr$(0)+Chr$(180)+Chr$(48)+"(Such as the A1200, A4000 and CD"+Chr$(179)+Chr$(178)+")"+Chr$(0)+Chr$(1) n$+Chr$(0)+Chr$(184)+Chr$(66)+"Press Any mousebutton to return..."+Chr$(0)+Chr$(0) Reply=DisplayAlert_(0,&n$,78) ; Intuition-call End ; Bail-out ; Clean up and finish ; ------------------- .finish For t=0 To Maximum Shape-1 ; Return every bit of used memory Free Shape t ; to system and quit Next t For t=0 To Maximum Sound-1 Free Sound t Next t Free MedModule 0 Free BlitzFont 0 Free Palette 0 Free BitMap 0 Free BitMap 1 Free BitMap 3 Free BitMap 4 Free CopList 0 End ; ** END OF SOURCE **