Source:BaseFix
Jump to navigation
Jump to search
| This page is a verbatim reproduction of original source material and should not be edited except for maintenance. | |
| Description |
The Applesoft BASIC source code of the Eamon utility program BaseFix. |
|---|---|
| Source | |
| Date |
November 1981 |
| Author | |
| License |
The use of this item is permitted on the grounds that it's free or in the public domain. |
2 REM ALTERS BASE DUNGEON PGM 4 REM FOR GREATER SPEED, 6 REM BETTER OUTPUT FORMAT, 8 REM AND MORE CONSISTANT LOGIC. 10 REM 12 REM BY ROBERT PLAMONDON, 14 REM NOVEMBER, 1981 16 REM 18 REM TO USE, LOAD BASE PROGRAM 20 REM FOR AN ADVENTURE, 22 REM THE TYPE 'EXEC BASEMOD' 24 REM 26 REM THEN RESAVE THE BASE 28 REM PROGRAM. 30 REM 32 HOME : VTAB 3: HTAB 17: INVERSE : PRINT "BASEFIX": NORMAL : VTAB 6 34 PRINT " THIS PROGRAM ALTERS THE BASE DUNGEON": PRINT "PROGRAM FOR EAMON ADVENTURES." 36 PRINT " IT SPEEDS UP THE MAIN LOOP, ADDS": PRINT "AN ERROR-RECOVERY ROUTINE, CLEANS UP": PRINT "THE FORMAT, AND ELIMINATES A NUMBER OF": PRINT "MINOR BUGS IN THE BASE DUNGEON PROGRAM." 38 PRINT : PRINT " WHEN THIS PROGRAM IS RUN, IT MAKES": PRINT "A TEXT FILE NAMED ";: INVERSE : PRINT "BASEMOD";: NORMAL : PRINT ", WHICH IS" 40 PRINT "USED AS AN EXEC FILE TO ALTER THE BASE": PRINT "PROGRAM. THE PROCEDURE IS AS FOLLOWS:" 41 PRINT : INVERSE : PRINT "DO NOT USE THIS PROGRAM ON THE TEMPLE": PRINT "OF NGURCT OR THE BEGINNERS CAVE.": NORMAL 42 PRINT : PRINT TAB( 7);"(HIT ANY KEY TO CONTINUE)";: GET A$: HOME 44 PRINT : PRINT "1. LOAD THE BASE PROGRAM FOR THE": PRINT " ADVENTURE YOU WANT TO UPDATE." 46 PRINT : PRINT "2. LOOK AT LINES 130-210 FOR SPECIAL": PRINT " FEATURES, SUCH AS TELEPORTATION": PRINT " OR DEMON SUMMONING. THESE FEATURES" 48 PRINT " WILL PROBABLY BE FOULED UP BY THIS": PRINT " PROGRAM, SO YOU'LL HAVE TO PATCH": PRINT " THINGS UP LATER TO GET THE FEATURES": PRINT " BACK." 50 PRINT : PRINT "3. IF DEAD BODIES DO NOT APPEAR WHEN": PRINT " CREATURES DIE, DELETE LINE 7704." 52 PRINT : PRINT "4. MAKE SURE THERE ISN'T ANYTHING IN": PRINT " LINES 59000-60000, SINCE THAT'S": PRINT " WHERE WE'RE PUTTING THE ERROR-": PRINT " HANDLING ROUTINES." 54 PRINT : PRINT TAB( 7);"(HIT ANY KEY TO CONTINUE)";: GET A$: HOME 56 PRINT : PRINT "5. WITH THE BASE PROGRAM STILL IN MEM-": PRINT " ORY, PUT IN THE DISK WITH BASEMOD,": PRINT " AND TYPE, 'EXEC BASEMOD.' THIS": PRINT " WILL ADD THE LINES BETWEEN 100" 58 PRINT " AND 59999 IN THIS PROGRAM TO THE": PRINT " BASE PROGRAM IN MEMORY." 60 PRINT : PRINT "6. UNLOCK THE OLD BASE PROGRAM, AND": PRINT " RENAME IT 'OLD BASE,' OR SOMETHING." 62 PRINT : PRINT "7. SAVE THE ALTERED PROGRAM, USING": PRINT " THE ORIGINAL NAME OF THE BASE PRO-": PRINT " GRAM (USUALLY MAIN PGM OR MAIN PRG)." 64 PRINT : PRINT "8. DEBUG. MOST EAMON ADVENTURES WILL": PRINT " RUN FINE WITHOUT FURTHER ALTER-": PRINT " ATION, BUT SOME WON'T." 66 PRINT : PRINT "TYPE Q TO QUIT, OR HIT ANY OTHER KEY": PRINT "TO CREATE BASEMOD (THE EXEC FILE)"; 68 GET A$: IF A$ = "Q" THEN END 70 PRINT 72 GOTO 60000 74 END 105 SPEED= 255 130 IF V%(ROOM) THEN PRINT "YOU ARE": PRINT " ";RN$(ROOM): GOTO 150 140 PRINT DK$;"READ EAMON.DESC,R";ROOM: INPUT A$: PRINT DK$: PRINT A$: PRINT :V%(ROOM) = 1 150 FOR M = 1 TO NM: IF MD%(M,5) < > ROOM THEN NEXT : GOTO 170 155 IF MD%(M,15) THEN PRINT " >> ";MN$(M);" IS HERE.": NEXT : GOTO 170 160 PRINT DK$;"READ EAMON.DESC,R";M + 300: INPUT A$: PRINT DK$:MD%(M,15) = 1: IF A$ < > "" THEN PRINT A$: PRINT : NEXT 170 FOR A = 1 TO NZ: IF AD%(A,4) < > ROOM THEN NEXT : GOTO 190 175 IF AD%(A,9) THEN PRINT " -- YOU SEE ";AN$(A): NEXT : GOTO 190 180 PRINT DK$;"READ EAMON.DESC,R";A + 100: INPUT A$: PRINT DK$: PRINT A$:AD%(A,9) = 1: PRINT : NEXT 190 FOR A = A TO NA: IF AD%(A,4) = ROOM THEN PRINT " -> YOUR ";AN$(A);" IS HERE." 210 INVERSE : PRINT "YOUR COMMAND?";: NORMAL : INPUT " ";A$ 285 SPEED= 200 330 M2 = MD%(M,14) - (MD%(M,14) = 2):MR = 100 * FD%(M2) / TD%(M2) + INT (41 * RND (1) - 20) - 20 * (MD%(M,9) = - 1) 340 IF MD%(M,4) < MR THEN INVERSE : PRINT MN$(M);" FLEES OUT AN EXIT.": NORMAL : GOSUB 8500:MD%(M,5) = R2:M2 = MD%(M,14):TD%(M2) = TD%(M2) - MD%(M,1):FD%(MD) = FD%(M2) - MD%(M,13): GOTO 490 1057 PRINT DK$;"NOMONC,I,O" 1058 POKE 33,40 1200 DIM ED%(NR,6) 1210 FOR X = 1 TO NR: PRINT DK$;"READ EAMON.ROOMS,R";X: FOR Y = 1 TO 6: INPUT ED%(X,Y): NEXT Y,X 1230 DIM RN$(NR) 1250 FOR X = 1 TO NR: PRINT DK$;"READ EAMON.ROOM NAMES,R";X: INPUT RN$(X): NEXT 1300 DEF FN R(X) = INT ( RND (1) * 100 + 1) 1350 ONERR GOTO 59000 2005 SPEED= 255 3030 R2 = ED%(ROOM,D) 7525 INVERSE : PRINT "A FUMBLE!": NORMAL :FR = FN R(X) 7527 IF FR < 35 + 40 * ( NOT MD%(OF,9)) THEN PRINT " FUMBLE RECOVERED.": PRINT : RETURN 7532 IF MD%(OF,9) = 0 GOTO 7550 7535 IF FR > 95 THEN 7550 7536 REM //WEAPONS WITH HIGH COMPLEXITY BREAK LESS OFTEN: 7537 IF AD%(MD%(OF,9),5) * 3 < FN R(X) THEN PRINT " FUMBLE RECOVERED.": PRINT : RETURN 7610 INVERSE : PRINT "A CRITICAL HIT!": NORMAL :R2 = FN R(X): IF R2 < 51 THEN A = 0: GOTO 7635 7655 PRINT " IS IN GOOD SHAPE.": RETURN 7660 PRINT " IS LIGHTLY INJURED.": RETURN 7665 PRINT " IS BADLY INJURED.": RETURN 7670 PRINT " IS VERY BADLY INJURED.": RETURN 7675 PRINT " IS AT DEATH'S DOOR,": PRINT " KNOCKING LOUDLY.": RETURN 7700 FLASH : PRINT MN$(DF);" IS DEAD!": NORMAL 7702 A = MD%(DF,14):FD%(A) = FD%(A) + MD%(DF,1) - MD%(DF,13) + D2:MD%(DF,5) = 0 7703 REM ///PUT DEAD BODY IN ROOM 7704 A2 = DF + NZ - NM:AD%(A2,4) = ROOM 7705 REM //DROP WEAPONS,DISARM,REDUCE COURAGE (IN CASE MONSTER GETS RESURRECTED) 7706 IF MD%(DF,9) > 0 THEN AD%(MD%(DF,9),4) = ROOM:MD%(DF,10) = MD%(DF,10) - AD%(MD%(DF,9),5):MD%(DF,9) = - 1:MD%(DF,4) = MD%(DF,4) / 2 8500 K1 = 0: FOR D = 1 TO 6:K = ED%(ROOM,D):DR$ = DR$ + STR$ (K): IF K > 0 THEN K1 = K1 + 1:DR%(K1) = K 8510 NEXT :RR = RND (1) * K1 + 1:R2 = DR%(RR) 11500 SUC = 0: IF SA%(S) THEN RL = FN R(X):SUC = (((RL < S2%(S)) OR (RL < 6)) AND (RL < 96)) 11510 IF SUC THEN 11520 11512 IF FN R(X) = 1 THEN GOSUB 11600: RETURN 11514 PRINT " NOTHING HAPPENS.": RETURN 59000 REM ////ERROR HANDLING ROUTINE 59001 POKE 768,104: POKE 769,168: POKE 770,104: POKE 771,166: POKE 772,223: POKE 773,154: POKE 774,72: POKE 775,152: POKE 776,72: POKE 777,96: CALL 768 59005 NORMAL 59010 CODE = PEEK (222):LN = PEEK (218) + 256 * PEEK (219) 59020 PRINT CHR$ (7);"**** ERROR #";CODE;" IN LINE ";LN 59030 IF NOT CODE THEN PRINT "(NEXT WITHOUT FOR)" 59050 IF CODE = 16 THEN PRINT "(SYNTAX)" 59060 IF CODE = 22 THEN PRINT "(RETURN WITHOUT GOSUB)" 59070 IF CODE = 42 THEN PRINT "(OUT OF DATA)" 59080 IF CODE = 53 THEN PRINT "ILLEGAL QUANTITY)" 59090 IF CODE = 77 THEN PRINT "(OUT OF MEMORY)" 59100 IF CODE = 90 THEN PRINT "(UNDEFINED STATEMENT)" 59110 IF CODE = 107 THEN PRINT "(BAD SUBSCRIPT)" 59120 IF CODE = 163 THEN PRINT "(TYPE MISMATCH)" 59130 IF CODE = 255 THEN PRINT "(CTRL-C INTERRUPT ATTEMPTED)": PRINT "TO STOP THIS PROGRAM, HIT 'RESET'" 59199 PRINT 59200 PRINT "*** ATTEMPTING TO RECOVER ***": PRINT : GOTO 100 59999 END 60000 D$ = CHR$ (4) 60002 HOME 60005 PRINT D$;"MONC,I,O" 60010 PRINT D$;"OPEN BASEMOD" 60012 PRINT D$;"DELETE BASEMOD" 60014 PRINT D$;"OPEN BASEMOD" 60020 PRINT D$;"WRITE BASEMOD" 60022 PRINT "MONCIO" 60030 POKE 33,33: LIST 100 - 59999: POKE 33,40 60040 PRINT D$;"CLOSE"