[TOC]
Program listings for those who already finished the tutorials but haven't had enough. The programs in the tutorial normally use one feature of the machine or the language. Here are samples to use them all together.
DIM PEG$(3)
PEG$(1)="54321"
PEG$(2)=""
PEG$(3)=""
STEP=1:N=LEN(PEG$(1))
GOSUB SHOW
@W:GET A:IF A<=0 T.W.:G.W
SOURCE=1:VIA=3:TARGET=2:GOSUB MOVE
FOR I=1 TO 100:W.:N.
END
@MOVE
IF N=0 THEN RETURN
PUSH N:PUSH SOURCE:PUSH VIA:PUSH TARGET
N=N-1:S=VIA:VIA=TARGET:TARGET=S:GOSUB MOVE
PULL TARGET:PULL VIA:PULL SOURCE:PULL N
GOSUB ANIM
PEG$(TARGET)=PEG$(TARGET)+RIGHT$(PEG$(SOURCE), 1)
PEG$(SOURCE)=LEFT$(PEG$(SOURCE), LEN(PEG$(SOURCE))-1)
STEP = STEP + 1
PUSH N:PUSH SOURCE:PUSH VIA:PUSH TARGET
N=N-1:S=SOURCE:SOURCE=VIA:VIA=S:GOSUB MOVE
PULL TARGET:PULL VIA:PULL SOURCE:PULL N
RETURN
@SHOW
FOR ADDR=0 TO 1439:READ B:POKE ADDR,B:N.
BACKGROUND=3
SPRDGN("A",0)=0 :SPRX("A",0)=90 :SPRY("A",0)=180
SPRDGN("B",0)=288:SPRX("B",0)=180:SPRY("B",0)=180
SPRDGN("C",0)=576:SPRX("C",0)=270:SPRY("C",0)=180
SPRDGN("A",1)=864:SPRX("A",1)=90 :SPRY("A",1)=156
SPRDGN("B",1)=864:SPRX("B",1)=180:SPRY("B",1)=156
SPRDGN("C",1)=864:SPRX("C",1)=270:SPRY("C",1)=156
SPRDGN("A",2)=864:SPRX("A",2)=90 :SPRY("A",2)=132
SPRDGN("B",2)=864:SPRX("B",2)=180:SPRY("B",2)=132
SPRDGN("C",2)=864:SPRX("C",2)=270:SPRY("C",2)=132
FOR I=1 TO N
SPRDGN(I,"L")=1152:SPRX(I,"L")=94-I*4:SPRY(I,"L")=174-(N-I)*8
SPRDGN(I,"C")=1152:SPRX(I,"C")=90 :SPRY(I,"C")=174-(N-I)*8
SPRDGN(I,"R")=1152:SPRX(I,"R")=86+I*4:SPRY(I,"R")=174-(N-I)*8
N.
R.
@ANIM
DISC=RIGHT$(PEG$(SOURCE), 1)
FOR Y=SPRY(DISC,"C")-1 TO 120 STEP -1.41
SPRY(DISC,"L")=Y:SPRY(DISC,"R")=Y:SPRY(DISC,"C")=Y
W.
N.
P=0
FOR X=SPRX(DISC,"C") TO TARGET*90 STEP TARGET-SOURCE
SPRX(DISC,"L")=X-4*(DISC-1):SPRX(DISC,"R")=X+4*(DISC-1):SPRX(DISC,"C")=X
Y=120-SIN(P)*48
SPRY(DISC,"L")=Y:SPRY(DISC,"R")=Y:SPRY(DISC,"C")=Y
P=P+PI/90
W.
N.
FOR Y=120 TO 174-LEN(PEG$(TARGET))*8 STEP 1.41
SPRY(DISC,"L")=Y:SPRY(DISC,"R")=Y:SPRY(DISC,"C")=Y
W.
N.
R.
DATA 0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,144,0,153,153,153,153,153,153,153,153,153,153,0,0,9,153,153,153,153,153,153,153,153,144,0,0,0,153,153,153,153,153,153,153,153,0,0,144,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,0,0,0,9,153,153,153,153,153,153,153,0,0,0,0,9,153,153,153,153,153,153,153,0,0,0,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,0,0,0,153,153,153,153,153,153,153,153,153,0,0,0,9,153,153,153,153,153,153,153,153,0,0,0,0,153,153,153,153,153,153,153,153,0,9,144,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,144,0,9,153,153,153,153,153,153,153,0,0,0,0,153,153,153,153,153,153,153,153,0,0,0,9,153,153,153,153,153,153,153,153,0,0,0,0,153,153,153,153,153,153,153,153,0,9,144,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,144,0,9,153,153,153,153,153,153,153,0,0,0,0,153,153,153,153,153,153,153,153,0,0,0,9,153,153,153,153,153,153,153,153,0,0,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,144,0,153,153,153,153,153,153,153,153,153,153,0,0,9,153,153,153,153,153,153,153,153,144,0,0,0,153,153,153,153,153,153,153,153,0,0,144,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,153,153,153,153,153,153,153,153,153,0,9,153,153,153,153,153,153,153,153,153,153,0,9,153,153,153,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,9,153,0,9,153,153,153,153,153,153,153,0,0,144,0,9,153,153,153,153,153,153,153,144,0,0,0,153,153,153,153,153,153,153,153,153,0,0,9,153,153,153,153,153,153,153,153,153,144,0,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,0,0,0,0,9,153,153,144,0,0,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Here is a version of Tutorial's Text Adventure fun project using graphical features. It works if you download and deploy the newest version of imeight emulator, not the version 1.0 deployed on Newgrounds. Use the legible font from [Routines].
FONTALNUM=0
BOREDOM=0:MONEY=0:GF=0
TILE(1,14)=DGNHEART()
PRINT "----------- TEXT ADVENTURE GAME -----------"
@HOME
PRINT "YOU ARE AT HOME. LIVING ALONE FEELS LONELY"
PRINT "SOMETIMES... BUT YOU CAN JUMP ON YOUR BED"
PRINT "IF YOU LIKE."
BOREDOM=BOREDOM+1
IF BOREDOM>10 THEN GOTO DEATH
IF BOREDOM<>3 THEN GOTO HOMEASK
PRINT "YOU STAND UP ON THE BED TO JUMP... YOU FEEL"
PRINT "SOMETHING PUSHING YOUR FOOT..."
PRINT "HEY! YOU FOUND A COIN BELOW THE BEDSHEET!"
MONEY=1
@HOMEASK
INPUT "STAY OR LEAVE?", MOVE$:GOSUB UPPER
IF MOVE$="STAY" THEN GOTO HOME
IF MOVE$="LEAVE" THEN GOTO STREET
GOTO HOMEASK
@DEATH
PRINT "LIFE IS SO BORING THAT YOU DIED. GRAY RATS"
PRINT "WHO JUST HAD BEEN LINGERING THERE"
PRINT "ARE LISTLESSLY EATING YOUR BODY."
TILE(1,14)=DGNDEATH()
INPUT "------------------- END -------------------",XX$
END
@STREET
PRINT "FRESH AIR! THE STREET IS CROWDED AS USUAL."
PRINT "YOU STAND JUST IN FRONT OF YOUR HOME"
IF BOREDOM>3 AND MONEY=0 THEN GOTO SELL
@STREETASK
INPUT "WHERE WOULD YOU GO? CENTER, OUTSKIRTS, HOME?", MOVE$:GOSUB UPPER
IF MOVE$="CENTER" THEN GOTO CENTER
IF LEFT$(MOVE$, 3)="OUT" THEN GOTO OUTSKIRTS
IF MOVE$="HOME" THEN GOTO HOME
GOTO STREETASK
@CENTER
PRINT "MALLS AND RESTAURANTS ALL AROUND."
PRINT "YOU FEEL LIKE SHOPPING!"
IF MONEY=0 THEN PRINT "WISH YOU HAD ANY MONEY :(":GOTO CENTERASK
IF GF=1 THEN GOTO FLOWERS
PRINT "YOU BOUGHT A GOLDEN PIGLET. IT'S A PERFECT"
PRINT "PRESENT... YOU JUST NEED SOMEBODY TO GIVE IT."
GOTO BOUGHT
@FLOWERS
PRINT "YOU BOUGHT SOME FLOWERS FOR YOUR GF."
PRINT "IT'S SO NICE TO HAVE HER."
INPUT "------------------- END -------------------", XX$
END
@BOUGHT
MONEY=0
@CENTERASK
INPUT "STAY OR STREET?", MOVE$:GOSUB UPPER
IF MOVE$="STAY" THEN GOTO CENTER
IF MOVE$="STREET" THEN GOTO STREET
GOTO CENTERASK
@OUTSKIRTS
IF GF=1 THEN GOTO OUTASK
PRINT "YOU REMEMBER A GIRL YOU USED TO KNOW FROM"
PRINT "SCHOOL. MAYBE IT'S BECAUSE SHE LIVED HERE. OR"
PRINT "MAYBE IT'S BECAUSE YOU ALWAYS THINK OF HER"
PRINT "EVER SINCE."
@OUTASK
PRINT "YOU STAND RIGHT AT THE GIRL'S DOOR."
INPUT "KNOCK OR STREET?", MOVE$:GOSUB UPPER
IF MOVE$="KNOCK" THEN GOTO KNOCK
IF MOVE$="STREET" THEN GOTO STREET
GOTO OUTASK
@KNOCK
IF GF=1 THEN GOTO LOVE
PRINT "'HEY, IS THAT REALLY YOU? I REMEMBER"
PRINT "THE SHY GUY FROM SCHOOL. HAHA!'"
PRINT "YOU TALK A LITTLE. SHE ASKS ABOUT YOUR LIFE."
IF MONEY=0 THEN GOTO DECLINE
GF=1
PRINT "SHE TELLS YOU THAT SHE LIKES FLOWERS."
PRINT "SHE FEELS ALONE. SHE LIKES TO JUMP ON HER BED."
PRINT "SHE SHOWS HOW."
@LOVE
PRINT "YOU STAY UNTIL THE MORNING COMES."
@DECLINE
PRINT "SHE ASKS YOU TO LEAVE AS SHE HAS"
PRINT "IMPORTANT THINGS TO DO."
GOTO OUTASK
@SELL
PRINT "A BAD LOOKING MAN IS APPROACHING."
PRINT "HE WANTS TO SELL YOU STOLEN WEAPONS."
PRINT "HE WOULD BUY THINGS OF VALUE, TOO."
PRINT "YOU THINK OF SELLING THE PIGLET."
INPUT "SELL OR LEAVE?", MOVE$:GOSUB UPPER
IF MOVE$="SELL" THEN MONEY=1:PRINT "YOU GET A COIN."
GOTO STREET
@UPPER
R$ = ""
FOR I=1 TO LEN(MOVE$)
R$ = R$ + CHR$(ASC(MID$(MOVE$, I, 1)) AND $5F)
N.
MOVE$ = R$
R.
No AI, just registering. It works if you download and deploy the newest version of imeight emulator, not the version 1.0 deployed on Newgrounds.
SMOOTHNESS=.1
CHEATMODE=1
SPC33=" "
DEF OWNPIECEAT(TOX, TOY, X, Y)=LEFT$(BOARD$(CHR$(TOX+64), TOY), 1)=LEFT$(BOARD$(CHR$(X+64), Y), 1)
DEF ISPIECEAT(TOX, TOY)=LEN(BOARD$(CHR$(TOX+64), TOY))<>0
DEF ONBOARD(TOX, TOY)=TOX>=1 AND TOX<=8 AND TOY>=1 AND TOY<=8
FOR L=0 TO 27:TEXTLINE$(L)="":N.
TEXTPRIO=33
TEXTLINE$(0)=" A B C D E F G H 00:00"
TILEX=-16
TILEY=-16
FOR RANK=1 TO 8
TEXTLINE$(26-3*RANK)=RANK+" "+RANK
FOR FILE=1 TO 8
TILE(RANK, FILE)=288*((RANK+FILE)MOD 2 + 14)
N.
N.
TEXTLINE$(25)=" A B C D E F G H 00:00"
TILE(8, 10)=288*14
SPRDGN("W")=DGNMAN():SPRX("W")=224:SPRY("W")=176
TILE(1, 10)=288*15
SPRDGN("B")=DGNMAN():SPRX("B")=224:SPRY("B")=8
DIM BOARD$(8,8)
DIM OFF$()
DIM PIECE$(16)
ENPASSANT=0
STEP=0
STARTED=0
DIM LEGALFROMFILE$(16)
DIM LEGALFROMY(16)
DIM LEGALTOFILE$(27)
DIM LEGALTOY(27)
DISPTIME=0
DIM PLAYERTIME(2)
PLAYERTIME(0)=0
PLAYERTIME(1)=0
FOR I=1 TO 8
PIECE$(I)="P"+I
C$=CHR$(64+I)
FOR J=1 TO 8
BOARD$(C$, J)=""
N.
BOARD$(C$, 2)="WP"+I
BOARD$(C$, 7)="BP"+I
SPRDGN("WP"+I)=2016
SPRDGN("BP"+I)=3744
'LEGALFROMFILE$(I-1)=C$:LEGALFROMY(I-1)=2
N.
BOARD$("A", 1)="WR1":BOARD$("H", 1)="WR2":BOARD$("A", 8)="BR1":BOARD$("H", 8)="BR2"
BOARD$("B", 1)="WN1":BOARD$("G", 1)="WN2":BOARD$("B", 8)="BN1":BOARD$("G", 8)="BN2"
BOARD$("C", 1)="WB1":BOARD$("F", 1)="WB2":BOARD$("C", 8)="BB1":BOARD$("F", 8)="BB2"
BOARD$("D", 1)="WQ":BOARD$("E", 1)="WK":BOARD$("D", 8)="BQ":BOARD$("E", 8)="BK"
SPRDGN("WR1")=1728:SPRDGN("WR2")=1728:SPRDGN("BR1")=3456:SPRDGN("BR2")=3456
PIECE$(9)="R1":PIECE$(10)="R2"
SPRDGN("WN1")=1440:SPRDGN("WN2")=1440:SPRDGN("BN1")=3168:SPRDGN("BN2")=3168
PIECE$(11)="N1":PIECE$(12)="N2"
SPRDGN("WB1")=1152:SPRDGN("WB2")=1152:SPRDGN("BB1")=2880:SPRDGN("BB2")=2880
PIECE$(13)="B1":PIECE$(14)="B2"
SPRDGN("WQ")=864:SPRDGN("WK")=576:SPRDGN("BQ")=2592:SPRDGN("BK")=2304
PIECE$(15)="K":PIECE$(16)="Q"
'LEGALFROMFILE$(8)="B":LEGALFROMY(8)=1
'LEGALFROMFILE$(9)="G":LEGALFROMY(9)=1
FOR I=1 TO 16
SPRX("W"+PIECE$(I))=92:SPRX("B"+PIECE$(I))=92
SPRY("W"+PIECE$(I))=92:SPRY("B"+PIECE$(I))=92
SPRPRIO("W"+PIECE$(I))=2:SPRPRIO("B"+PIECE$(I))=2
N.
FOR I=0 TO 27
SPRDGN(I)=4608
SPRPRIO(I)=1
N.
SETTLED=0
DRAGGED$=""
GRABX=-1
MX=92:MY=92
LASTBOARDX=MX:LASTBOARDY=MY
STEPTIME=TIME()
FOR MLC=0 TO 1 STEP 0
WAIT
'CLOCK
TMTODISP=INT((PLAYERTIME(STEP MOD 2)+TIME()-STEPTIME)/1000)
IF TMTODISP=DISPTIME T.G.CLOCKEND
DISPTIME=TMTODISP
SEC$=RIGHT$("0"+TMTODISP MOD 60, 2)
MIN$=RIGHT$("0"+INT(TMTODISP/60), 2)
ROCL=25-(STEP MOD 2)*25 'ROW OF CLOCK
TEXTLINE$(ROCL)=LEFT$(TEXTLINE$(ROCL), 27)+MIN$+":"+SEC$+MID$(TEXTLINE$(ROCL), 33, 16)
@CLOCKEND
IF SETTLED=1 T.G. ANIMEND
SETTLED=1
FOR I=1 TO 8:FOR J=1 TO 8
TARGETX=I*24-16
TARGETY=200-J*24
ANIMPC$=BOARD$(CHR$(I+64), J)
IF ANIMPC$=DRAGGED$ AND GRABX<>-1 THEN ANIMPC$=""
IF LEN(ANIMPC$)>0 THEN GOSUB ANIM
N.:N.
TARGETX=360
TARGETY=0
IF OFF$("length") = 0 T.G.OFFEND
FOR I=0 TO OFF$("length")-1
ANIMPC$=OFF$(I)
GOSUB ANIM
TARGETY=TARGETY+6
N.
@OFFEND
@ANIMEND
GET EVCODE
IF EVCODE=27 THEN END
MX=TOUCHX(1):MY=TOUCHY(1)
IF MX<8 OR MX>=199 THEN GOTO UPDATEEND
IF MY<8 OR MY>=199 THEN GOTO UPDATEEND
LASTBOARDX=MX:LASTBOARDY=MY
@UPDATEEND
X=INT(LASTBOARDX/24+.67)
FILE$=CHR$(X+64)
Y=INT((223-LASTBOARDY)/24)
IF TEXTLINE$(26)<>FILE$+Y THEN TEXTLINE$(26)=FILE$+Y
TOUCHED$=BOARD$(FILE$, Y)
IF EVCODE=1 AND LEN(TOUCHED$)>0 THEN GOSUB PRESS
IF EVCODE=-1 AND GRABX>-1 THEN GOSUB MOVE
IF GRABX<>-1 THEN GOSUB DRAG
'MARK MOVABLE PIECES
IF EVCODE=0 AND STARTED=1 T.G.MARKEND
STARTED=1
IF GRABX=-1 T.G. MARKFROM
'MARK LEGAL MOVE TARGETS
FOR I=0 TO 27
IF I>=LEGALTOFILE$("length") T.SPRX(I)=-24:N.:G.MARKEND
SPRX(I)=ASC(LEGALTOFILE$(I))*24-1552
SPRY(I)=200-LEGALTOY(I)*24
N.
@MARKFROM
FOR I=0 TO 15
IF I>=LEGALFROMY("length") T.SPRX(I)=-24:N.:G.MARKEND
SPRX(I)=ASC(LEGALFROMFILE$(I))*24-1552
SPRY(I)=200-LEGALFROMY(I)*24
N.
G.MARKEND
@MARKEND
NEXT MLC
@ANIM
IF (SPRX(ANIMPC$)-TARGETX)^2+(SPRY(ANIMPC$)-TARGETY)^2 < 2 T.G. SNAP
SETTLED=0
SPRX(ANIMPC$)=SPRX(ANIMPC$)+(TARGETX-SPRX(ANIMPC$))*SMOOTHNESS
SPRY(ANIMPC$)=SPRY(ANIMPC$)+(TARGETY-SPRY(ANIMPC$))*SMOOTHNESS
R.
@SNAP
SPRX(ANIMPC$)=TARGETX
SPRY(ANIMPC$)=TARGETY
R.
@PRESS
IF CHEATMODE=1 T.G.CHEAT
FOR I=0 TO 15
IF I>=LEGALFROMFILE$("length") T.I=16:N.:R. 'END OF SET, NO MATCHES
IF TOUCHED$<>BOARD$(LEGALFROMFILE$(I), LEGALFROMY(I)) T.N. 'CONTINUE SEARCHING
IF I>15 T.R. 'END OF LOOP WITHOUT ANY MATCH
I=16:N. 'FOUND
@CHEAT
DRAGGED$=TOUCHED$
FROMFILE$=FILE$
FROMX=X
FROMY=Y
SORT$=MID$(DRAGGED$, 2, 1)
PLAYER=LEFT$(DRAGGED$, 1)="B"
@CALCPIECELIBERTY
DIM LEGALTOFILE$(27) 'CLEAR
DIM LEGALTOY(27)
LIBERTY=0
IF SORT$="N" THEN GOTO KNIGHT
IF SORT$="B" THEN GOTO BISHOP
IF SORT$="R" THEN GOTO ROOK
IF SORT$="Q" THEN GOTO QUEEN
IF SORT$="K" THEN GOTO KING
GOTO PAWN
@KNIGHT
TOX=X-2:TOY=Y-1
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X-1:TOY=Y-2
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X-2:TOY=Y+1
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X-1:TOY=Y+2
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X+2:TOY=Y-1
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X+1:TOY=Y-2
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X+2:TOY=Y+1
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
TOX=X+1:TOY=Y+2
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
GOTO LEGALTOEND
@BISHOP
GOSUB DIAGONAL
GOTO LEGALTOEND
@QUEEN
GOSUB DIAGONAL
@ROOK
DX=1:DY=0:GOSUB EXTENDX
DX=-1:DY=0:GOSUB EXTENDX
DX=0:DY=1:GOSUB EXTENDY
DX=0:DY=-1:GOSUB EXTENDY
GOTO LEGALTOEND
@PAWN
TOX=X+1:TOY=Y+1-2*PLAYER
IF ONBOARD(TOX, TOY) T.GOSUB TESTENPASSANT
TOX=X-1
IF ONBOARD(TOX, TOY) T.GOSUB TESTENPASSANT
TOX=X
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
IF Y<>2+5*PLAYER T.G.LEGALTOEND
TOY=4+PLAYER
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
GOTO LEGALTOEND
@KING
FOR TOY=Y-1 TO Y+1
FOR TOX=X-1 TO X+1
IF ONBOARD(TOX, TOY) T.GOSUB TESTOWN
N.:N.
IF X<>5 T.G.LEGALTOEND
IF Y<>1+7*PLAYER T.G.LEGALTOEND
TOY=Y
TOX=7
IF ISPIECEAT(6, Y) T.G.TESTOOB
IF ISPIECEAT(7, Y) T.G.TESTOOB
GOSUB ADDLEGALTO
@TESTOOB
TOX=2
IF ISPIECEAT(2, Y) T.G.LEGALTOEND
IF ISPIECEAT(3, Y) T.G.LEGALTOEND
IF ISPIECEAT(4, Y) T.G.LEGALTOEND
GOSUB ADDLEGALTO
@LEGALTOEND
GRABX=LASTBOARDX-SPRX(TOUCHED$)
GRABY=LASTBOARDY-SPRY(TOUCHED$)
SPRPRIO(TOUCHED$)=3
R.
@DRAG
SPRX(DRAGGED$)=LASTBOARDX-GRABX
SPRY(DRAGGED$)=LASTBOARDY-GRABY
R.
@MOVE
IF SORT$<>"P" OR X<>ENPASSANT OR Y<>6-PLAYER*3 T.G.CAPTUREENPEND
OLD$=BOARD$(FILE$, 5-PLAYER)
BOARD$(FILE$, 5-PLAYER)=""
G.CAPTURE
@CAPTUREENPEND
OLD$=BOARD$(FILE$, Y)
IF OLD$=DRAGGED$ T.G.DROP:REM J'ADOUBE
ENPASSANT=(SORT$="P" AND ABS(Y-FROMY)=2)*X
IF SORT$<>"K" OR Y<>1+7*PLAYER OR FROMFILE$<>"E" T.G.CASTLEEND
IF FILE$="B" T. BOARD$("C", Y)=BOARD$("A", Y):BOARD$("A", Y)="":G.XEND
IF FILE$="G" T. BOARD$("F", Y)=BOARD$("H", Y):BOARD$("H", Y)="":G.XEND
@CASTLEEND
IF LEN(OLD$)=0 T.G.XEND
@CAPTURE
OFF$(OFF$("length"))=OLD$
SPRPRIO(OLD$)=OFF$("length")+1
@XEND
PLAYERTIME(STEP MOD 2)=PLAYERTIME(STEP MOD 2)+TIME()-STEPTIME
MSG=STEP+1+". "+FROMFILE$+FROMY+FILE$+Y
TEXTLINE$(STEP MOD 26)=LEFT$(TEXTLINE$(STEP MOD 26) + SPC33, 33)+MSG
STEP=STEP+1
BOARD$(FROMFILE$, FROMY)=""
BOARD$(FILE$, Y)=DRAGGED$
STEPTIME=TIME()
@DROP
SETTLED=0
GRABX=-1
R.
@TESTENPASSANT
IF TOX=ENPASSANT AND TOY=6-PLAYER*3 T.G.ADDLEGALTO
@TESTENEMY
IF ISPIECEAT(TOX, TOY)=0 T.R.
@TESTOWN
IF OWNPIECEAT(TOX, TOY, X, Y) T.R.
@ADDLEGALTO
LEGALTOFILE$(LIBERTY)=CHR$(TOX+64)
LEGALTOY(LIBERTY)=TOY
LIBERTY=LIBERTY+1
R.
@EXTENDX
EX=INT(4.5+3.5*DX)
IF X=EX T.R.
TOY=Y+DY
FOR TOX=X+DX TO EX STEP DX
IF ONBOARD(TOX, TOY)=0 T.TOX=EX+DX:N.:R.
GOSUB TESTOWN
IF ISPIECEAT(TOX, TOY) T.TOX=EX+DX
TOY=TOY+DY
N.:R.
@EXTENDY
EY=INT(4.5+3.5*DY)
IF Y=EY T.R.
TOX=X+DX
FOR TOY=Y+DY TO EY STEP DY
IF ONBOARD(TOX, TOY)=0 T.TOY=EY+DY:N.:R.
GOSUB TESTOWN
IF ISPIECEAT(TOX, TOY) T.TOY=EY+DY
TOX=TOX+DX
N.:R.
@DIAGONAL
DX=1:DY=1:GOSUB EXTENDX
DX=1:DY=-1:GOSUB EXTENDX
DX=-1:DY=1:GOSUB EXTENDX
DX=-1:DY=-1:GOSUB EXTENDX
R.
SCRIPT
NEW
A=0
@RD:READ V:IF V>=0 THEN POKE A,V:A=A+1:GOTO RD
END
REM SAMPLE CHARACTER 'COMRADE GREEN'
DATA 0,0,0,0,0,143,34,128,0,0,0,0,0,0,0,0,8,34,34,40,0,0,0,0,0,0,0
DATA 0,0,131,60,128,0,0,0,0,0,0,0,0,0,131,51,56,0,0,0,0,0,0,0,0,0,136,136
DATA 128,0,0,0,0,0,0,0,0,0,130,34,128,0,0,0,0,0,0,0,0,8,130,34,128,0,0,0
DATA 0,0,0,0,0,130,130,34,128,0,0,0,0,0,0,0,0,130,130,34,128,0,0,0,0,0,0
DATA 0,0,8,130,34,128,0,0,0,0,0,0,0,0,0,130,34,128,0,0,0,0,0,0,0,0,0,130
DATA 34,128,0,0,0,0,0,0,0,0,0,130,34,128,0,0,0,0,0,0,0,0,0,136,136,0,0,0
DATA 0,0,0,0,0,0,8,34,34,128,0,0,0,0,0,0,0,0,130,34,34,40,0,0,0,0,0,0,0
DATA 0,130,34,34,40,0,0,0,0,0,0,0,8,34,34,34,34,128,0,0,0,0,0,0,8,34,34
DATA 34,34,128,0,0,0,0,0,0,8,34,34,34,34,128,0,0,0,0,0,0,0,136,34,34,40
DATA 0,0,0,0,0,0,0,0,0,136,136,128,0,0,0,0,0,0,0,0,8,248,136,136,0,0,0,0
DATA 0,0,0,0,8,136,136,136,0,0,0,0,0,0,0,0,0,143,34,128,0,0,0,0,0,0,0,0
DATA 8,34,34,40,0,0,0,0,0,0,0,0,0,131,60,128,0,0,0,0,0,0,0,0,0,131,51,56
DATA 0,0,0,0,0,0,0,0,136,136,136,0,0,0,0,0,0,0,0,8,34,34,34,128,8,0,0,0
DATA 0,0,0,130,136,130,34,128,130,128,0,0,0,0,0,130,128,130,34,40,40,0,0
DATA 0,0,0,0,130,128,130,34,130,128,0,0,0,0,0,0,8,0,130,34,136,0,0,0,0,0
DATA 0,0,0,0,130,34,128,0,0,0,0,0,0,0,0,0,130,34,128,0,0,0,0,0,0,0,0,0,130
DATA 34,128,0,0,0,0,0,0,0,0,0,136,136,0,0,0,0,0,0,0,0,0,8,34,34,128,0,0
DATA 0,0,0,0,0,0,130,34,34,40,0,0,0,0,0,0,0,8,34,34,34,40,0,0,0,0,0,0,0
DATA 130,34,34,34,136,0,0,0,0,0,0,8,34,34,34,34,130,128,0,0,0,0,0,130,34
DATA 34,34,40,34,40,0,0,0,0,8,34,34,34,34,40,34,34,128,0,0,0,0,130,136,136
DATA 34,130,136,136,128,0,0,0,0,8,248,136,128,8,248,136,136,0,0,0,0,8,136
DATA 136,128,8,136,136,136,0,0,0,0,0,0,8,242,40,0,0,0,0,0,0,0,0,0,130,34
DATA 34,128,0,0,0,0,0,0,0,0,8,195,56,0,0,0,0,0,0,0,0,0,131,51,56,0,0,0,0
DATA 0,0,0,0,0,8,136,136,0,0,0,0,0,0,0,0,0,8,34,40,0,0,0,0,0,0,0,0,0,8,34
DATA 40,128,0,0,0,0,0,0,0,0,8,34,40,40,0,0,0,0,0,0,0,0,8,34,40,40,0,0,0
DATA 0,0,0,0,0,8,34,40,128,0,0,0,0,0,0,0,0,8,34,40,0,0,0,0,0,0,0,0,0,8,34
DATA 40,0,0,0,0,0,0,0,0,0,8,34,40,0,0,0,0,0,0,0,0,0,0,136,136,0,0,0,0,0
DATA 0,0,0,0,8,34,34,128,0,0,0,0,0,0,0,0,130,34,34,40,0,0,0,0,0,0,0,0,130
DATA 34,34,40,0,0,0,0,0,0,0,8,34,34,34,34,128,0,0,0,0,0,0,8,34,34,34,34
DATA 128,0,0,0,0,0,0,8,34,34,34,34,128,0,0,0,0,0,0,0,130,34,34,136,0,0,0
DATA 0,0,0,0,0,8,136,136,0,0,0,0,0,0,0,0,0,143,136,136,128,0,0,0,0,0,0,0
DATA 0,136,136,136,128,0,0,0,0,0,0,0,0,8,242,40,0,0,0,0,0,0,0,0,0,130,34
DATA 34,128,0,0,0,0,0,0,0,0,8,195,56,0,0,0,0,0,0,0,0,0,131,51,56,0,0,0,0
DATA 0,0,0,0,0,0,136,136,136,0,0,0,0,0,0,0,128,8,34,34,34,128,0,0,0,0,0
DATA 8,40,8,34,40,136,40,0,0,0,0,0,0,130,130,34,40,8,40,0,0,0,0,0,0,8,40
DATA 34,40,8,40,0,0,0,0,0,0,0,136,34,40,0,128,0,0,0,0,0,0,0,8,34,40,0,0
DATA 0,0,0,0,0,0,0,8,34,40,0,0,0,0,0,0,0,0,0,8,34,40,0,0,0,0,0,0,0,0,0,0
DATA 136,136,0,0,0,0,0,0,0,0,0,8,34,34,128,0,0,0,0,0,0,0,0,130,34,34,40
DATA 0,0,0,0,0,0,0,0,130,34,34,34,128,0,0,0,0,0,0,0,136,34,34,34,40,0,0
DATA 0,0,0,0,8,40,34,34,34,34,128,0,0,0,0,0,130,34,130,34,34,34,40,0,0,0
DATA 0,8,34,34,130,34,34,34,34,128,0,0,0,8,136,136,40,34,136,136,40,0,0
DATA 0,0,143,136,136,128,8,248,136,128,0,0,0,0,136,136,136,128,8,136,136
DATA 128
DATA -1
RUN
NEW
BACKGROUND=11
SPRDGN(1)=0
SPRX(1)=40
SPRY(1)=0
VX=0
VY=0
DGN=0
LANDED=0
DIM COLLISION(384, 216)
FOR X=0 TO 383
FOR Y=0 TO 215
COLLISION(X, Y)=0
N.:N.
'STEPS
FOR M=0 TO 5
SPRDGN(M+2)=DGNPADHORZ()
SPRX(M+2)=180
SPRY(M+2)=32*M+28
FOR X=180 TO 203:FOR Y=32*M+28 TO 32*M+33
COLLISION(X, Y)=1
N.:N.:N.
'HURDLE
SPRDGN(8)=DGNPADVERT()
SPRX(8)=180
SPRY(8)=164
@STACLE
FOR XC=180 TO 185
FOR YC=164 TO 187
COLLISION(XC, YC)=-1
N.:N.
@MAINLOOP
WAIT:WAIT
GOSUB MOVE
GET A
IF A=0 T.G. MAINLOOP
IF A=39 T. VX=1:DGN=0
IF A=-37 OR A=-39 T. VX=0
IF A=37 T. VX=-1:DGN=576
IF A=38 AND LANDED T. VY=10:LANDED=0
GOTO MAINLOOP
@MOVE
SPRX(1)=SPRX(1)+VX
SPRDGN(1)=(INT(SPRX(1)/4) MOD 2)*288+DGN
SPRY(1)=SPRY(1)-VY
'GRAVITY
VY=VY - 1
'BORDER HIT CHECK
IF SPRY(1)>179 THEN SPRY(1)=180:VY=0:LANDED=1
IF SPRY(1)<0 THEN SPRY(1)=0:VY=-ABS(VY)
IF SPRX(1)<0 THEN SPRX(1)=24:VX=0
IF SPRX(1)>360 THEN SPRX(1)=360:VX=0
'PLATFORM COLLISION CHECK
Y=SPRY(1)
FOR X=INT(SPRX(1)+2) TO INT(SPRX(1)+21)
IF COLLISION(X, SPRY(1)+23)>0 AND VY<0 THEN VY=0:Y=SPRY(1)-1:LANDED=1
N.
SPRY(1)=Y
'OBSTACLE COLLISION CHECK
FOR Y=INT(SPRY(1)) TO INT(SPRY(1)+23)
IF COLLISION(INT(SPRX(1)+11+SGN(VX)*5), INT(Y))<0 THEN SPRX(1)=SPRX(1)-VX:VX=0
N.
R.
RUN
REM * PLACE TILES FOR PIXEL GRAPHICS *
I=0
FOR RO=0 TO 7
FOR CO=0 TO 7
TILE(RO, CO + 8) = 288*I
I=I+1
N.:N.
FOR RO=0 TO 26:TEXTLINE$(RO)="":N.
CURSORY=23
REM * PRECALC ROTATED CURSOR SPRITES *
TA=18720
FOR I=1 TO 63
SA=18432:ANGLE=I*PI/32:GOSUB SPRROT:TA=TA+288
N.
REM * INITIALIZE TURTLE AND SCREEN *
GOSUB WIPE
GOSUB HOME
GOSUB PD
COLOR=$E
GOSUB CURSOR
REM * MAIN LOOP *
@ASK
INPUT "", LINE$
GOSUB PARSE
IF WORD$(1)="FD" OR WORD$(1)="FORWARD" THEN GOSUB FD
IF WORD$(1)="BK" OR WORD$(1)="BACK" THEN GOSUB BK
IF WORD$(1)="LT" OR WORD$(1)="LEFT" THEN GOSUB LT
IF WORD$(1)="RT" OR WORD$(1)="RIGHT" THEN GOSUB RT
IF WORD$(1)="HOME" THEN GOSUB HOME
IF WORD$(1)="CS" OR WORD$(1)="CLEARSCREEN" THEN GOSUB HOME:GOSUB WIPE
IF WORD$(1)="CLEAN" THEN GOSUB WIPE
IF WORD$(1)="PC" OR WORD$(1)="COLOR" THEN GOSUB PC
IF WORD$(1)="PU" OR WORD$(1)="PENUP" THEN GOSUB PU
IF WORD$(1)="PD" OR WORD$(1)="PENDOWN" THEN GOSUB PD
GOSUB CURSOR
GOSUB CLEAN
GOTO ASK
REM * COMMAND IMPLEMENTATIONS *
@FD:R=WORD$(2):IF DOWN THEN GOSUB LINE:R.
X=X+R*COS(ANGLE)
Y=Y+R*SIN(ANGLE)
R.
@BK:R=WORD$(2):IF DOWN THEN ANGLE=ANGLE+PI:GOSUB LINE:ANGLE=ANGLE-PI:R.
X=X-R*COS(ANGLE)
Y=Y-R*SIN(ANGLE)
R.
@LT:ANGLE=ANGLE-WORD$(2)*PI/180:R.
@RT:ANGLE=ANGLE+WORD$(2)*PI/180:R.
@HOME:X=96:Y=144:ANGLE=3*PI/2:R.
@PU:DOWN=0:R.
@PD:DOWN=1:R.
@PC:COLOR=WORD$(2):R.
@WIPE 'CS COMMAND
FOR A=0 TO 18431:POKE A,0:N.A
R.WIPE
REM * GRAPHICS ROUTINES *
@LINE 'TAKES X, Y, ANGLE, R, COLOR
ON INT((ANGLE/PI*2)+.5) MOD 2 GOTO VLINE, HLINE
@HLINE
TX=X+R*COS(ANGLE)
VX=SGN(COS(ANGLE))
VY=SIN(ANGLE)
@HLOOP
GOSUB SETPIXEL
IF X*VX>=TX*VX T.X=TX:R.LINE
X=X+VX:Y=Y+VY
GOTO HLOOP
@VLINE
TY=Y+R*SIN(ANGLE)
VY=SGN(SIN(ANGLE))
VX=COS(ANGLE)
@VLOOP
GOSUB SETPIXEL
IF Y*VY>=TY*VY T.Y=TY:R.LINE
X=X+VX:Y=Y+VY
GOTO VLOOP
@SETPIXEL 'TAKES X, Y, COLOR
A=288*(8*INT(Y/24)+INT(X/24))+12*(INT(Y) MOD 24)+INT((INT(X) MOD 24)/2)
IF INT(X) MOD 2 THEN POKE A, PEEK(A) AND %11110000 OR COLOR:RETURN
POKE A, PEEK(A) AND %00001111 OR (16*COLOR):RETURN
@CLEAN:FOR RO=0 TO 23:TEXTLINE$(RO)=LEFT$(TEXTLINE$(RO), 24):N.:R.
@SPRROT 'TAKES SA (SOURCE ADDRESS), TA (TARGET ADDRESS), ANGLE
TI=0:DIM NIB(2)
FOR TY=12 TO -11 STEP -1:FOR TX=-12 TO 11
SX=TX*COS(ANGLE)-TY*SIN(ANGLE)
SY=TX*SIN(ANGLE)+TY*COS(ANGLE)
SI=INT(12.5+SX+24*INT(12.5-SY))
IF SI MOD 2 = 0 THEN NIB(TI MOD 2)=INT(PEEK(SA+SI/2)/16)
IF SI MOD 2 THEN NIB(TI MOD 2)=PEEK(SA+(SI-1)/2) AND 15
IF SX<-12 OR SX>11 OR SY<-11 OR SY>12 THEN NIB(TI MOD 2)=0
IF TI MOD 2 THEN POKE TA+(TI-1)/2,NIB(0)*16 OR NIB(1):DIM NIB()
TI = TI+1
N.:N.:R.
REM * TURTLE DISPLAY *
@CURSOR 'TAKES X, Y, ANGLE
SPRX(0)=X+180:SPRY(0)=Y-12:SPRDGN(0)=288*(64+INT(ANGLE/PI*32+.5) MOD 64)
R.
REM * COMMAND LINE PARSING *
@PARSE 'TAKES LINE$
DIM WORD$()
WC=1:WS=1
FOR I=1 TO LEN(LINE$)
IF MID$(LINE$, I, 1)<>" " THEN N.:GOTO STOREWORD
GOSUB STOREWORD:N.
@STOREWORD
WORD$(WC)=MID$(LINE$, WS, I-WS):WC=WC+1:WS=I
R.
And copy the cursor design to 18432 (select and copy the code below > Design Util > on the Memory Map, select 1st slot on the 5th line > push MODE repeatedly until hex input appears > select all hex > paste > PUT):
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000ff7
000000000000000000000f7ff7000000
00000000000007f07ff7000000000000
000000f7007ff70000000000000000f7
00007ff7000000000000007f0000007f
f70000000000000f700000007ff70000
0000000f70000000007ff0000000000f
700000007ff700000000007f0000007f
f7000000000000f700007ff700000000
000000f7007ff70000000000000007f0
7ff700000000000000000f7ff7000000
0000000000000ff70000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
PRINT "WORD PUZZLE GENERATOR"
DIM DIR$(8)
DIR$(0)="RIGHT"
DIR$(1)="RIGHT DOWN"
DIR$(2)="DOWN"
DIR$(3)="LEFT DOWN"
DIR$(4)="LEFT"
DIR$(5)="LEFT UP"
DIR$(6)="UP"
DIR$(7)="RIGHT UP"
DIM DX(8):DIM DY(8)
DX(0)=1:DY(0)=0
DX(1)=1:DY(1)=1
DX(2)=0:DY(2)=1
DX(3)=-1:DY(3)=1
DX(4)=-1:DY(4)=0
DX(5)=-1:DY(5)=-1
DX(6)=0:DY(6)=-1
DX(7)=1:DY(7)=-1
DIM W$()
WORDS = 0
LONGEST = 0
TOT = 0
@INWD
W = WORDS + 1
INPUT "WORD " + W, W$(W)
L = LEN(W$(W))
TOT = TOT + L
IF LONGEST < L THEN LONGEST=L
IF L > 0 THEN WORDS = WORDS + 1:GOTO INWD
DIM KEY$(WORDS)
@INSZ
INPUT "PUZZLE SIZE", SIZE
IF SIZE < LONGEST OR SIZE*SIZE < TOT T.PRINT "TOO SMALL":G.INSZ
@PUZZ
DIM P$(SIZE, SIZE)
FREE = SIZE*SIZE
PRINT "WORKING..."
FOR W=1 TO WORDS
@WORD
W$=W$(W)
L=LEN(W$)
@POS
IF TOT > FREE OR RND(SIZE*SIZE*5) = 0 THEN W=WORDS + 1:NEXT W:GOTO PUZZ
X=RND(SIZE)
Y=RND(SIZE)
DIR=RND(8)
DX=DX(DIR)
DY=DY(DIR)
IF X + (L - 1)*DX < 0 T.G.POS
IF X + (L - 1)*DX >= SIZE T.G.POS
IF Y + (L - 1)*DY < 0 T.G.POS
IF Y + (L - 1)*DY >= SIZE T.G.POS
KEY$(W) = "FROM ROW " + (Y + 1) + ", COL " + (X + 1) + " " + DIR$(DIR)
FOR LTR=1 TO L
LTR$=MID$(W$, LTR, 1)
IF INI(P$(X, Y))=0 THEN P$(X, Y)=LTR$:FREE = FREE - 1
IF P$(X, Y)<>LTR$ THEN LTR=L + 1:NEXT LTR:GOTO WORD
X=X + DX
Y=Y + DY
NEXT LTR
TOT = TOT - L
NEXT W
PRINT
FOR Y=0 TO SIZE - 1
LINE$=" "
FOR X=0 TO SIZE - 1
IF INI(P$(X, Y))=0 THEN P$(X, Y)=CHR$(65 + RND(26))
LINE$=LINE$ + P$(X, Y)
NEXT X
PRINT LINE$
NEXT Y
PRINT
FOR W=1 TO WORDS
PRINT W$(W) + ": " + KEY$(W)
NEXT W
Anonymous
If you try to run old programs in the newer version of the imeight emulator, you'll get errors like "NO VALUE" at TEXTLINES array assignment.
Find and replace to convert 1.0 (Newgrounds deployment) lists to upstream emu and back.
old --> new version
CHARGEN --> FONTALNUM
TEXTLINES --> TEXTLINE$
TEXTCOLOR2 --> TEXTCOLORLC
TEXTCOLOR --> TEXTCOLORUC
Last edit: Csaba Skrabák 2020-06-16