-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHUNGRY.EL
1521 lines (1306 loc) · 38.7 KB
/
HUNGRY.EL
1
#OUTPUT "HUNGRYDINOSAURS"'------------------------.DECLARES'--------#DECLARE K, Z, NORTH%, SOUTH%, EAST%, WEST%, ALLOW%, RES%#DECLARE A$,B$,C$,TOK$#DECLARE CURRENT¯ROOM%, PREVIOUS¯ROOM%#DECLARE INVENTORY$(10),INV¯COUNT%=0,INV¯IDX%=0#DECLARE FED¯DINO¯COUNT% = 0#DECLARE POLL¯CNT%=0#DECLARE T1, DELAY ' MUSIC RELATED VARS ' ------------------ #DECLARE MUSIC¯CHUNK¯INDEX ' OLD T #DECLARE BAR¯INDEX ' OLD TT ' #DECLARE MAP¯BAR¯TO¯CHUNK(11) ' OLD M() #DECLARE V1$(11), V2$(11), V3$(11), V4$(11), V5$(11), V6$(11)#DECLARE MAP(14)MAP(0)=0:MAP(1)=1:MAP(2)=2:MAP(3)=3MAP(4)=2:MAP(5)=4:MAP(6)=5:MAP(7)=7MAP(8)=8:MAP(9)=8:MAP(10)=5:MAP(11)=7MAP(12)=8:MAP(13)=8#DECLARE S%#STRUCT ÓÏÎÇ TMPO%, BARS%, CPY%ÓÏÎÇ SONGS(4) = [ _ [ 18, 6, 1 ], _ [ 25, 14, 1 ], _ [ 35, 10, 0 ], _ [ 15, 6, 1 ], _ [ 20, 9, 1 ] _]#DECLARE CURX%,CURY%, S$, CR, DC, DK, DL, OFFSET%, LINE$, A, VALID%, SK#DECLARE ÄÅÂÕÇ=0#DECLARE LOAD¯STATE%#DECLARE RET%, FILL¯STATE%#DEFINE ÃÏÌÏÕÒ = 63#DECLARE VEC¯DATA%(12000)#DECLARE VEC¯SIZE% = 3#DECLARE SELECTED¯COLOUR% = 1#DECLARE LAST¯COLOUR% = -1#DEFINE ÌÉÎÅ = 0#DEFINE ÃÉÒÃÌÅ = 1#DEFINE ÅÌÌÉÐÓÅ = 2#DEFINE ÂÏØ = 3#DEFINE ÐÏÌÙ = 4#DECLARE M0%, M1%, LX0%, LY0%, MX%, MY%, CX0%, CY0%, EX0%, EY0%#DECLARE RADIUS%, XRADIUS%, YRADIUS%, BX0%, BY0%, POLY¯IDX%#DECLARE POLY¯X%(250), POLY¯Y%(250), YMIN%, YMAX%#DECLARE IDX%, REV%, Y0%, Y1%, TMP%, Y%#DECLARE X0%, X1%, X%, Y%, M, C, PIDX%, PX%(20), I%, SWAPPED%, J%#DECLARE PRESENT$(4), MISSING% = 0, GAME¯OVER% = 0PRESENT$(0) = "WHISTLE"PRESENT$(1) = "FLOPPY-DISK"PRESENT$(2) = "MEGA65"PRESENT$(3) = "PROGRAM-LISTING"#DECLARE MAP¯LOC¯TO¯OBJS$(4,2)#DECLARE MAP¯IDX%#DECLARE ONION% = 0, ONION$#DEFINE ÇÅÒÍÁÎÙ=0#DEFINE ÔÕÒËÅÙ=1#DEFINE ÔÈÁÉÌÁÎÄ=2#DEFINE ÖÉÅÔÎÁÍ=3#DEFINE ÁÕÓÔÒÁÌÉÁ=4#DEFINE ÍÁدÒÏÏÍÓ=5#STRUCT ÒÏÏÍ DESC$, EXITS$, LOCS$, VART$, OFFSET%ÒÏÏÍ ROOMS(ÍÁدÒÏÏÍÓ) = [ _ [ "ÙOU ARE TRAPPED IN ÏNION ÃAKE'S DIRTY SMELLY PRISON!", _ "", "", "GERMAN.V", 0 ], _ [ "Á ÔURKISH DINOSAUR IS BATHING IN THE THERMAL WATERS.", _ "Ó", "2", "TURK.V", 0 ], _ [ "Á ÔHAI DINOSAUR IS PERFORMING A TRADITIONAL DANCE.", _ "ÎÅ", "13", "THAI.V", -9 ], _ [ "Á ÖIETNAMESE DINOSAUR IS TENDING TO THE RICE TERRACES.", _ "×Ó", "24", "VIET.V", 0 ], _ [ "ÁN INEBRIATED ÁUSTRALIAN DINOSAUR RESTS PEACEFULLY.", _ "Î", "3", "AUS.V", -16 ] _]S% = ÔÈÁÉÌÁÎÄ#DECLARE HAS¯ATTIC¯RAM%=0#DECLARE CACHED%(ÍÁدÒÏÏÍÓ),OFFS#DECLARE PROG$(7), FINISHED¯LINES%=0PROG$(0)="10 PRINT "+CHR$(34)+"I PROMISE TO ONION CAKE THAT I WILL"+CHR$(34)PROG$(1)="20 PRINT "+CHR$(34)+"- ALWAYS WRITE BEAUTIFUL MEGA65 PROGRAMS"+CHR$(34)PROG$(2)="30 PRINT "+CHR$(34)+"- MAKE USE OF DELICIOUS PETSCII CHARACTERS"+CHR$(34)PROG$(3)="40 PRINT "+CHR$(34)+"- MAKE BEAUTIFUL SID MUSIC WITH THE 'PLAY' COMMAND"+CHR$(34)BORDER 0:BACKGROUND 0:PRINT CHR$(14);CHR$(30);GOSUB ATTIC¯RAM¯CHECKGOTO MAIN.ATTIC¯RAM¯CHECK'--------------- PRINT CHR$(147); POKE $8000000, 35 IF PEEK($8000000) <> 35 THEN BEGIN HAS¯ATTIC¯RAM% = 0 PRINT "ÎO ATTIC RAM DETECTED (WILL NOT CACHE ART)" SLEEP 1 PRINT CHR$(147); RETURN BEND POKE $8000000, 36 IF PEEK($8000000) <> 36 THEN BEGIN HAS¯ATTIC¯RAM% = 0 PRINT "ÎO ATTIC RAM DETECTED (WILL NOT CACHE ART)" SLEEP 1 PRINT CHR$(147); RETURN BEND HAS¯ATTIC¯RAM%=1 PRINT "ÁTTIC RAM DETECTED (WILL CACHE ART)" SLEEP 1 RETURN.REMOVE¯FROM¯LOC'--------------- IF MAP¯IDX%=1 THEN BEGIN MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,1) = "" BEND:ELSE IF MAP¯IDX%=0 THEN BEGIN MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,0) = "" IF MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,1) <> "" THEN BEGIN MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,0) = MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,1) MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,1) = "" BEND BEND RETURN.TAKE'---- GOSUB EXTRACT¯TOKEN MAP¯IDX% = -1 B$="" FOR K = 0 TO 1 C$ = MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,K) IF TOK$ = LEFT$(C$,3) THEN B$ = C$:MAP¯IDX% = K NEXT K IF LEFT$(B$,3) = TOK$ THEN BEGIN ALLOW% = 1 IF TOK$="EGG" THEN BEGIN S$="ÔHE EGGPLANT STUBBORNLY RESISTS YOUR ATTEMPT TO TAKE IT!" CR=1:DC=14:GOSUB DRAW¯TEXT ALLOW%=0 BEND IF B$="RICE-PLANT" THEN BEGIN S$="ÔHE RICE-PLANT REFUSES TO RELENT TO YOUR WILL!" CR=1:DC=14:GOSUB DRAW¯TEXT ALLOW%=0 BEND IF TOK$="CAR" THEN BEGIN S$="ÔHE CARNIVOROUS-MITE GNASHES ITS TEETH AT YOU, FORCING YOU TO BACK DOWN!" CR=1:DC=14:GOSUB DRAW¯TEXT ALLOW%=0 BEND IF TOK$="TIG" THEN BEGIN S$="ÔHE TIGER UNLEASHES A FEROCIOUS GROWL, MAKING YOU SHIVER IN YOUR BOOTS!" CR=1:DC=14:GOSUB DRAW¯TEXT ALLOW%=0 BEND IF ALLOW%=1 THEN BEGIN INVENTORY$(INV¯COUNT%) = B$ INV¯COUNT% = INV¯COUNT% + 1 GOSUB REMOVE¯FROM¯LOC S$="ÙOU TAKE THE ":CR=0:DC=14:GOSUB DRAW¯TEXT S$=B$:CR=0:DC=3:GOSUB DRAW¯TEXT S$="...":CR=1:DC=14:GOSUB DRAW¯TEXT BEND BEND:ELSE BEGIN S$="ÙOU CAN'T SEE THAT HERE!" CR=1:DC=14:GOSUB DRAW¯TEXT BEND RETURN.HIT'--- GOSUB EXTRACT¯TOKEN MAP¯IDX% = -1 B$="" FOR K = 0 TO 1 C$ = MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,K) IF TOK$ = LEFT$(C$,3) THEN B$ = C$:MAP¯IDX% = K NEXT K IF LEFT$(B$,3) = TOK$ THEN BEGIN IF TOK$="EGG" THEN BEGIN S$="ÔHE IMPACT OF YOUR FIST CAUSES IT TO BECOME A " CR=0:DC=14:GOSUB DRAW¯TEXT S$="FAINTED-EGGPLANT":CR=0:DC=3:GOSUB DRAW¯TEXT S$=".":CR=1:GOSUB DRAW¯TEXT MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,MAP¯IDX%)="FAINTED-EGGPLANT" BEND IF TOK$="RIC" THEN BEGIN S$="ÙOU FLATTEN THE RICE WITH YOUR FIST, FORMING A TASTY " CR=0:DC=14:GOSUB DRAW¯TEXT S$="RICE-PAPER-ROLL":CR=0:DC=3:GOSUB DRAW¯TEXT S$=".":CR=1:DC=14:GOSUB DRAW¯TEXT MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,MAP¯IDX%)="RICE-PAPER-ROLL" BEND IF TOK$="CAR" THEN BEGIN S$="ÙOUR VIOLENT ACTIONS HAVE MADE THE MITE RETHINK LIFE, IT IS NOW A " CR=0:DC=14:GOSUB DRAW¯TEXT S$="VEGAN-MITE":CR=0:DC=3:GOSUB DRAW¯TEXT S$=".":CR=1:DC=14:GOSUB DRAW¯TEXT MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,MAP¯IDX%)="VEGAN-MITE" BEND IF TOK$="TIG" THEN BEGIN S$="É THINK YOU HURT ITS FEELINGS, IT IS NOW A " CR=0:DC=14:GOSUB DRAW¯TEXT S$="CRYING-TIGER":CR=0:DC=3:GOSUB DRAW¯TEXT S$="...":CR=1:DC=14:GOSUB DRAW¯TEXT MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,MAP¯IDX%)="CRYING-TIGER" BEND BEND:ELSE BEGIN S$="ÙOU CAN'T SEE THAT HERE!" CR=1:DC=14:GOSUB DRAW¯TEXT BEND RETURN.FIND¯IN¯INVENTORY'----------------- RES% = 0 : INV¯IDX% = -1 IF INV¯COUNT%=0 THEN RETURN FOR K=0 TO INV¯COUNT%-1 IF LEFT$(INVENTORY$(K),3) = TOK$ THEN RES% = 1:INV¯IDX% = K:B$=INVENTORY$(K) NEXT K RETURN.REMOVE¯FROM¯INVENTORY'--------------------- IF INV¯IDX%=INV¯COUNT%-1 THEN INV¯COUNT%=INV¯COUNT%-1:RETURN FOR K=INV¯IDX%+1 TO INV¯COUNT%-1 INVENTORY$(K-1) = INVENTORY$(K) NEXT K INV¯COUNT% = INV¯COUNT% - 1 RETURN.DROP¯PRESENT'----------- IF MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,0) = "" THEN BEGIN MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,0) = PRESENT$(FED¯DINO¯COUNT%) BEND:ELSE BEGIN MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%,1) = PRESENT$(FED¯DINO¯COUNT%) BEND RETURN.GIVE'---- GOSUB EXTRACT¯TOKEN GOSUB FIND¯IN¯INVENTORY IF RES%=0 THEN BEGIN S$="ÙOU ARE NOT CARRYING THAT!" CR=1:DC=14:GOSUB DRAW¯TEXT RETURN BEND IF LEFT$(B$,3) = TOK$ THEN BEGIN ALLOW%=0 IF TOK$="RIC" AND CURRENT¯ROOM%=ÖÉÅÔÎÁÍ THEN ALLOW%=1 IF TOK$="VEG" AND CURRENT¯ROOM%=ÁÕÓÔÒÁÌÉÁ THEN ALLOW%=1 IF TOK$="CRY" AND CURRENT¯ROOM%=ÔÈÁÉÌÁÎÄ THEN ALLOW%=1 IF TOK$="FAI" AND CURRENT¯ROOM%=ÔÕÒËÅÙ THEN ALLOW%=1 IF CURRENT¯ROOM%=ÇÅÒÍÁÎÙ THEN BEGIN IF TOK$="MEG" THEN BEGIN S$="'ÎOT YET, SHOW ME THAT YOU KNOW HOW TO USE THIS BEAUTIFUL MACHINE, OR ELSE...'" CR=1:DC=2:GOSUB DRAW¯TEXT BEND:ELSE BEGIN S$="ÏNION ÃAKE GLARES AT YOU, " CR=0:DC=14:GOSUB DRAW¯TEXT S$="'ÓTOP WASTING TIME AND PROVE YOUR SKILLS TO ME!'" CR=1:DC=2:GOSUB DRAW¯TEXT BEND RETURN BEND IF ALLOW% = 0 THEN BEGIN S$="ÔHE DINOSAUR APPRECIATES YOUR KIND GESTURE, BUT THAT ISN'T THE FOOD IT LIKES" CR=1:DC=14:GOSUB DRAW¯TEXT BEND IF ALLOW% = 1 THEN BEGIN GOSUB REMOVE¯FROM¯INVENTORY IF CURRENT¯ROOM% = ÖÉÅÔÎÁÍ THEN BEGIN S$="ÔHE ÖIETNAMESE DINOSAUR DEVOURS THE TASTY RICE-PAPER ROLL..." CR=1:DC=14:GOSUB DRAW¯TEXT BEND IF CURRENT¯ROOM% = ÁÕÓÔÒÁÌÉÁ THEN BEGIN S$="ÔHE ÁUSTRALIAN DINOSAUR CHOMPS DOWN THE SCRUMPTIOUS MITE AND THEN" CR=1:DC=14:GOSUB DRAW¯TEXT S$="FALLS BACK ASLEEP..." CR=1:DC=14:GOSUB DRAW¯TEXT BEND IF CURRENT¯ROOM% = ÔÈÁÉÌÁÎÄ THEN BEGIN S$="ÔHE ÔHAI DINOSAUR GRACEFULLY DINES ON THE CRYING-TIGER, AND " CR=1:DC=14:GOSUB DRAW¯TEXT S$="THEN RAISES ITS CLASPED PAWS TO ITS FOREHEAD TO WAI IN THANKS." CR=1:DC=14:GOSUB DRAW¯TEXT BEND IF CURRENT¯ROOM% = ÔÕÒËÅÙ THEN BEGIN S$="ÔHE ÔURKISH DINOSAUR ENTHUSIASTICALLY RIPS INTO THE TASTY FAINTED-EGGPLANT!" CR=1:DC=14:GOSUB DRAW¯TEXT BEND S$="ÉT DROPS A PRESENT FOR YOU TO SHOW ITS GRATITUDE..." CR=1:DC=14:GOSUB DRAW¯TEXT GOSUB DROP¯PRESENT FED¯DINO¯COUNT% = FED¯DINO¯COUNT% + 1 BEND BEND RETURN.CHECK¯WE¯HAVE¯ALL¯COMPUTER¯ITEMS'-------------------------------- S$="ÏNION CAKE LOOKS OVER YOUR INVENTORY..." CR=1:DC=14:GOSUB DRAW¯TEXT DELAY=1:GOSUB PAUSE MISSING%=0 FOR Z = 0 TO 3 TOK$ = LEFT$(PRESENT$(Z), 3) GOSUB FIND¯IN¯INVENTORY IF RES%=0 THEN BEGIN S$="'ÈMM... ÙOU SEEM TO BE MISSING A " CR=0:DC=2:GOSUB DRAW¯TEXT S$=PRESENT$(Z) CR=0:DC=3:GOSUB DRAW¯TEXT S$="...'" CR=1:DC=2:GOSUB DRAW¯TEXT MISSING%=1 DELAY=1:GOSUB PAUSE BEND NEXT Z IF MISSING%=1 THEN BEGIN RES%=0 S$="":CR=1:GOSUB DRAW¯TEXT S$="'É AM AFRAID THIS MEANS THAT É NEED TO SHOOT YOU NOW!'" CR=1:DC=2:GOSUB DRAW¯TEXT DELAY=1.5:GOSUB PAUSE S$="":CR=1:GOSUB DRAW¯TEXT S$="ÂÁÎÇ!" CR=1:DC=10:GOSUB DRAW¯TEXT DELAY=1.5:GOSUB PAUSE RETURN BEND S$="'ÌOOKS LIKE YOU'VE GOT IT ALL...'" CR=1:DC=2:GOSUB DRAW¯TEXT DELAY=1:GOSUB PAUSE S$="'ÎOW, DEMONSTRATE YOUR ÍÅÇÁ65 CODING SKILLS TO ME, OTHERWISE...'" CR=1:DC=2:GOSUB DRAW¯TEXT DELAY=2:GOSUB PAUSE RES% = 1 RETURN.PAUSE T1=TI.PAUSELP GOSUB POLL¯PLAY IF (TI-T1) < DELAY THEN GOTO PAUSELP RETURN.CAPTURED¯BY¯ONION¯CAKE'---------------------- S$="ÕPON HEARING YOUR MELODIOUS WHISTLING, ÏNION ÃAKE ARRIVES, HOLDING YOU" CR=1:DC=14:GOSUB DRAW¯TEXT S$="AT GUNPOINT, AND FORCEFULLY ESCORTING YOU TO HIS DUNGEON IN ÇERMANY..." CR=1:DC=14:GOSUB DRAW¯TEXT CURRENT¯ROOM% = ÇÅÒÍÁÎÙ GOSUB INIT¯MUSIC IF ÄÅÂÕÇ=0 THEN BEGIN ONION% = 1 : ONION$="ONION.V" : GOSUB LOAD BEND:ELSE BEGIN INVENTORY$(0)="MEGA65" INV¯COUNT%=1 BEND IF ÄÅÂÕÇ=0 THEN BEGIN DELAY=2:GOSUB PAUSE BEND GOSUB SHOW¯ROOM¯GRAPHIC IF ÄÅÂÕÇ=0 THEN BEGIN S$="'É FINALLY CAUGHT THE THIEF THAT STOLE MY ÍÅÇÁ65!'" CR=0:DC=2:GOSUB DRAW¯TEXT S$=", ÏNION ÃAKE EXCLAIMS!" CR=1:DC=14:GOSUB DRAW¯TEXT S$="":CR=1:GOSUB DRAW¯TEXT DELAY=1.5:GOSUB PAUSE S$="'ÉF YOU SHOW ME YOUR PROGRAMMING SKILLS É WILL RELEASE YOU!'" CR=0:DC=2:GOSUB DRAW¯TEXT S$=" HE OFFERS." CR=1:DC=14:GOSUB DRAW¯TEXT S$="":CR=1:GOSUB DRAW¯TEXT DELAY=2:GOSUB PAUSE S$="'ÉF NOT, É WILL SHOOT YOU!'" CR=1:DC=2:GOSUB DRAW¯TEXT DELAY=2:GOSUB PAUSE GOSUB CHECK¯WE¯HAVE¯ALL¯COMPUTER¯ITEMS BEND:ELSE BEGIN RETURN BEND IF RES%=0 THEN GAME¯OVER%=1:RETURN RETURN.TYPE¯LINE'--------- GOSUB GET¯INPUT¯TO¯A$ RETURN.ASSESS¯LINE'----------- IF A$=PROG$(FINISHED¯LINES%) THEN BEGIN FINISHED¯LINES% = FINISHED¯LINES% + 1 IF FINISHED¯LINES%=4 THEN BEGIN S$="'×ELL DONE, YOU COMPLETED THE PROGRAM!'" CR=1:DC=2:GOSUB DRAW¯TEXT BEND:ELSE BEGIN S$="'ÇOOD, NOW FOR THE NEXT LINE!'" CR=1:DC=2:GOSUB DRAW¯TEXT BEND BEND:ELSE BEGIN S$="'ÎO NO! ÙOU MADE MISTAKES ON THIS LINE!'" CR=0:DC=2:GOSUB DRAW¯TEXT S$=", ÏNION ÃAKE ROARS" CR=1:DC=14:GOSUB DRAW¯TEXT S$="'ÔYPE IT AGAIN PROPERLY, OTHERWISE É WILL SHOOT YOU!'" CR=1:DC=2:GOSUB DRAW¯TEXT BEND RETURN.START¯MEGA65'------------ ' DRAW¯MEGA65¯LISTING ONION% = 1 : ONION$="MEGA65.V" : GOSUB LOAD DO WHILE FINISHED¯LINES% < 4 S$="ÔYPE: " CR=0:DC=11:GOSUB DRAW¯TEXT S$=PROG$(FINISHED¯LINES%) CR=1:DC=12:GOSUB DRAW¯TEXT GOSUB TYPE¯LINE GOSUB ASSESS¯LINE LOOP S$="'ÉMPRESSIVE!'" CR=0:DC=2:GOSUB DRAW¯TEXT S$=", ÏNION ÃAKE SAYS WITH ADMIRATION!" CR=1:DC=14:GOSUB DRAW¯TEXT DELAY=1:GOSUB PAUSE S$="'ÙOU HAVE PROVEN YOURSELF WORTHY TO KEEP ALIVE! É HEREBY RELEASE YOU!" CR=1:DC=2:GOSUB DRAW¯TEXT DELAY=2:GOSUB PAUSE S$="ÒEMEMBER YOUR PROMISE, OTHERWISE É WILL FIND YOU AND SHOOT YOU!'" CR=1:DC=2:GOSUB DRAW¯TEXT DELAY=2:GOSUB PAUSE S$="ÙOU ARE FREE AGAIN! ÃONGRATULATIONS, YOU WON THE GAME!" CR=1:DC=7:GOSUB DRAW¯TEXT GAME¯OVER%=1 DELAY=1.5:GOSUB PAUSE RETURN .USE'--- GOSUB EXTRACT¯TOKEN GOSUB FIND¯IN¯INVENTORY IF RES%=0 THEN BEGIN S$="ÙOU ARE NOT CARRYING THAT!" CR=1:DC=14:GOSUB DRAW¯TEXT RETURN BEND IF LEFT$(B$,3) = TOK$ THEN BEGIN IF TOK$="WHI" THEN GOSUB CAPTURED¯BY¯ONION¯CAKE:RETURN IF TOK$="MEG" THEN BEGIN IF CURRENT¯ROOM%=ÇÅÒÍÁÎÙ THEN BEGIN GOSUB START¯MEGA65 GAME¯OVER%=1 RETURN BEND:ELSE BEGIN S$="ÈOW COULD YOU THINK OF PLAYING WITH YOUR ÍÅÇÁ65 WHEN THERE ARE HUNGRY" CR=1:DC=14:GOSUB DRAW¯TEXT S$="DINOSAURS TO FEED?!" CR=1:DC=14:GOSUB DRAW¯TEXT RETURN BEND BEND S$="ÙOU CANNOT USE THAT!" CR=1:DC=14:GOSUB DRAW¯TEXT BEND RETURN.INVENTORY'--------- S$="ÙOU ARE CARRYING:" CR=1:DC=14:GOSUB DRAW¯TEXT IF INV¯COUNT% = 0 THEN BEGIN S$=" - NOTHING..." CR=1:DC=12:GOSUB DRAW¯TEXT BEND:ELSE BEGIN FOR K=0 TO INV¯COUNT%-1 S$=" - " CR=0:DC=14:GOSUB DRAW¯TEXT S$=INVENTORY$(K) CR=1:DC=3:GOSUB DRAW¯TEXT NEXT K BEND RETURN.EXTRACT¯TOKEN'------------- K = INSTR(A$," ") TOK$=LEFT$(A$,3) IF K>0 THEN BEGIN A$=MID$(A$,K+1) BEND:ELSE BEGIN A$="" BEND RETURN.DRAW¯CURSOR'----------- PEN 0,1 DC=1 FOR DL=0 TO 15 LINE CURX%*8,320+CURY%*16+DL,CURX%*8+7,320+CURY%*16+DL NEXT DL RETURN.HIDE¯CURSOR'----------- PEN 0,0 FOR DL=0 TO 15 LINE CURX%*8,320+CURY%*16+DL,CURX%*8+7,320+CURY%*16+DL NEXT DL RETURN.SAFE¯CURY¯INC'------------- CURY%=CURY% + 1 IF CURY% => 5 THEN BEGIN GOSUB SCROLL¯TEXT¯UP SLEEP .1 BEND RETURN.GET¯INPUT¯TO¯A$'--------------- GOSUB DRAW¯CURSOR LINE$="" DO.KEYLOOP GET A$ GOSUB POLL¯PLAY IF A$="" THEN GOTO KEYLOOP A=ASC(A$) VALID%=1 IF (A<32 OR A>127) AND A<>13 AND NOT (A=20 AND LEN(LINE$)>0) THEN VALID%=0 IF VALID% = 1 THEN BEGIN IF A=13 THEN BEGIN ' CARRIAGE-RETURN? A$=LINE$ GOSUB HIDE¯CURSOR CURX%=0 GOSUB SAFE¯CURY¯INC RETURN BEND IF A=20 THEN BEGIN ' INST-DEL LINE$=LEFT$(LINE$,LEN(LINE$)-1) GOSUB HIDE¯CURSOR CURX%=CURX%-1 GOSUB DRAW¯CURSOR BEND IF A<>13 AND A<>20 THEN BEGIN ' ANY OTHER KEY? LINE$=LINE$+A$ GOSUB HIDE¯CURSOR S$=A$:CR=0:GOSUB DRAW¯TEXT GOSUB DRAW¯CURSOR BEND BEND LOOP RETURN.USER¯INPUT'---------- GOSUB GET¯INPUT¯TO¯A$ IF A$="N" AND NORTH%<>-1 THEN CURRENT¯ROOM%=NORTH%:RETURN IF A$="S" AND SOUTH%<>-1 THEN CURRENT¯ROOM%=SOUTH%:RETURN IF A$="E" AND EAST%<>-1 THEN CURRENT¯ROOM%=EAST%:RETURN IF A$="W" AND WEST%<>-1 THEN CURRENT¯ROOM%=WEST%:RETURN IF A$="I" THEN GOSUB INVENTORY:RETURN IF A$="L" THEN GOSUB SHOW¯ROOM¯TEXT:RETURN IF A$="QUIT" OR A$="EXIT" THEN GAME¯OVER%=1:RETURN GOSUB EXTRACT¯TOKEN IF TOK$="LOO" THEN GOSUB SHOW¯ROOM¯TEXT:RETURN IF TOK$="TAK" OR TOK$="GET" THEN GOSUB TAKE:RETURN IF TOK$="INV" THEN GOSUB INVENTORY:RETURN IF TOK$="HIT" THEN GOSUB HIT:RETURN IF TOK$="GIV" THEN GOSUB GIVE:RETURN IF TOK$="USE" THEN GOSUB USE:RETURN S$="ÓORRY, É DON'T UNDERSTAND THAT COMMAND" : CR=1 : DC=14 : GOSUB DRAW¯TEXT RETURN.SHOW¯OBJECTS'------------ RES%=0 FOR K=0 TO 1 A$ = MAP¯LOC¯TO¯OBJS$(CURRENT¯ROOM%, K) B$ = LEFT$(A$,1) C$ = "AEIOU" IF A$<>"" THEN BEGIN IF RES%=0 THEN BEGIN S$="ÙOU SEE A" : CR=0 : DC=14 : GOSUB DRAW¯TEXT RES%=1 BEND : ELSE BEGIN S$=" AND A" : CR=0 : DC=14 : GOSUB DRAW¯TEXT BEND IF INSTR(C$,B$)<>0 THEN BEGIN S$="N" : CR=0 : DC=14 : GOSUB DRAW¯TEXT BEND S$ = " " + A$ : CR=0 : DC= 3 : GOSUB DRAW¯TEXT BEND NEXT K IF RES%<>0 THEN BEGIN S$=" HERE.":CR=1:DC=14:GOSUB DRAW¯TEXT BEND RETURN.SCROLL¯TEXT¯UP'-------------- FOR SK=0 TO 7 EDMA 0, 640*4, $40000+640*21+SK*$4000, $40000+640*20+SK*$4000 NEXT SK FOR SK=0 TO 7 EDMA 3, 640, 0, $40000+640*24+SK*$4000 NEXT SK CURY%=CURY%-1 RETURN.DRAW¯TEXT'--------- PEN 0,DC IF LEN(S$) > 0 THEN BEGIN FOR DK = 0 TO LEN(S$)-1 CHAR CURX%, 320+CURY%*16,2,1,2,MID$(S$,DK+1,1) CURX% = CURX% + 1 IF CURX% = 80 THEN BEGIN CURX% = 0 GOSUB SAFE¯CURY¯INC BEND NEXT DK BEND IF CR=1 THEN BEGIN CURX% = 0 GOSUB SAFE¯CURY¯INC BEND RETURN.SHOW¯ROOM¯TEXT'-------------- S$=ROOMS¯DESC$(CURRENT¯ROOM%):CR=1:DC=14:GOSUB DRAW¯TEXT GOSUB SHOW¯OBJECTS NORTH%=-1:SOUTH%=-1:EAST%=-1:WEST%=-1 S$="ÅXITS: ":CR=0:DC=14:GOSUB DRAW¯TEXT A$ = ROOMS¯EXITS$(CURRENT¯ROOM%) IF LEN(A$) > 0 THEN BEGIN FOR K=1 TO LEN(A$) B$=MID$(A$,K,1) C$=MID$(ROOMS¯LOCS$(CURRENT¯ROOM%),K,1) S$=B$:CR=0:DC=7:GOSUB DRAW¯TEXT IF K<>LEN(A$) THEN S$= ", ":CR=0:DC=14:GOSUB DRAW¯TEXT IF B$="Î" THEN NORTH%=VAL(C$) IF B$="Ó" THEN SOUTH%=VAL(C$) IF B$="Å" THEN EAST%=VAL(C$) IF B$="×" THEN WEST%=VAL(C$) NEXT K BEND IF LEN(A$)=0 THEN S$="NONE...":CR=0:DC=12:GOSUB DRAW¯TEXT S$="":CR=1:GOSUB DRAW¯TEXT RETURN.SHOW¯ROOM¯GRAPHIC'----------------- CURX% = 0 CURY% = 0 SCREEN CLR 0 GOSUB INIT¯MUSIC 'ÔÏÄÏ: REMOVE 'RETURN IF HAS¯ATTIC¯RAM%=1 AND CACHED%(CURRENT¯ROOM%)=1 THEN BEGIN GOSUB LOAD¯FROM¯CACHE RETURN BEND OFFSET% = ROOMS¯OFFSET%(CURRENT¯ROOM%) GOSUB LOAD RETURN.MAIN¯GAME'--------- IF ÄÅÂÕÇ=1 THEN BEGIN GOSUB CAPTURED¯BY¯ONION¯CAKE BEND GOSUB SHOW¯ROOM¯GRAPHIC GOSUB SHOW¯ROOM¯TEXT.NEXT¯INPUT GOSUB USER¯INPUT IF GAME¯OVER%=1 THEN BEGIN S$="":CR=1:DC=14:GOSUB DRAW¯TEXT S$="ÇÁÍÅ ÏÖÅÒ" CR=1:DC=5:GOSUB DRAW¯TEXT DELAY=2:GOSUB PAUSE SCREEN CLOSE RETURN BEND IF CURRENT¯ROOM%<>PREVIOUS¯ROOM% THEN PREVIOUS¯ROOM%=CURRENT¯ROOM%:GOTO MAIN¯GAME GOTO NEXT¯INPUT RETURN.INIT¯GAME'--------- PRINT CHR$(147); CURRENT¯ROOM% = ÖÉÅÔÎÁÍ PREVIOUS¯ROOM% = CURRENT¯ROOM% INV¯COUNT% = 0 FED¯DINO¯COUNT% = 0 MISSING% = 0 GAME¯OVER% = 0 FINISHED¯LINES% = 0 ONION%=0 S%=-1 MAP¯LOC¯TO¯OBJS$(ÔÕÒËÅÙ,0) = "RICE-PLANT" MAP¯LOC¯TO¯OBJS$(ÔÈÁÉÌÁÎÄ,0) = "CARNIVOROUS-MITE" MAP¯LOC¯TO¯OBJS$(ÖÉÅÔÎÁÍ,0) = "EGGPLANT" MAP¯LOC¯TO¯OBJS$(ÁÕÓÔÒÁÌÉÁ,0) = "TIGER" MAP¯LOC¯TO¯OBJS$(ÔÕÒËÅÙ,1) = "" MAP¯LOC¯TO¯OBJS$(ÔÈÁÉÌÁÎÄ,1) = "" MAP¯LOC¯TO¯OBJS$(ÖÉÅÔÎÁÍ,1) = "" MAP¯LOC¯TO¯OBJS$(ÁÕÓÔÒÁÌÉÁ,1) = "" SCREEN 0, 640, 400, 4 RETURN.MAIN'---- GOSUB SHOW¯TITLE¯PAGE GOSUB INIT¯GAME GOSUB MAIN¯GAME GOTO MAIN END.PRESS¯A¯KEY'----------- PRINT PRINT "[ÐRESS ANY KEY TO CONTINUE]" GET KEY A$ RETURN.SHOW¯TITLE¯PAGE'--------------- PRINT CHR$(147); PLAY:PLAY "","","","","","" PRINT "ÏNION ÃAKE AND THE ÈUNGRY ÄINOSAURS" PRINT "===================================" PRINT " ÃODING & ÍUSIC SEQUENCING BY ÇURCE ÉSIKYILDIZ" PRINT " ÁRTWORK BY ÁYCA ÉSIKYILDIZ" PRINT PRINT " É)NSTRUCTIONS" PRINT " Ã)REDITS" PRINT PRINT " ÐRESS ÓÐÁÃÅ ÂÁÒ TO BEGIN" GET A$ GET KEY A$ IF A$="I" THEN GOSUB INSTRUCTIONS:GOTO SHOW¯TITLE¯PAGE IF A$="C" THEN GOSUB CREDITS:GOTO SHOW¯TITLE¯PAGE IF A$<>" " THEN GOTO SHOW¯TITLE¯PAGE RETURN.INSTRUCTIONS'------------ PRINT CHR$(147); PRINT "ÉNSTRUCTIONS (PAGE 1 OF 2)" PRINT "============" PRINT "ÔHE DINOSAURS ARE HUNGRY..." PRINT PRINT "...GO AND FIND THEM THE FOOD THAT THEY LIKE!" PRINT PRINT "×HEN YOU GIVE THEM ALL THE RIGHT FOOD, THEY WILL REWARD YOU WITH A " PRINT "NEW RETRO COMPUTER!" PRINT PRINT "...BUT BEWARE OF DIRTY OLD ÏNION ÃAKE..." PRINT PRINT "...HE IS ANGRY DUE TO SOMEBODY STEALING HIS FAVOURITE RETRO COMPUTER..." PRINT PRINT "ÍAYBE YOU CAN APPEASE HIS ANGER BY RETURNING IT TO HIM..." GOSUB PRESS¯A¯KEY PRINT CHR$(147); PRINT "ÉNSTRUCTIONS (PAGE 2 OF 2)" PRINT "============" PRINT "ÔHIS IS A SIMPLE TEXT ADVENTURE GAME ACCOMPANIED BY VECTOR ART DRAWN " PRINT "(SLOWLY) VIA ÂÁÓÉà 65 :)" PRINT PRINT "ÁS ÂÁÓÉà 65 DIDN'T COME WITH A ROUTINE TO DRAW FILLED IRREGULAR POLYGONS," PRINT "É HAD TO WRITE MY OWN (IN ÂÁÓÉÃ!), THAT MADE THINGS EVEN SLOWER :)" PRINT PRINT "ÁRTWORK WILL BE CACHED AFTER 1ST DRAW ATTEMPT COMPLETES." PRINT PRINT "ÔYPE SIMPLE ÖÅÒ ÎÏÕÎ STRINGS TO INTERACT WITH THE GAME." PRINT " - Å.G. ÔÁËÅ ÍÅÇÁ65" PRINT PRINT "ÙOU CAN ABBREVIATE ANY WORD TO THE FIRST 3 LETTERS." PRINT " - Å.G. ÔÁË ÍÅÇ" PRINT PRINT "ÎÏÔÅ: ÃURRENT ÍÅÇÁ65 CORE HAS PROBLEMS IN 640X400 16 COLOUR MODE" PRINT "- ÐERFORMS BETTER IN ØEMU RIGHT NOW" GOSUB PRESS¯A¯KEY PRINT CHR$(147); PRINT "ÇAME ÖOCABULARY" PRINT "---------------" PRINT "- Î, Ó, Å, × (TO GO ÎORTH, ÓOUTH, ÅAST, ×EST)" PRINT "- Ì/ÌÏÏË" PRINT "- É/ÉÎÖÅÎÔÏÒÙ" PRINT "- ÇÅÔ/ÔÁËÅ <OBJECT>" PRINT "- ÕÓÅ <OBJECT>" PRINT "- ÇÉÖÅ <OBJECT>" PRINT "- ÈÉÔ <OBJECT>" PRINT "- ÑÕÉÔ/ÅØÉÔ" GOSUB PRESS¯A¯KEY RETURN.CREDITS'------- PRINT CHR$(147); PRINT "ÃREDITS" PRINT "=======" PRINT "ÃODING AND ÍUSIC SEQUENCING BY ÇURCE ÉSIKYILDIZ" PRINT "ÁRTWORK BY ÁYCA ÉSIKYILDIZ" PRINT "- ÙOU'RE WELCOME TO DONATE TO THE ARTIST TO ENCOURAGE HER TO CONTRIBUTE MORE" PRINT " OF HER ARTWORK TO FUTURE ÍÅÇÁ65 GAMES!" PRINT " - HTTPS://TINYURL.COM/AYCA-DONATE" PRINT PRINT "ÓONG CREDITS" PRINT "------------" PRINT "ÁUSTRALIA - ";CHR$(34);"ÃOCKY THE ÃLONED ÃOCKATOO";CHR$(34);" - ÇURCE" PRINT "ÇERMANY - ";CHR$(34);"ÔHE ÁNGEL'S ÁNGLED ÁNKLE";CHR$(34);" - ÇURCE" PRINT "ÔHAILAND - ";CHR$(34);"ËHLEUN ÇRATHOP ÆANG";CHR$(34) PRINT " (×AVES CRASH TO THE SHORE) - ËING ÐRAJADHIPOK" PRINT "ÔURKEY - ";CHR$(34);"ÈATCAM ÃIKMIS ÇUL ÄALINA";CHR$(34) PRINT " (ÍY ÈATCHE CAME OUT ON THE ÒOSE ÂRANCH) - ÕNKNOWN" PRINT "ÖIETNAM - ";CHR$(34);"ÃON ÔHUONG ÒAU ÄANG ÍOC ÓAU ÈE";CHR$(34) PRINT " (ÓTILL ÌOVE THE ÂITTER ÈERB THAT ÇROWS AFTER ÓUMMER) - ÂAC ÓON" GOSUB PRESS¯A¯KEY PRINT CHR$(147); PRINT "ÔHANKS TO ÍRÚAADII" PRINT "------------------" PRINT "ÆINALLY, A WORD OF THANKS TO ÍRÚAADII FOR HIS AWESOME YOUTUBE VIDEOS:" PRINT "- HTTPS://TINYURL.COM/MRZAADII-PLAYLIST" PRINT PRINT "ÔHE INSPIRATION FOR THIS GAME CAME FROM HIS 'ÅSCAPE FROM ÏNION ÃAKE' GAME:" PRINT "- HTTPS://YOUTU.BE/ÔVÆØïQUUÄO" PRINT PRINT "ÈIS LAST-RELEASED VERSION OF THE GAME NO LONGER WORKS WITH LATEST ÍÅÇÁ65 ÒÏÍ:" PRINT "- HTTPS://TINYURL.COM/EFOC-ORIG" PRINT PRINT "É'VE MADE SOME REPAIRS/ENHANCEMENTS SO THAT IT RUNS ON LATEST ÍÅÇÁ65 ÒÏÍ HERE:" PRINT "- HTTPS://TINYURL.COM/EFOC-NEW" GOSUB PRESS¯A¯KEY RETURN.LOAD¯ERROR'---------- BORDER 2 LOAD¯STATE% = -4 PRINT "ERROR LOADING FILE..." STOP RETURN.FIND¯YMIN¯YMAX'-------------- YMIN% = POLY¯Y%(0) YMAX% = POLY¯Y%(0) FOR IDX% = 0 TO POLY¯IDX%-1 IF POLY¯Y%(IDX%) < YMIN% THEN YMIN% = POLY¯Y%(IDX%) IF POLY¯Y%(IDX%) > YMAX% THEN YMAX% = POLY¯Y%(IDX%) NEXT IDX% RETURN .IS¯Y¯IN¯LINE¯YRANGE'------------------- RET% = 0: REV% = 0 Y0% = POLY¯Y%(IDX%-1) Y1% = POLY¯Y%(IDX%) IF Y0% > Y1% THEN TMP%=Y0%:Y0% = Y1%:Y1% = TMP%:REV%=1 IF Y0% <= Y% AND Y% < Y1% THEN RET% = 1 RETURN.CHECK¯LINE¯INTERSECT'-------------------- GOSUB IS¯Y¯IN¯LINE¯YRANGE IF RET% = 0 THEN RETURN X0% = POLY¯X%(IDX%-1) X1% = POLY¯X%(IDX%) IF REV%=1 THEN TMP%=X0%:X0% = X1%:X1% = TMP% IF X0% = X1% THEN X% =X0%:RET% = 1:RETURN M = (Y1%-Y0%) / (X1% - X0%) C = Y0% - M * X0% X% = (Y% - C) / M RET% = 1 RETURN.FIND¯INTERSECTS'--------------- PIDX% = 0 ' CHECK LAST-POINT TO FIRST POLY¯X%(POLY¯IDX%) = POLY¯X%(0) POLY¯Y%(POLY¯IDX%) = POLY¯Y%(0) FOR IDX% = 1 TO POLY¯IDX% GOSUB CHECK¯LINE¯INTERSECT IF RET% = 1 THEN PX%(PIDX%)=X% : PIDX% = PIDX% + 1 NEXT IDX% RETURN.SORT¯INTERSECTS'--------------- ' BUBBLE SORT ALGORITHM FROM: GEEKSFORGEEKS.ORG/BUBBLE-SORT #IFDEF ÄÅÂÕǯÓÏÒÔ GOSUB CLEAR¯MENU CHAR 0,0,1,1,2,STR$(PIDX%-1) FOR I%=0 TO PIDX%-1 CHAR 4+I%*4,0,1,1,2,STR$(PX%(I%)) NEXT I%#ENDIF FOR I% = 0 TO PIDX%-2 SWAPPED% = 0 FOR J% = 0 TO PIDX%-I%-2 IF PX%(J%) > PX%(J%+1) THEN BEGIN TMP%=PX%(J%) PX%(J%) = PX%(J%+1) PX%(J%+1) = TMP% SWAPPED% = 1 BEND NEXT J% IF SWAPPED% = 0 THEN I% = PIDX% ' EXIT EARLY NEXT I%#IFDEF ÄÅÂÕǯÓÏÒÔ FOR I%=0 TO PIDX%-1 CHAR 4+I%*4,10,1,1,2,STR$(PX%(I%)) NEXT I% GETKEY A$#ENDIF RETURN.DRAW¯HORIZONTAL¯INTERSECTS'-------------------------- GOSUB FIND¯INTERSECTS GOSUB SORT¯INTERSECTS FOR IDX%=0 TO PIDX%-1 STEP 2 LINE PX%(IDX%),Y%,PX%(IDX%+1),Y% NEXT IDX% RETURN.FILL¯POLY'--------- POLL¯CNT%=0 GOSUB FIND¯YMIN¯YMAX FOR Y%=YMIN% TO YMAX% GOSUB DRAW¯HORIZONTAL¯INTERSECTS POLL¯CNT%=POLL¯CNT%+1 IF POLL¯CNT%=5 THEN GOSUB POLL¯PLAY:POLL¯CNT%=0 NEXT Y% RETURN.CHECK¯VEC¯HEADER'---------------- RET% = 0 IF K<>ASC("V") THEN RETURN GET#2, K:PRINT K; IF K<>ASC("E") THEN RETURN GET#2, K:PRINT K; IF K<>ASC("C") THEN RETURN RET% = 1 VEC¯SIZE% = 3 LOAD¯STATE%=-1 RETURN.LOAD¯FROM¯CACHE'--------------- IF HAS¯ATTIC¯RAM% THEN BEGIN 'Z = $8000000 + $20000*CURRENT¯ROOM% 'FOR K = 0 TO 7 'OFFS = K * $4000 'EDMA 0, $3E80, Z+OFFS, $40000+OFFS 'NEXT K EDMA 0, 0, $8000000 + $20000*CURRENT¯ROOM%, $40000 EDMA 0, 0, $8000000 + $20000*CURRENT¯ROOM% + $10000, $50000 BEND 'PALETTE RESTORE RETURN.BOXFILL'------- POLL¯CNT%=0 K=1 IF BY0% > MY% THEN K=-1 FOR Y% = BY0% TO MY% STEP K LINE BX0%, Y%, MX%, Y% POLL¯CNT%=POLL¯CNT%+1 IF POLL¯CNT%=5 THEN GOSUB POLL¯PLAY:POLL¯CNT%=0 NEXT Y% RETURN.LOAD'---- ' FOR NOW, JUST LOAD FROM A SINGLE HARD-CODED FILE LOAD¯STATE% = -4 IF ONION% = 1 THEN BEGIN DOPEN #2,(ONION$),R,U8 OFFSET%=20 BEND:ELSE BEGIN DOPEN #2,(ROOMS¯VART$(CURRENT¯ROOM%)),R,U8 BEND DO GET#2, K:PRINT "RD=";K; IF ST THEN EXIT IF LOAD¯STATE% = -4 THEN BEGIN PRINT "CHECK¯VEC "; GOSUB CHECK¯VEC¯HEADER IF RET% = 0 THEN GOSUB LOAD¯ERROR:EXIT:ELSE GOTO NXT¯LP BEND IF LOAD¯STATE% = -1 THEN BEGIN PRINT "NEW¯CMD "; FILL¯STATE% = (K AND 64)/64 K = K AND 63 LOAD¯STATE% = K BEND IF LOAD¯STATE% = ÃÏÌÏÕÒ THEN BEGIN PRINT "COLOUR "; GET#2,K:PRINT K; PEN 0, K VEC¯DATA%(VEC¯SIZE%) = ÃÏÌÏÕÒ VEC¯SIZE% = VEC¯SIZE% +1 VEC¯DATA%(VEC¯SIZE%) = K VEC¯SIZE% = VEC¯SIZE% +1 LAST¯COLOUR% = K SELECTED¯COLOUR% = K LOAD¯STATE% = -1 GOTO NXT¯LP BEND IF LOAD¯STATE% = ÌÉÎÅ THEN BEGIN PRINT "LINE "; GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 LX0% = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 LY0% = M0% + (M1% << 8) + OFFSET%:IF LY0%<0 THEN BEGIN:LY0%=0:BEND GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 MX% = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 MY% = M0% + (M1% << 8) + OFFSET%:IF MY%<0 THEN BEGIN:MY%=0:BEND LINE LX0%, LY0%, MX%, MY% LOAD¯STATE% = -1 GOTO NXT¯LP BEND IF LOAD¯STATE% = ÃÉÒÃÌÅ THEN BEGIN PRINT "CIRCLE "; GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 CX0% = M0% + (M1% << 8) GET#2,M0% : M0% = (M0% AND 255) GET#2,M1% : M1% = (M1% AND 255) CY0% = M0% + (M1% << 8) + OFFSET%:IF CY0%<0 THEN BEGIN:CY0%=0:BEND GET#2,M0% : M0% = (M0% AND 255) GET#2,M1% : M1% = (M1% AND 255) RADIUS% = M0% + (M1% << 8) CIRCLE CX0%, CY0%, RADIUS%, FILL¯STATE% LOAD¯STATE% = -1 GOTO NXT¯LP BEND IF LOAD¯STATE% = ÅÌÌÉÐÓÅ THEN BEGIN PRINT "ELLIPSE "; GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 EX0% = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 EY0% = M0% + (M1% << 8) + OFFSET%:IF EY0%<0 THEN BEGIN:EY0%=0:BEND GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 XRADIUS% = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 YRADIUS% = M0% + (M1% << 8) ELLIPSE EX0%, EY0%, XRADIUS%, YRADIUS%, FILL¯STATE% LOAD¯STATE% = -1 GOTO NXT¯LP BEND IF LOAD¯STATE% = ÂÏØ THEN BEGIN PRINT "BOX "; GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 BX0% = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 BY0% = M0% + (M1% << 8) + OFFSET% : IF BY0%<0 THEN BEGIN:BY0%=0:BEND GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 MX% = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 MY% = M0% + (M1% << 8) + OFFSET% : IF MY%<0 THEN BEGIN:MY%=0:BEND IF FILL¯STATE%<>0 THEN GOSUB BOXFILL:ELSE BOX BX0%, BY0%, MX%, MY% LOAD¯STATE% = -1 GOTO NXT¯LP BEND IF LOAD¯STATE% = ÐÏÌÙ THEN BEGIN PRINT "POLY "; GET#2,K:K = K AND 255 POLY¯IDX% = K FOR K = 0 TO POLY¯IDX%-1 GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 POLY¯X%(K) = M0% + (M1% << 8) GET#2,M0% : M0% = M0% AND 255 GET#2,M1% : M1% = M1% AND 255 POLY¯Y%(K) = M0% + (M1% << 8) + OFFSET% IF POLY¯Y%(K)<0 THEN BEGIN:POLY¯Y%(K)=0:BEND IF (K>0) THEN LINE POLY¯X%(K-1), POLY¯Y%(K-1), POLY¯X%(K), POLY¯Y%(K) NEXT K LINE POLY¯X%(POLY¯IDX%-1),POLY¯Y%(POLY¯IDX%-1),POLY¯X%(0),POLY¯Y%(0) IF FILL¯STATE% = 1 THEN GOSUB FILL¯POLY LOAD¯STATE% = -1 GOTO NXT¯LP BEND.NXT¯LP ' GOSUB POLL¯PLAY LOOP DCLOSE #2 IF HAS¯ATTIC¯RAM% AND ONION%=0 THEN BEGIN EDMA 0, 0, $40000, $8000000 + $20000*CURRENT¯ROOM% EDMA 0, 0, $50000, $8000000 + $20000*CURRENT¯ROOM% + $10000 CACHED%(CURRENT¯ROOM%) = 1 BEND ONION% = 0 RETURN.INIT¯MUSIC'========== IF S% <> CURRENT¯ROOM% THEN BEGIN S% = CURRENT¯ROOM% PLAY:PLAY "","","","","","" FOR K = 0 TO 10 V1$(K)="":V2$(K)="":V3$(K)="":V4$(K)="":V5$(K)="":V6$(K)="" NEXT K TEMPO SONGS¯TMPO%(S%) BAR¯INDEX=0 S% = CURRENT¯ROOM% IF S% = 0 THEN GOSUB GERMAN¯SONG IF S% = 1 THEN GOSUB TURK¯SONG IF S% = 2 THEN GOSUB THAI¯SONG IF S% = 3 THEN GOSUB VIET¯SONG IF S% = 4 THEN GOSUB AUS¯SONG BEND RETURN.POLL¯PLAY'--------- IF RPLAY(1) THEN RETURN MUSIC¯CHUNK¯INDEX=BAR¯INDEX ' MAP¯BAR¯TO¯CHUNK(BAR¯INDEX) IF S% = ÔÕÒËÅÙ THEN MUSIC¯CHUNK¯INDEX=MAP(BAR¯INDEX) IF SONGS¯CPY%(S%)=1 THEN BEGIN PLAY V1$(MUSIC¯CHUNK¯INDEX),V2$(MUSIC¯CHUNK¯INDEX),V3$(MUSIC¯CHUNK¯INDEX) SLEEP .05 PLAY ,,,V1$(MUSIC¯CHUNK¯INDEX),V2$(MUSIC¯CHUNK¯INDEX),V3$(MUSIC¯CHUNK¯INDEX) BEND:ELSE BEGIN PLAY V1$(MUSIC¯CHUNK¯INDEX),V2$(MUSIC¯CHUNK¯INDEX),V3$(MUSIC¯CHUNK¯INDEX) SLEEP .05 PLAY ,,,V4$(MUSIC¯CHUNK¯INDEX),V5$(MUSIC¯CHUNK¯INDEX),V6$(MUSIC¯CHUNK¯INDEX) BEND BAR¯INDEX=BAR¯INDEX+1 IF BAR¯INDEX=SONGS¯BARS%(S%) THEN BAR¯INDEX=0 RETURN.THAI¯SONG'---------V1$( 0)="T6M1O4HCCCC ICCCC CCCC O3GGGG GGGG"V2$( 0)="T1O3W CCCC"V3$( 0)="T1O3W EEEE"V4$( 0)="T6M1O5HCCCC SRICCCC CCCC O4GGGG GGGG"V5$( 0)="T1O3W GGGG"V6$( 0)="T1O4W CCCC"V1$( 1)="T6O3I AAAAAAAA GGGGGGGG O4CCCCCCCC O3GGGG GGGG"V2$( 1)="T1O3W CCCC"V3$( 1)="T1O3W FFEE"V4$( 1)="T6O4S RIAAAAAAAA GGGGGGGG O5CCCCCCCC O4GGGG GGGG"V5$( 1)="T1O3W AAGG"V6$( 1)="T1O4W CCCC"V1$( 2)="T6O3I AAAAAAAA O4CCCCCCCCC DDDDDDDD EEEEEEEE"V2$( 2)="T1O3W CCCC"V3$( 2)="T1O3W FFEE"V4$( 2)="T6O4S RIAAAAAAAA O5CCCCCCCCC DDDDDDDD EEEEEEEE"V5$( 2)="T1O3W AAGG"V6$( 2)="T1O4W CCCC"V1$( 3)="T6O4 IDDDD GGGG EEER EEER EEEEEEEE EEEEEEEE"V2$( 3)="T1O3W DDCC"V3$( 3)="T1O3W GGEE"V4$( 3)="T6O5SR IDDDD GGGG EEER EEER EEEEEEEE EEEEEEEE"V5$( 3)="T1O3W BBGG"V6$( 3)="T1O4W DDCC"V1$( 4)="T6O4I EEEE GGGG EEEE DDDD CCCCCCCC DDDDDDDD"V2$( 4)="T1O3W CCCC"V3$( 4)="T1O3W EEFF"V4$( 4)="T6O5SR IEEEE GGGG EEEE DDDD CCCCCCCC DDDDDDDD"V5$( 4)="T1O3W GGAA"V6$( 4)="T1O4W CCCC"V1$( 5)="T6O4I EEEEEEEE DDDDDDDR DDDDDDDD DDDDDDRR"V2$( 5)="T1O3W CCDD"V3$( 5)="T1O3W EEGG"V4$( 5)="T6O5SR IEEEEEEEE DDDDDDDR DDDDDDDD DDDDDDRR"V5$( 5)="T1O3W GGBB"V6$( 5)="T1O4W CCDD"V1$( 6)="T6O3I GGGGGGGG WR IAAAAAAAA WR IO4CCCCCCCC HR QO3FG"V2$( 6)="T1O3W CCCC DD"V3$( 6)="T1O3W FFEE FF"V4$( 6)="T7O4SR IGGGGGGGG WR IAAAAAAAA WR IO5CCCCCCCC Q.R QO4FG"V5$( 6)="T1O3W AAGG AA"V6$( 6)="T1O4W CCCC DD"V1$( 7)="T6O3H AO4CED ICCCCCCCC O3HAG HO4 CCCC ICCCCCCCR CCCCCCCR"V2$( 7)="T1O3W DD CC CC CC"V3$( 7)="T1O3W GG EE EE FF"V4$( 7)="T6O4H AO5CEDSR ICCCCCCCSC O4HAG HO5 CCCCSR ICCCCCCCR CCCCCCCR"V5$( 7)="T1O3W BB GG GG AA"V6$( 7)="T1O4W DD CC CC CC"V1$( 8)="T6O3H RGA O4CDC O3BA IGGGGGGGG QRRED HCDEF I GGGGGGGG GGGGGGGG GGGGGGGG GGGGGGGR"V2$( 8)="T1O3W CC CC CC DD CC CC"V3$( 8)="T1O3W EE FF EE GG EE FF"V4$( 8)="T6O4H RGA O5CDC O4BASR IGGGGGGGSG QRRED HCDEFSR I GGGGGGGG GGGGGGGG GGGGGGGG GGGGGGGR"V5$( 8)="T1O3W GG AA GG BB GG AA"V6$( 8)="T1O4W CC CC CC DD CC CC"V1$( 9)="T6O3H GGGG IGGGGGGGR GGGGGGGR GGGGGGGG GGGGGGGR"V2$( 9)="T1O3W CC DD CC"V3$( 9)="T1O3W EE GG EE"V4$( 9)="T6O4H GGGGSR IGGGGGGGR GGGGGGGR GGGGGGGG GGGGGGGR"V5$( 9)="T1O3W GG BB GG"V6$( 9)="T1O4W CC DD CC"RETURN.AUS¯SONG'--------V1$( 0)="O5IFED Q.C RIE Q.G R IO4GO5CCCQCIE QGIEQGIE"V2$( 0)="T0O2Q.R .C IGGG O1Q.G O2IDDD Q.C IGGG O1Q.G O2IDDD"V1$( 1)="O5QFIEQDIF QEIDQCIE QDICO4QBIA Q.G"V2$( 1)="T0O2Q.F IAAA Q.C IGGG O1Q.GO2 IDDD O1Q.G"V1$( 2)="O5IFED Q.C RIE Q.G R IO4GO5CCCQCIE QGIEQGIE"V2$( 2)="T0O2Q.R .C IGGG O1Q.G O2IDDD Q.C IGGG O1Q.G O2IDDD"V1$( 3)="O5QFIEQDIF QEIDQCIE QDIEQ#FIA GFD O4BGD"V2$( 3)="T0O2Q.F IAAA Q.C IGGG O2Q.D IAAA O1Q.G"V1$( 4)="O5IBGDBGD A#FDA#FD GECGEC QDIEQ#FIA BGDBGD A#FDA#FD O6QCO5IBO6QCIEQ.D.#F"V2$( 4)="M0T0O2Q.D IGGG Q.D IAAA Q.C IGGG Q.D IAAA Q.D IGGG Q.D IAAA Q.C IGGG H.D"V1$( 5)="O5QAFIO4M1CDEDCGFE O5QGE O4ICDEDCO3BAG"V2$( 5)="M0T0O2Q.C IAAA Q.C IAAA Q.C IGGG Q.C IGGG"V1$( 6)="O5QF.DID Q.E#FIA Q.G IFGF EFE DED"V2$( 6)="T0O1Q.G O2IDDD O1Q.G O2IDDD O1Q.G O2IDDD O1Q.G O2IDDD"V1$( 7)="O5QAFIO4M1CDEDCGFE O5QGE O4ICDEDCO3BAG"V2$( 7)="M0T0O2Q.C IAAA Q.C IAAA Q.C IGGG Q.C IGGG"V1$( 8)="O5QQF.DID Q.EICO4BO5D CO4GO5CO4EGEQ.C"V2$( 8)="T0O1Q.G O2IDDD O1Q.G O2IDDD O2Q.C IGGG O2Q.C"RETURN.GERMAN¯SONG'-----------V1$( 0)="O6M5T2 W.C HO5G W.#F HD WF HB O6D W.C HR"V2$( 0)="O5M5T2 W.C HO4G W.#F HD WF HB O5D W.C HR"V3$(0)=""V1$( 1)="T6M0IO1#AO2CO1CC #AO2#CO1#C#C O2CEO1CC O2EFO1FF"V2$( 1)="T6M0IO1#AO2CO2CC #AO2#CO2#C#C O2CE1O2CC O2EFO2FF"V3$( 1)="M0T3Q O2CR O4GR O2CR O4GR"V1$(1)=V1$(1)+V1$(1)V2$(1)=V2$(1)+V2$(1)V3$(1)=V3$(1)+V3$(1)V1$(1)=V1$(1)+V1$(1)V2$(1)=V2$(1)+V2$(1)V3$(1)=V3$(1)+V3$(1)V1$( 2)="TO6 QRCCC CCC SC#DD#D O5WBR QR #G#G#G FF B O6SC#DD#D WCR"V2$( 2)="T6M0O1ICCRRCCRRCCRRCCRR GGRRGGRRGGRRGGRR FFRRFFRRFFRRFFRR CCRRCCRRCCRRCCRR"V3$( 2)="T3Q O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR"V1$( 3)="TO6 QRGGG GGG SG#AA#A W#FR QRFFF SF#DFG #DD#DF DCD#D CO5#GG#G WCR"V2$( 3)="T6M0O1ICCRRCCRRCCRRCCRR #F#FRR#F#FRR#F#FRR#F#FRR FFRRFFRRFFRRFFRR CCRRCCRRCCRRCCRR"V3$( 3)="T3Q O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR O2CR O4GR"V1$(4) = V1$(1)V2$(4) = V2$(1)V3$(4) = V3$(1)V1$(5) = V1$(0)V2$(5) = V2$(3)V3$(5) = V3$(3)RETURN.VIET¯SONG'---------V1$(0)="T2O5 O5QGP6 IAG IDFQD"V2$(0)=""V1$(1)="O5P6M1 WG QR FSFGIF QE IESFEIE O4P9GP6Q#AHI#AR"V1$(1)=V1$(1)+"T2O5P6M1 QRP0SCP6DCD P0CP6ID SR IDP3#F P6 O4Q.G O5P8IF P6QO4SP9#AA#A#B P6Q#A"V2$(1)="T1O2WGG C O2WCC"V3$(1)="T1O3WDD O2G O2WGG"V1$(2)="T2O5QRSCI.D SCI.D SP9CDFG P8O4H.GQR O5QGIAG IDFQD"V1$(2)=V1$(2)+"P6T2O5 Q.GSAG QF O4.#AIR O5SP0DP3#DD#D O4P8IG#AO5CD"V2$(2)="O2WCGF O2WGO1#A"V3$(2)="O2WGO3DC O3WDO2F"V1$(3)="T2O4 Q.G SP5GA IFP2G QF R P6FAO5C O4Q.A IG SP2FEFE P6QG R IGA SP3FEFE QD WG"V1$(3)=V1$(3)+"T2O5 P0QGP6IAG DFQD .GSAG QAQ.A IRQ #A#A SO6P8CO5#AO6CD"V2$(3)="O2WGF DCG O2WF GF"V3$(3)="O3WDC O2AGO3D O3WC DC"V1$(4)="T2O5 Q.GSAG QFQ.F IR QA IAO6C CD O5P8Q.DIC QD HA IAO6CCD O5P0DP6F WG"V2$(4)="O2W#DFD#DG"V3$(4)="O2W#AO3CO2A#AO3D"V1$(5)="T2O5P6QFIFG SFGFG O4IP0#AO5P8D O4Q.GSAG QF.GIR O5QDIDFQD.DICO4S#AG#AGO5SCP3#CC#CQC"V1$(5)=V1$(5)+"T2O5P6HQCO4#AO5 SCO4#AO5CD O4Q.GSAG QF.FIR QAIA QO5CSCO4#AO5CDCO4#AO5CD O4H.G"V2$(5)="O2WFG#A#AO3C O2WG F G"V3$(5)="O3WCDFFO3G O3WD C D"RETURN.TURK¯SONG'---------V1$( 0)="O5T6 IP0FP3EP0FP3GP0FP3GP0EP3F P0SDP3#DD#D P0IDC DP3S#DR QP0DR"V2$( 0)="O2T5 P0O2QCRGR O1GR GGR"V3$( 0)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4 QGG SGRGR"V1$(0)=V1$(0)+V1$(0)V2$(0)=V2$(0)+V2$(0)V3$(0)=V3$(0)+V3$(0)V1$( 1)="O5T6 IP0CP3O4#A P0O5QC SDP3#P0DP3D#D QC R IO4P0GP3A#AO5C SO4P0#AO5P3CO4P0#AO5P3C O4QA"V2$( 1)="O2T5 QCRGR O1GRGGR"V3$( 1)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$(1)=V1$(1)+V1$(1)V2$(1)=V2$(1)+V2$(1)V3$(1)=V3$(1)+V3$(1)V1$( 2)="O5T6QRIP0CO4P3#AO5CO4#AO5QCRIP0O4GP3AO4P0#AO5P3C SO4P0#AO5P3CO4P0#AO5P3C QO4P0A"V2$( 2)="O2T5 QCRGR O1GRGGR"V3$( 2)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$(2)=V1$(2)+V1$(2)V2$(2)=V2$(2)+V2$(2)V3$(2)=V3$(2)+V3$(2)V1$( 3)="O5T6 IRP0#DDP4C O4P0#AO5P3CP0QD R IP0O4GP3A O4P0#AO5P3C SO4P0#AO5P3CO4P0#AO5P3C QO4A"V2$( 3)="O2T5 QCRGR O1GRGGR"V3$( 3)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$(3)=V1$(3)+V1$(3)V2$(3)=V2$(3)+V2$(3)V3$(3)=V3$(3)+V3$(3)V1$( 4)="O4T6 Q.A IG QGG WG QR"V2$( 4)="O2T5 QCRGR O1GRO2DDD"V3$( 4)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$( 5)="O5T7 P7 QRR GG P0SFIP3.GP0QG SFIP3.GP0QGG"V2$( 5)="O1T5 QGRO2DR O1GRO2DRD"V3$( 5)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$( 6)="O5T7QP0FIEP3FP0SDP3#DP0DP3#DP0QCICO4P3#AP0O5QC SO4#AP3O5CP0O4#AP3O5C QO4AR"V2$( 6)="O1T5 QFRO2CR CRGRG"V3$( 6)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$(5)=V1$(5)+V1$(6)V2$(5)=V2$(5)+V2$(6)V3$(5)=V3$(5)+V3$(6)V1$( 7)="O5T7P0 I#A#AQ#A SP0AP3I.#A SP0AP3I.#A QAA HG QR"V2$( 7)="O1T5 P0QFRO2CR O1GRO2DRD"V3$( 7)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$(7)=V1$(7)+V1$(6)V2$(7)=V2$(7)+V2$(6)V3$(7)=V3$(7)+V3$(6)V1$( 8)="O4T7 IP0#AP3O5QC ICQCC P0O4I#AP3A P0#AO5P3C O4P0AP3#A P0GP3A QP0F"V2$( 8)="O2T5 QCRGR O1GRO2DRD"V3$( 8)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$( 9)="O4T7QRIP0#AP3AP0#AO5P3C P0O4QA SA#AA#A QGHGQR"V2$( 9)="O1T5 QFRO2CR O1GRO2DRD"V3$( 9)="O2T3 O2QC SCRCR O4QG SGRGR O2QC SCRCR O4QGG SGRGR"V1$(8)=V1$(8)+V1$(9)V2$(8)=V2$(8)+V2$(9)V3$(8)=V3$(8)+V3$(9)RETURN