FORGET LEV2 FORGET DIE : LEV2 24427 PEEK ; VARIABLE LCAS VARIABLE MNWA VARIABLE WAPCT VARIABLE FAILNOT VARIABLE T2 VARIABLE NSQ VARIABLE N VARIABLE NC VARIABLE DIR VARIABLE TEMP1 VARIABLE MINDEX VARIABLE D2 VARIABLE MNSZ VARIABLE DLSZ VARIABLE WIDX VARIABLE FCAS VARIABLE SCAS : WRTSIZ 48896 + POKE ; : RDTSIZ 48896 + PEEK ; : CHKBOUND -> XREG 16475 CALL 16499 CALL PREG N1 AND NOT ; : GETABS 110 - + ; : LNKCHK DRM2 DUP 48 > ; : WRLNK0 N2 * 2816 + POKEW ; : DIE RND SWAP MOD ; : CHKE CHKBOUND OVER RDMAP2 ; : NOR OR NOT ; : CHKSIZE ZR N4 ZR DO MINDEX I CHKE NOR IF DROP ADD1 ELSE DROP THEN LOOP ; : FNDLNK RDLNK0 SWAP N1 DO DRM2 GETABS LOOP ; : RLOC 800 DIE ADD1 ; : DLOC1 TEMP1 SUB1 DIE ADD1 DUP RDTSIZ SUB1 DIE N2 + SWAP FNDLNK N4 DIE -> T1 ; : DLOC DLOC1 BEGIN T1 CHKBOUND IF DROP DLOC1 ZR ELSE DRM2 NOT THEN UNTIL ; : RDLOC N2 DIE IF RLOC ELSE DLOC THEN ; : TLOC DUP -> TEMP1 N1 = IF RLOC ELSE LCAS CASE: RLOC RDLOC DLOC THEN THEN ; : CSAMET DUP T2 = SWAP NOT OR ; : CHKT DUP DIR CHKBOUND OVER -> TEMP1 IF DROP0 ELSE DRM2 LNDCHK IF DROP TRACE FCAS CASE: NOT CSAMET THEN ELSE DROP0 THEN THEN ; : REFLECT DIR N2 + N4 MOD ; : RSHP N4 DIE ; : XSHP D2 DIR DUP -> D2 OVER <> IF ADD1 N4 MOD THEN ; : TSHP SCAS CASE: RSHP XSHP THEN ; : CYC0 ADD1 SWAP MOD -> ; : FINDD CHKE OR DUP ZR > ; : FWSQ CHKBOUND OVER RDMAP2 ZR <> OR DUP ; : FIND ZR -> NC BEGIN MINDEX DIR FCAS CASE: FINDD FWSQ THEN NC INC NC NC N4 < AND WHILE N4 DIR CYC0 DIR DROP DROP REPEAT IF DROP N1 ELSE ZR THEN ; : BCON 14 , 13 , 11 , 7 , ; : GETB ' BCON + PEEK ; : DELB GETB OVER RDMAP1 AND SWAP WRMAP1 ; : NEWSQ MINDEX DIR DELB REFLECT DUP -> DIR GETB OVER WRMAP1 3 ZR DO N4 DIR CYC0 DIR CHKT IF DUP DIR DELB TEMP1 REFLECT DELB THEN LOOP DUP MINDEX - 110 + MINDEX WRMAP2 DUP -> MINDEX N INC N ; : DISPLAYT RDLNK0 BEGIN DSPPOS DUP RDMAP1 DUP ZR = IF DROP N16 THEN PUTBLK LNKCHK WHILE GETABS REPEAT DROP DROP ; : DELT -> T1 CLRSTK T1 RDLNK0 BEGIN N16 OVER WRMAP1 LNKCHK WHILE ZR PICK3 WRMAP2 GETABS REPEAT ; VARIABLE NTRY : CLRMAPS 801 N1 DO 16 I WRMAP1 0 I WRMAP2 LOOP ; : MAPGEN HOME CLRMAPS 4 DIE -> D2 4 D2 CYC0 DIR ZR -> FCAS NT ADD1 N1 DO DLSZ DIE MNSZ + -> NSQ ZR I WRRES ZR -> NTRY BEGIN N1 -> FAILNOT BEGIN BEGIN I TLOC DUP -> MINDEX RDMAP2 NOT MINDEX N40 > AND MINDEX 761 < AND MINDEX MOD40 N1 > AND UNTIL CHKSIZE UNTIL MINDEX I WRLNK0 15 MINDEX WRMAP1 N1 -> N BEGIN TSHP -> DIR FIND IF ZR -> FAILNOT I DELT CLRSTK NSQ -> N ELSE NEWSQ THEN N NSQ = UNTIL FAILNOT IF I DISPLAYT I MINDEX WRMAP2 NSQ I WRTSIZ ELSE NTRY INC NTRY NTRY N4 = IF ZR -> NTRY NSQ SUB1 DUP MNSZ 10 MIN >= IF -> NSQ THEN THEN THEN CLRSTK FAILNOT UNTIL LOOP 20 VTAB ; VARIABLE WBOUN : BNORM ZR 16395 CALL N1 -> XREG ZR -> AREG 16411 CALL 800 16403 CALL ; : SETBN WBOUN 30 = IF BNORM ELSE N40 16395 CALL ZR -> XREG N1 -> AREG 16411 CALL 760 16403 CALL THEN ; : CHKADJ MINDEX SWAP CHKBOUND NOT IF DRM2 LNDCHK IF DROP TRACE ELSE DROP0 THEN ELSE DROP0 THEN ; : CVRT DUP SUB1 MOD40 19 <= DUP -> T1 IF N40 / ADD1 N40 * ELSE SUB1 THEN -> MINDEX BEGIN BEGIN MINDEX T1 IF SUB1 DUP -> MINDEX MOD40 NOT IF MINDEX 80 + -> MINDEX THEN ELSE INC MINDEX THEN MINDEX RDMAP2 WIDX = UNTIL T1 IF 3 CHKADJ ELSE N1 CHKADJ NOT THEN NOT MINDEX DUP N1 N4 PICK CASE: - + THEN DUP -> MINDEX DUP TRACE -> T2 RDMAP2 DUP 49 171 CNM IF DROP N1 N4 PICK CASE: - + THEN THEN OVER WRMAP2 OVER IF 3 ELSE N1 THEN -> DIR ZR MINDEX WRMAP2 NEWSQ T2 DISPLAYT DROP DROP NSQ SUB1 DUP -> NSQ NOT UNTIL ; : WSTK 5333 TEMP1 + ; : NEWDIR MINDEX WSTK PEEKW DUP -> MINDEX - DUP -40 = IF N2 ELSE DUP N1 = IF 3 ELSE DUP N40 = IF ZR ELSE N1 THEN THEN THEN -> DIR DROP ; : NEWWSQ DSPPOS DUP N1 AND 34 + PUTBLK DUP -> MINDEX ZR OVER WRMAP1 WIDX OVER WRMAP2 WSTK POKEW TEMP1 N2 + -> TEMP1 NSQ INC NSQ ; : PROCWA 172 -> WIDX N1 -> FCAS 801 N1 DO I RDMAP1 N16 = IF WIDX INC WIDX N2 -> DIR ZR -> TEMP1 ZR -> NSQ I NEWWSQ BEGIN DIR 3 + N4 MOD -> DIR FIND NOT IF NEWWSQ ZR ELSE TEMP1 N2 - DUP -> TEMP1 ZR >= IF NEWDIR ZR ELSE N1 THEN THEN UNTIL NSQ MNWA < IF I CVRT WIDX SUB1 -> WIDX THEN THEN LOOP ; : LOAD READ " MAPGEN2 " ; CLOSE RUN