100 REM BASIC Week 2: Halloween Boogaloo
110 REM http://reddit.com/r/RetroBattlestations
120 REM written by FozzTexx
130 REM Apple II port by FozzTexx
140 REM ----
200 REM Clear screen and setup variables
210 HOME
220 CL = 40:RW = 24:REM Columns and Rows of screen
300 REM Load background and draw on screen
310 GOSUB 1510
320 NR = SR:WD = SC:WX = -2
330 X = 2:KF = X + WD:IF RND(1) > .5 THEN X = CL - WD - 2:KF = 0
340 Y = RW - NR:KW = CL - WD - 4
350 GOSUB 2010
500 REM Load sprites into variables
510 GOSUB 1510:BT$(0) = SP$:BE$ = SE$:BC = SC
520 GOSUB 1510:BT$(1) = SP$
530 GOSUB 1510:WT$ = SP$:WE$ = SE$:WW = SC:WH = SR
600 REM Animation
610 NB = 3:WX = -2
620 FOR I = 1 TO NB
630 BX(I) = INT(RND(1) * (KW - BC)):BY(I) = INT(RND(1) * ((RW - 4 - NR / 2) / NB)) * NB + I + 1
640 BW(I) = INT(RND(1) * 2):BF(I) = INT(RND(1) * 9)
650 NEXT I
660 FOR I = 1 TO NB
670 Y = INT(BF(I) / 3):X = INT((BF(I) / 3 - Y) * 3 + .05)
680 X = X + BX(I) + KF :Y = Y + BY(I):SP$ = BE$:GOSUB 2010
710 BW(I) = BW(I) + 1:IF BW(I) > 1 THEN BW(I) = 0
720 BF(I) = INT(RND(1) * 9)
730 Y = INT(BF(I) / 3):X = INT((BF(I) / 3 - Y) * 3 + .05)
740 X = X + BX(I) + KF :Y = Y + BY(I):SP$ = BT$(BW(I)):GOSUB 2010
750 IF WX = -1 THEN SP$ = WE$:X = 0:Y = 0:GOSUB 2010:WX = -2
760 IF WX >= 0 THEN SP$ = WT$:X = WX:Y = 0:GOSUB 2010:WX = WX - 1
770 IF WX = -2 AND WH + NR < RW AND RND(1) * 50 < 2 THEN WX = CL - WW - 1
780 NEXT I
790 GOTO 660
1000 REM Position cursor at X,Y
1010 VTAB Y+1:HTAB X+1
1020 RETURN
1500 REM Load a sprite from DATA into a string
1510 SP$ = "":SE$ = "":SR = 0:SC = 0
1520 READ T$,S$:IF LEN(SP$) > 0 THEN SP$ = SP$ + CHR$(13)
1530 SP$ = SP$ + S$:SR = SR + 1:IF LEN(S$) > SC THEN SC = LEN(S$)
1540 BL$ = "":FOR I = 1 TO LEN(S$):BL$ = BL$ + " ":NEXT I
1550 IF LEN(SE$) > 0 THEN SE$ = SE$ + CHR$(13)
1560 SE$ = SE$ + BL$
1570 IF T$ <> "SE" THEN GOTO 1520
1580 RETURN
2000 REM Draw sprite in SP$ at X,Y
2010 GOSUB 1010
2020 REM Set the left margin to the X position
2030 POKE 32,X:PRINT SP$;
2040 POKE 32,0
2050 RETURN
5000 DATA SP,"        ^"
5010 DATA SP,"       / \"
5020 DATA SP,"      //|\\"
5030 DATA SP,"     / -+- \"
5040 DATA SP,"    /  \|/  \"
5050 DATA SP,"   /_________\"
5060 DATA SP,"     | ___ |"
5070 DATA SP,"     || | ||::::"
5080 DATA SP,"   /\ |-+-||IIII"
5090 DATA SP,"  /  \|_|_||    \"
5100 DATA SP," / [] \    |_____"
5110 DATA SP,"/_____     | +-+|"
5120 DATA SP,"  |   +--+ | |+||"
5130 DATA SP,"  |   |  | | +-+|"
5140 DATA SP,"  |   |o | |____|"
5150 DATA SE,"  |___|__|_|"
5160 DATA SE,"^v^"
5170 DATA SE,"-v-"
5180 DATA SP,"     , "
5190 DATA SP,"   _/(_ "
5200 DATA SP,"   {\\ "
5210 DATA SP,"   /;_) "
5220 DATA SP,"=='/ <===<<< "
5230 DATA SP,"   \__\ "
5240 DATA SE,"     `` "