Sinphaltimus Posted August 20, 2016 Author Share Posted August 20, 2016 I have to tell ya. In rewriting my collision detection routines I find I'm writing what feels like 10 times more code than the original code, to perform 10 times less functions than the original code.I sure hope the performance improvements are noticeable, I'll be ready to test within the half hour or so.. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted August 20, 2016 Share Posted August 20, 2016 Hmmm.... I have not delved too deeply into the code, but if all your static characters are SPRITEs (except for holes), why not do a COINC(ALL) and branch to a subroutine that determines what was hit? I don't know, seems the easiest way. 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 20, 2016 Author Share Posted August 20, 2016 (edited) Hmmm.... I have not delved too deeply into the code, but if all your static characters are SPRITEs (except for holes), why not do a COINC(ALL) and branch to a subroutine that determines what was hit? I don't know, seems the easiest way. loot (zombies, hearts, melee and ranged) are not static. Player holes and exits are. That's what I was doing before with 26 sprites to go through using all. After reworking it I am doing a level and position check first to determine player position, once I know the position of the player, I know what sprite the player is closest to being coinc with so I just run the coinc against that sprite number and the player. The new method drills straight down to the answer to perform the action based on vicinity which is maybe 3-4 checks to result a coinc where as my old method relied on for next loops against the array and checking each time - this results in 23 checks (one for exit, 8 holes, 14 loot items) before it could resolve a coinc check. I'm not seeing a huge performance boost yet which is why I'm still combing through code. Edited August 20, 2016 by Sinphaltimus 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 20, 2016 Author Share Posted August 20, 2016 If I could only get through a day without distractions. But my GoTek Amiga Floppy Drive Emulator arrived. Had to fire it up and poke about. OK, now back to fixing this thing I broke in my code. 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 23, 2016 Author Share Posted August 23, 2016 (edited) I'm taking a short break. More hardware projects hit me out of the blue and my brain needs a break from XB for a few days. No worries, I have every intention to make this a fully functioning game sooner than anyone thinks. Edited August 23, 2016 by Sinphaltimus Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 27, 2016 Author Share Posted August 27, 2016 (edited) New Version 0.30 GAME IS CURRENTLY EARLY ACCESS ALPHA version. No ETA on Beta.Just copy/paste from below OR download the class99 save dsk1.ZOMBI029 file and Extended BASIC text file that is attached here: Zombtiv30.zip 16.08KB 0 downloads How To Play: About: This is meant to be a semi casual zombie survival game to escape a skyscraper. Play for score (session high score coming soon) Combat: A melee attack is a swing attack that covers the space directly in front and behind the player. You get one attack per inventory item. Joystick down = ranged attack temporarily using a noise for place holder. ZEDS: Will grab you and attack you. Hold a direction to escape, try hitting with melee, break away as fast as you can. DODGE: You can attempt to dodge zeds by jumping past them (joystick button or J) LOOTING: Will slow you down, jump past it to dodge the loot if you need to (for future versions when Zombies run) Controls: X=Quit, R=Reset, J and Controller Button = Jump, Joystick Left/Right moves left/right, Joystick up = melee attack - Notes: Melee attacks will destroy loot including hearts. Be careful not to use up all your melee weapons. You can miss a melee attack, if a zombie doesn't die after 2 hits, try re positioning. V030 changes: Can jump while running. improved running speed. Re-Wrote Loot distribution and collision code and then fixed everything that I broke as a result. Fixed GUI display issue when ranged is full causing wrap around of value on the display. looting and zombie attacks slow you down. Added sounds for falling and loot pickup. 100 SCORE=0000 :: HEALTH=10 :: BOARD=1 :: HSCORE=0 110 MELEE=0 :: RANGED=0 !weapons inventory 120 CALL SCREEN(2) 130 CALL COLOR(10,15,1):: CALL COLOR(12,12,1):: CALL COLOR(3,12,1):: CALL COLOR(4,12,1) 140 CALL COLOR(8,7,1):: CALL COLOR(11,8,1):: CALL COLOR(14,12,1):: HCLR=1 150 CALL CLEAR 160 !running patterns right 170 DATA 1818101010101018,1818183C1C142630,181A3C5E1A334060,18197E981C724100,18197E9818147243,1818385E581C2436 180 !stop and jump right 190 DATA 1818101010101018,000C1C3058081018,00000C1C305C1C18,0000060E183C0C18,0003070C18081018 200 !jumping right 210 DATA 0303040609081010,1818141810106000,1818103810180C00,1818503010180404 220 !landing right 230 DATA 0018183050180818,1818101038501018 240 !running patterns left 250 DATA 1818080808080818,1818183C3828640C,18583C7A58CC0206,18987E19384E8200,18987E1918284EC2,18181C7A1A38246C 260 !stop and jump left 270 DATA 1818080808080818,0030380C1A100818,000030380C3A3818,00006070183C3018,00C0E03018100818 280 !jumping left 290 DATA C0C0206090100808,1818281808080600,1818081C08183000,18180A0C08182020 300 !landing right 310 DATA 0018180C0A181018,181808081C0A0818 320 FOR CHRR=33 TO 38 !setup for creating running characters right 330 READ PAT$ 340 CALL CHAR(CHRR,PAT$) 350 NEXT CHRR 360 REM CHR=CHRR 370 FOR CHSR=39 TO 43 !setup for creating stop and jump characters right 380 READ PAT$ 390 CALL CHAR(CHSR,PAT$) 400 NEXT CHSR 410 FOR CHJR=64 TO 67 !setup for creating jumping characters right 420 READ PAT$ 430 CALL CHAR(CHJR,PAT$) 440 NEXT CHJR 450 FOR CHLR=68 TO 69 !setup for creating landing characters right 460 READ PAT$ 470 CALL CHAR(CHLR,PAT$) 480 NEXT CHLR 490 REM left running*********************** 500 FOR CHRL=70 TO 75 !setup for creating running characters left 510 READ PAT$ 520 CALL CHAR(CHRL,PAT$) 530 NEXT CHRL 540 FOR CHSL=76 TO 80 !setup for creating stop and jump characters left 550 READ PAT$ 560 CALL CHAR(CHSL,PAT$) 570 NEXT CHSL 580 FOR CHJL=81 TO 84 !setup for creating jumping characters left 590 READ PAT$ 600 CALL CHAR(CHJL,PAT$) 610 NEXT CHJL 620 FOR CHLL=85 TO 86 !setup for creating landing characters left 630 READ PAT$ 640 CALL CHAR(CHLL,PAT$) 650 NEXT CHLL 660 BGIR$="3C4426D999A5C3FF" !BAD girder for level HOLE creation 670 GIR$="FFC3A59999A5C3FF" !GIRDER FOR LEVELS 680 CALL CHAR(104,BGIR$,105,GIR$)!girder for level creation 690 GRAV$="FFFFFFFFFFFFFFFF" :: CALL CHAR(106,GRAV$)!THE HOLE 700 EXT$="1F1111111D11111F" :: CALL CHAR(107,EXT$)!THE EXIT 710 HRT$="66FFFFFF7E7E3C18" :: CALL CHAR(88,HRT$)!THE HEART 720 ZED$="3C2418FF9918183C" :: CALL CHAR(96,ZED$)!THE ZED 730 MLE$="C0E0703A1E0C1A01" :: CALL CHAR(112,MLE$)!MELEE 740 RNG$="000000FF7F1E1606" :: CALL CHAR(113,RNG$)!RANGED WEAPONS 750 SCTXT1$="70808063141414E3" :: SCTXT2$="00000000334A4A32" :: SCTXT3$="00000000993C2118" !Word Score 760 CALL CHAR(120,SCTXT1$):: CALL CHAR(121,SCTXT2$):: CALL CHAR(122,SCTXT3$) 770 EXTXT$="0044442810284444" :: CALL CHAR(123,EXTXT$)! the letter X remain for GUI 780 LVLTXT$="E0E080E9EF86EFE9" :: CALL CHAR(124,LVLTXT$)! EX TEXT IN GUI 790 IDLE$="3838107CBA38286C" :: CALL CHAR(44,IDLE$)!***IDLE MAN 800 MMELE$="3C3C18FF7E3C183C" :: MRNGL$="0C0C04FC4C3C286C" :: MRNGR$="3030203F323C1436" ! MELEE & l/r RANGED ATTACKS 810 MWA$="002418FF1824" :: BULET$="0000008" !WEAPONS FIRE 820 ZDI$="3C2418FF9918183C" :: ZDA$="3CA5DB7E1818183C" :: ZWL1$="3C2C18F81838246C" :: ZWL2$="3C2C18F818181838" !ZED IDLE&WALK LEFT 830 ZWR1$="3C34181F181C2436" :: ZWR2$="3C34181F1818181C" !ZED WALK RIGHT 840 CALL CHAR(45,MMELE$,46,MRNGL$,47,MRNGR$)!MAN ATTTACKS 850 CALL CHAR(143,MWA$,142,BULET$)!WEAPONS FIRE 860 RANDOMIZE 870 SLOT=10 !STARTING SPRITE NUMBER FOR LOOT and more 880 OPTION BASE 1 890 DIM LO0T(3,14)!LOOT DISTRIBUTION AND COLLISION. 900 LTN=1 !LOOT ARRAY COORDS COL 910 LAB=1 !LOOT ARRAY COORDS ROW 920 SHL=2 :: GRND=17 !START ground level on top girder (YP+8pixels), LEVEL AND SPRITE HOLE # 930 LVL=3 :: YP=9 :: XP=8 :: RS=0 :: CS=16 :: RSPD=2.0 :: RSPDD=3.3 !start pos,vel,controller run speed multiplier rspd 940 ZHELTH=2 !default health of zombies start of game 950 GOSUB 2310 !*******************************Create Level 960 REM***************************************Create Sprite Idle******** 970 CALL SPRITE(#1,44,6,YP,XP) 980 CALL JOYST(1,JX,JY):: !check for joystick input 990 CALL KEY(1,K,S):: IF K=0 AND S=-1 THEN 6270 :: IF K=6 THEN 1000 ELSE 1010 1000 CALL DELSPRITE(ALL):: RESTORE 170 :: GOTO 100 1010 IF JY=0 THEN 1030 ELSE 1020 ! check for combat 1020 GOSUB 6170 ! goto combat 1030 IF JX=0 THEN 1070 1040 GOSUB 5670 !**********wall collision checks 1050 CALL COINC(ALL,C):: IF C=0 THEN 1070 1060 GOSUB 2530 !****************************collision checks 1070 CALL KEY(1,K,S):: IF K<>18 AND K<>74 AND K<>106 THEN 1740 !no kb pressed check for joyst 1080 REM ********jump routine check******** 1090 CALL MOTION(#1,0,0) 1100 IF CS<>-16 THEN 1140 1110 CALL POSITION(#1,YP,XP)!get new position for next sprite 1120 GOSUB 1180 ! goto jump left 1130 GOTO 960 1140 IF CS<>16 THEN 1740 1150 CALL POSITION(#1,YP,XP)!get new position for next sprite 1160 GOSUB 1460 !goto jump right************************** 1170 GOTO 960 1180 REM *************jump left routine********* 1190 CS=0 :: CALL MOTION(#1,0,CS)!joystick button pressed so STOP running! 1200 CALL SPRITE(#1,CHSL,6,YP,XP)!recreate sprite1 as stop and jump characters 1210 FOR PT=76 TO 80 !setup stop and jump animation left 1220 CALL PATTERN(#1,PT)!ANIMATE 1230 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1240 NEXT DELAY 1250 NEXT PT !continue animating the stop and jump until done 1260 CALL POSITION(#1,YP,XP)!get new postion for animating the jumping 1270 IF XP<=24 THEN 1370 1280 CS=-20 :: YP=YP-3 :: RS=0 :: CALL SPRITE(#1,CHJL,6,YP,XP,RS,CS)!jumping left 1290 FOR PT=81 TO 84 1300 CALL PATTERN(#1,PT) 1310 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1320 NEXT DELAY 1330 NEXT PT 1340 CS=0 :: CALL MOTION(#1,0,CS)!stop motion at end of jumping animation to begin landing animation. 1350 CALL POSITION(#1,YP,XP)!get new position for starting landing animation. 1360 YP=YP+3 !RESET YP TO BE GROUND. 1370 CALL SPRITE(#1,CHLL,6,YP,XP) 1380 FOR PT=85 TO 86 !setup landing animation left 1390 CALL PATTERN(#1,PT) 1400 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1410 NEXT DELAY 1420 NEXT PT ! continue landing animation until last frame 1430 CALL POSITION(#1,YP,XP)!get new position for next sprite 1440 CS=-16 1450 RETURN 1460 REM *************jump right routine****** 1470 CS=0 :: CALL MOTION(#1,0,CS)!joystick button pressed so STOP running! right 1480 CALL SPRITE(#1,CHSR,6,YP,XP)!recreate sprite1 as stop and jump characters right 1490 FOR PT=39 TO 43 !setup stop and jump animation right 1500 CALL PATTERN(#1,PT) 1510 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1520 NEXT DELAY 1530 NEXT PT !continue animating the stop and jump until done right 1540 CALL POSITION(#1,YP,XP)!get new postion for animating the jumping right 1550 IF XP>=224 THEN 1650 1560 CS=20 :: YP=YP-3 :: CALL SPRITE(#1,CHJR,6,YP,XP,RS,CS)!jumping right 1570 FOR PT=64 TO 67 !setup jumping characters right 1580 CALL PATTERN(#1,PT) 1590 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1600 NEXT DELAY 1610 NEXT PT 1620 CS=0 :: CALL MOTION(#1,0,CS)!stop motion at end of jumping animation to begin landing animation. 1630 CALL POSITION(#1,YP,XP)!get new position for starting landing animation. 1640 YP=YP+3 1650 CALL SPRITE(#1,CHLR,6,YP,XP) 1660 FOR PT=68 TO 69 !setup landing animation 1670 CALL PATTERN(#1,PT) 1680 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1690 NEXT DELAY 1700 NEXT PT ! continue landing animation until last frame 1710 CALL POSITION(#1,YP,XP)!get new position for next sprite 1720 CS=16 1730 RETURN 1740 REM **************Check Joyst Options************ 1750 IF JX<>0 THEN 1780 1760 CALL MOTION(#1,0,0) 1770 GOTO 970 1780 REM ********running check*************** 1790 IF JX<>-4 THEN 1820 1800 GOSUB 2090 1820 IF JX<>4 THEN 970 1830 GOSUB 1860 1850 GOTO 970 !after RETURN goto joyst check 1860 REM ************run right routine******** 1870 CALL POSITION(#1,YP,XP)::CS=16 :: CALL SPRITE(#1,CHRR,6,YP,XP,0,JX*RSPD)!create the runner and send running 1880 FOR PT=33 TO 38 STEP 2 !setup for animating the run right 1900 CALL PATTERN(#1,PT) 1910 CALL KEY(1,K,S):: IF K=18 OR K=74 OR K=106 THEN 1080 !jump 1920 CALL JOYST(1,JX,JY):: !check for joystick input 1950 GOSUB 5670 !**********wall collision checks 1960 CALL COINC(ALL,C):: IF C=0 THEN 1970 :: CALL MOTION(#1,0,(JX*RSPD)/RSPDD):: GOSUB 2530 !collision actions 1970 IF JY=0 THEN 1990 ELSE 1980 1980 GOSUB 6170 1990 IF JX<>0 THEN 2010 ELSE 2000 !not joy pressed keep running 2000 CALL POSITION(#1,YP,XP):: CALL MOTION(#1,0,0):: CALL SPRITE(#1,44,6,YP,XP):: RETURN 2010 CALL JOYST(1,JX,JY) 2020 IF JX=4 THEN 2040 2030 IF JX=-4 THEN 2080 2040 CALL MOTION(#1,0,JX*RSPD) 2050 NEXT PT 2060 IF JX=4 THEN 1880 2070 CALL POSITION(#1,YP,XP)!check position and store before stopping motion 2080 RETURN 2090 REM **********run left routine************** 2100 CALL POSITION(#1,YP,XP)::CS=-16 :: CALL SPRITE(#1,CHRL,6,YP,XP,0,JX*RSPD)!create the runner and send running 2110 FOR PT=70 TO 75 STEP 2 !setup for animating the run left 2130 CALL PATTERN(#1,PT) 2140 CALL KEY(1,K,S):: IF K=18 OR K=74 OR K=106 THEN 1080 !jump 2150 CALL JOYST(1,JX,JY)!check for joystick input 2180 GOSUB 5670 !**********wall collision checks 2185 CALL COINC(ALL,C):: IF C=0 THEN 2190 :: CALL MOTION(#1,0,(JX*RSPD)/RSPDD):: GOSUB 2530 !collision actions 2190 IF JY=0 THEN 2210 ELSE 2200 2200 GOSUB 6170 2210 IF JX<>0 THEN 2230 !not joy pressed keep running 2220 CALL POSITION(#1,YP,XP):: CALL MOTION(#1,0,0):: CALL SPRITE(#1,44,6,YP,XP):: RETURN 2230 CALL JOYST(1,JX,JY) 2240 IF JX=-4 THEN 2260 2250 IF JX=4 THEN 2300 2260 CALL MOTION(#1,0,JX*RSPD) 2270 NEXT PT 2280 IF JX=-4 THEN 2110 2290 CALL POSITION(#1,YP,XP)!check position and store for next sprite 2300 RETURN 2310 REM *************************************************************************level creation************************ 2320 GOSUB 5750 !*************************gui creation****** 2330 HLE=INT((RND*15)+5) 2340 FOR LVL=1 TO 8 2350 IF LVL=1 THEN 2370 2360 GOSUB 5230 !*************************************GOSUB********LOOT DS********** 2370 CALL VCHAR(1,1,105,24)!LEFT WALL 2380 CALL VCHAR(1,32,105,24)!RIGHT WALL 2390 CALL HCHAR(LVL*3,1,105,HLE-1)!LEFT SIDE GIRDERS 2400 IF LVL=8 THEN 2420 :: CALL SPRITE(#SHL,106,HCLR,GRND-8,(HLE* +1)!HOLE PROPER 2410 SHL=SHL+1 !ADVANCE SPRITE # 2420 LASTHLE=(HLE* +1 :: CALL HCHAR(LVL*3,HLE+3,105,32-(HLE+3))!RIGHT SIDE Girders 2430 IF LVL=8 THEN 2490 :: CALL HCHAR(LVL*3,HLE,104)!CRUMBLE LEFT SIDE 2440 CALL HCHAR(LVL*3,HLE+2,104)!crumble right side 2450 GRND=GRND+24 2460 HOL=INT((RND*15)+5)!NEW LOCATION FOR HOLE 2470 IF HOL=HLE THEN 2460 !NOT EQUAL TO PREVIOUS HOLE 2480 HLE=HOL !SET PROPER HOLE VARIABLE 2490 NEXT LVL !GO CREATE NEXT LEVEL 2500 CALL SPRITE(#9,107,15,22*8,30* ! THE EXIT 2510 CALL HCHAR(24,1,105,31)!THE FLOOR 2520 RETURN 2530 REM *********************************collision detection routines******* 2540 GOSUB 5670 !**********wall collision checks 2550 CALL POSITION(#1,YP,XP) 2560 IF YP<>9 THEN 2590 ! top level 1 2570 CALL COINC(#1,#2,8,C) 2580 IF C=0 THEN RETURN ELSE 5190 !check for hole level 1 2590 IF YP<>33 THEN 2940 !level 2 2600 CALL POSITION(#3,HY,HX):: LOOT=LO0T(1,1) 2610 CALL POSITION(#1,YP,XP) 2620 IF XP<=HX THEN 2630 ELSE 2770 2630 CALL COINC(#1,#10,8,C) 2640 IF C<>0 THEN 2680 2650 CALL COINC(#1,#3,8,C) 2660 IF C<>0 THEN 5190 !check for hole level 2 2670 RETURN 2680 DET=10 2690 IF LOOT<>88 THEN 2710 2700 GOTO 5140 !do heart 2710 IF LOOT<>96 THEN 2730 2720 GOTO 5100 !do zed 2730 IF LOOT<>112 THEN 2750 2740 GOTO 5060 !do melee 2750 IF LOOT<>113 THEN RETURN 2760 GOTO 5020 ! do ranged 2770 LOOT=LO0T(1,2) 2780 CALL POSITION(#1,YP,XP) 2790 IF XP>HX THEN 2800 ELSE RETURN 2800 CALL COINC(#1,#11,8,C) 2810 IF C<>0 THEN 2850 2820 CALL COINC(#1,#3,8,C) 2830 IF C<>0 THEN 5190 !check for hole level 2 2840 RETURN 2850 DET=11 2860 IF LOOT<>88 THEN 2880 2870 GOTO 5140 !do heart 2880 IF LOOT<>96 THEN 2900 2890 GOTO 5100 !do zed 2900 IF LOOT<>112 THEN 2920 2910 GOTO 5060 !do melee 2920 IF LOOT<>113 THEN RETURN 2930 GOTO 5020 ! do ranged 2940 IF YP<>57 THEN 3290 !level 3 2950 CALL POSITION(#4,HY,HX):: LOOT=LO0T(1,3) 2960 CALL POSITION(#1,YP,XP) 2970 IF XP<=HX THEN 2980 ELSE 3120 2980 CALL COINC(#1,#12,8,C) 2990 IF C<>0 THEN 3030 3000 CALL COINC(#1,#4,8,C) 3010 IF C<>0 THEN 5190 !check for hole level 3 3020 RETURN 3030 DET=12 3040 IF LOOT<>88 THEN 3060 3050 GOTO 5140 !do heart 3060 IF LOOT<>96 THEN 3080 3070 GOTO 5100 !do zed 3080 IF LOOT<>112 THEN 3100 3090 GOTO 5060 !do melee 3100 IF LOOT<>113 THEN RETURN 3110 GOTO 5020 ! do ranged 3120 LOOT=LO0T(1,4) 3130 CALL POSITION(#1,YP,XP) 3140 IF XP>HX THEN 3150 ELSE RETURN 3150 CALL COINC(#1,#13,8,C) 3160 IF C<>0 THEN 3200 3170 CALL COINC(#1,#4,8,C) 3180 IF C<>0 THEN 5190 !check for hole level 3 3190 RETURN 3200 DET=13 3210 IF LOOT<>88 THEN 3230 3220 GOTO 5140 !do heart 3230 IF LOOT<>96 THEN 3250 3240 GOTO 5100 !do zed 3250 IF LOOT<>112 THEN 3270 3260 GOTO 5060 !do melee 3270 IF LOOT<>113 THEN RETURN 3280 GOTO 5020 ! do ranged 3290 IF YP<>81 THEN 3640 !level 4 3300 CALL POSITION(#5,HY,HX):: :: LOOT=LO0T(1,5) 3310 CALL POSITION(#1,YP,XP) 3320 IF XP<=HX THEN 3330 ELSE 3470 3330 CALL COINC(#1,#14,8,C) 3340 IF C<>0 THEN 3380 3350 CALL COINC(#1,#5,8,C) 3360 IF C<>0 THEN 5190 !check for hole level 4 3370 RETURN 3380 DET=14 3390 IF LOOT<>88 THEN 3410 3400 GOTO 5140 !do heart 3410 IF LOOT<>96 THEN 3430 3420 GOTO 5100 !do zed 3430 IF LOOT<>112 THEN 3450 3440 GOTO 5060 !do melee 3450 IF LOOT<>113 THEN RETURN 3460 GOTO 5020 ! do ranged 3470 LOOT=LO0T(1,6) 3480 CALL POSITION(#1,YP,XP) 3490 IF XP>HX THEN 3500 ELSE RETURN 3500 CALL COINC(#1,#15,8,C) 3510 IF C<>0 THEN 3550 3520 CALL COINC(#1,#5,8,C) 3530 IF C<>0 THEN 5190 !check for hole level 4 3540 RETURN 3550 DET=15 3560 IF LOOT<>88 THEN 3580 3570 GOTO 5140 !do heart 3580 IF LOOT<>96 THEN 3600 3590 GOTO 5100 !do zed 3600 IF LOOT<>112 THEN 3620 3610 GOTO 5060 !do melee 3620 IF LOOT<>113 THEN RETURN 3630 GOTO 5020 ! do ranged 3640 IF YP<>105 THEN 3990 !level 5 3650 CALL POSITION(#6,HY,HX):: LOOT=LO0T(1,7) 3660 CALL POSITION(#1,YP,XP):: 3670 IF XP<=HX THEN 3680 ELSE 3820 3680 CALL COINC(#1,#16,8,C) 3690 IF C<>0 THEN 3730 3700 CALL COINC(#1,#6,8,C) 3710 IF C<>0 THEN 5190 !check for hole level 5 3720 RETURN 3730 DET=16 3740 IF LOOT<>88 THEN 3580 3750 GOTO 5140 !do heart 3760 IF LOOT<>96 THEN 3780 3770 GOTO 5100 !do zed 3780 IF LOOT<>112 THEN 3800 3790 GOTO 5060 !do melee 3800 IF LOOT<>113 THEN RETURN 3810 GOTO 5020 ! do ranged 3820 LOOT=LO0T(1, 3830 CALL POSITION(#1,YP,XP) 3840 IF XP>HX THEN 3850 ELSE RETURN 3850 CALL COINC(#1,#17,8,C) 3860 IF C<>0 THEN 3900 3870 CALL COINC(#1,#6,8,C) 3880 IF C<>0 THEN 5190 !check for hole level 5 3890 RETURN 3900 DET=17 3910 IF LOOT<>88 THEN 3930 3920 GOTO 5140 !do heart 3930 IF LOOT<>96 THEN 3950 3940 GOTO 5100 !do zed 3950 IF LOOT<>112 THEN 3970 3960 GOTO 5060 !do melee 3970 IF LOOT<>113 THEN RETURN 3980 GOTO 5020 ! do ranged 3990 IF YP<>129 THEN 4340 !level 6 4000 CALL POSITION(#7,HY,HX):: LOOT=LO0T(1,9) 4010 CALL POSITION(#1,YP,XP) 4020 IF XP<=HX THEN 4030 ELSE 4170 4030 CALL COINC(#1,#18,8,C) 4040 IF C<>0 THEN 4080 4050 CALL COINC(#1,#7,8,C) 4060 IF C<>0 THEN 5190 !check for hole level 6 4070 RETURN 4080 DET=18 4090 IF LOOT<>88 THEN 4110 4100 GOTO 5140 !do heart 4110 IF LOOT<>96 THEN 4130 4120 GOTO 5100 !do zed 4130 IF LOOT<>112 THEN 4150 4140 GOTO 5060 !do melee 4150 IF LOOT<>113 THEN RETURN 4160 GOTO 5020 ! do ranged 4170 LOOT=LO0T(1,10) 4180 CALL POSITION(#1,YP,XP) 4190 IF XP>HX THEN 4200 ELSE RETURN 4200 CALL COINC(#1,#19,8,C) 4210 IF C<>0 THEN 4250 4220 CALL COINC(#1,#7,8,C) 4230 IF C<>0 THEN 5190 !check for hole level 6 4240 RETURN 4250 DET=19 4260 IF LOOT<>88 THEN 4280 4270 GOTO 5140 !do heart 4280 IF LOOT<>96 THEN 4300 4290 GOTO 5100 !do zed 4300 IF LOOT<>112 THEN 4320 4310 GOTO 5060 !do melee 4320 IF LOOT<>113 THEN RETURN 4330 GOTO 5020 ! do ranged 4340 IF YP<>153 THEN 4690 !level 7 4350 CALL POSITION(#8,HY,HX):: LOOT=LO0T(1,11) 4360 CALL POSITION(#1,YP,XP) 4370 IF XP<=HX THEN 4380 ELSE 4520 4380 CALL COINC(#1,#20,8,C) 4390 IF C<>0 THEN 4430 4400 CALL COINC(#1,#8,8,C) 4410 IF C<>0 THEN 5190 !check for hole level 7 4420 RETURN 4430 DET=20 4440 IF LOOT<>88 THEN 4460 4450 GOTO 5140 !do heart 4460 IF LOOT<>96 THEN 4480 4470 GOTO 5100 !do zed 4480 IF LOOT<>112 THEN 4500 4490 GOTO 5060 !do melee 4500 IF LOOT<>113 THEN RETURN 4510 GOTO 5020 ! do ranged 4520 LOOT=LO0T(1,12) 4530 CALL POSITION(#1,YP,XP) 4540 IF XP>HX THEN 4550 ELSE RETURN 4550 CALL COINC(#1,#21,8,C) 4560 IF C<>0 THEN 4600 4570 CALL COINC(#1,#8,8,C) 4580 IF C<>0 THEN 5190 !check for hole level 7 4590 RETURN 4600 DET=21 4610 IF LOOT<>88 THEN 4630 4620 GOTO 5140 !do heart 4630 IF LOOT<>96 THEN 4650 4640 GOTO 5100 !do zed 4650 IF LOOT<>112 THEN 4670 4660 GOTO 5060 !do melee 4670 IF LOOT<>113 THEN RETURN 4680 GOTO 5020 ! do ranged 4690 IF YP<>177 THEN RETURN !level 8 ground floor 4700 HX=LASTHLE :: LOOT=LO0T(1,13) 4710 CALL POSITION(#1,YP,XP) 4720 IF XP<=HX THEN 4730 ELSE 4860 4730 CALL COINC(#1,#22,8,C) 4740 IF C<>0 THEN 4770 4750 CALL COINC(#1,#9,4,C) 4760 IF C<>0 THEN 5210 ELSE RETURN !****collision check against exit 4770 DET=22 4780 IF LOOT<>88 THEN 4800 4790 GOTO 5140 !do heart 4800 IF LOOT<>96 THEN 4820 4810 GOTO 5100 !do zed 4820 IF LOOT<>112 THEN 4840 4830 GOTO 5060 !do melee 4840 IF LOOT<>113 THEN RETURN 4850 GOTO 5020 ! do ranged 4860 LOOT=LO0T(1,14) 4870 CALL POSITION(#1,YP,XP) 4880 IF XP>HX THEN 4890 ELSE RETURN 4890 CALL COINC(#1,#23,8,C) 4900 IF C<>0 THEN 4930 4910 CALL COINC(#1,#9,4,C) 4920 IF C<>0 THEN 5210 ELSE RETURN !****collision check against exit 4930 DET=23 4940 IF LOOT<>88 THEN 4960 4950 GOTO 5140 !do heart 4960 IF LOOT<>96 THEN 4980 4970 GOTO 5100 !do zed 4980 IF LOOT<>112 THEN 5000 4990 GOTO 5060 !do melee 5000 IF LOOT<>113 THEN RETURN 5010 GOTO 5020 ! do ranged 5020 REM **********ranged 5030 SCORE=SCORE+5 :: IF RANGED<10 THEN RANGED=RANGED+1:: CALL SOUND(1,1000,5)::CALL SOUND(1,1200,2) 5040 GOSUB 5750 !*************************gui UPDATE****** 5050 GOTO 5170 5060 REM *********melee 5070 SCORE=SCORE+3 :: IF MELEE<10 THEN MELEE=MELEE+1:: CALL SOUND(1,1500,5)::CALL SOUND(1,1600,2):: 5080 GOSUB 5750 !*************************gui UPDATE****** 5090 GOTO 5170 5100 REM *************zed 5110 CALL SOUND(100,-4,0,110,0,1000,0):: HEALTH=HEALTH-1 :: IF HEALTH<=0 THEN 5810 5120 GOSUB 5750 !*************************gui UPDATE****** 5130 RETURN 5140 REM *************HEART 5150 SCORE=SCORE+8 :: CALL SOUND(1,500,5)::CALL SOUND(1,600,2)::IF HEALTH<10 THEN HEALTH=HEALTH+1 5160 GOSUB 5750 !*************************gui UPDATE****** 5170 IF DET=O THEN 5180 :: CALL DELSPRITE(#DET):: RETURN 5180 RETURN 5190 FOR FALL=1 TO 24 :: YP=YP+1 :: CALL SOUND(1,666-(FALL*10),5):: CALL SPRITE(#1,44,6,YP,XP):: NEXT FALL !*****FALL********** 5200 RETURN 5210 REM *****************************************************BOARD**Progression************ 5220 CALL DELSPRITE(ALL):: BOARD=BOARD+1 :: RESTORE 170 :: IF SCORE>HSCORE THEN HSCORE=SCORE :: GOTO 120 5230 REM ***********************************************************LOOT DISTRIBUTION SYSTEM****** 5240 REM*******SWITCH=-5 !SWITCH=INT(RND*2)+1 5250 REM******FOR LT=1 TO 2 5260 LOOTL=INT(RND*4)+1 5270 LOOTR=INT(RND*4)+1 5280 REM******IF SWITCH=1 THEN 8860 ELSE 8880 5290 REM******SWITCH=-5::GOTO 8940 5300 REM******IF SWITCH=2 THEN 8900 ELSE 8920 5310 REM*********SWITCH=5::GOTO 8880 5320 REM******IF SWITCH=5 THEN SWITCH=-5 ELSE SWITCH=5 5330 IF LOOTL<>1 THEN 5370 5340 CALL SPRITE(#SLOT,88,7,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !HEART 88 5350 LO0T(LAB,LTN)=88 :: LAB=LAB+1 5360 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5370 IF LOOTL<>2 THEN 5410 5380 CALL SPRITE(#SLOT,96,4,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !ZED 96 5390 LO0T(LAB,LTN)=96 :: LAB=LAB+1 5400 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5410 IF LOOTL<>3 THEN 5450 5420 CALL SPRITE(#SLOT,112,8,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !MELEE 112 5430 LO0T(LAB,LTN)=112 :: LAB=LAB+1 5440 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5450 IF LOOTL<>4 THEN 5490 5460 CALL SPRITE(#SLOT,113,14,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !RANGED 113 5470 LO0T(LAB,LTN)=113 :: LAB=LAB+1 5480 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5490 IF LOOTR<>1 THEN 5530 5500 CALL SPRITE(#SLOT,88,7,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !HEART 88 5510 LO0T(LAB,LTN)=88 :: LAB=LAB+1 5520 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5530 IF LOOTR<>2 THEN 5570 5540 CALL SPRITE(#SLOT,96,4,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !ZED 96 5550 LO0T(LAB,LTN)=96 :: LAB=LAB+1 5560 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5570 IF LOOTR<>3 THEN 5610 5580 CALL SPRITE(#SLOT,112,8,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !MELEE 112 5590 LO0T(LAB,LTN)=112 :: LAB=LAB+1 5600 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5610 IF LOOTR<>4 THEN 5650 5620 CALL SPRITE(#SLOT,113,14,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !RANGED 113 5630 LO0T(LAB,LTN)=113 :: LAB=LAB+1 5640 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5650 REM ***NEXT LT 5660 RETURN 5670 REM **********cOLLISION cHECK WALLs 5680 CALL POSITION(#1,YP,XP) 5690 IF XP<=12 THEN 5700 ELSE 5720 5700 CALL LOCATE(#1,YP,13):: CALL MOTION(#1,0,0) 5710 CALL JOYST(1,JX,JY):: IF JX=-4 THEN 5700 ELSE RETURN 5720 IF XP>=240 THEN 5730 ELSE RETURN 5730 CALL LOCATE(#1,YP,239):: CALL MOTION(#1,0,0) 5740 CALL JOYST(1,JX,JY):: IF JX=4 THEN 5730 ELSE RETURN 5750 REM ********************GUI Update*********** 5760 DISPLAY AT(1,3):SCORE :: DISPLAY AT(1,10):BOARD :: DISPLAY AT(1,15):HEALTH :: DISPLAY AT(1,21):MELEE :: DISPLAY AT(1,26):RANGED !Output GUI 5770 CALL VCHAR(1,3,120):: CALL VCHAR(1,4,121):: CALL VCHAR(1,5,122)!score text gui 5780 CALL VCHAR(1,12,123):: CALL VCHAR(1,17,123):: CALL VCHAR(1,23,123):: CALL VCHAR(1,28,123)!Xs gui 5790 CALL VCHAR(1,11,124):: CALL VCHAR(1,16,88):: CALL VCHAR(1,22,112):: CALL VCHAR(1,27,113)!BOARD,hearts,melee,ranged gui 5800 RETURN 5810 REM ******************************YOU ARE DEAD*********************** 5820 CALL MOTION(#1,0,0):: CALL DELSPRITE(ALL):: CALL SCREEN(10) 5830 DATA 89,0044442810101010,79,007C44444444447C,85,0044444444444438 5840 DATA 65,003844447C444444,82,0078444478504844,69,007C40407840407C 5850 DATA 68,0078242424242478 5860 FOR YAD=1 TO 7 5870 READ YADC,YADP$ 5880 CALL CHAR(YADC,YADP$) 5890 NEXT YAD 5900 CALL CLEAR 5910 CALL VCHAR(12,10,89):: CALL VCHAR(12,11,79):: CALL VCHAR(12,12,85):: CALL VCHAR(12,13,32)!YOU 5920 CALL VCHAR(12,14,65):: CALL VCHAR(12,15,82):: CALL VCHAR(12,16,69):: CALL VCHAR(12,17,32)!ARE 5930 CALL VCHAR(12,18,68):: CALL VCHAR(12,19,69):: CALL VCHAR(12,20,65):: CALL VCHAR(12,21,68)!DEAD 5940 FOR CLRS=1 TO 13 :: CALL COLOR(CLRS,16,1):: NEXT CLRS 5950 CALL SCREEN(2) 5960 GOSUB 5750 5970 CALL KEY(1,K,S):: IF K=0 AND S=-1 THEN 6270 :: IF K=6 THEN 5980 ELSE 5990 5980 CALL DELSPRITE(ALL):: RESTORE 170 :: GOTO 100 5990 CALL JOYST(1,JX,JY):: IF JX=0 THEN 5970 :: IF JY=0 THEN 5970 ELSE 5980 6000 REM*******************MAN MELEE ATTACK 6010 CALL PATTERN(#1,45)!melee attack pattern 6020 CALL SPRITE(#24,143,12,YP,XP+ :: CALL SOUND(125,-5,0)!right attack 6030 GOSUB 6300 !MELLE HIT DETECTION RIGHT 6040 CALL DELSPRITE(#24) 6050 CALL SPRITE(#25,143,12,YP,XP- :: CALL SOUND(125,-6,0)!left attack 6060 GOSUB 6360 !MELEE HIT DETECTION LEFT 6070 CALL DELSPRITE(#25) 6080 CALL PATTERN(#1,44):: RETURN 6090 REM ******************MAN RANGED ATTACK 6100 CALL SOUND(100,-6,0):: RETURN 6110 !IF KSLOT=1 THEN 7090::RETURN 6120 !KSLOT=0::SLOT=SLOT-1::RETURN 6130 REM*****************ZED COINC BEHAVIOR************* 6140 RETURN 6150 REM****************ZED ATTACK****************** 6160 RETURN 6170 REM *****JOYS Combat choice***** 6180 IF JY=4 AND MELEE>=1 THEN 6200 ELSE 6190 6190 CALL SOUND(100,-3,0):: RETURN 6200 CALL MOTION(#1,0,0):: CALL POSITION(#1,YP,XP) 6210 MELEE=MELEE-1 :: GOSUB 5750 !*******UPDATE GUI 6220 GOSUB 6000 !PERFORM MELEE ATTACK 6230 RETURN 6240 IF JY=-4 THEN 6250 ELSE 6260 6250 GOSUB 6100 6260 RETURN 6270 REM***quit game 6280 CALL CLEAR 6290 END 6300 !************************mELEE collision check against LOOT********************* 6310 REM FOR DETT=10 TO 23 !MELEE RIGHT 6320 CALL COINC(#24,#DET,7,C) 6330 IF C<>0 THEN 6410 ELSE 6340 6340 REM NEXT DETT 6350 RETURN 6360 REM FOR DETT=10 TO 23 !MELEE LEFT 6370 CALL COINC(#25,#DET,7,C) 6380 IF C<>0 THEN 6410 ELSE 6390 6390 REM NEXT DETT:: 6400 RETURN 6410 TLOOP1=DET-9 6420 IF LO0T(1,TLOOP1)<>88 THEN 6430 ELSE 6510 !heart 6430 IF LO0T(1,TLOOP1)<>96 THEN 6480 !zed - ALL ALPHA TEMP CODE 6440 ZHELTH=ZHELTH-1 :: IF ZHELTH>=1 THEN 6520 6450 SCORE=SCORE+10 :: ZHELTH=2 6460 GOSUB 5750 !*****gui UPDATE****** 6470 GOTO 6510 6480 IF LO0T(1,TLOOP1)<>112 THEN 6500 !melee 6490 GOTO 6510 6500 IF LO0T(1,TLOOP1)<>113 THEN 6520 !ranged 6510 CALL DELSPRITE(#DET):: RETURN 6520 RETURN 6530 GOTO 5060 !do melee 100 SCORE=0000 :: HEALTH=10 :: BOARD=1 :: HSCORE=0 110 MELEE=0 :: RANGED=0 !weapons inventory 120 CALL SCREEN(2) 130 CALL COLOR(10,15,1):: CALL COLOR(12,12,1):: CALL COLOR(3,12,1):: CALL COLOR(4,12,1) 140 CALL COLOR(8,7,1):: CALL COLOR(11,8,1):: CALL COLOR(14,12,1):: HCLR=1 150 CALL CLEAR 160 !running patterns right 170 DATA 1818101010101018,1818183C1C142630,181A3C5E1A334060,18197E981C724100,18197E9818147243,1818385E581C2436 180 !stop and jump right 190 DATA 1818101010101018,000C1C3058081018,00000C1C305C1C18,0000060E183C0C18,0003070C18081018 200 !jumping right 210 DATA 0303040609081010,1818141810106000,1818103810180C00,1818503010180404 220 !landing right 230 DATA 0018183050180818,1818101038501018 240 !running patterns left 250 DATA 1818080808080818,1818183C3828640C,18583C7A58CC0206,18987E19384E8200,18987E1918284EC2,18181C7A1A38246C 260 !stop and jump left 270 DATA 1818080808080818,0030380C1A100818,000030380C3A3818,00006070183C3018,00C0E03018100818 280 !jumping left 290 DATA C0C0206090100808,1818281808080600,1818081C08183000,18180A0C08182020 300 !landing right 310 DATA 0018180C0A181018,181808081C0A0818 320 FOR CHRR=33 TO 38 !setup for creating running characters right 330 READ PAT$ 340 CALL CHAR(CHRR,PAT$) 350 NEXT CHRR 360 REM CHR=CHRR 370 FOR CHSR=39 TO 43 !setup for creating stop and jump characters right 380 READ PAT$ 390 CALL CHAR(CHSR,PAT$) 400 NEXT CHSR 410 FOR CHJR=64 TO 67 !setup for creating jumping characters right 420 READ PAT$ 430 CALL CHAR(CHJR,PAT$) 440 NEXT CHJR 450 FOR CHLR=68 TO 69 !setup for creating landing characters right 460 READ PAT$ 470 CALL CHAR(CHLR,PAT$) 480 NEXT CHLR 490 REM left running*********************** 500 FOR CHRL=70 TO 75 !setup for creating running characters left 510 READ PAT$ 520 CALL CHAR(CHRL,PAT$) 530 NEXT CHRL 540 FOR CHSL=76 TO 80 !setup for creating stop and jump characters left 550 READ PAT$ 560 CALL CHAR(CHSL,PAT$) 570 NEXT CHSL 580 FOR CHJL=81 TO 84 !setup for creating jumping characters left 590 READ PAT$ 600 CALL CHAR(CHJL,PAT$) 610 NEXT CHJL 620 FOR CHLL=85 TO 86 !setup for creating landing characters left 630 READ PAT$ 640 CALL CHAR(CHLL,PAT$) 650 NEXT CHLL 660 BGIR$="3C4426D999A5C3FF" !BAD girder for level HOLE creation 670 GIR$="FFC3A59999A5C3FF" !GIRDER FOR LEVELS 680 CALL CHAR(104,BGIR$,105,GIR$)!girder for level creation 690 GRAV$="FFFFFFFFFFFFFFFF" :: CALL CHAR(106,GRAV$)!THE HOLE 700 EXT$="1F1111111D11111F" :: CALL CHAR(107,EXT$)!THE EXIT 710 HRT$="66FFFFFF7E7E3C18" :: CALL CHAR(88,HRT$)!THE HEART 720 ZED$="3C2418FF9918183C" :: CALL CHAR(96,ZED$)!THE ZED 730 MLE$="C0E0703A1E0C1A01" :: CALL CHAR(112,MLE$)!MELEE 740 RNG$="000000FF7F1E1606" :: CALL CHAR(113,RNG$)!RANGED WEAPONS 750 SCTXT1$="70808063141414E3" :: SCTXT2$="00000000334A4A32" :: SCTXT3$="00000000993C2118" !Word Score 760 CALL CHAR(120,SCTXT1$):: CALL CHAR(121,SCTXT2$):: CALL CHAR(122,SCTXT3$) 770 EXTXT$="0044442810284444" :: CALL CHAR(123,EXTXT$)! the letter X remain for GUI 780 LVLTXT$="E0E080E9EF86EFE9" :: CALL CHAR(124,LVLTXT$)! EX TEXT IN GUI 790 IDLE$="3838107CBA38286C" :: CALL CHAR(44,IDLE$)!***IDLE MAN 800 MMELE$="3C3C18FF7E3C183C" :: MRNGL$="0C0C04FC4C3C286C" :: MRNGR$="3030203F323C1436" ! MELEE & l/r RANGED ATTACKS 810 MWA$="002418FF1824" :: BULET$="0000008" !WEAPONS FIRE 820 ZDI$="3C2418FF9918183C" :: ZDA$="3CA5DB7E1818183C" :: ZWL1$="3C2C18F81838246C" :: ZWL2$="3C2C18F818181838" !ZED IDLE&WALK LEFT 830 ZWR1$="3C34181F181C2436" :: ZWR2$="3C34181F1818181C" !ZED WALK RIGHT 840 CALL CHAR(45,MMELE$,46,MRNGL$,47,MRNGR$)!MAN ATTTACKS 850 CALL CHAR(143,MWA$,142,BULET$)!WEAPONS FIRE 860 RANDOMIZE 870 SLOT=10 !STARTING SPRITE NUMBER FOR LOOT and more 880 OPTION BASE 1 890 DIM LO0T(3,14)!LOOT DISTRIBUTION AND COLLISION. 900 LTN=1 !LOOT ARRAY COORDS COL 910 LAB=1 !LOOT ARRAY COORDS ROW 920 SHL=2 :: GRND=17 !START ground level on top girder (YP+8pixels), LEVEL AND SPRITE HOLE # 930 LVL=3 :: YP=9 :: XP=8 :: RS=0 :: CS=16 :: RSPD=2.0 :: RSPDD=3.3 !start pos,vel,controller run speed multiplier rspd 940 ZHELTH=2 !default health of zombies start of game 950 GOSUB 2310 !*******************************Create Level 960 REM***************************************Create Sprite Idle******** 970 CALL SPRITE(#1,44,6,YP,XP) 980 CALL JOYST(1,JX,JY):: !check for joystick input 990 CALL KEY(1,K,S):: IF K=0 AND S=-1 THEN 6270 :: IF K=6 THEN 1000 ELSE 1010 1000 CALL DELSPRITE(ALL):: RESTORE 170 :: GOTO 100 1010 IF JY=0 THEN 1030 ELSE 1020 ! check for combat 1020 GOSUB 6170 ! goto combat 1030 IF JX=0 THEN 1070 1040 GOSUB 5670 !**********wall collision checks 1050 CALL COINC(ALL,C):: IF C=0 THEN 1070 1060 GOSUB 2530 !****************************collision checks 1070 CALL KEY(1,K,S):: IF K<>18 AND K<>74 AND K<>106 THEN 1740 !no kb pressed check for joyst 1080 REM ********jump routine check******** 1090 CALL MOTION(#1,0,0) 1100 IF CS<>-16 THEN 1140 1110 CALL POSITION(#1,YP,XP)!get new position for next sprite 1120 GOSUB 1180 ! goto jump left 1130 GOTO 960 1140 IF CS<>16 THEN 1740 1150 CALL POSITION(#1,YP,XP)!get new position for next sprite 1160 GOSUB 1460 !goto jump right************************** 1170 GOTO 960 1180 REM *************jump left routine********* 1190 CS=0 :: CALL MOTION(#1,0,CS)!joystick button pressed so STOP running! 1200 CALL SPRITE(#1,CHSL,6,YP,XP)!recreate sprite1 as stop and jump characters 1210 FOR PT=76 TO 80 !setup stop and jump animation left 1220 CALL PATTERN(#1,PT)!ANIMATE 1230 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1240 NEXT DELAY 1250 NEXT PT !continue animating the stop and jump until done 1260 CALL POSITION(#1,YP,XP)!get new postion for animating the jumping 1270 IF XP<=24 THEN 1370 1280 CS=-20 :: YP=YP-3 :: RS=0 :: CALL SPRITE(#1,CHJL,6,YP,XP,RS,CS)!jumping left 1290 FOR PT=81 TO 84 1300 CALL PATTERN(#1,PT) 1310 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1320 NEXT DELAY 1330 NEXT PT 1340 CS=0 :: CALL MOTION(#1,0,CS)!stop motion at end of jumping animation to begin landing animation. 1350 CALL POSITION(#1,YP,XP)!get new position for starting landing animation. 1360 YP=YP+3 !RESET YP TO BE GROUND. 1370 CALL SPRITE(#1,CHLL,6,YP,XP) 1380 FOR PT=85 TO 86 !setup landing animation left 1390 CALL PATTERN(#1,PT) 1400 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1410 NEXT DELAY 1420 NEXT PT ! continue landing animation until last frame 1430 CALL POSITION(#1,YP,XP)!get new position for next sprite 1440 CS=-16 1450 RETURN 1460 REM *************jump right routine****** 1470 CS=0 :: CALL MOTION(#1,0,CS)!joystick button pressed so STOP running! right 1480 CALL SPRITE(#1,CHSR,6,YP,XP)!recreate sprite1 as stop and jump characters right 1490 FOR PT=39 TO 43 !setup stop and jump animation right 1500 CALL PATTERN(#1,PT) 1510 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1520 NEXT DELAY 1530 NEXT PT !continue animating the stop and jump until done right 1540 CALL POSITION(#1,YP,XP)!get new postion for animating the jumping right 1550 IF XP>=224 THEN 1650 1560 CS=20 :: YP=YP-3 :: CALL SPRITE(#1,CHJR,6,YP,XP,RS,CS)!jumping right 1570 FOR PT=64 TO 67 !setup jumping characters right 1580 CALL PATTERN(#1,PT) 1590 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1600 NEXT DELAY 1610 NEXT PT 1620 CS=0 :: CALL MOTION(#1,0,CS)!stop motion at end of jumping animation to begin landing animation. 1630 CALL POSITION(#1,YP,XP)!get new position for starting landing animation. 1640 YP=YP+3 1650 CALL SPRITE(#1,CHLR,6,YP,XP) 1660 FOR PT=68 TO 69 !setup landing animation 1670 CALL PATTERN(#1,PT) 1680 FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate. 1690 NEXT DELAY 1700 NEXT PT ! continue landing animation until last frame 1710 CALL POSITION(#1,YP,XP)!get new position for next sprite 1720 CS=16 1730 RETURN 1740 REM **************Check Joyst Options************ 1750 IF JX<>0 THEN 1780 1760 CALL MOTION(#1,0,0) 1770 GOTO 970 1780 REM ********running check*************** 1790 IF JX<>-4 THEN 1820 1800 GOSUB 2090 1820 IF JX<>4 THEN 970 1830 GOSUB 1860 1850 GOTO 970 !after RETURN goto joyst check 1860 REM ************run right routine******** 1870 CALL POSITION(#1,YP,XP)::CS=16 :: CALL SPRITE(#1,CHRR,6,YP,XP,0,JX*RSPD)!create the runner and send running 1880 FOR PT=33 TO 38 STEP 2 !setup for animating the run right 1900 CALL PATTERN(#1,PT) 1910 CALL KEY(1,K,S):: IF K=18 OR K=74 OR K=106 THEN 1080 !jump 1920 CALL JOYST(1,JX,JY):: !check for joystick input 1950 GOSUB 5670 !**********wall collision checks 1960 CALL COINC(ALL,C):: IF C=0 THEN 1970 :: CALL MOTION(#1,0,(JX*RSPD)/RSPDD):: GOSUB 2530 !collision actions 1970 IF JY=0 THEN 1990 ELSE 1980 1980 GOSUB 6170 1990 IF JX<>0 THEN 2010 ELSE 2000 !not joy pressed keep running 2000 CALL POSITION(#1,YP,XP):: CALL MOTION(#1,0,0):: CALL SPRITE(#1,44,6,YP,XP):: RETURN 2010 CALL JOYST(1,JX,JY) 2020 IF JX=4 THEN 2040 2030 IF JX=-4 THEN 2080 2040 CALL MOTION(#1,0,JX*RSPD) 2050 NEXT PT 2060 IF JX=4 THEN 1880 2070 CALL POSITION(#1,YP,XP)!check position and store before stopping motion 2080 RETURN 2090 REM **********run left routine************** 2100 CALL POSITION(#1,YP,XP)::CS=-16 :: CALL SPRITE(#1,CHRL,6,YP,XP,0,JX*RSPD)!create the runner and send running 2110 FOR PT=70 TO 75 STEP 2 !setup for animating the run left 2130 CALL PATTERN(#1,PT) 2140 CALL KEY(1,K,S):: IF K=18 OR K=74 OR K=106 THEN 1080 !jump 2150 CALL JOYST(1,JX,JY)!check for joystick input 2180 GOSUB 5670 !**********wall collision checks 2185 CALL COINC(ALL,C):: IF C=0 THEN 2190 :: CALL MOTION(#1,0,(JX*RSPD)/RSPDD):: GOSUB 2530 !collision actions 2190 IF JY=0 THEN 2210 ELSE 2200 2200 GOSUB 6170 2210 IF JX<>0 THEN 2230 !not joy pressed keep running 2220 CALL POSITION(#1,YP,XP):: CALL MOTION(#1,0,0):: CALL SPRITE(#1,44,6,YP,XP):: RETURN 2230 CALL JOYST(1,JX,JY) 2240 IF JX=-4 THEN 2260 2250 IF JX=4 THEN 2300 2260 CALL MOTION(#1,0,JX*RSPD) 2270 NEXT PT 2280 IF JX=-4 THEN 2110 2290 CALL POSITION(#1,YP,XP)!check position and store for next sprite 2300 RETURN 2310 REM *************************************************************************level creation************************ 2320 GOSUB 5750 !*************************gui creation****** 2330 HLE=INT((RND*15)+5) 2340 FOR LVL=1 TO 8 2350 IF LVL=1 THEN 2370 2360 GOSUB 5230 !*************************************GOSUB********LOOT DS********** 2370 CALL VCHAR(1,1,105,24)!LEFT WALL 2380 CALL VCHAR(1,32,105,24)!RIGHT WALL 2390 CALL HCHAR(LVL*3,1,105,HLE-1)!LEFT SIDE GIRDERS 2400 IF LVL=8 THEN 2420 :: CALL SPRITE(#SHL,106,HCLR,GRND-8,(HLE* +1)!HOLE PROPER 2410 SHL=SHL+1 !ADVANCE SPRITE # 2420 LASTHLE=(HLE* +1 :: CALL HCHAR(LVL*3,HLE+3,105,32-(HLE+3))!RIGHT SIDE Girders 2430 IF LVL=8 THEN 2490 :: CALL HCHAR(LVL*3,HLE,104)!CRUMBLE LEFT SIDE 2440 CALL HCHAR(LVL*3,HLE+2,104)!crumble right side 2450 GRND=GRND+24 2460 HOL=INT((RND*15)+5)!NEW LOCATION FOR HOLE 2470 IF HOL=HLE THEN 2460 !NOT EQUAL TO PREVIOUS HOLE 2480 HLE=HOL !SET PROPER HOLE VARIABLE 2490 NEXT LVL !GO CREATE NEXT LEVEL 2500 CALL SPRITE(#9,107,15,22*8,30* ! THE EXIT 2510 CALL HCHAR(24,1,105,31)!THE FLOOR 2520 RETURN 2530 REM *********************************collision detection routines******* 2540 GOSUB 5670 !**********wall collision checks 2550 CALL POSITION(#1,YP,XP) 2560 IF YP<>9 THEN 2590 ! top level 1 2570 CALL COINC(#1,#2,8,C) 2580 IF C=0 THEN RETURN ELSE 5190 !check for hole level 1 2590 IF YP<>33 THEN 2940 !level 2 2600 CALL POSITION(#3,HY,HX):: LOOT=LO0T(1,1) 2610 CALL POSITION(#1,YP,XP) 2620 IF XP<=HX THEN 2630 ELSE 2770 2630 CALL COINC(#1,#10,8,C) 2640 IF C<>0 THEN 2680 2650 CALL COINC(#1,#3,8,C) 2660 IF C<>0 THEN 5190 !check for hole level 2 2670 RETURN 2680 DET=10 2690 IF LOOT<>88 THEN 2710 2700 GOTO 5140 !do heart 2710 IF LOOT<>96 THEN 2730 2720 GOTO 5100 !do zed 2730 IF LOOT<>112 THEN 2750 2740 GOTO 5060 !do melee 2750 IF LOOT<>113 THEN RETURN 2760 GOTO 5020 ! do ranged 2770 LOOT=LO0T(1,2) 2780 CALL POSITION(#1,YP,XP) 2790 IF XP>HX THEN 2800 ELSE RETURN 2800 CALL COINC(#1,#11,8,C) 2810 IF C<>0 THEN 2850 2820 CALL COINC(#1,#3,8,C) 2830 IF C<>0 THEN 5190 !check for hole level 2 2840 RETURN 2850 DET=11 2860 IF LOOT<>88 THEN 2880 2870 GOTO 5140 !do heart 2880 IF LOOT<>96 THEN 2900 2890 GOTO 5100 !do zed 2900 IF LOOT<>112 THEN 2920 2910 GOTO 5060 !do melee 2920 IF LOOT<>113 THEN RETURN 2930 GOTO 5020 ! do ranged 2940 IF YP<>57 THEN 3290 !level 3 2950 CALL POSITION(#4,HY,HX):: LOOT=LO0T(1,3) 2960 CALL POSITION(#1,YP,XP) 2970 IF XP<=HX THEN 2980 ELSE 3120 2980 CALL COINC(#1,#12,8,C) 2990 IF C<>0 THEN 3030 3000 CALL COINC(#1,#4,8,C) 3010 IF C<>0 THEN 5190 !check for hole level 3 3020 RETURN 3030 DET=12 3040 IF LOOT<>88 THEN 3060 3050 GOTO 5140 !do heart 3060 IF LOOT<>96 THEN 3080 3070 GOTO 5100 !do zed 3080 IF LOOT<>112 THEN 3100 3090 GOTO 5060 !do melee 3100 IF LOOT<>113 THEN RETURN 3110 GOTO 5020 ! do ranged 3120 LOOT=LO0T(1,4) 3130 CALL POSITION(#1,YP,XP) 3140 IF XP>HX THEN 3150 ELSE RETURN 3150 CALL COINC(#1,#13,8,C) 3160 IF C<>0 THEN 3200 3170 CALL COINC(#1,#4,8,C) 3180 IF C<>0 THEN 5190 !check for hole level 3 3190 RETURN 3200 DET=13 3210 IF LOOT<>88 THEN 3230 3220 GOTO 5140 !do heart 3230 IF LOOT<>96 THEN 3250 3240 GOTO 5100 !do zed 3250 IF LOOT<>112 THEN 3270 3260 GOTO 5060 !do melee 3270 IF LOOT<>113 THEN RETURN 3280 GOTO 5020 ! do ranged 3290 IF YP<>81 THEN 3640 !level 4 3300 CALL POSITION(#5,HY,HX):: :: LOOT=LO0T(1,5) 3310 CALL POSITION(#1,YP,XP) 3320 IF XP<=HX THEN 3330 ELSE 3470 3330 CALL COINC(#1,#14,8,C) 3340 IF C<>0 THEN 3380 3350 CALL COINC(#1,#5,8,C) 3360 IF C<>0 THEN 5190 !check for hole level 4 3370 RETURN 3380 DET=14 3390 IF LOOT<>88 THEN 3410 3400 GOTO 5140 !do heart 3410 IF LOOT<>96 THEN 3430 3420 GOTO 5100 !do zed 3430 IF LOOT<>112 THEN 3450 3440 GOTO 5060 !do melee 3450 IF LOOT<>113 THEN RETURN 3460 GOTO 5020 ! do ranged 3470 LOOT=LO0T(1,6) 3480 CALL POSITION(#1,YP,XP) 3490 IF XP>HX THEN 3500 ELSE RETURN 3500 CALL COINC(#1,#15,8,C) 3510 IF C<>0 THEN 3550 3520 CALL COINC(#1,#5,8,C) 3530 IF C<>0 THEN 5190 !check for hole level 4 3540 RETURN 3550 DET=15 3560 IF LOOT<>88 THEN 3580 3570 GOTO 5140 !do heart 3580 IF LOOT<>96 THEN 3600 3590 GOTO 5100 !do zed 3600 IF LOOT<>112 THEN 3620 3610 GOTO 5060 !do melee 3620 IF LOOT<>113 THEN RETURN 3630 GOTO 5020 ! do ranged 3640 IF YP<>105 THEN 3990 !level 5 3650 CALL POSITION(#6,HY,HX):: LOOT=LO0T(1,7) 3660 CALL POSITION(#1,YP,XP):: 3670 IF XP<=HX THEN 3680 ELSE 3820 3680 CALL COINC(#1,#16,8,C) 3690 IF C<>0 THEN 3730 3700 CALL COINC(#1,#6,8,C) 3710 IF C<>0 THEN 5190 !check for hole level 5 3720 RETURN 3730 DET=16 3740 IF LOOT<>88 THEN 3580 3750 GOTO 5140 !do heart 3760 IF LOOT<>96 THEN 3780 3770 GOTO 5100 !do zed 3780 IF LOOT<>112 THEN 3800 3790 GOTO 5060 !do melee 3800 IF LOOT<>113 THEN RETURN 3810 GOTO 5020 ! do ranged 3820 LOOT=LO0T(1, 3830 CALL POSITION(#1,YP,XP) 3840 IF XP>HX THEN 3850 ELSE RETURN 3850 CALL COINC(#1,#17,8,C) 3860 IF C<>0 THEN 3900 3870 CALL COINC(#1,#6,8,C) 3880 IF C<>0 THEN 5190 !check for hole level 5 3890 RETURN 3900 DET=17 3910 IF LOOT<>88 THEN 3930 3920 GOTO 5140 !do heart 3930 IF LOOT<>96 THEN 3950 3940 GOTO 5100 !do zed 3950 IF LOOT<>112 THEN 3970 3960 GOTO 5060 !do melee 3970 IF LOOT<>113 THEN RETURN 3980 GOTO 5020 ! do ranged 3990 IF YP<>129 THEN 4340 !level 6 4000 CALL POSITION(#7,HY,HX):: LOOT=LO0T(1,9) 4010 CALL POSITION(#1,YP,XP) 4020 IF XP<=HX THEN 4030 ELSE 4170 4030 CALL COINC(#1,#18,8,C) 4040 IF C<>0 THEN 4080 4050 CALL COINC(#1,#7,8,C) 4060 IF C<>0 THEN 5190 !check for hole level 6 4070 RETURN 4080 DET=18 4090 IF LOOT<>88 THEN 4110 4100 GOTO 5140 !do heart 4110 IF LOOT<>96 THEN 4130 4120 GOTO 5100 !do zed 4130 IF LOOT<>112 THEN 4150 4140 GOTO 5060 !do melee 4150 IF LOOT<>113 THEN RETURN 4160 GOTO 5020 ! do ranged 4170 LOOT=LO0T(1,10) 4180 CALL POSITION(#1,YP,XP) 4190 IF XP>HX THEN 4200 ELSE RETURN 4200 CALL COINC(#1,#19,8,C) 4210 IF C<>0 THEN 4250 4220 CALL COINC(#1,#7,8,C) 4230 IF C<>0 THEN 5190 !check for hole level 6 4240 RETURN 4250 DET=19 4260 IF LOOT<>88 THEN 4280 4270 GOTO 5140 !do heart 4280 IF LOOT<>96 THEN 4300 4290 GOTO 5100 !do zed 4300 IF LOOT<>112 THEN 4320 4310 GOTO 5060 !do melee 4320 IF LOOT<>113 THEN RETURN 4330 GOTO 5020 ! do ranged 4340 IF YP<>153 THEN 4690 !level 7 4350 CALL POSITION(#8,HY,HX):: LOOT=LO0T(1,11) 4360 CALL POSITION(#1,YP,XP) 4370 IF XP<=HX THEN 4380 ELSE 4520 4380 CALL COINC(#1,#20,8,C) 4390 IF C<>0 THEN 4430 4400 CALL COINC(#1,#8,8,C) 4410 IF C<>0 THEN 5190 !check for hole level 7 4420 RETURN 4430 DET=20 4440 IF LOOT<>88 THEN 4460 4450 GOTO 5140 !do heart 4460 IF LOOT<>96 THEN 4480 4470 GOTO 5100 !do zed 4480 IF LOOT<>112 THEN 4500 4490 GOTO 5060 !do melee 4500 IF LOOT<>113 THEN RETURN 4510 GOTO 5020 ! do ranged 4520 LOOT=LO0T(1,12) 4530 CALL POSITION(#1,YP,XP) 4540 IF XP>HX THEN 4550 ELSE RETURN 4550 CALL COINC(#1,#21,8,C) 4560 IF C<>0 THEN 4600 4570 CALL COINC(#1,#8,8,C) 4580 IF C<>0 THEN 5190 !check for hole level 7 4590 RETURN 4600 DET=21 4610 IF LOOT<>88 THEN 4630 4620 GOTO 5140 !do heart 4630 IF LOOT<>96 THEN 4650 4640 GOTO 5100 !do zed 4650 IF LOOT<>112 THEN 4670 4660 GOTO 5060 !do melee 4670 IF LOOT<>113 THEN RETURN 4680 GOTO 5020 ! do ranged 4690 IF YP<>177 THEN RETURN !level 8 ground floor 4700 HX=LASTHLE :: LOOT=LO0T(1,13) 4710 CALL POSITION(#1,YP,XP) 4720 IF XP<=HX THEN 4730 ELSE 4860 4730 CALL COINC(#1,#22,8,C) 4740 IF C<>0 THEN 4770 4750 CALL COINC(#1,#9,4,C) 4760 IF C<>0 THEN 5210 ELSE RETURN !****collision check against exit 4770 DET=22 4780 IF LOOT<>88 THEN 4800 4790 GOTO 5140 !do heart 4800 IF LOOT<>96 THEN 4820 4810 GOTO 5100 !do zed 4820 IF LOOT<>112 THEN 4840 4830 GOTO 5060 !do melee 4840 IF LOOT<>113 THEN RETURN 4850 GOTO 5020 ! do ranged 4860 LOOT=LO0T(1,14) 4870 CALL POSITION(#1,YP,XP) 4880 IF XP>HX THEN 4890 ELSE RETURN 4890 CALL COINC(#1,#23,8,C) 4900 IF C<>0 THEN 4930 4910 CALL COINC(#1,#9,4,C) 4920 IF C<>0 THEN 5210 ELSE RETURN !****collision check against exit 4930 DET=23 4940 IF LOOT<>88 THEN 4960 4950 GOTO 5140 !do heart 4960 IF LOOT<>96 THEN 4980 4970 GOTO 5100 !do zed 4980 IF LOOT<>112 THEN 5000 4990 GOTO 5060 !do melee 5000 IF LOOT<>113 THEN RETURN 5010 GOTO 5020 ! do ranged 5020 REM **********ranged 5030 SCORE=SCORE+5 :: IF RANGED<10 THEN RANGED=RANGED+1:: CALL SOUND(1,1000,5)::CALL SOUND(1,1200,2) 5040 GOSUB 5750 !*************************gui UPDATE****** 5050 GOTO 5170 5060 REM *********melee 5070 SCORE=SCORE+3 :: IF MELEE<10 THEN MELEE=MELEE+1:: CALL SOUND(1,1500,5)::CALL SOUND(1,1600,2):: 5080 GOSUB 5750 !*************************gui UPDATE****** 5090 GOTO 5170 5100 REM *************zed 5110 CALL SOUND(100,-4,0,110,0,1000,0):: HEALTH=HEALTH-1 :: IF HEALTH<=0 THEN 5810 5120 GOSUB 5750 !*************************gui UPDATE****** 5130 RETURN 5140 REM *************HEART 5150 SCORE=SCORE+8 :: CALL SOUND(1,500,5)::CALL SOUND(1,600,2)::IF HEALTH<10 THEN HEALTH=HEALTH+1 5160 GOSUB 5750 !*************************gui UPDATE****** 5170 IF DET=O THEN 5180 :: CALL DELSPRITE(#DET):: RETURN 5180 RETURN 5190 FOR FALL=1 TO 24 :: YP=YP+1 :: CALL SOUND(1,666-(FALL*10),5):: CALL SPRITE(#1,44,6,YP,XP):: NEXT FALL !*****FALL********** 5200 RETURN 5210 REM *****************************************************BOARD**Progression************ 5220 CALL DELSPRITE(ALL):: BOARD=BOARD+1 :: RESTORE 170 :: IF SCORE>HSCORE THEN HSCORE=SCORE :: GOTO 120 5230 REM ***********************************************************LOOT DISTRIBUTION SYSTEM****** 5240 REM*******SWITCH=-5 !SWITCH=INT(RND*2)+1 5250 REM******FOR LT=1 TO 2 5260 LOOTL=INT(RND*4)+1 5270 LOOTR=INT(RND*4)+1 5280 REM******IF SWITCH=1 THEN 8860 ELSE 8880 5290 REM******SWITCH=-5::GOTO 8940 5300 REM******IF SWITCH=2 THEN 8900 ELSE 8920 5310 REM*********SWITCH=5::GOTO 8880 5320 REM******IF SWITCH=5 THEN SWITCH=-5 ELSE SWITCH=5 5330 IF LOOTL<>1 THEN 5370 5340 CALL SPRITE(#SLOT,88,7,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !HEART 88 5350 LO0T(LAB,LTN)=88 :: LAB=LAB+1 5360 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5370 IF LOOTL<>2 THEN 5410 5380 CALL SPRITE(#SLOT,96,4,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !ZED 96 5390 LO0T(LAB,LTN)=96 :: LAB=LAB+1 5400 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5410 IF LOOTL<>3 THEN 5450 5420 CALL SPRITE(#SLOT,112,8,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !MELEE 112 5430 LO0T(LAB,LTN)=112 :: LAB=LAB+1 5440 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5450 IF LOOTL<>4 THEN 5490 5460 CALL SPRITE(#SLOT,113,14,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !RANGED 113 5470 LO0T(LAB,LTN)=113 :: LAB=LAB+1 5480 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5490 IF LOOTR<>1 THEN 5530 5500 CALL SPRITE(#SLOT,88,7,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !HEART 88 5510 LO0T(LAB,LTN)=88 :: LAB=LAB+1 5520 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5530 IF LOOTR<>2 THEN 5570 5540 CALL SPRITE(#SLOT,96,4,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !ZED 96 5550 LO0T(LAB,LTN)=96 :: LAB=LAB+1 5560 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5570 IF LOOTR<>3 THEN 5610 5580 CALL SPRITE(#SLOT,112,8,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !MELEE 112 5590 LO0T(LAB,LTN)=112 :: LAB=LAB+1 5600 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5610 IF LOOTR<>4 THEN 5650 5620 CALL SPRITE(#SLOT,113,14,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !RANGED 113 5630 LO0T(LAB,LTN)=113 :: LAB=LAB+1 5640 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+1 5650 REM ***NEXT LT 5660 RETURN 5670 REM **********cOLLISION cHECK WALLs 5680 CALL POSITION(#1,YP,XP) 5690 IF XP<=12 THEN 5700 ELSE 5720 5700 CALL LOCATE(#1,YP,13):: CALL MOTION(#1,0,0) 5710 CALL JOYST(1,JX,JY):: IF JX=-4 THEN 5700 ELSE RETURN 5720 IF XP>=240 THEN 5730 ELSE RETURN 5730 CALL LOCATE(#1,YP,239):: CALL MOTION(#1,0,0) 5740 CALL JOYST(1,JX,JY):: IF JX=4 THEN 5730 ELSE RETURN 5750 REM ********************GUI Update*********** 5760 DISPLAY AT(1,3):SCORE :: DISPLAY AT(1,10):BOARD :: DISPLAY AT(1,15):HEALTH :: DISPLAY AT(1,21):MELEE :: DISPLAY AT(1,26):RANGED !Output GUI 5770 CALL VCHAR(1,3,120):: CALL VCHAR(1,4,121):: CALL VCHAR(1,5,122)!score text gui 5780 CALL VCHAR(1,12,123):: CALL VCHAR(1,17,123):: CALL VCHAR(1,23,123):: CALL VCHAR(1,28,123)!Xs gui 5790 CALL VCHAR(1,11,124):: CALL VCHAR(1,16,88):: CALL VCHAR(1,22,112):: CALL VCHAR(1,27,113)!BOARD,hearts,melee,ranged gui 5800 RETURN 5810 REM ******************************YOU ARE DEAD*********************** 5820 CALL MOTION(#1,0,0):: CALL DELSPRITE(ALL):: CALL SCREEN(10) 5830 DATA 89,0044442810101010,79,007C44444444447C,85,0044444444444438 5840 DATA 65,003844447C444444,82,0078444478504844,69,007C40407840407C 5850 DATA 68,0078242424242478 5860 FOR YAD=1 TO 7 5870 READ YADC,YADP$ 5880 CALL CHAR(YADC,YADP$) 5890 NEXT YAD 5900 CALL CLEAR 5910 CALL VCHAR(12,10,89):: CALL VCHAR(12,11,79):: CALL VCHAR(12,12,85):: CALL VCHAR(12,13,32)!YOU 5920 CALL VCHAR(12,14,65):: CALL VCHAR(12,15,82):: CALL VCHAR(12,16,69):: CALL VCHAR(12,17,32)!ARE 5930 CALL VCHAR(12,18,68):: CALL VCHAR(12,19,69):: CALL VCHAR(12,20,65):: CALL VCHAR(12,21,68)!DEAD 5940 FOR CLRS=1 TO 13 :: CALL COLOR(CLRS,16,1):: NEXT CLRS 5950 CALL SCREEN(2) 5960 GOSUB 5750 5970 CALL KEY(1,K,S):: IF K=0 AND S=-1 THEN 6270 :: IF K=6 THEN 5980 ELSE 5990 5980 CALL DELSPRITE(ALL):: RESTORE 170 :: GOTO 100 5990 CALL JOYST(1,JX,JY):: IF JX=0 THEN 5970 :: IF JY=0 THEN 5970 ELSE 5980 6000 REM*******************MAN MELEE ATTACK 6010 CALL PATTERN(#1,45)!melee attack pattern 6020 CALL SPRITE(#24,143,12,YP,XP+ :: CALL SOUND(125,-5,0)!right attack 6030 GOSUB 6300 !MELLE HIT DETECTION RIGHT 6040 CALL DELSPRITE(#24) 6050 CALL SPRITE(#25,143,12,YP,XP- :: CALL SOUND(125,-6,0)!left attack 6060 GOSUB 6360 !MELEE HIT DETECTION LEFT 6070 CALL DELSPRITE(#25) 6080 CALL PATTERN(#1,44):: RETURN 6090 REM ******************MAN RANGED ATTACK 6100 CALL SOUND(100,-6,0):: RETURN 6110 !IF KSLOT=1 THEN 7090::RETURN 6120 !KSLOT=0::SLOT=SLOT-1::RETURN 6130 REM*****************ZED COINC BEHAVIOR************* 6140 RETURN 6150 REM****************ZED ATTACK****************** 6160 RETURN 6170 REM *****JOYS Combat choice***** 6180 IF JY=4 AND MELEE>=1 THEN 6200 ELSE 6190 6190 CALL SOUND(100,-3,0):: RETURN 6200 CALL MOTION(#1,0,0):: CALL POSITION(#1,YP,XP) 6210 MELEE=MELEE-1 :: GOSUB 5750 !*******UPDATE GUI 6220 GOSUB 6000 !PERFORM MELEE ATTACK 6230 RETURN 6240 IF JY=-4 THEN 6250 ELSE 6260 6250 GOSUB 6100 6260 RETURN 6270 REM***quit game 6280 CALL CLEAR 6290 END 6300 !************************mELEE collision check against LOOT********************* 6310 REM FOR DETT=10 TO 23 !MELEE RIGHT 6320 CALL COINC(#24,#DET,7,C) 6330 IF C<>0 THEN 6410 ELSE 6340 6340 REM NEXT DETT 6350 RETURN 6360 REM FOR DETT=10 TO 23 !MELEE LEFT 6370 CALL COINC(#25,#DET,7,C) 6380 IF C<>0 THEN 6410 ELSE 6390 6390 REM NEXT DETT:: 6400 RETURN 6410 TLOOP1=DET-9 6420 IF LO0T(1,TLOOP1)<>88 THEN 6430 ELSE 6510 !heart 6430 IF LO0T(1,TLOOP1)<>96 THEN 6480 !zed - ALL ALPHA TEMP CODE 6440 ZHELTH=ZHELTH-1 :: IF ZHELTH>=1 THEN 6520 6450 SCORE=SCORE+10 :: ZHELTH=2 6460 GOSUB 5750 !*****gui UPDATE****** 6470 GOTO 6510 6480 IF LO0T(1,TLOOP1)<>112 THEN 6500 !melee 6490 GOTO 6510 6500 IF LO0T(1,TLOOP1)<>113 THEN 6520 !ranged 6510 CALL DELSPRITE(#DET):: RETURN 6520 RETURN 6530 GOTO 5060 !do melee Edited August 27, 2016 by Sinphaltimus Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 28, 2016 Author Share Posted August 28, 2016 (edited) ZOMBi v0.32 GAME IS CURRENTLY EARLY ACCESS ALPHA version. No ETA on Beta.I will update this code below to the latest version when ever announced in a new comment so you don't have to go searching.Just copy/paste from below OR download the class99 save dsk1.ZOMBI32 file and Extended BASIC text file that is attached here: Zombti32.zip How To Play: About: This is meant to be a semi casual zombie survival game to escape a skyscraper. Play for score (session high score coming soon) Combat: A melee attack is a swing attack that covers the space directly in front and behind the player. You get one attack per inventory item.Joystick down = ranged attack temporarily using a noise for place holder. ZEDS: Will grab you and attack you. Hold a direction to escape, try hitting with melee, break away as fast as you can. DODGE: You can attempt to dodge zeds by jumping past them (joystick button or J) LOOTING: Will slow you down, jump past it to dodge the loot if you need to (for future versions when Zombies run) Controls:X=Quit, R=Reset, J and Controller Button = Jump, Joystick Left/Right moves left/right,Joystick up = melee attack - Notes: Melee attacks will destroy loot including hearts. Be careful not to use up all your melee weapons.Don't mash the jump button, press and hold. V032 changes:Fixed Melee COINC issue caused by me debugging unrelated things.Added Zombie Hit indicator (Zombie flashes red when hit) Added more sounds To Do Next:Create attacks for ranged including inventory changesReplace temp zombi health with per sprite health. right now they share 2hps and it gets reset to 2 at each death.Create basic zombie AI and animate.session high score KNOW ISSUES:There are no known bugs at time of upload.The code is bloated. A lot of fluff and stuff. I needed it this way to hunt bugs. I will optimize the code in a later version.Not all functionality or game mechanics have been developed as of this version. To Do Long Term:Title screen.SoundsMusic.Session High ScoreLoot balancing with board progression. (game balancing)zombie difficulty linked to board progression.At least 2 more types of ever more difficult zombies. 100 SCORE=0000 :: HEALTH=10 :: BOARD=1 :: HSCORE=0110 MELEE=0 :: RANGED=0 !weapons inventory120 CALL SCREEN(2)130 CALL COLOR(10,15,1):: CALL COLOR(12,12,1):: CALL COLOR(3,12,1):: CALL COLOR(4,12,1)140 CALL COLOR(8,7,1):: CALL COLOR(11,8,1):: CALL COLOR(14,12,1):: HCLR=1150 CALL CLEAR160 !running patterns right170 DATA 1818101010101018,1818183C1C142630,181A3C5E1A334060,18197E981C724100,18197E9818147243,1818385E581C2436180 !stop and jump right190 DATA 1818101010101018,000C1C3058081018,00000C1C305C1C18,0000060E183C0C18,0003070C18081018200 !jumping right210 DATA 0303040609081010,1818141810106000,1818103810180C00,1818503010180404220 !landing right230 DATA 0018183050180818,1818101038501018240 !running patterns left250 DATA 1818080808080818,1818183C3828640C,18583C7A58CC0206,18987E19384E8200,18987E1918284EC2,18181C7A1A38246C260 !stop and jump left270 DATA 1818080808080818,0030380C1A100818,000030380C3A3818,00006070183C3018,00C0E03018100818280 !jumping left290 DATA C0C0206090100808,1818281808080600,1818081C08183000,18180A0C08182020300 !landing right310 DATA 0018180C0A181018,181808081C0A0818320 FOR CHRR=33 TO 38 !setup for creating running characters right330 READ PAT$340 CALL CHAR(CHRR,PAT$)350 NEXT CHRR360 REM CHR=CHRR370 FOR CHSR=39 TO 43 !setup for creating stop and jump characters right380 READ PAT$390 CALL CHAR(CHSR,PAT$)400 NEXT CHSR410 FOR CHJR=64 TO 67 !setup for creating jumping characters right420 READ PAT$430 CALL CHAR(CHJR,PAT$)440 NEXT CHJR450 FOR CHLR=68 TO 69 !setup for creating landing characters right460 READ PAT$470 CALL CHAR(CHLR,PAT$)480 NEXT CHLR490 REM left running***********************500 FOR CHRL=70 TO 75 !setup for creating running characters left510 READ PAT$520 CALL CHAR(CHRL,PAT$)530 NEXT CHRL540 FOR CHSL=76 TO 80 !setup for creating stop and jump characters left550 READ PAT$560 CALL CHAR(CHSL,PAT$)570 NEXT CHSL580 FOR CHJL=81 TO 84 !setup for creating jumping characters left590 READ PAT$600 CALL CHAR(CHJL,PAT$)610 NEXT CHJL620 FOR CHLL=85 TO 86 !setup for creating landing characters left630 READ PAT$640 CALL CHAR(CHLL,PAT$)650 NEXT CHLL660 BGIR$="3C4426D999A5C3FF" !BAD girder for level HOLE creation670 GIR$="FFC3A59999A5C3FF" !GIRDER FOR LEVELS680 CALL CHAR(104,BGIR$,105,GIR$)!girder for level creation690 GRAV$="FFFFFFFFFFFFFFFF" :: CALL CHAR(106,GRAV$)!THE HOLE700 EXT$="1F1111111D11111F" :: CALL CHAR(107,EXT$)!THE EXIT710 HRT$="66FFFFFF7E7E3C18" :: CALL CHAR(88,HRT$)!THE HEART720 ZED$="3C2418FF9918183C" :: CALL CHAR(96,ZED$)!THE ZED730 MLE$="C0E0703A1E0C1A01" :: CALL CHAR(112,MLE$)!MELEE740 RNG$="000000FF7F1E1606" :: CALL CHAR(113,RNG$)!RANGED WEAPONS750 SCTXT1$="70808063141414E3" :: SCTXT2$="00000000334A4A32" :: SCTXT3$="00000000993C2118" !Word Score760 CALL CHAR(120,SCTXT1$):: CALL CHAR(121,SCTXT2$):: CALL CHAR(122,SCTXT3$)770 EXTXT$="0044442810284444" :: CALL CHAR(123,EXTXT$)! the letter X remain for GUI780 LVLTXT$="E0E080E9EF86EFE9" :: CALL CHAR(124,LVLTXT$)! EX TEXT IN GUI790 IDLE$="3838107CBA38286C" :: CALL CHAR(44,IDLE$)!***IDLE MAN800 MMELE$="3C3C18FF7E3C183C" :: MRNGL$="0C0C04FC4C3C286C" :: MRNGR$="3030203F323C1436" ! MELEE & l/r RANGED ATTACKS810 MWA$="002418FF1824" :: BULET$="0000008" !WEAPONS FIRE820 ZDI$="3C2418FF9918183C" :: ZDA$="3CA5DB7E1818183C" :: ZWL1$="3C2C18F81838246C" :: ZWL2$="3C2C18F818181838" !ZED IDLE&WALK LEFT830 ZWR1$="3C34181F181C2436" :: ZWR2$="3C34181F1818181C" !ZED WALK RIGHT840 CALL CHAR(45,MMELE$,46,MRNGL$,47,MRNGR$)!MAN ATTTACKS850 CALL CHAR(143,MWA$,142,BULET$)!WEAPONS FIRE860 RANDOMIZE870 SLOT=10 !STARTING SPRITE NUMBER FOR LOOT and more880 OPTION BASE 1890 DIM LO0T(3,14)!LOOT DISTRIBUTION AND COLLISION.900 LTN=1 !LOOT ARRAY COORDS COL910 LAB=1 !LOOT ARRAY COORDS ROW920 SHL=2 :: GRND=17 !START ground level on top girder (YP+8pixels), LEVEL AND SPRITE HOLE #930 LVL=3 :: YP=9 :: XP=8 :: RS=0 :: CS=16 :: RSPD=2.0 :: RSPDD=3.3 !start pos,vel,controller run speed940 ZHELTH=2 !default health of zombies start of game950 GOSUB 2240 !*******************************Create Level960 REM***************************************Create Sprite Idle********970 CALL SPRITE(#1,44,6,YP,XP)::GOSUB 5600 !**********wall collision checks980 CALL JOYST(1,JX,JY):: !check for joystick input990 CALL KEY(1,K,S):: IF K=0 AND S=-1 THEN 6200 :: IF K=6 THEN 1000 ELSE 10101000 CALL DELSPRITE(ALL):: RESTORE 170 :: GOTO 1001010 IF JY=0 THEN 1030 ELSE 1020 ! check for combat1020 GOSUB 6100 ! goto combat1030 IF JX=0 THEN 10701040 GOSUB 5600 !**********wall collision checks1050 CALL COINC(ALL,C):: IF C=0 THEN 10701060 GOSUB 2460 !****************************collision checks1070 CALL KEY(1,K,S):: IF K<>18 AND K<>74 AND K<>106 THEN 1740 !no kb pressed check for joyst1080 REM ********jump routine check********1090 CALL MOTION(#1,0,0)1100 IF CS<>-16 THEN 11401110 CALL POSITION(#1,YP,XP)!get new position for next sprite1120 GOSUB 1180 ! goto jump left1130 GOTO 9601140 IF CS<>16 THEN 17401150 CALL POSITION(#1,YP,XP)!get new position for next sprite1160 GOSUB 1460 !goto jump right**************************1170 GOTO 9601180 REM *************jump left routine*********1190 CS=0 :: CALL MOTION(#1,0,CS)!joystick button pressed so STOP running!1200 CALL SPRITE(#1,CHSL,6,YP,XP)!recreate sprite1 as stop and jump characters1210 FOR PT=76 TO 80 !setup stop and jump animation left1215 CALL SOUND(1,191-PT,5)1220 CALL PATTERN(#1,PT)!ANIMATE1230 !FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate.1240 !NEXT DELAY1250 NEXT PT !continue animating the stop and jump until done1260 CALL POSITION(#1,YP,XP)!get new postion for animating the jumping1270 IF XP<=24 THEN 13701280 CS=-20 :: YP=YP-3 :: RS=0 :: CALL SPRITE(#1,CHJL,6,YP,XP,RS,CS)!jumping left1290 FOR PT=81 TO 841300 CALL PATTERN(#1,PT)::CALL SOUND(1,110+PT,5)1310 !FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate.1320 !NEXT DELAY1330 NEXT PT1340 CS=0 :: CALL MOTION(#1,0,CS)!stop motion at end of jumping animation to begin landing animation.1350 CALL POSITION(#1,YP,XP)!get new position for starting landing animation.1360 YP=YP+3 !RESET YP TO BE GROUND.1370 CALL SPRITE(#1,CHLL,6,YP,XP)1380 FOR PT=85 TO 86 !setup landing animation left1390 CALL PATTERN(#1,PT)::CALL SOUND(1,200-PT,5)1400 !FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate.1410 !NEXT DELAY1420 NEXT PT ! continue landing animation until last frame1430 CALL POSITION(#1,YP,XP)!get new position for next sprite1440 CS=-161450 RETURN1460 REM *************jump right routine******1470 CS=0 :: CALL MOTION(#1,0,CS)!joystick button pressed so STOP running! right1480 CALL SPRITE(#1,CHSR,6,YP,XP)!recreate sprite1 as stop and jump characters right1490 FOR PT=39 TO 43 !setup stop and jump animation right1495 CALL SOUND(1,191-(PT+37),5)1500 CALL PATTERN(#1,PT)1510 !FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate.1520 !NEXT DELAY1530 NEXT PT !continue animating the stop and jump until done right1540 CALL POSITION(#1,YP,XP)!get new postion for animating the jumping right1550 IF XP>=224 THEN 16501560 CS=20 :: YP=YP-3 :: CALL SPRITE(#1,CHJR,6,YP,XP,RS,CS)!jumping right1570 FOR PT=64 TO 67 !setup jumping characters right1580 CALL PATTERN(#1,PT)::CALL SOUND(1,110+(PT+13),5)1590 !FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate.1600 !NEXT DELAY1610 NEXT PT1620 CS=0 :: CALL MOTION(#1,0,CS)!stop motion at end of jumping animation to begin landing animation.1630 CALL POSITION(#1,YP,XP)!get new position for starting landing animation.1640 YP=YP+31650 CALL SPRITE(#1,CHLR,6,YP,XP)1660 FOR PT=68 TO 69 !setup landing animation1670 CALL PATTERN(#1,PT)::CALL SOUND(1,191-(PT+11),5)1680 !FOR DELAY=1 TO 6 !these delays adjusts animation frame rate to match desired rate.1690 !NEXT DELAY1700 NEXT PT ! continue landing animation until last frame1710 CALL POSITION(#1,YP,XP)!get new position for next sprite1720 CS=161730 RETURN1740 REM **************Check Joyst Options************1750 IF JX<>0 THEN 17801760 CALL MOTION(#1,0,0)1770 GOTO 9701780 REM ********running check***************1790 IF JX<>-4 THEN 18101800 GOSUB 20401810 IF JX<>4 THEN 9701820 GOSUB 18401830 GOTO 970 !after RETURN goto joyst check1840 REM ************run right routine********1850 CALL POSITION(#1,YP,XP):: CS=16 :: CALL SPRITE(#1,CHRR,6,YP,XP,0,JX*RSPD)!create the runner and send running1860 FOR PT=33 TO 38 STEP 2 !setup for animating the run right1870 CALL PATTERN(#1,PT)::call sound(1,-2,5)1880 CALL KEY(1,K,S):: IF K=18 OR K=74 OR K=106 THEN 1080 !jump1890 CALL JOYST(1,JX,JY):: !check for joystick input1900 GOSUB 5600 !**********wall collision checks1910 CALL COINC(ALL,C):: IF C=0 THEN 1920 :: CALL MOTION(#1,0,(JX*RSPD)/RSPDD):: GOSUB 2460 !collision actions1920 IF JY=0 THEN 1940 ELSE 19301930 GOSUB 61001940 IF JX<>0 THEN 1960 ELSE 1950 !not joy pressed keep running1950 CALL POSITION(#1,YP,XP):: CALL MOTION(#1,0,0):: CALL SPRITE(#1,44,6,YP,XP):: RETURN1960 CALL JOYST(1,JX,JY)1970 IF JX=4 THEN 19901980 IF JX=-4 THEN 20301990 CALL MOTION(#1,0,JX*RSPD)2000 NEXT PT2010 IF JX=4 THEN 18602020 CALL POSITION(#1,YP,XP)!check position and store before stopping motion2030 RETURN2040 REM **********run left routine**************2050 CALL POSITION(#1,YP,XP):: CS=-16 :: CALL SPRITE(#1,CHRL,6,YP,XP,0,JX*RSPD)!create the runner and send running2060 FOR PT=70 TO 75 STEP 2 !setup for animating the run left2070 CALL PATTERN(#1,PT)::call sound(1,-2,5)2080 CALL KEY(1,K,S):: IF K=18 OR K=74 OR K=106 THEN 1080 !jump2090 CALL JOYST(1,JX,JY)!check for joystick input2100 GOSUB 5600 !**********wall collision checks2110 CALL COINC(ALL,C):: IF C=0 THEN 2120 :: CALL MOTION(#1,0,(JX*RSPD)/RSPDD):: GOSUB 2460 !collision actions2120 IF JY=0 THEN 2140 ELSE 21302130 GOSUB 61002140 IF JX<>0 THEN 2160 !not joy pressed keep running2150 CALL POSITION(#1,YP,XP):: CALL MOTION(#1,0,0):: CALL SPRITE(#1,44,6,YP,XP):: RETURN2160 CALL JOYST(1,JX,JY)2170 IF JX=-4 THEN 21902180 IF JX=4 THEN 22302190 CALL MOTION(#1,0,JX*RSPD)2200 NEXT PT2210 IF JX=-4 THEN 20602220 CALL POSITION(#1,YP,XP)!check position and store for next sprite2230 RETURN2240 REM *************************************************************************level creation************************2250 GOSUB 5680 !*************************gui creation******2260 HLE=INT((RND*15)+5)2270 FOR LVL=1 TO 82280 IF LVL=1 THEN 23002290 GOSUB 5160 !*************************************GOSUB********LOOT DS**********2300 CALL VCHAR(1,1,105,24)!LEFT WALL2310 CALL VCHAR(1,32,105,24)!RIGHT WALL2320 CALL HCHAR(LVL*3,1,105,HLE-1)!LEFT SIDE GIRDERS2330 IF LVL=8 THEN 2350 :: CALL SPRITE(#SHL,106,HCLR,GRND-8,(HLE* +1)!HOLE PROPER2340 SHL=SHL+1 !ADVANCE SPRITE #2350 LASTHLE=(HLE* +1 :: CALL HCHAR(LVL*3,HLE+3,105,32-(HLE+3))!RIGHT SIDE Girders2360 IF LVL=8 THEN 2420 :: CALL HCHAR(LVL*3,HLE,104)!CRUMBLE LEFT SIDE2370 CALL HCHAR(LVL*3,HLE+2,104)!crumble right side2380 GRND=GRND+242390 HOL=INT((RND*15)+5)!NEW LOCATION FOR HOLE2400 IF HOL=HLE THEN 2390 !NOT EQUAL TO PREVIOUS HOLE2410 HLE=HOL !SET PROPER HOLE VARIABLE2420 NEXT LVL !GO CREATE NEXT LEVEL2430 CALL SPRITE(#9,107,15,22*8,30* ! THE EXIT2440 CALL HCHAR(24,1,105,31)!THE FLOOR2450 RETURN2460 REM *********************************collision detection routines*******2470 GOSUB 5600 !**********wall collision checks2480 CALL POSITION(#1,YP,XP)2490 IF YP<>9 THEN 2520 ! top level 12500 CALL COINC(#1,#2,8,C)2510 IF C=0 THEN RETURN ELSE 5120 !check for hole level 12520 IF YP<>33 THEN 2870 !level 22530 CALL POSITION(#3,HY,HX):: LOOT=LO0T(1,1)2540 CALL POSITION(#1,YP,XP)2550 IF XP<=HX THEN 2560 ELSE 27002560 CALL COINC(#1,#10,8,C)2570 IF C<>0 THEN 26102580 CALL COINC(#1,#3,8,C)2590 IF C<>0 THEN 5120 !check for hole level 22600 RETURN2610 DET=102620 IF LOOT<>88 THEN 26402630 GOTO 5070 !do heart2640 IF LOOT<>96 THEN 26602650 GOTO 5030 !do zed2660 IF LOOT<>112 THEN 26802670 GOTO 4990 !do melee2680 IF LOOT<>113 THEN RETURN2690 GOTO 4950 ! do ranged2700 LOOT=LO0T(1,2)2710 CALL POSITION(#1,YP,XP)2720 IF XP>HX THEN 2730 ELSE RETURN2730 CALL COINC(#1,#11,8,C)2740 IF C<>0 THEN 27802750 CALL COINC(#1,#3,8,C)2760 IF C<>0 THEN 5120 !check for hole level 22770 RETURN2780 DET=112790 IF LOOT<>88 THEN 28102800 GOTO 5070 !do heart2810 IF LOOT<>96 THEN 28302820 GOTO 5030 !do zed2830 IF LOOT<>112 THEN 28502840 GOTO 4990 !do melee2850 IF LOOT<>113 THEN RETURN2860 GOTO 4950 ! do ranged2870 IF YP<>57 THEN 3220 !level 32880 CALL POSITION(#4,HY,HX):: LOOT=LO0T(1,3)2890 CALL POSITION(#1,YP,XP)2900 IF XP<=HX THEN 2910 ELSE 30502910 CALL COINC(#1,#12,8,C)2920 IF C<>0 THEN 29602930 CALL COINC(#1,#4,8,C)2940 IF C<>0 THEN 5120 !check for hole level 32950 RETURN2960 DET=122970 IF LOOT<>88 THEN 29902980 GOTO 5070 !do heart2990 IF LOOT<>96 THEN 30103000 GOTO 5030 !do zed3010 IF LOOT<>112 THEN 30303020 GOTO 4990 !do melee3030 IF LOOT<>113 THEN RETURN3040 GOTO 4950 ! do ranged3050 LOOT=LO0T(1,4)3060 CALL POSITION(#1,YP,XP)3070 IF XP>HX THEN 3080 ELSE RETURN3080 CALL COINC(#1,#13,8,C)3090 IF C<>0 THEN 31303100 CALL COINC(#1,#4,8,C)3110 IF C<>0 THEN 5120 !check for hole level 33120 RETURN3130 DET=133140 IF LOOT<>88 THEN 31603150 GOTO 5070 !do heart3160 IF LOOT<>96 THEN 31803170 GOTO 5030 !do zed3180 IF LOOT<>112 THEN 32003190 GOTO 4990 !do melee3200 IF LOOT<>113 THEN RETURN3210 GOTO 4950 ! do ranged3220 IF YP<>81 THEN 3570 !level 43230 CALL POSITION(#5,HY,HX):: :: LOOT=LO0T(1,5)3240 CALL POSITION(#1,YP,XP)3250 IF XP<=HX THEN 3260 ELSE 34003260 CALL COINC(#1,#14,8,C)3270 IF C<>0 THEN 33103280 CALL COINC(#1,#5,8,C)3290 IF C<>0 THEN 5120 !check for hole level 43300 RETURN3310 DET=143320 IF LOOT<>88 THEN 33403330 GOTO 5070 !do heart3340 IF LOOT<>96 THEN 33603350 GOTO 5030 !do zed3360 IF LOOT<>112 THEN 33803370 GOTO 4990 !do melee3380 IF LOOT<>113 THEN RETURN3390 GOTO 4950 ! do ranged3400 LOOT=LO0T(1,6)3410 CALL POSITION(#1,YP,XP)3420 IF XP>HX THEN 3430 ELSE RETURN3430 CALL COINC(#1,#15,8,C)3440 IF C<>0 THEN 34803450 CALL COINC(#1,#5,8,C)3460 IF C<>0 THEN 5120 !check for hole level 43470 RETURN3480 DET=153490 IF LOOT<>88 THEN 35103500 GOTO 5070 !do heart3510 IF LOOT<>96 THEN 35303520 GOTO 5030 !do zed3530 IF LOOT<>112 THEN 35503540 GOTO 4990 !do melee3550 IF LOOT<>113 THEN RETURN3560 GOTO 4950 ! do ranged3570 IF YP<>105 THEN 3920 !level 53580 CALL POSITION(#6,HY,HX):: LOOT=LO0T(1,7)3590 CALL POSITION(#1,YP,XP)::3600 IF XP<=HX THEN 3610 ELSE 37503610 CALL COINC(#1,#16,8,C)3620 IF C<>0 THEN 36603630 CALL COINC(#1,#6,8,C)3640 IF C<>0 THEN 5120 !check for hole level 53650 RETURN3660 DET=163670 IF LOOT<>88 THEN 35103680 GOTO 5070 !do heart3690 IF LOOT<>96 THEN 37103700 GOTO 5030 !do zed3710 IF LOOT<>112 THEN 37303720 GOTO 4990 !do melee3730 IF LOOT<>113 THEN RETURN3740 GOTO 4950 ! do ranged3750 LOOT=LO0T(1, 3760 CALL POSITION(#1,YP,XP)3770 IF XP>HX THEN 3780 ELSE RETURN3780 CALL COINC(#1,#17,8,C)3790 IF C<>0 THEN 38303800 CALL COINC(#1,#6,8,C)3810 IF C<>0 THEN 5120 !check for hole level 53820 RETURN3830 DET=173840 IF LOOT<>88 THEN 38603850 GOTO 5070 !do heart3860 IF LOOT<>96 THEN 38803870 GOTO 5030 !do zed3880 IF LOOT<>112 THEN 39003890 GOTO 4990 !do melee3900 IF LOOT<>113 THEN RETURN3910 GOTO 4950 ! do ranged3920 IF YP<>129 THEN 4270 !level 63930 CALL POSITION(#7,HY,HX):: LOOT=LO0T(1,9)3940 CALL POSITION(#1,YP,XP)3950 IF XP<=HX THEN 3960 ELSE 41003960 CALL COINC(#1,#18,8,C)3970 IF C<>0 THEN 40103980 CALL COINC(#1,#7,8,C)3990 IF C<>0 THEN 5120 !check for hole level 64000 RETURN4010 DET=184020 IF LOOT<>88 THEN 40404030 GOTO 5070 !do heart4040 IF LOOT<>96 THEN 40604050 GOTO 5030 !do zed4060 IF LOOT<>112 THEN 40804070 GOTO 4990 !do melee4080 IF LOOT<>113 THEN RETURN4090 GOTO 4950 ! do ranged4100 LOOT=LO0T(1,10)4110 CALL POSITION(#1,YP,XP)4120 IF XP>HX THEN 4130 ELSE RETURN4130 CALL COINC(#1,#19,8,C)4140 IF C<>0 THEN 41804150 CALL COINC(#1,#7,8,C)4160 IF C<>0 THEN 5120 !check for hole level 64170 RETURN4180 DET=194190 IF LOOT<>88 THEN 42104200 GOTO 5070 !do heart4210 IF LOOT<>96 THEN 42304220 GOTO 5030 !do zed4230 IF LOOT<>112 THEN 42504240 GOTO 4990 !do melee4250 IF LOOT<>113 THEN RETURN4260 GOTO 4950 ! do ranged4270 IF YP<>153 THEN 4620 !level 74280 CALL POSITION(#8,HY,HX):: LOOT=LO0T(1,11)4290 CALL POSITION(#1,YP,XP)4300 IF XP<=HX THEN 4310 ELSE 44504310 CALL COINC(#1,#20,8,C)4320 IF C<>0 THEN 43604330 CALL COINC(#1,#8,8,C)4340 IF C<>0 THEN 5120 !check for hole level 74350 RETURN4360 DET=204370 IF LOOT<>88 THEN 43904380 GOTO 5070 !do heart4390 IF LOOT<>96 THEN 44104400 GOTO 5030 !do zed4410 IF LOOT<>112 THEN 44304420 GOTO 4990 !do melee4430 IF LOOT<>113 THEN RETURN4440 GOTO 4950 ! do ranged4450 LOOT=LO0T(1,12)4460 CALL POSITION(#1,YP,XP)4470 IF XP>HX THEN 4480 ELSE RETURN4480 CALL COINC(#1,#21,8,C)4490 IF C<>0 THEN 45304500 CALL COINC(#1,#8,8,C)4510 IF C<>0 THEN 5120 !check for hole level 74520 RETURN4530 DET=214540 IF LOOT<>88 THEN 45604550 GOTO 5070 !do heart4560 IF LOOT<>96 THEN 45804570 GOTO 5030 !do zed4580 IF LOOT<>112 THEN 46004590 GOTO 4990 !do melee4600 IF LOOT<>113 THEN RETURN4610 GOTO 4950 ! do ranged4620 IF YP<>177 THEN RETURN !level 8 ground floor4630 HX=LASTHLE :: LOOT=LO0T(1,13)4640 CALL POSITION(#1,YP,XP)4650 IF XP<=HX THEN 4660 ELSE 47904660 CALL COINC(#1,#22,8,C)4670 IF C<>0 THEN 47004680 CALL COINC(#1,#9,4,C)4690 IF C<>0 THEN 5140 ELSE RETURN !****collision check against exit4700 DET=224710 IF LOOT<>88 THEN 47304720 GOTO 5070 !do heart4730 IF LOOT<>96 THEN 47504740 GOTO 5030 !do zed4750 IF LOOT<>112 THEN 47704760 GOTO 4990 !do melee4770 IF LOOT<>113 THEN RETURN4780 GOTO 4950 ! do ranged4790 LOOT=LO0T(1,14)4800 CALL POSITION(#1,YP,XP)4810 IF XP>HX THEN 4820 ELSE RETURN4820 CALL COINC(#1,#23,8,C)4830 IF C<>0 THEN 48604840 CALL COINC(#1,#9,4,C)4850 IF C<>0 THEN 5140 ELSE RETURN !****collision check against exit4860 DET=234870 IF LOOT<>88 THEN 48904880 GOTO 5070 !do heart4890 IF LOOT<>96 THEN 49104900 GOTO 5030 !do zed4910 IF LOOT<>112 THEN 49304920 GOTO 4990 !do melee4930 IF LOOT<>113 THEN RETURN4940 GOTO 4950 ! do ranged4950 REM **********ranged4960 SCORE=SCORE+5 :: IF RANGED<10 THEN RANGED=RANGED+1 :: CALL SOUND(1,1000,5):: CALL SOUND(1,1200,2)4970 GOSUB 5680 !*************************gui UPDATE******4980 GOTO 51004990 REM *********melee5000 SCORE=SCORE+3 :: IF MELEE<10 THEN MELEE=MELEE+1 :: CALL SOUND(1,1500,5):: CALL SOUND(1,1600,2)::5010 GOSUB 5680 !*************************gui UPDATE******5020 GOTO 51005030 REM *************zed5040 CALL SOUND(100,-4,0,110,0,1000,0):: HEALTH=HEALTH-1 :: IF HEALTH<=0 THEN 57405050 GOSUB 5680 !*************************gui UPDATE******5060 RETURN5070 REM *************HEART5080 SCORE=SCORE+8 :: CALL SOUND(1,500,5):: CALL SOUND(1,600,2):: IF HEALTH<10 THEN HEALTH=HEALTH+15090 GOSUB 5680 !*************************gui UPDATE******5100 IF DET=O THEN 5110 :: CALL DELSPRITE(#DET):: RETURN5110 RETURN5115 rem*************FALL********5120 FOR FALL=1 TO 24 :: YP=YP+1 :: CALL SOUND(1,666-(FALL*10),5):: CALL SPRITE(#1,44,6,YP,XP):: NEXT FALL 5130 RETURN5140 REM *****************************************************BOARD**Progression************5150 CALL DELSPRITE(ALL):: BOARD=BOARD+1 :: RESTORE 170 :: IF SCORE>HSCORE THEN HSCORE=SCORE :: GOTO 1205160 REM ***********************************************************LOOT DISTRIBUTION SYSTEM******5170 REM*******SWITCH=-5 !SWITCH=INT(RND*2)+15180 REM******FOR LT=1 TO 25190 LOOTL=INT(RND*4)+15200 LOOTR=INT(RND*4)+15210 REM******IF SWITCH=1 THEN 8860 ELSE 88805220 REM******SWITCH=-5::GOTO 89405230 REM******IF SWITCH=2 THEN 8900 ELSE 89205240 REM*********SWITCH=5::GOTO 88805250 REM******IF SWITCH=5 THEN SWITCH=-5 ELSE SWITCH=55260 IF LOOTL<>1 THEN 53005270 CALL SPRITE(#SLOT,88,7,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !HEART 885280 LO0T(LAB,LTN)=88 :: LAB=LAB+15290 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15300 IF LOOTL<>2 THEN 53405310 CALL SPRITE(#SLOT,96,4,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !ZED 965320 LO0T(LAB,LTN)=96 :: LAB=LAB+15330 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15340 IF LOOTL<>3 THEN 53805350 CALL SPRITE(#SLOT,112,8,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !MELEE 1125360 LO0T(LAB,LTN)=112 :: LAB=LAB+15370 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15380 IF LOOTL<>4 THEN 54205390 CALL SPRITE(#SLOT,113,14,GRND-9,((HLE+1)* -40):: SLOT=SLOT+1 !RANGED 1135400 LO0T(LAB,LTN)=113 :: LAB=LAB+15410 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15420 IF LOOTR<>1 THEN 54605430 CALL SPRITE(#SLOT,88,7,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !HEART 885440 LO0T(LAB,LTN)=88 :: LAB=LAB+15450 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15460 IF LOOTR<>2 THEN 55005470 CALL SPRITE(#SLOT,96,4,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !ZED 965480 LO0T(LAB,LTN)=96 :: LAB=LAB+15490 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15500 IF LOOTR<>3 THEN 55405510 CALL SPRITE(#SLOT,112,8,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !MELEE 1125520 LO0T(LAB,LTN)=112 :: LAB=LAB+15530 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15540 IF LOOTR<>4 THEN 55805550 CALL SPRITE(#SLOT,113,14,GRND-9,((HLE+1)* +40):: SLOT=SLOT+1 !RANGED 1135560 LO0T(LAB,LTN)=113 :: LAB=LAB+15570 LO0T(LAB,LTN)=SLOT-1 :: LAB=1 :: LTN=LTN+15580 REM ***NEXT LT5590 RETURN5600 REM **********cOLLISION cHECK WALLs5610 CALL POSITION(#1,YP,XP)5620 IF XP<=12 THEN 5630 ELSE 56505630 CALL LOCATE(#1,YP,13):: CALL MOTION(#1,0,0)5640 CALL JOYST(1,JX,JY):: IF JX=-4 THEN 5630 ELSE RETURN5650 IF XP>=240 THEN 5660 ELSE RETURN5660 CALL LOCATE(#1,YP,239):: CALL MOTION(#1,0,0)5670 CALL JOYST(1,JX,JY):: IF JX=4 THEN 5660 ELSE RETURN5680 REM ********************GUI Update***********5690 DISPLAY AT(1,3):SCORE :: DISPLAY AT(1,10):BOARD :: DISPLAY AT(1,15):HEALTH :: DISPLAY AT(1,21):MELEE :: DISPLAY AT(1,26):RANGED !Output GUI5700 CALL VCHAR(1,3,120):: CALL VCHAR(1,4,121):: CALL VCHAR(1,5,122)!score text gui5710 CALL VCHAR(1,12,123):: CALL VCHAR(1,17,123):: CALL VCHAR(1,23,123):: CALL VCHAR(1,28,123)!Xs gui5720 CALL VCHAR(1,11,124):: CALL VCHAR(1,16,88):: CALL VCHAR(1,22,112):: CALL VCHAR(1,27,113)!BOARD,hearts,melee,ranged gui5730 RETURN5740 REM ******************************YOU ARE DEAD***********************5750 CALL MOTION(#1,0,0):: CALL DELSPRITE(ALL):: CALL SCREEN(10)5760 DATA 89,0044442810101010,79,007C44444444447C,85,00444444444444385770 DATA 65,003844447C444444,82,0078444478504844,69,007C40407840407C5780 DATA 68,00782424242424785790 FOR YAD=1 TO 75800 READ YADC,YADP$5810 CALL CHAR(YADC,YADP$)5820 NEXT YAD5830 CALL CLEAR5840 CALL VCHAR(12,10,89):: CALL VCHAR(12,11,79):: CALL VCHAR(12,12,85):: CALL VCHAR(12,13,32)!YOU5850 CALL VCHAR(12,14,65):: CALL VCHAR(12,15,82):: CALL VCHAR(12,16,69):: CALL VCHAR(12,17,32)!ARE5860 CALL VCHAR(12,18,68):: CALL VCHAR(12,19,69):: CALL VCHAR(12,20,65):: CALL VCHAR(12,21,68)!DEAD5870 FOR CLRS=1 TO 13 :: CALL COLOR(CLRS,16,1):: NEXT CLRS5880 CALL SCREEN(2)5890 GOSUB 56805900 CALL KEY(1,K,S):: IF K=0 AND S=-1 THEN 6200 :: IF K=6 THEN 5910 ELSE 59205910 CALL DELSPRITE(ALL):: RESTORE 170 :: GOTO 1005920 CALL JOYST(1,JX,JY):: IF JX=0 THEN 5900 :: IF JY=0 THEN 5900 ELSE 59105930 REM*******************MAN MELEE ATTACK5940 CALL PATTERN(#1,45)!melee attack pattern5950 CALL SPRITE(#24,143,12,YP,XP+ :: CALL SOUND(125,-5,0)!right attack5960 GOSUB 6230 !MELLE HIT DETECTION RIGHT5970 CALL DELSPRITE(#24)5980 CALL SPRITE(#25,143,12,YP,XP- :: CALL SOUND(125,-6,0)!left attack5990 GOSUB 6290 !MELEE HIT DETECTION LEFT6000 CALL DELSPRITE(#25)6010 CALL PATTERN(#1,44):: CALL COLOR(#DET,4):: RETURN6020 REM ******************MAN RANGED ATTACK6030 CALL SOUND(100,-6,0):: RETURN6040 !IF KSLOT=1 THEN 7090::RETURN6050 !KSLOT=0::SLOT=SLOT-1::RETURN6060 REM*****************ZED COINC BEHAVIOR*************6070 RETURN6080 REM****************ZED ATTACK******************6090 RETURN6100 REM *****JOYS Combat choice*****6110 IF JY=4 AND MELEE>=1 THEN 6130 ELSE 61206120 CALL SOUND(100,-3,0):: RETURN6130 CALL MOTION(#1,0,0):: CALL POSITION(#1,YP,XP)6140 MELEE=MELEE-1 :: GOSUB 5680 !*******UPDATE GUI6150 GOSUB 5930 !PERFORM MELEE ATTACK6160 RETURN6170 IF JY=-4 THEN 6180 ELSE 61906180 GOSUB 60306190 RETURN6200 REM***quit game6210 CALL CLEAR6220 END6230 !************************mELEE collision check against LOOT*********************6240 FOR DET=10 TO 23 !MELEE RIGHT6250 CALL COINC(#24,#DET,7,C)6260 IF C<>0 THEN 6340 ELSE 62706270 NEXT DET6280 RETURN6290 FOR DET=10 TO 23 !MELEE LEFT6300 CALL COINC(#25,#DET,7,C)6310 IF C<>0 THEN 6340 ELSE 63206320 NEXT DET6330 RETURN6340 TLOOP1=DET-96350 IF LO0T(1,TLOOP1)<>88 THEN 6360 ELSE 6440 !heart6360 IF LO0T(1,TLOOP1)<>96 THEN 6410 !zed - ALL ALPHA TEMP CODE6370 CALL COLOR(#DET,7):: ZHELTH=ZHELTH-1 :: IF ZHELTH>=1 THEN 64506380 SCORE=SCORE+10 :: ZHELTH=26390 GOSUB 5680 !*****gui UPDATE******6400 GOTO 64406410 IF LO0T(1,TLOOP1)<>112 THEN 6430 !melee6420 GOTO 64406430 IF LO0T(1,TLOOP1)<>113 THEN 6450 !ranged6440 CALL DELSPRITE(#DET):: RETURN6450 RETURN6460 GOTO 4990 !do melee Edited August 29, 2016 by Sinphaltimus 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 HA! Working on V33 and I ran out of memory! LOL, Yeah. OK, I guess I have to start optimizing now; stripping out redundant code, combining commands and command lines and removing a ton of comments no longer needed. This will take a while and I can only work on it after my real job so new update in a couple of days.I've implemented the ranged weapon, you can now shoot zombies! 1 Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted August 29, 2016 Share Posted August 29, 2016 (edited) ... and removing a ton of comments no longer needed. You could let a lot of comments stay in your source text-file like this: ! This should clear the screen 100 CALL CLEAR ! And this turns it all red 110 CALL SCREEN(7) REM And this loops forever 120 GOTO 120 When you copy and paste to Classic99, Classic99 will ignore the lines beginning with the markers for remarks/comments. ! seems to be ignored quicker than REM when you use "Paste XB". Edited August 29, 2016 by sometimes99er 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 You could let a lot of comments stay in your source text-file like this: ! This should clear the screen 100 CALL CLEAR ! And this turns it all red 110 CALL SCREEN(7) REM And this loops forever 120 GOTO 120 When you copy and paste to Classic99. Classic99 will ignore the lines beginning with the markers for remarks/comments. ! seems to be ignored quicker than REM when you use "Paste XB". Wait what?!? If I out all my comments on their own line starting with an exclamation, Classic does not paste those lines when I chippy and paste all!?!?!? Wow man, thank you so much for that tid bit. That will save me about 30 percent of the total code base alone. I will be at it after work today. Thank you thank you thank you. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted August 29, 2016 Share Posted August 29, 2016 Yep, this is true. I use Notepad++ and have large blocks of rem statements between chunks of code. Just put the (!) in front of them and they do not go to memory in XB when pasted. You can see them get pasted, but they are not retained in memory, and you cannot see them when you LIST the program. 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 I discovered notepad++ just 2 weeks ago when Notepad almost caused me to put my fist through my monitor. I re-commented all my code during lunch today. I found that I have about 4k in comments. I know I can ramble on but 4k? Damn... Quote Link to comment Share on other sites More sharing options...
Opry99er Posted August 29, 2016 Share Posted August 29, 2016 Jedi Gauntlet is about 10k right now, with 12k of comments. Paragraphs of development comments between code segments 2 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 The only downside I see to this method is resequencing and list "clip". Quote Link to comment Share on other sites More sharing options...
+Lee Stewart Posted August 29, 2016 Share Posted August 29, 2016 Yep, this is true. I use Notepad++ and have large blocks of rem statements between chunks of code. Just put the (!) in front of them and they do not go to memory in XB when pasted. You can see them get pasted, but they are not retained in memory, and you cannot see them when you LIST the program. I discovered notepad++ just 2 weeks ago when Notepad almost caused me to put my fist through my monitor. ... Yeah, I've been using Notepad++ ever since I started converting/enhancing TI Forth into my flie-based fbForth 1.0 and cartridge-resident fbForth 2.0 more than three years ago. It is a great programmer's editor! ...lee Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted August 29, 2016 Share Posted August 29, 2016 Looking at your code, there is room to optimize your set-up. You are using a LOT of loops and lines to set up character patterns. Remember that Extended BASIC can define up to 4 consecutive characters at a time in a single CHAR statement, so you could structure it like this: 100 FOR I=1 TO 10 :: READ C,C$ :: CALL CHAR(C,C$):: NEXT I ... ! 96 - Zed, 97 - ... 10000 DATA 96,FFF... 10010 DATA 100,FFF... This will reclaim a LOT of code space and let you use the comments to remind yourself which pattern is which character. Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted August 29, 2016 Share Posted August 29, 2016 (edited) The only downside I see to this method is resequencing and list "clip". You could perhaps have a two column format in your text editor or simply use a spreadsheet. First column has your code, - that's one line-number and program statements per line (row). Second column has you comments. Copy first column to Classic99. Resequence and list "clip". Copy resequenced code and paste in first column. Shouldn't it line up with your old comments ? Edited August 29, 2016 by sometimes99er 1 Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted August 29, 2016 Share Posted August 29, 2016 For example, a small snippet of optimized pattern code: 100 SCORE=0000 :: HEALTH=10 :: BOARD=1 :: HSCORE=0 :: MELEE=0 :: RANGED=0 120 CALL SCREEN(2):: CALL COLOR(3,12,1,4,12,1,8,7,1,10,15,1,11,8,1,12,12,1,14,12,1):: HCLR=1 :: CALL CLEAR 130 FOR I=1 TO 53 :: READ C,C$ :: CALL CHAR(C,C$):: NEXT I 140 DATA 33,1818101010101018,34,1818183C1C142630,35,181A3C5E1A334060,36,18197E981C724100,37,18197E9818147243,38,1818385E581C2436 150 DATA 39,1818101010101018,40,000C1C3058081018,41,00000C1C305C1C18,42,0000060E183C0C18,43,0003070C18081018 160 DATA 64,0303040609081010,65,1818141810106000,66,1818103810180C00,67,1818503010180404 170 DATA 68,0018183050180818,69,1818101038501018 180 DATA 70,1818080808080818,71,1818183C3828640C,72,18583C7A58CC0206,73,18987E19384E8200,74,18987E1918284EC2,75,18181C7A1A38246C 190 DATA 76,1818080808080818,77,0030380C1A100818,78,000030380C3A3818,79,00006070183C3018,80,00C0E03018100818 200 DATA 81,C0C0206090100808,82,1818281808080600,83,1818081C08183000,84,18180A0C08182020 210 DATA 85,0018180C0A181018,86,181808081C0A0818 220 DATA 104,3C4426D999A5C3FF,105,FFC3A59999A5C3FF,106,FFFFFFFFFFFFFFFF,107,1F1111111D11111F,88,66FFFFFF7E7E3C18 230 DATA 96,3C2418FF9918183C,112,C0E0703A1E0C1A01,113,000000FF7F1E1606,120,70808063141414E3,121,00000000334A4A32,122,00000000993C2118 240 DATA 123,0044442810284444,124,E0E080E9EF86EFE9,44,3838107CBA38286C,45,3C3C18FF7E3C183C,46,0C0C04FC4C3C286C,47,3030203F323C1436 250 DATA 143,002418FF1824,142,0000008 860 RANDOMIZE 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 You could perhaps have a two column format in your text editor or simply use a spreadsheet. First column has your code, - that's one line-number and program statements per line (row). Second column has you comments. Copy first column to Classic99. Resequence and list "clip". Copy resequenced code and paste in first column. Shouldn't it line up with your old comments ? Yep, notepad++ is perfect for this. I thought about it after posting that "downside" comment. Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted August 29, 2016 Share Posted August 29, 2016 I would probably have written the lines 160-850 like this ... 160 CALL CHAR(33,"18181010101010181818183C1C142630181A3C5E1A33406") 170 CALL CHAR(36,"18197E981C72410018197E98181472431818385E581C24361818101010101018") 180 CALL CHAR(40,"000C1C305808101800000C1C305C1C180000060E183C0C180003070C18081018") 190 CALL CHAR(44,"3838107CBA38286C3C3C18FF7E3C183C0C0C04FC4C3C286C3030203F323C1436") 200 CALL CHAR(64,"030304060908101018181418101060001818103810180C001818503010180404") 210 CALL CHAR(68,"0018183050180818181810103850101818180808080808181818183C3828640C") 220 CALL CHAR(72,"18583C7A58CC020618987E19384E820018987E1918284EC218181C7A1A38246C") 230 CALL CHAR(76,"18180808080808180030380C1A100818000030380C3A381800006070183C3018") 240 CALL CHAR(80,"00C0E03018100818C0C020609010080818182818080806001818081C08183") 250 CALL CHAR(84,"18180A0C081820200018180C0A181018181808081C0A08180") 260 CALL CHAR(88,"66FFFFFF7E7E3C18") 270 CALL CHAR(96,"3C2418FF9918183C") 280 CALL CHAR(104,"3C4426D999A5C3FFFFC3A59999A5C3FFFFFFFFFFFFFFFFFF1F1111111D11111F") 290 CALL CHAR(112,"C0E0703A1E0C1A01000000FF7F1E1606") 300 CALL CHAR(120,"70808063141414E300000000334A4A3200000000993C2118") 310 CALL CHAR(124,"E0E080E9EF86EFE9") 320 CALL CHAR(142,"0000008000000000002418FF1824") 1 Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 For example, a small snippet of optimized pattern code: 100 SCORE=0000 :: HEALTH=10 :: BOARD=1 :: HSCORE=0 :: MELEE=0 :: RANGED=0 120 CALL SCREEN(2):: CALL COLOR(3,12,1,4,12,1,8,7,1,10,15,1,11,8,1,12,12,1,14,12,1):: HCLR=1 :: CALL CLEAR 130 FOR I=1 TO 53 :: READ C,C$ :: CALL CHAR(C,C$):: NEXT I 140 DATA 33,1818101010101018,34,1818183C1C142630,35,181A3C5E1A334060,36,18197E981C724100,37,18197E9818147243,38,1818385E581C2436 150 DATA 39,1818101010101018,40,000C1C3058081018,41,00000C1C305C1C18,42,0000060E183C0C18,43,0003070C18081018 160 DATA 64,0303040609081010,65,1818141810106000,66,1818103810180C00,67,1818503010180404 170 DATA 68,0018183050180818,69,1818101038501018 180 DATA 70,1818080808080818,71,1818183C3828640C,72,18583C7A58CC0206,73,18987E19384E8200,74,18987E1918284EC2,75,18181C7A1A38246C 190 DATA 76,1818080808080818,77,0030380C1A100818,78,000030380C3A3818,79,00006070183C3018,80,00C0E03018100818 200 DATA 81,C0C0206090100808,82,1818281808080600,83,1818081C08183000,84,18180A0C08182020 210 DATA 85,0018180C0A181018,86,181808081C0A0818 220 DATA 104,3C4426D999A5C3FF,105,FFC3A59999A5C3FF,106,FFFFFFFFFFFFFFFF,107,1F1111111D11111F,88,66FFFFFF7E7E3C18 230 DATA 96,3C2418FF9918183C,112,C0E0703A1E0C1A01,113,000000FF7F1E1606,120,70808063141414E3,121,00000000334A4A32,122,00000000993C2118 240 DATA 123,0044442810284444,124,E0E080E9EF86EFE9,44,3838107CBA38286C,45,3C3C18FF7E3C183C,46,0C0C04FC4C3C286C,47,3030203F323C1436 250 DATA 143,002418FF1824,142,0000008 860 RANDOMIZE Yes, absolutely. I wasn't counting on running out of memory this soon and was not optimizing any of my code as much as I could be. I'm going to take care of all this right now so I know what I have left to work with as far as what I need to finish this game and/or add additional features. I don't even need most of those call colors. I have them there as reference from very early on. I'm doing most of my color calls at the call sprite level. I really left a mess behind for myself, but then again, I wasn't planning on making a game either. I was just animating a little running man is all, then all of a sudden THIS happened. 1 Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted August 29, 2016 Share Posted August 29, 2016 I would probably have written the lines 160-850 like this ... 160 CALL CHAR(33,"18181010101010181818183C1C142630181A3C5E1A33406") 170 CALL CHAR(36,"18197E981C72410018197E98181472431818385E581C24361818101010101018") 180 CALL CHAR(40,"000C1C305808101800000C1C305C1C180000060E183C0C180003070C18081018") 190 CALL CHAR(44,"3838107CBA38286C3C3C18FF7E3C183C0C0C04FC4C3C286C3030203F323C1436") 200 CALL CHAR(64,"030304060908101018181418101060001818103810180C001818503010180404") 210 CALL CHAR(68,"0018183050180818181810103850101818180808080808181818183C3828640C") 220 CALL CHAR(72,"18583C7A58CC020618987E19384E820018987E1918284EC218181C7A1A38246C") 230 CALL CHAR(76,"18180808080808180030380C1A100818000030380C3A381800006070183C3018") 240 CALL CHAR(80,"00C0E03018100818C0C020609010080818182818080806001818081C08183") 250 CALL CHAR(84,"18180A0C081820200018180C0A181018181808081C0A08180") 260 CALL CHAR(88,"66FFFFFF7E7E3C18") 270 CALL CHAR(96,"3C2418FF9918183C") 280 CALL CHAR(104,"3C4426D999A5C3FFFFC3A59999A5C3FFFFFFFFFFFFFFFFFF1F1111111D11111F") 290 CALL CHAR(112,"C0E0703A1E0C1A01000000FF7F1E1606") 300 CALL CHAR(120,"70808063141414E300000000334A4A3200000000993C2118") 310 CALL CHAR(124,"E0E080E9EF86EFE9") 320 CALL CHAR(142,"0000008000000000002418FF1824") That also works, although you ARE burning up bytes for every CALL CHAR there... that's why a loop is more efficient code-wise. Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted August 29, 2016 Author Share Posted August 29, 2016 That also works, although you ARE burning up bytes for every CALL CHAR there... that's why a loop is more efficient code-wise. And his kind of optimization needs to wait until the very last steps. Even the use of loops. I'm not completely sold on all the graphics yet. I maybe changing all of them so you can imagine it's easier for me to leave my bloat (in this area) alone until I commit to the artwork. Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted August 29, 2016 Share Posted August 29, 2016 (edited) That also works, although you ARE burning up bytes for every CALL CHAR there... that's why a loop is more efficient code-wise. Yep, the letters C, H, A and R are stored as is and not as a one byte token. On the other hand, I'm not burning bytes on a loop and on as many ASCII codes as in your code. Edited August 29, 2016 by sometimes99er Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted August 29, 2016 Share Posted August 29, 2016 Yep, the letters C, H, A and R are stored as is and not as a one byte token. On the other hand, I'm not burning bytes on a loop and on as many ASCII codes as in your code. Not my fault, his patterns are scattered all around. Ideally you'd want to stack your patterns in a more efficient manner, which as he's indicated, is something for the future. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.