10REM******************************* 20REM* EXILE saved game editor * 30REM* Written Sept. 1990 * 40REM* By James 'Rince' Bonfield * 50REM******************************* 60ON ERROR PROCerror:END 70load=&5C00 80MODE 7 90PROCass 100PROCinit 110ON ERROR PROCerror:GOTO 120 120REPEAT 130PROCdisplay_menu 140REPEAT S$=GET$ 150UNTIL INSTR("ABCDEFGHI",S$) 160ON ASC(S$)-64 GOTO 180,200,220,240,260,280,300,320,340 170UNTIL FALSE 180PROCitems 190UNTIL FALSE 200PROCenergy_got 210UNTIL FALSE 220PROCenergy_usage 230UNTIL FALSE 240PROCpockets 250UNTIL FALSE 260PROCkeys 270UNTIL FALSE 280PROCteleport 290UNTIL FALSE 300PROCmisc 310UNTIL FALSE 320PROCload 330UNTIL FALSE 340PROCsave 350UNTIL FALSE 360DEFPROCinit 370DIM OB%(15),OB$(15) 380FOR A%=0 TO 15 390READ OB$(A%),OB%(A%) 400NEXT 410ENDPROC 420DATA "Strange Weapon",&47 430DATA "Live grenade",&12 440DATA "Normal grenade",&50 450DATA "Coronium rocks",&55 460DATA "Coronium crystal",&58 470DATA "Boulder",&45 480DATA "Destinator",&4A 490DATA "Empty glass",&4C 500DATA "Full glass",&4D 510DATA "Key RCD",&4E 520DATA "Cannon RCD",&4F 530DATA "Jetpack booster",&16 540DATA "Whistle 1 (Y)",&1E 550DATA "Whistle 2 (U)",&1F 560DATA "Mushroom imm. pill",&1D 570DATA "Radiation imm. pill",&20 580DEFPROCtitle(TEXT$,BC%,FC%) 590CLS 600FOR T%=0 TO 1:PRINT CHR$BC%;CHR$157;CHR$FC%;CHR$141; 610PRINT SPC(16-LEN(TEXT$)/2);TEXT$ 620NEXT 630PRINT'' 640ENDPROC 650DEFFNinput(TEXT$) 660PRINT CHR$129;TEXT$;CHR$134; 670INPUT ""TEXT$ 680IF TEXT$="" THEN TEXT$="0" 690=TEXT$ 700DEFPROCerror 710IF ERR=17 THEN ENDPROC 720PROCtitle("ERROR**ERROR**ERROR**ERROR**ERROR",131,133) 730PRINT '''CHR$134;"Error!!! :-" 740PRINT '' 750REPORT:PRINT " at line ";ERL 760PRINT TAB(0,23);CHR$129;CHR$157;CHR$134;" PRESS SPACE TO CONTINUE"; 770REPEAT UNTIL GET=32 780ENDPROC 790DEFPROCdisplay_menu 800PROCtitle("EXILE EDITOR",129,134) 810RESTORE870 820FOR A%=0 TO 8 830 READ A$:PRINT TAB(2,A%+5)CHR$132;CHR$(65+A%);".";CHR$131;A$ 840NEXT 850PRINT ''CHR$134;"Please select:"; 860ENDPROC 870DATA "WEAPONS/ARMOUR HELD" 880DATA "ENERGY FOR HELD ITEMS" 890DATA "ENERGY USAGE FOR ITEMS" 900DATA "CONTENTS OF POCKETS" 910DATA "KEYS HELD" 920DATA "TELEPORT LOCATIONS" 930DATA "MISC. ITEMS FOUND" 940DATA "LOAD POSITION" 950DATA "SAVE POSITION" 960DEFPROCload 970PROCtitle("LOAD POSITION",132,131) 980F$=FNinput("Please enter filename :") 990OSCLI"LOAD "+F$+" "+STR$~load 1000CALL decode 1010ENDPROC 1020DEFPROCsave 1030PROCtitle("SAVE POSITION",132,131) 1040F$=FNinput("Please enter filename :") 1050CALL encode 1060OSCLI"SAVE "+F$+" "+STR$~load+"+400 0" 1070CALL decode 1080ENDPROC 1090DEFPROCass 1100FOR PASS=0 TO 2 STEP 2:P%=&900 1110[OPT PASS 1120.decode 1130LDA #&0:STA eor1+1 1140LDA #load DIV &100:STA eor1+2 1150STA eor2+2:STA eor3+2 1160LDX #&83 1170LDY #&FC 1180LDA #&00 1190.eor1 EOR load 1200INC eor1+1 1210BNE loop1 1220INC eor1+2 1230.loop1 INX 1240BNE eor1 1250INY 1260BNE eor1 1270STA pos1+1 1280SEC:SED 1290LDA #&82 1300STA &72 1310LDA #&FC 1320STA &73 1330LDY #&00 1340LDA #&6E 1350STA &71 1360LDA #&92 1370.loop3 ADC &71 1380ADC #&15 1390STA &71 1400.eor2 EOR load,Y 1410.eor3 STA load,Y 1420EOR &71 1430INY 1440BNE loop2 1450INC eor2+2 1460INC eor3+2 1470.loop2 INC &72 1480BNE loop3 1490INC &73 1500BNE loop3 1510CLD 1520.pos1 LDA #&64 1530EOR load+&37D 1540EOR #&9F 1550STA load+&35A 1560LDA #&43 1570STA load+&37D 1580RTS 1590.encode 1600SED:SEI 1610SEC 1620LDA #load DIV &100:STA pos2+2 1630LDA #load DIV &100+4:STA pos3+2 1640LDA #&6E 1650STA &7D 1660LDA #&92 1670LDX #&4 1680LDY #&0 1690.loop7 ADC &7D 1700ADC #&15 1710STA &7D 1720.pos2 LDA load,Y 1730PHA 1740EOR load+&35A 1750STA load+&35A 1760PLA 1770EOR &7D 1780PHA 1790EOR load+&37D 1800STA load+&37D 1810PLA 1820.pos3 STA load+&400,Y 1830INY 1840BNE loop7 1850INC pos2+2 1860INC pos3+2 1870DEX 1880BNE loop7 1890LDX #0 1900CLD 1910.loop8 1920LDA load+&400,X:STA load,X 1930LDA load+&500,X:STA load+&100,X 1940LDA load+&600,X:STA load+&200,X 1950LDA load+&700,X:STA load+&300,X 1960INX:BNE loop8 1970CLI 1980RTS 1990] 2000NEXT 2010ENDPROC 2020DEFPROCitems 2030PROCtitle("WEAPONS/ARMOUR HELD",132,131) 2040RESTORE 2200 2050FOR A%=0 TO 4 2060READ A$ 2070PRINT TAB(2,A%+5);CHR$133;CHR$(A%+65);"."CHR$134;A$;SPC(25-POS); 2080IF A%?(load+&17)=&FF THEN PRINTCHR$132"GOT " ELSE PRINTCHR$129"NOT GOT" 2090NEXT 2100PRINT '' 2110PRINTCHR$132;"Press A to E to toggle" 2120PRINTCHR$132;"Press Q to quit" 2130REPEAT S$=GET$ 2140UNTIL INSTR("ABCDEQ",S$) 2150IF S$="Q" THEN ENDPROC 2160L%=ASC(S$)+load-42 2170IF ?L%=0 THEN ?L%=&FF ELSE ?L%=0 2180GOTO 2040 2190DATA "JETPACK" 2200DATA "PISTOL","ICER","BLASTER","PLASMA GUN","PROTECTION SUIT" 2210DEFPROCenergy_got 2220@%=&20309 2230PROCtitle("WEAPONS/ARMOUR ENERGY LEVELS",132,131) 2240PRINTTAB(5)CHR$131;"ITEM";TAB(26);"ENERGY" 2250RESTORE 2190 2260FOR A%=0 TO 5 2270READ A$ 2280PRINT TAB(2,A%+6);CHR$133;CHR$(A%+65);"."CHR$134;A$;SPC(25-POS); 2290PRINT CHR$132;(A%?(load+&5C)*256+A%?(load+&56))/2048;SPC(33-POS);"MJ"; 2300NEXT 2310PRINT '' 2320PRINTCHR$132;"Press A to F to enter new ammount" 2330PRINTCHR$132;"Press Q to quit" 2340REPEAT S$=GET$ 2350L%=ASC(S$)-65 2360UNTIL INSTR("ABCDEFQ",S$) 2370IF S$="Q" THEN ENDPROC 2380PRINT TAB(0,18); 2390A%=VAL(FNinput("Please enter new energy :"))*2048 2400PRINT TAB(0,18);STRING$(239," ") 2410L%?(load+&5C)=A% DIV &100:L%?(load+&56)=A% MOD &100 2420GOTO 2250 2430DEFPROCenergy_usage 2440@%=&20109 2450PROCtitle("ENERGY COMSUMPTION RATES",132,131) 2460PRINTTAB(5)CHR$131;"ITEM";TAB(23);"RATE" 2470RESTORE 2190 2480FOR A%=0 TO 4 2490READ A$ 2500PRINT TAB(2,A%+6);CHR$133;CHR$(A%+65);"."CHR$134;A$;SPC(22-POS); 2510PRINT CHR$132;A%?(load+&62)/2;SPC(29-POS);"KJ/"; 2520IF A%=0 OR A%=3 THEN PRINT "second" ELSE PRINT"bullet" 2530NEXT 2540PRINT '' 2550PRINTCHR$132;"Press A to E to enter new rate" 2560PRINTCHR$132;"Press Q to quit" 2570REPEAT S$=GET$ 2580L%=ASC(S$)-65 2590UNTIL INSTR("ABCDEQ",S$) 2600IF S$="Q" THEN ENDPROC 2610PRINT TAB(0,18); 2620A%=VAL(FNinput("Please enter rate :"))*2 2630PRINT TAB(0,18);STRING$(239," ") 2640L%?(load+&62)=A% MOD &100 2650GOTO2470 2660DEFPROCpockets 2670@%=9 2680PROCtitle("POCKET CONTENTS",132,131) 2690PRINT TAB(0,5)CHR$134;"No. of pockets used :";CHR$132;load?&4F 2700FOR A%=0 TO 3 2710IF A%="A" AND S$<="K" 3040load?(A%+&50)=OB%(ASCS$-65) 3050ENDPROC 3060DEFPROCkeys 3070PROCtitle("KEYS HELD",132,131) 3080PRINT CHR$134;"Current keys held :";CHR$133; 3090B%=0 3100FOR A%=0 TO 7 3110IF load?(A%+&E)=0 THEN 3150 3120IF B%<>0 THEN PRINT ","; 3130PRINT CHR$(A%+65); 3140B%=B%+1 3150NEXT 3160IF B%=0 THEN PRINT "NONE" 3170PRINT ''CHR$132;"Keys to choose from are"CHR$129"A"CHR$132"to"CHR$129"H" 3180PRINT'CHR$132;"Pressing a letter (A-H) toggles key" 3190PRINTCHR$132;"Press Q to quit" 3200REPEAT S$=GET$ 3210UNTIL INSTR("ABCDEFGHQ",S$) 3220IF S$="Q" THEN ENDPROC 3230L%=ASC(S$)-51 3240IF load?L%=0 THEN load?L%=&FF ELSE load?L%=0 3250GOTO3070 3260DEFPROCteleport 3270@%=&9 3280PROCtitle("TELEPORT LOCATIONS",132,131) 3290PRINT CHR$134;"No. of teleports remembered :"CHR$129;load?&2A 3300PRINT TAB(23,7);CHR$131;"X Y" 3310FOR A%=0 TO 3 3320IF A%