The seed for this crawl was a list of every host in the Wayback Machine
This crawl was run at a level 1 (URLs including their embeds, plus the URLs of all outbound links including their embeds)
The WARC files associated with this crawl are not currently available to the general public.
Petit Computerincludes the following sample programs. For more details, see the programming code for each.
1.Go to Run Mode
2.EXEC"SAMPLE2" (Touch Enter)
3.Touch SELECT to pause
4.View program in Edit Mode
By entering other sample names instead of the SAMPLE2 contained within the "", you can check out other sample programs. You are also free to save any of the samples included in the software under different names. You can then tweak them to your heart's content without needing approval from Gamebridge first.
These are simple programs designed to teach users how to use the standard commands in BASIC. You can view the programs in Edit Mode and use them as a reference when writing your own BASIC programs.
Displays characters on the console.
- '+------------------------+
- '|SAMPLE1 |
- '| Output characters |
- '| to console |
- '+------------------------+
- VISIBLE 1,1,0,0,0,0
- CLS:COLOR 0
-
- '--- Character display゙
- PRINT"Ж:NICO Mark"
- PRINT"ALPHABET"
- PRINT"12345";"KATAKANA"
-
- '--- Assign color
- COLOR 12:PRINT"а";
- COLOR 13:PRINT"б";
- COLOR 11:PRINT"Я";
- COLOR 9:PRINT"в"
- COLOR 0
-
- '--- Use variable
- APPLE=56
- ORANGE=123
-
- '--- Assign display location
- LOCATE 5,10
- PRINT"Apples = ";APPLE;"
- LOCATE 5,11
- PRINT"Oranges = ";ORANGE;"
- LOCATE 5,12
- PRINT"-----------"
- LOCATE 5,13
- TOTAL=APPLE+ORANGE
- PRINT"Total = ";TOTAL
-
- '--- end
- PRINT ""
- PRINT "─"*32;
- PRINT "PUSH А"
- @KLOOP
- VSYNC 1
- IF BTRIG()!=16 THEN @KLOOP
- END
A simple character-input calculator.
- '+-------------------------+
- '|SAMPLE2 |
- '| Forking after character |
- '| imputted |
- '+-------------------------+
- VISIBLE 1,1,0,0,0,0
- CLS:COLOR 0
- PRINT"+-----------------------------+"
- PRINT"|Calculation Computer of NICOЖ|"
- PRINT"+-----------------------------+"
- PRINT"Ж:Hello I am NICO"
- PRINT"Ж:Please answer to my questions"
- '---
- @LOOP
- PRINT
- COLOR 9
- INPUT"Ж:1st Number is";NO1
- COLOR 7
- INPUT"Ж:2nd Number is";NO2
- '---
- @MARK
- COLOR 0
- PRINT"Ж:1st is ";NO1; " and ";
- PRINT"2nd is ";NO2; " OK?"
- COLOR 2
- PRINT"+ →Add (1) and (2)"
- PRINT"- →Subtract (2) from (1)"
- PRINT"/ →Divide (1) by (2)"
- PRINT"% →Gave (2) as percentage of (1)";
- PRINT"* →Multiply (1) by (2)"
- COLOR 0
- INPUT"Ж:The symbol is (+-/%*)";K$
- PRINT"Ж:Calculating the answer..."
- '---
- MARK=0
- IF K$=="+" THEN MARK=1
- IF K$=="-" THEN MARK=2
- IF K$=="/" THEN MARK=3
- IF K$=="%" THEN MARK=4
- IF K$=="*" THEN MARK=5
- ON MARK GOTO @SKIP,@PLUS,@MINUS,@DIV,@MOD,@MUL
- '---
- @SKIP
- BEEP 4
- PRINT"Ё:This symbol is not recognized."
- PRINT
- GOTO @MARK
- '---
- @PLUS
- PRINT NO1;"+";NO2;"=";NO1+NO2
- GOTO @LOOP
- '---
- @MINUS
- PRINT NO1;"-";NO2;"=";NO1-NO2
- GOTO @LOOP
- '---
- @DIV
- PRINT NO1;"/";NO2;"=";NO1/NO2
- GOTO @LOOP
- '---
- @MOD
- PRINT NO1;"%";NO2;"=";NO1%NO2
- GOTO @LOOP
- '---
- @MUL
- PRINT NO1;"x";NO2;"=";NO1*NO2
- GOTO @LOOP
A simple piano program using the keyboard.
- '+--------------------------+
- '|SAMPLE3 |
- '| Simple Drum and keyboard |
- '+--------------------------+
- VISIBLE 1,1,0,0,0,0
- CLS:COLOR 0
- SYSBEEP=FALSE
- PRINT"KEYBOARD+DRUMS v1.1"
- PRINT
- PRINT" +-┬-+ +-┬-┬-+ +-┬-+ +-+"
- PRINT" |A|S| |F|G|H| |K|L| |:|"
- PRINT"+┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴+"
- PRINT"|'|Z|X|C|V|B|N|M|,|.|/|%|"
- PRINT"+-┴-┴-┴-┴-┴-┴-┴-┴-┴-┴-┴-+"
- PRINT
- PRINT"UP:BASSDRUM"
- PRINT"LEFT:COWBELL"
- PRINT"RIGHT:CYMBAL"
- PRINT"DOWN:SNAREDRUM"
- PRINT
- PRINT"*:EXIT"
-
- '--- Keyboard(0-19)
- DATA "'","A"
- DATA "Z","S"
- DATA "X"
- DATA "C","F"
- DATA "V","G"
- DATA "B","H"
- DATA "N"
- DATA "M","K"
- DATA ",","L"
- DATA "."
- DATA "/",":"
- DATA "%"
-
- '---
- CLEAR
- DIM N$(20)
- KCNT=20
- FOR I=0 TO KCNT-1
- READ N$(I)
- NEXT I
-
- '---
- F=4096/12
- V=22
-
- '
- '--- Main loop
- '
- @LOOP
-
- '--- Drum
- B=BTRIG()
- IF B AND 1 THEN BEEP 52
- IF B AND 2 THEN BEEP 53
- IF B AND 4 THEN BEEP 62
- IF B AND 8 THEN BEEP 25
- IF B==64 GOTO @EXIT
- VSYNC 1
-
- '---
- '--- When using FOR-NEXT
- '--- Internal memory will be used up and
- '--- decrease if processing is interrupted.
- '--- When using a GOTO loop
- '---
-
- K$=INKEY$()
- IF K$=="" GOTO @LOOP
- I=0
- @KLOOP
- IF K$==N$(I) GOTO @PLAY
- I=I+1
- IF I<KCNT GOTO @KLOOP
- GOTO @LOOP
-
- '---
- @PLAY
- P=F*(I)-4096
- BEEP V,P
- GOTO @LOOP
-
- '---
- @EXIT
- SYSBEEP=TRUE
- END
A number-guessing game.
- '+----------------------+
- '|SAMPLE4 |
- '| Number-guessing game |
- '+----------------------+
- VISIBLE 1,1,0,0,0,0
- CLS:COLOR 0:BGMSTOP
- PRINT"+--------------------+"
- PRINT"|Number-guessing game|"
- PRINT"+--------------------+"
- PRINT"Ж will choose a random number."
- PRINT"Guess a number between 0 and 99."
-
- '--- Ж:Select of Number
- ANS=RND(100)
-
- '---
- @RETRY
- PRINT""
- INPUT"Ж:Numbers from 0 to 99";NO
- IF NO<0 OR NO>99 THEN @RETRY
- IF NO==ANS THEN @BINGO
- IF NO<ANS THEN @SMALL
- '---
- @BIG
- BEEP 4
- PRINT"Ж:HINT(It's too large)"
- GOTO @RETRY
- '---
- @SMALL
- BEEP 6
- PRINT"Ж:HINT(It's too small)"
- GOTO @RETRY
- '---
- @BINGO
- BEEP 34
- PRINT"Ж:Correct!!"
- END
A bio-rhythm program.
- '+----------+"
- '|SAMPLE5 |"
- '| Biorhythm|"
- '+----------+"
- VISIBLE 1,1,0,0,0,1
- GPAGE 0:GCOLOR 0:GCLS
- COLOR 0:CLS
- CLEAR
- '---
- DIM MDAY(12)
- DATA 31,28,31,30,31,30
- DATA 31,31,30,31,30,31
- FOR I=0 TO 11
- READ MDAY(I)
- NEXT I
- '---
- SPC = 8
- BGT = 4
- LINEH = 60
- LINEC = BGT + SPC + LINEH
- DAYW = 8:DRAWD = 30
- BGL = (256 - (DRAWD - 1) * DAYW - SPC * 2) / 2
- BGR = BGL + DAYW * (DRAWD - 1) + SPC * 2
- BGB = BGT + (SPC + LINEH) * 2 + SPC
- DIM DDAY(DRAWD)
- COLOR 0
- '---
- @START
- CLS
- GCLS 14
- FOR I = 0 TO DRAWD - 1
- DDAY(I) = FALSE
- NEXT
- PRINT"+---------+"
- PRINT"|BIORHYTHM|"
- PRINT"+---------+"
- '---
- @INPUTDAY
- INPUT "Ж:Birthday(YYYYMMDD)";DT$
- IF LEN(DT$) != 8 THEN @ERROR
- BYEAR = VAL(MID$(DT$, 0, 4))
- BMON = VAL(MID$(DT$, 4, 2))
- BDAY = VAL(MID$(DT$, 6, 2))
- IF BYEAR < 1900 THEN @ERROR
- IF BMON < 1 OR BMON > 12 THEN @ERROR
- IF BDAY < 1 THEN @ERROR
- DTREAD(DATE$), NYEAR, NMON, NDAY
- IF BYEAR > NYEAR THEN @ERROR
- YEAR = NYEAR
- MON = NMON
- DAY = NDAY
- GOSUB @CALCDAY
- TOTAL = CDAY
- YEAR = BYEAR
- MON = BMON
- DAY = BDAY
- GOSUB @CALCDAY
- LEAP = 0
- IF MON == 2 THEN GOSUB @CHKLEAP
- IF DAY > MDAY(MON - 1) + LEAP THEN @ERROR
- TOTAL = TOTAL + YEARDAY - CDAY
- IF BYEAR == NYEAR THEN @DRAW
- FOR YEAR = BYEAR TO NYEAR - 1
- TOTAL = TOTAL + 365
- GOSUB @CHKLEAP
- TOTAL = TOTAL + LEAP
- NEXT
- '---
- @DRAW
- CLS
- GCLS 4
- GFILL BGL, BGT, BGR, BGB, 15
- GCOLOR 14
- GBOX BGL, BGT, BGR, BGB
- X = BGL + SPC
- GLINE X, LINEC, BGR - SPC, LINEC
- Y = BGT + SPC
- X2 = X + DAYW * (DRAWD - 1)
- GLINE X, Y, X2, Y
- Y2 = Y + LINEH * 2
- FOR I = 1 TO DRAWD
- GLINE X, Y, X, Y2
- X = X + DAYW
- NEXT
- GLINE BGL + SPC, Y2, X2, Y2
- TX = 1
- X = BGL + SPC
- Y1 = Y2 + 1
- Y2 = Y1 + 1
- DAY = NDAY
- STEPD = 10
- GCOLOR 2
- COLOR 1
- FOR I = 1 TO DRAWD STEP STEPD
- GLINE X, Y1, X - 1, Y2
- GLINE X, Y1, X + 1, Y2
- GPSET X, Y2
- LOCATE TX, 17
- PRINT DAY
- X = X + STEPD * DAYW
- TX = TX + STEPD
- DAY = DAY + STEPD
- IF DAY > MDAY(NMONTH) THEN NDAY = NDAY - MDAY(NMONTH)
- NEXT
- GCOLOR 14
- TX = 2
- TY = 20
- X1 = TX * 8 - 4
- Y1 = TY * 8 - 4
- X2 = 256 - X1
- Y2 = Y1 + (8 + 4) * 2
- GFILL X1, Y1, X2, Y2, 15
- GBOX X1, Y1, X2, Y2
- '---
- LOCATE TX, TY
- PRINT " Physical Emotion"
- Y = TY * 8 + 4
- X = 2 * 8
- GLINE X, Y, X + 8, Y, 4
- X = 20 * 8
- GLINE X, Y, X + 8, Y, 2
- TY = TY + 1
- LOCATE TX, TY
- PRINT " Intelligence BAD DAY"
- X = 2 * 8
- Y = Y + 8
- GLINE X, Y, X + 8, Y, 11
- X1 = 20 * 8
- Y1 = TY * 8
- GBOX X1, Y1, X1 + 8, Y1 + 8, 2
- GCOLOR 4
- BDAY = 23
- GOSUB @DRAWLINE
- GCOLOR 2
- BDAY = 28
- GOSUB @DRAWLINE
- GCOLOR 11
- BDAY = 33
- GOSUB @DRAWLINE
- GCOLOR 14
- X = BGL + SPC - DAYW / 2
- Y1 = LINEC - DAYW / 2
- Y2 = Y1 + DAYW
- FOR I = O TO DRAWD - 1
- IF DDAY(I) THEN GBOX X, Y1, X + DAYW, Y2, 2
- X = X + DAYW
- NEXT
- '---
- COLOR 0
- LOCATE 0,23
- PRINT"А=Again";
- @LOOP
- IF BUTTON()==16 THEN @START
- GOTO @LOOP
-
- '---
- @CALCDAY
- CDAY = DAY
- IF MON == 1 THEN @JAN
- FOR I = 1 TO MON - 1
- CDAY = CDAY + MDAY(I - 1)
- NEXT
- '---
- @JAN
- LEAP = 0
- IF MON > 2 THEN GOSUB @CHKLEAP
- CDAY = CDAY + LEAP
- RETURN
- '---
- @CHKLEAP
- LEAP = 0
- IF ((YEAR % 4) == 0) THEN LEAP = 1
- IF (YEAR % 400) == 0 THEN RETURN
- IF (YEAR % 100) == 0 THEN LEAP = 0
- RETURN
- '---
- @DRAWLINE
- DAY = TOTAL
- YEAR = NYEAR
- MON = NMON
- X2 = BGL + SPC
- LEAP = 0
- GOSUB @CALCBIO
- FOR I = 0 TO DRAWD - 2
- X1 = X2
- Y1 = Y2
- DAY = DAY + 1
- X2 = X2 + DAYW
- GOSUB @CALCBIO
- GLINE X1, Y1, X2, Y2
- GOSUB @CHKDDAY
- NEXT
- Y1 = Y2
- DAY = DAY + 1
- GOSUB @CALCBIO
- I = DRAWD - 1
- GOSUB @CHKDDAY
- RETURN
- '---
- @CALCBIO
- Y2 = LINEC - SIN(DAY * 2 * PI() / BDAY) * LINEH
- RETURN
- '---
- @CHKDDAY
- IF Y1 <= LINEC AND LINEC < Y2 THEN DDAY(I) = TRUE
- IF Y1 >= LINEC AND LINEC > Y2 THEN DDAY(I) = TRUE
- RETURN
- '---
- @ERROR
- BEEP
- PRINT "Error!"
- GOTO @INPUTDAY
A lower screen sequencer.
- '+-----------+
- '|SAMPLE6 |
- '| Sequencer |
- '+-----------+
- VISIBLE 1,1,1,1,0,0
- BGMSTOP
- '---
- CLEAR
- DIM S(8,16)
- DIM N(8)
- DIM F(8,16),V(8,16),P(8,16)
- DATA 52,53,27,26,28,62,47,25
- FOR I=0 TO 7:READ N(I):NEXT
- MAX=8
- GOSUB @SCINIT
-
- '---
- GOSUB @INIT
- GOSUB @SCPUT
- ICONSET 2,5 :'PEN
- ICONSET 3,39:'ERASER
-
- '---
- TMP=120:TT=1/60:TC=TT
- GOSUB @CLCTMP
- MD=0:OFS=0
- PLY=FALSE
- FOR I=0 TO 3
- BREPEAT I,30,4
- NEXT
-
- '---
- @LOOP
- '
- B=BUTTON(1)
- OLDST=TST:OTX=TX:OTY=TY
- TST=TCHST:TX=TCHX:TY=TCHY
- '
- GOSUB @CTRL
- GOSUB @SEQEDIT
- GOSUB @SEQPLAY
- GOSUB @PUTST
- '
- VSYNC 1
- '
- GOTO @LOOP
-
- END
-
- '---
- @PUTST
- LOCATE 24,0
- PRINT "SPD: ";
- LOCATE CSRX-3,0
- PRINT TMP;
- RETURN
-
- '---
- @CTRL
- OT=TMP
- I=ICONCHK()
- IF I!=-1 THEN MD=I-2
- '---
- IF B==64 THEN GOSUB @SCCLR
- IF B==4 THEN TMP=TMP-1
- IF B==8 THEN TMP=TMP+1
- IF TMP<10 THEN TMP=10
- IF TMP>240 THEN TMP=240
- IF OT!=TMP THEN GOSUB @CLCTMP
- RETURN
-
- '---
- @SCCLR
- GOSUB @SCINIT
- FOR I=0 TO MAX-1
- FOR O=0 TO 15
- GOSUB @SCPUT1
- NEXT
- NEXT
- RETURN
-
- '---
- @SEQEDIT
- IF TST==FALSE THEN RETURN
- C=1:IF MD==1 THEN C=0
- X=FLOOR(TX/8)
- Y=FLOOR(TY/8)
- EY=MAX*2+SY-1
- IF Y<SY THEN RETURN
- IF Y>EY THEN RETURN
- O=FLOOR(X/2)
- I=FLOOR((Y-SY)/2)
- S(I,O)=C
- GOSUB @SCPUT1
- RETURN
-
- '---
- @CLCTMP
- T=60*60 :'VSYNC(1)→1/60SEC
- C=TMP*4 :'16th-note base
- TMAX=T/C/48 :'48TPQN
- RETURN
-
- '---
- @SEQPLAY
- '---
- LOCATE 0,22:PRINT TMAX,TT,TC
- TC=TC-TT
- IF TC>0 THEN RETURN
- GOSUB @SCPLAY
- TC=TC+TMAX
- RETURN
- '---
- @SCPLAY
- FOR I=0 TO MAX-1
- IF S(I,OFS)==0 GOTO @SCPSKIP
- BEEP N(I),F(I,OFS),V(I,OFS),P(I,OFS)
- @SCPSKIP
- NEXT
- '---
- OFS=OFS+1
- OFS=OFS AND 15
- BGPAGE 1
- BGOFS 1,-OFS*16,0
- BGPAGE 0
- BGOFS 1,-OFS*16,0
- RETURN
-
- '---
- @SCINIT
- '---
- FOR I=0 TO MAX-1
- FOR O=0 TO 15
- S(I,O)=0:'RND(2)
- F(I,O)=0:'RND(8192)-4096
- V(I,O)=127:'RND(100)+27
- P(I,O)=64:'RND(128)
- NEXT
- NEXT
- RETURN
-
- '---
- @SCPUT1 'I=NO,O=OFS
- '---
- X=O*2+SX:Y=I*2+SY:C=0
- D=I+2:IF S(I,O)==0 THEN D=0
- BGPAGE 1
- GOSUB @BGBOX
- C=1
- BGPAGE 0
- '---
- @BGBOX
- BGPUT 0,X+0,Y+0,D,C,0,0
- BGPUT 0,X+1,Y+0,D,C,0,0
- BGPUT 0,X+0,Y+1,D,C,0,0
- BGPUT 0,X+1,Y+1,D,C,0,0
- RETURN
- '---
- @SCPUT
- '---
- FOR I=0 TO MAX-1
- FOR O=0 TO 15
- GOSUB @SCPUT1
- NEXT
- NEXT
- RETURN
-
- '---
- @INIT
- PNLTYPE "OFF"
- FOR I=0 TO 1
- BGPAGE I
- BGOFS 0,0,0
- BGOFS 1,0,0
- BGCLIP 0,0,31,23
- CHRINIT "BGU0"
- NEXT
- '---
- CLS:COLOR 7
- PRINT"++++++--++┬+++++┬+"
- PRINT"++├+||||├+||| ├+| "
- PRINT"+++++┤+┴++--++++-- v1.1"
- COLOR 0
- X=0:Y=CSRY+1
- COLOR 1
- LOCATE X,Y:PRINT"0 1 2 3 4 5 6 7 8 9 A B C D E F";
- COLOR 0
- PNLSTR X,Y,"0 1 2 3 4 5 6 7 8 9 A B C D E F"
- Y=Y+1
- SX=X:SY=Y
- FOR I=0 TO MAX-1
- COLOR 1
- LOCATE X,Y+0:PRINT"TTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCT";
- LOCATE X,Y+1:PRINT" Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ";
- COLOR 0
- PNLSTR X,Y+0,"TTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCT"
- PNLSTR X,Y+1," Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y "
- Y=Y+2
- NEXT
- COLOR 1
- LOCATE X,Y:PRINT"TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT";
- COLOR 0
- PNLSTR X,Y,"TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
- '---
- PNLSTR 0,0,"Ф:CLEAR"
- '---
- BGPAGE 1
- GOSUB @BGCLS
- C=1:GOSUB @OFSBAR
- BGPAGE 0
- GOSUB @BGCLS
- C=2:GOSUB @OFSBAR
- RETURN
-
- '---
- @OFSBAR
- O=8*2
- FOR Y=0 TO 23
- BGPUT 1,0,Y,15,C,0,0
- BGPUT 1,1,Y,15,C,0,0
- NEXT
- RETURN
-
- '---
- @BGCLS
- FOR X=0 TO 63
- FOR Y=0 TO 23
- BGPUT 0,X,Y,0,0,0,0
- BGPUT 1,X,Y,15,14,0,0
- NEXT
- NEXT
- RETURN
A shooting game with moving foes.
- '+--------------------+
- '|SAMPLE7 |
- '| Attempted invesion |
- '+--------------------+
- VISIBLE 1,1,0,0,0,0
- CLS:COLOR 0
- CLEAR
- DIM EX(20),EY(20),ED(20)
-
- '---
- EMAX=20
- FOR I=0 TO EMAX-1
- EX(I)=FLOOR(I%10)*2
- EY(I)=FLOOR(I/10)*2+3
- ED(I)=0
- LOCATE EX(I),EY(I)
- PRINT "Е"
- NEXT
- EW=100:EC=0:EDW=FALSE
-
- '---
- PX=10:PY=21
- LOCATE PX,PY:PRINT"Г";
- LIFE=3:SC=0
- MX=PX:MY=PY:MST=FALSE
- LOCATE 0,22
- PRINT"--------------------------------";
- LOCATE 0,23
- PRINT"Г:";LEFT;
- LOCATE 0,0
- PRINT"SCORE: ";SC
- SV=0
-
- '---
- @LOOP
- GOSUB @MYSHIP
- GOSUB @MYSHOT
- GOSUB @ALIEN
- GOSUB @SCORE
- VSYNC 1
- GOTO @LOOP
-
- '--- SCORE
- @SCORE
- IF SV==0 THEN RETURN
- SC=SC+10
- SV=SV-10
- LOCATE 7,0:PRINT SC
- RETURN
-
- '--- My SHIP
- @MYSHIP
- B=BUTTON():VX=0
- IF B AND 4 THEN VX=-1
- IF B AND 8 THEN VX=1
- IF VX==0 THEN @NOTMOVE
- LOCATE PX,PY:PRINT" "
- PX=PX+VX
- IF PX<0 THEN PX=0
- IF PX>31 THEN PX=31
- LOCATE PX,PY:PRINT"Г";
- '---
- @NOTMOVE
- RETURN
-
- '--- SHOT
- @MYSHOT
- IF MST==TRUE THEN @MSMOVE
- IF TCHST==FALSE THEN @MSSKIP
- MST=TRUE
- MX=PX:MY=PY
- GOTO @MSMOVE2
- '---
- @MSMOVE
- LOCATE MX,MY:PRINT" "
- '---
- @MSMOVE2
- MY=MY-1
- IF MY<3 THEN MST=FALSE:GOTO @MSSKIP
- LOCATE MX,MY:PRINT"・"
- '---
- @MSSKIP
- RETURN
-
- '--- ALIEN
- @ALIEN
- MD=FALSE
- IF EDW THEN MD=EDW:EDW=FALSE
- '---
- FOR I=0 TO EMAX-1
- IF ED(I)==-1 THEN @PASS
- '---
- LOCATE EX(I),EY(I):PRINT" "
- IF MD==FALSE THEN @EMV
- '---
- ED(I)=(ED(I)+1) AND 3
- '---
- @EMV
- GOSUB @EMOVE
- '---
- @SKIP
- IF MST==FALSE THEN @PASS
- IF MX!=EX(I) THEN @PASS
- IF MY!=EY(I) THEN @PASS
- '--- S capital
- LOCATE EX(I),EY(I):PRINT" "
- ED(I)=-1
- MST=FALSE
- SV=SV+10
- '---
- @PASS
- '---
- NEXT
- RETURN
-
- '---
- @EMOVE
- ON ED(I) GOTO @RI,@DW,@LF,@DW
-
- @DW
- EY(I)=EY(I)+1
- IF EY(I)>20 THEN EY(I)=3
- ED(I)=(ED(I)+1) AND 3
- GOTO @EPUT
-
- @RI
- EX(I)=EX(I)+1
- IF EX(I)<31 THEN @EPUT
- EDW=TRUE
- GOTO @EPUT
-
- @LF
- EX(I)=EX(I)-1
- IF EX(I)>0 THEN @EPUT
- EDW=TRUE
-
- @EPUT
- LOCATE EX(I),EY(I)
- PRINT "Е"
- RETURN
-
-
A program demonstrating useful commands that control variables.
- '+------------------+
- '|SAMPLE8 |
- '| Useful commands |
- '+------------------+
- CLEAR
- IF VERSION<&H1050; THEN END
- ACLS
-
- '--- SORT/RSORT array
- HMAX=5 'Prime numbers
- DIM HENSU(HMAX)
-
- '--- Initialize MENU
- MENUMAX=7
- DIM MENU$(MENUMAX)
- DIM INFO$(MENUMAX)
-
- FOR I=0 TO MENUMAX-1
- READ MENU$(I)
- READ INFO$(I)
- NEXT
-
- DATA "INSTR"
- DATA "Function of Character search"
- DATA "RIGHT$"
- DATA "Extract Character from right"
- DATA "LEFT$"
- DATA "Extract Character from left"
- DATA "SUBST$"
- DATA "Partially replace Character"
- DATA "SWAP"
- DATA "Swap value of variable"
- DATA "SORT"
- DATA "Sort the array in ascending"
- DATA "RSORT"
- DATA "Sort the array in descending"
-
- '--- MAIN LOOP
- @MAIN
- CLS
- COLOR 0
- PRINT "+-----------------------+"
- PRINT "|SAMPLE8 Useful commands|"
- PRINT "| introduction |"
- PRINT "+-----------------------+"
- PRINT
-
- FOR I=0 TO MENUMAX-1
- Y=I*2+5
- COLOR 9
- LOCATE 0,Y
- PRINT I+1;" ";
- COLOR 0
- PRINT MENU$(I);" ";
- COLOR 3
- LOCATE 2,Y+1
- PRINT INFO$(I)
- NEXT
-
- COLOR 0
- LOCATE 0,19
- INPUT "Ж:Select one(0=END)";CMD
- CLS
- IF CMD<=0 THEN END
- IF CMD>MENUMAX THEN @MAIN
- COLOR 3
- PRINT "-------------------------------"
- PRINT
- PRINT MENU$(CMD-1):PRINT
- PRINT " ";INFO$(CMD-1)
- PRINT "-------------------------------"
- COLOR 7
- PRINT "Execute example:":PRINT
- COLOR 0
-
- IF CMD==1 THEN GOSUB @TEST1
- IF CMD==2 THEN GOSUB @TEST2
- IF CMD==3 THEN GOSUB @TEST3
- IF CMD==4 THEN GOSUB @TEST4
- IF CMD==5 THEN GOSUB @TEST5
- IF CMD==6 THEN GOSUB @TEST6
- IF CMD==7 THEN GOSUB @TEST7
-
- GOSUB @HITANY
- GOTO @MAIN
-
- '--- INSTR
- @TEST1
- A$="ABCDEFGHIJKLMN"
- B$="EFG"
- PRINT "From「";A$;"」,"
- PRINT "find the 「";B$;"」."
- GOSUB @PUTCMD
- PT=INSTR(A$,B$)
- PRINT "Found to ";PT+1;"th character"
- PRINT "from left."
-
- RETURN
-
- '--- RIGHT$
- @TEST2
- A$="ABCDEFGHIJKLMN"
- SZ=4
- PRINT "Right of a 「";A$;"」 to"
- PRINT ;SZ;" character."
- GOSUB @PUTCMD
- PRINT RIGHT$(A$,SZ)
- RETURN
-
- '--- LEFT$
- @TEST3
- A$="ABCDEFGHIJKLMN"
- SZ=4
- PRINT "Left of a 「";A$;"」 to"
- PRINT ;SZ;" character."
- GOSUB @PUTCMD
- PRINT LEFT$(A$,SZ)
- RETURN
-
- '--- SUBST$
- @TEST4
- A$="ABCDEFGHIJKLMN"
- B$="1234"
- PT=5
- SZ=LEN(B$)
- PRINT ;PT+1;"-";PT+SZ;"th character is"
- PRINT "transposed to 「";B$;"」 from"
- PRINT "the left of 「";A$;"」."
- GOSUB @PUTCMD
- PRINT SUBST$(A$,PT,SZ,B$)
- RETURN
-
- '--- SWAP
- @TEST5
- HENSU1 = RND(10000)
- HENSU2 = RND(10000)
- PRINT "HENSU1=";HENSU1;""
- PRINT "HENSU2=";HENSU2;""
- SWAP HENSU1,HENSU2
- GOSUB @PUTCMD
- PRINT "HENSU1=";HENSU1;""
- PRINT "HENSU2=";HENSU2;""
- RETURN
-
- '--- SORT
- @TEST6
- GOSUB @HINIT
- SORT 0,HMAX,HENSU
- GOSUB @PUTCMD
- GOSUB @HPRINT
- RETURN
-
- '--- RSORT
- @TEST7
- GOSUB @HINIT
- RSORT 0,HMAX,HENSU
- GOSUB @PUTCMD
- GOSUB @HPRINT
- RETURN
-
- '--- Command Name
- @PUTCMD
- PRINT
- COLOR 4
- PRINT " ";
- PRINT "Use the '";MENU$(CMD-1);"'"
- PRINT " ↓"
- COLOR 0
- PRINT
- RETURN
-
- '--- Initialize Array
- @HINIT
- FOR I=0 TO HMAX-1
- HENSU(I)=RND(10000)
- NEXT
-
- '--- Displayd Array
- @HPRINT
- FOR I=0 TO HMAX-1
- PRINT "HENSU(";I;")=";HENSU(I)
- NEXT
- RETURN
-
- '---
- @HITANY
- GOSUB @KEYOFF
- LOCATE 7,23
- PRINT "HIT ANY BUTTON";
- @HITANY2
- IF BUTTON() THEN RETURN
- GOTO @HITANY2
-
- '---
- @KEYOFF
- IF BUTTON() THEN @KEYOFF
- RETURN
A demo using sprites and background(BG).
- '+------------------+
- '|SAMPLE9 |
- '| SPRITE/BG related|
- '+------------------+
- CLEAR
-
- '--- Initialize MENU
- MENUMAX=6
- DIM MENU$(MENUMAX)
- DIM INFO$(MENUMAX)
-
- FOR I=0 TO MENUMAX-1
- READ MENU$(I)
- READ INFO$(I)
- NEXT
-
- DATA "SPGETV/SPSETV"
- DATA "Information to SPRITE R/W"
- DATA "SPCOL/SPHIT"
- DATA "Detect a collision of SPRITE"
- DATA "SPHOME"
- DATA "SPRITE Set the base coordinate"
- DATA "SPREAD/SPCHK"
- DATA "Read the status of SPRITE"
- DATA "BGFILL/BGCOPY/BGCLR"
- DATA "Fill BG/Copy BG/Clear BG"
- DATA "BGCHK/BGREAD"
- DATA "Read BG state/Read BG CHR"
-
- '--- MAIN LOOP
- @MAIN
- ACLS
- COLOR 0
- PRINT "+-------------------------+"
- PRINT "|SAMPLE9 |"
- PRINT "| Command of SPRITE and BG|"
- PRINT "+-------------------------+"
-
- FOR I=0 TO MENUMAX-1
- Y=I*3+4
- COLOR 9
- LOCATE 0,Y
- PRINT I+1;" ";
- COLOR 0
- PRINT MENU$(I);" ";
- COLOR 3
- LOCATE 2,Y+1
- PRINT INFO$(I)
- NEXT
-
- COLOR 0
- LOCATE 0,22
- INPUT "Ж:Please select(0=END)";CMD
- CLS
- IF CMD<=0 THEN END
- IF CMD>MENUMAX THEN @MAIN
- COLOR 3
- PRINT "-------------------------------"
- PRINT
- PRINT MENU$(CMD-1):PRINT
- PRINT " ";INFO$(CMD-1)
- PRINT "-------------------------------"
- COLOR 7
- PRINT "Execute example:":PRINT
- COLOR 0
-
- IF CMD==1 THEN GOSUB @TEST1
- IF CMD==2 THEN GOSUB @TEST2
- IF CMD==3 THEN GOSUB @TEST3
- IF CMD==4 THEN GOSUB @TEST4
- IF CMD==5 THEN GOSUB @TEST5
- IF CMD==6 THEN GOSUB @TEST6
-
- GOSUB @HITANY
- GOTO @MAIN
-
-
- '--- SPGETV/SPSETV
- @TEST1
- PAL=2
- NUM = 0 'SPRITE No.
- PRINT "Random number to read and write to a user variable"
- COLOR 3
- SPSET NUM,68,PAL,0,0,1
- SPOFS NUM,128,160
- FOR I=0 TO 7
- VL=RND(10000)
- SPSETV NUM,I,VL
- LOCATE 0,10+I
- PRINT VL;" → HENSU(";I;")"
- NEXT
- COLOR 4
- FOR I=0 TO 7
- VL=SPGETV(NUM,I)
- LOCATE 16,10+I
- PRINT "HENSU(";I;") → ";VL
- NEXT
- RETURN
-
- '--- SPCOL/SPHIT
- @TEST2
-
- PAL=12
- AN=0 'SPRITE No.
- FN=10 'SPRITE No.
- AW=16 'WIDTH
- AH=32 'HEIGHT
- AX=128:AY=96
- AX1=2:AY1=1
-
- SPSET AN,288,PAL,0,0,2,AW,AH
- SPCOL AN,-AW/2,-AH/2,AW,AH,FALSE
- SPHOME AN,AW/2,AH/2
-
- FMAX=8 'TEKI MAX
- FW=16 'WIDTH
- FH=16 'HEIGHT
-
- FOR I=0 TO FMAX-1
- NUM = FN+I
- SCL = 200
- CH = 137
-
- SPSET NUM,CH,PAL,0,0,2
- SPSCALE NUM,SCL
- FX=48 + ((I%4)*48)
- FY=72 + FLOOR(I/4)*48
- SPHOME NUM,FW/2,FH/2
- SPCOL NUM,-FW/2,-FH/2,FW,FH,TRUE
- SPOFS NUM,FX,FY
- LOCATE FX/8-2,FY/8+2
- PRINT "NO.";NUM
-
- NEXT
-
- FOR I=0 TO 600
- IF AX<8 OR AX>246 THEN AX1=-AX1
- IF AY<16 OR AY>174 THEN AY1=-AY1
-
- AX=AX+AX1:AY=AY+AY1
- SPOFS AN,AX,AY
-
- HIT=SPHIT(AN,0)
- COLOR 0
- LOCATE 1,19
- PRINT "SPRITE function return value:";
- IF HIT THEN COLOR 13
- PRINT HIT;
- PRINT
- COLOR 0
- LOCATE 1,21
- PRINT "Value of the SPRITE No.:";
- COLOR 4
- PRINT SPHITNO;" "
- VSYNC 1
- NEXT
-
- RETURN
-
- '--- SPHOME
- @TEST3
-
- PAL=4
- NUM = 0 'SPRITE No.
- AW=16 'WIDTH
- AH=16 'HEIGHT
- CH=68
- SCL = 200
- AX = 128
- AY = 96
- ANG = 359
- DIR = 1
-
- SPSET NUM,CH,PAL,0,0,2
- SPOFS NUM,AX,AY
- SPSCALE NUM,SCL
-
- GLINE AX,AY-32,AX,AY+32,2
- GLINE AX-32,AY,AX+32,AY,2
-
- GOSUB @PUTCMD
-
- HX = 0:HY = 0
- GOSUB @TURNSUB
-
- HX = AW/2:HY = AH/2
- GOSUB @TURNSUB
-
- HX = AW-1:HY = AH-1
- GOSUB @TURNSUB
- RETURN
-
- '---
- @TURNSUB
- PRINT "Rotateing coordinate (";HX;",";HY;")"
- PRINT
- SPHOME NUM,HX,HY
- SPANGLE NUM,0
- VSYNC 1
- SPANGLE NUM,ANG,180,DIR
-
- @SPBUSY
- VSYNC 1
- IF SPCHK(AN) THEN @SPBUSY
- RETURN
-
- '--- SPREAD/SPCHK
- @TEST4
-
- PAL=4
- AN=0 'SPRITE No.
- AMAX=12 'MAX
- AW=16 'WIDTH
- AH=16 'HEIGHT
-
- FOR I=0 TO AMAX-1
-
- NUM = AN+I
- SCL = 100 'Scale
- CH = RND(256)
- ANG = 0
- SEC = RND(9)+1 'Keep time
- SPSET NUM,CH,PAL,0,0,2
- SPSCALE NUM,SCL
- SPHOME NUM,AW/2,AH/2
- SPOFS NUM,128,8
- VSYNC 1
- AX=240:AY=8+(I*16)
- SPOFS NUM,AX,AY,60*SEC
-
- NEXT
-
- TY=8
- LOCATE 1,TY-1
- PRINT "SPREAD/SPCHK return value"
-
- @SPRMAIN
- BUSY=0
- FOR I=0 TO AMAX-1
- NUM = AN+I
- SPREAD(NUM),AX,AY,ANG,SCL,CH
- SPC=SPCHK(NUM)
-
- COLOR 0
- LOCATE 0,TY+I
- PRINT NUM;":";
- LOCATE 3,TY+I
- PRINT "(";AX
- LOCATE 7,TY+I
- PRINT ",";AY;")"
- COLOR 0
- LOCATE 13,TY+I
- PRINT " SPCHK=";
- IF SPC THEN COLOR 4 ELSE COLOR 0
- PRINT SPC;
- VSYNC 1
- BUSY=BUSY+SPC
- NEXT
- IF BUSY THEN @SPRMAIN
- RETURN
-
- '--- BGFILL/BGCOPY/BGCLR
- @TEST5
- PAL=9 'Palette
- LOCATE 0,8
- PRINT "RUN BGFILL command"
- LAY=0
- X1=8:Y1=9
- X2=50:Y2=14
- CH=32
- H=0:V=0
- BGFILL LAY,X1,Y1,X2,Y2,CH,PAL,0,0
- WAIT 180
-
- X1=0 :Y1=15
- X2=X1+10:Y2=Y1+4
- FOR Y=0 TO (Y2-Y1)
- FOR X=0 TO (X2-X1)
- CH=X+(Y*32)
- BGPUT LAY,X1+X,Y1+Y,CH,PAL,0,0
- NEXT
- NEXT
- LOCATE 0,13
- PRINT "RUN BGCOPY command"
- PRINT "From COPY → to COPY"
- X3=X1+16:Y3=Y1
- BGCOPY LAY,X1,Y1,X2,Y2,X3,Y3
- WAIT 180
-
- GOSUB @HITANY
- COLOR 0
- LOCATE 0,21
- PRINT "RUN BGCLR command"
- BGCLR LAY
-
- RETURN
-
- @BGBUSY
- VSYNC 1
- BUSY=BGCHK(LAY)
- LOCATE 0,14
- COLOR 0
- PRINT "BGCHK return value:";
- IF BUSY THEN COLOR 3
- PRINT BUSY
- IF BUSY THEN @BGBUSY
- '0 = end
- RETURN
-
- '--- BGCHK/BGREAD
- @TEST6
-
- PAL=9 'Palette
- LAY=0
- X1=0 :Y1=10
- X2=X1+31:Y2=Y1+4
- FOR Y=0 TO (Y2-Y1)-1
- FOR X=0 TO (X2-X1)-1
- CH=X+(Y*32)
- BGPUT LAY,X1+X,Y1+Y,CH,PAL,0,0
- NEXT
- NEXT
-
- LOCATE 0,8
- PRINT "Getting information by"
- PRINT "BGCHK Function"
-
- BX=511:BY=511:SEC=3
- BGOFS LAY,BX,BY,60*SEC
- GOSUB @BGBUSY
- WAIT 60
- BX=0:BY=0:SEC=3
- BGOFS LAY,BX,BY,60*SEC
- GOSUB @BGBUSY
-
- WAIT 60
-
- SC$=""
- X=FLOOR((X1+X2)/2)
- Y=FLOOR((Y1+Y2)/2)
- LOCATE 0,16
- PRINT "RUN BGREAD"
- BGREAD(LAY,X,Y),SC$ '
- PRINT " X=";X;",Y=";Y
- PRINT "Return value :";SC$
- PRINT "(FOUR-DIGIT hexadecimal)"
- PRINT
- PRINT "Code ";SC$" is run BGPUT ="
- X=25:Y=21
- BGPUT LAY,X,Y,SC$
- 'Four-digit hexadecimal
-
- RETURN
-
- '--- Command Name
- @PUTCMD
- PRINT
- COLOR 4
- PRINT " ";
- PRINT "RUN ";MENU$(CMD-1)
- PRINT " ↓"
- COLOR 0
- PRINT
- RETURN
-
- '---
- @HITANY
- GOSUB @KEYOFF
- @HITANY2
- COLOR RND(13)+1
- LOCATE 7,23
- PRINT "HIT ANY BUTTON";
- VSYNC 5
- IF BUTTON() THEN RETURN
- GOTO @HITANY2
-
- '---
- @KEYOFF
- IF BUTTON() THEN @KEYOFF
- RETURN
-
- '+-------------------------+
- '| end |
- '+-------------------------+
A demo using multi-page graphic screens.
- '+--------------------------+
- '|SAMPLE10 |
- '|Advanced Graphics Function|
- '+--------------------------+
- CLEAR
-
- '--- Initialize MENU
- MENUMAX=4
- DIM MENU$(MENUMAX)
- DIM INFO$(MENUMAX)
-
- FOR I=0 TO MENUMAX-1
- READ MENU$(I)
- READ INFO$(I)
- NEXT
-
- DATA "GPAGE"
- DATA "Swap GRAPHIC screen"
- DATA "GDRAWMD"
- DATA "Change drawing mode"
- DATA "GPRIO"
- DATA "Change priority of GRAPHIC"
- DATA "GCOPY"
- DATA "COPY the GRAPHIC screen"
-
- '--- MAIN LOOP
- @MAIN
- ACLS
- COLOR 0
- PRINT "+---------------------------+"
- PRINT "|SAMPLE10 |"
- PRINT "| Advanced Graphics Function|"
- PRINT "+---------------------------+"
- PRINT
-
- FOR I=0 TO MENUMAX-1
- Y=I*3+5
- COLOR 9
- LOCATE 0,Y
- PRINT I+1;" ";
- COLOR 0
- PRINT MENU$(I);" ";
- COLOR 3
- LOCATE 2,Y+1
- PRINT INFO$(I)
- NEXT
-
- COLOR 0
- LOCATE 0,19
- INPUT "Ж:Please select(0=END)";CMD
- CLS
- IF CMD<=0 THEN END
- IF CMD>MENUMAX THEN @MAIN
- COLOR 3
- PRINT "---------------------------"
- PRINT
- PRINT MENU$(CMD-1):PRINT
- PRINT " ";INFO$(CMD-1)
- PRINT "---------------------------"
- COLOR 7
- PRINT "Execute example:":PRINT
- COLOR 0
-
- IF CMD==1 THEN GOSUB @TEST1
- IF CMD==2 THEN GOSUB @TEST2
- IF CMD==3 THEN GOSUB @TEST3
- IF CMD==4 THEN GOSUB @TEST4
-
- GOSUB @HITANY
- GOTO @MAIN
-
-
- '--- GPAGE
- @TEST1
- FOR I=0 TO 3
- P1=I 'Drawing page
- P2=I 'Display page
- GPAGE 0,P1,P2
- FOR A=0 TO 359
- X1=128
- Y1=96
- R=RAD(A)
- X2=COS(R)*96+X1
- Y2=SIN(R)*96+Y1
- COL=((((A/5)+I)%4)<2)*2
- GLINE X1,Y1,X2,Y2,COL
- NEXT
- X=32
- Y=80
- A$="Page"+STR$(I)
- GOSUB @GPUTSTR
- WAIT 60
- NEXT
- FOR I=0 TO 60
- P1=I%4 'Drawing page
- P2=I%4 'Display page
- GPAGE 0,P1,P2
- WAIT 20
- NEXT
- GPAGE 0,0,0
- RETURN
-
- '--- GDRAWMD
- @TEST2
- FOR MODE=0 TO 1
- LOCATE MODE*16,8
- PRINT "GDRAWMD ";MODE
- GDRAWMD MODE
- FOR I=0 TO 31
- X1=RND(64)+(MODE*128)
- Y1=RND(128)+64
- X2=X1+63
- Y2=Y1+63
- COL=RND(13)+1
- GFILL X1,Y1,X2,Y2,COL
- WAIT 15
- NEXT
- NEXT
- GDRAWMD FALSE 'Normal
-
- RETURN
-
- '--- GPRIO
- @TEST3
- PAL=2
- AN=0:AX=128:AY=96:W=16:H=16
- SPR=2
- SPSET AN,68,PAL,0,0,SPR,W,H
- SPHOME AN,W/2,H/2
- SPSCALE AN,200
- SPOFS AN,AX,AY
-
- PAL=9
- FOR Y=0 TO 7
- FOR X=0 TO 7
- BGPUT 0,X+ 8,Y+ 3,48,PAL,0,0
- BGPUT 1,X+16,Y+12,32,PAL,0,0
- NEXT
- NEXT
-
- PRINT "SPRITE of"
- PRINT "Order of priorty=";SPR
- PRINT
- FOR I=0 TO 255 STEP 8
- GLINE I,0,128,191,4
- NEXT
- FOR I=0 TO 3
- GPRIO I
- PRINT "GRAPHIC of"
- PRINT "Order of priorty=";I
- PRINT
- WAIT 120
- NEXT
- GPRIO 3
- RETURN
-
- '--- GCOPY
- @TEST4
- GCLS
- FOR MODE=0 TO 1
- LOCATE 16*MODE,14
- PRINT " ";
- IF MODE==0 THEN PRINT "Don't Copy"
- IF MODE==1 THEN PRINT "Copy to COLOR 0"
-
- FOR A=0 TO 359
- X1=64+(128*MODE)
- Y1=64
- R=RAD(A)
- X2=COS(R)*32+X1
- Y2=SIN(R)*32+Y1
- COL=FLOOR(16*A/360) 'Color
- GLINE X1,Y1,X2,Y2,COL
- NEXT
-
- FOR I=0 TO 8
- 'Transfer source page
- P=0
- 'Transfer source start point
- X1=32+(128*MODE)
- Y1=32
- 'Transfer source end point
- X2=X1+64
- Y2=Y1+64
- 'Transfer source start point
- X3=RND(64)+(128*MODE)
- Y3=128
- GCOPY P,X1,Y1,X2,Y2,X3,Y3,MODE
- WAIT 30
- NEXT
- WAIT 60
- NEXT
- RETURN
-
- '--- Command Name
- @PUTCMD
- PRINT
- COLOR 4
- PRINT " ";
- PRINT MENU$(CMD-1)
- PRINT " ↓"
- COLOR 0
- PRINT
- RETURN
-
- '---
- @HITANY
- GOSUB @KEYOFF
- @HITANY2
- COLOR RND(13)+1
- LOCATE 7,23
- PRINT "HIT ANY BUTTON";
- VSYNC 5
- IF BUTTON() THEN RETURN
- GOTO @HITANY2
-
- '---
- @KEYOFF
- IF BUTTON() THEN @KEYOFF
- RETURN
-
- '---
- @GPUTSTR
- PAL=0 'Palette
- SZ=4 'Size
- FOR PTR=0 TO LEN(A$)-1
- NUM=ASC(MID$(A$,PTR,1))
- GPUTCHR X,Y,"BGF0",NUM,PAL,SZ
- X=X+(8*SZ)
- NEXT
- RETURN
-
- '+-------------------------+
- '| end |
- '+-------------------------+
A program demontrating music created and played using MML(Music Macro Language).
- '+------------------+
- '|SAMPLE11 |
- '| Playing Sound |
- '+------------------+
- CLEAR
-
- '--- Read Tone data
- GMAX=13
- DIM GNUM(GMAX)
- DIM GNAME$(GMAX)
-
- RESTORE @GAKKI
- FOR I=0 TO GMAX-1
- READ GNUM(I)
- READ GNAME$(I)
- NEXT
-
- 'Track Number(128-255)
- NUM=128
- 'Track (0-7)
- TRK=0
- 'Tempo
- TMP=150
- 'Octave
- OCT=4
-
- '--- KEY repeat time
- FOR I=0 TO 10
- BREPEAT I,30,8
- NEXT
-
- '---
- @MAIN
-
- ACLS
- COLOR 0
- PRINT "+--------------------+"
- PRINT "|SAMPLE11 |"
- PRINT "| Playing MML Sound |"
- PRINT "+--------------------+"
- PRINT
- PRINT "↑↓:Change tone"
- PRINT "←→:Change Tempo"
- PRINT "[A]:Playing"
- PRINT "[B]:Exit"
- PRINT
- COLOR 4
- PRINT "Sound NO.:";NUM
- PRINT "Track NO.:";TRK
- PRINT "Tone:";GNAME$(IDX);
- PRINT "(";GNUM(IDX);")"
- PRINT "Tempo:";TMP
- PRINT "Octave:";OCT
- PRINT
- COLOR 0
-
- @SWOFF
- IF BUTTON(1) THEN @SWOFF
-
- @HITANY
- BT=BUTTON(1)
- IF BT==0 THEN @HITANY
-
- IF BT AND 1 THEN IDX=IDX+1
- IF BT AND 2 THEN IDX=IDX-1
- IF BT AND 4 THEN TMP=TMP-5
- IF BT AND 8 THEN TMP=TMP+5
- IF IDX<0 THEN IDX=GMAX-1
- IF IDX>=GMAX THEN IDX=0
- IF TMP<1 THEN TMP=1
- IF TMP>240 THEN TMP=240
-
- IF BT AND 32 THEN END
- IF (BT AND 16)==0 THEN @MAIN
-
- C$=":"+STR$(TRK)
- C$=C$+"@"+STR$(GNUM(IDX))
- C$=C$+"T"+STR$(TMP)
- C$=C$+"O"+STR$(OCT)
-
- M$="G4A4B1A4G4R1G8A8B8A8G8A2"
-
- BGMCLEAR NUM
- BGMSET NUM,C$,M$
- COLOR 3
- PRINT "MML Style"
- COLOR 0
- PRINT C$
- PRINT M$
- PRINT
-
- BGMPLAY NUM
-
- COLOR 12
- PRINT "Playing BGM NOW・・・"
-
- @BUSYCHK
- BUSY=BGMCHK(TRK)
- IF BUSY THEN @BUSYCHK
-
- COLOR 0
- PRINT "・・・End"
- WAIT 120
-
- GOTO @MAIN
-
- @GAKKI
- DATA 0,"ACOUSTIC PIANO"
- DATA 4,"ELECTRIC PIANO"
- DATA 24,"GUITER"
- DATA 32,"BASS"
- DATA 40,"VIOLIN"
- DATA 44,"TREMOLO STRINGS"
- DATA 47,"TIMPANI"
- DATA 72,"PICCOLO"
- DATA 80,"LEAD 1(SQUARE)"
- DATA 88,"PAD 1(NEW AGE)"
- DATA 96,"FX 1(RAIN)"
- DATA 116,"TAIKO DRUMS"
- DATA 127,"GUNSHOT"
-
- '+-------------------------+
- '| end |
- '+-------------------------+
A program showing you how to create you own unique instrumental sounds.
- '
- '■Waveform creation tool v1.1
- '---------------------------
- '(c)SmileBoom
- '・Create to 64/128 wave data
- '・Save at MEM$
- '・Step/Not file Error
- '
- ACLS
-
- '---initialize enviroments
- CLEAR:MAX=32
- DIM W(MAX,128),ADSR$(MAX)
- DIM EG(4),EGN$(4)
- EGN$(0)="A:":EGN$(1)="D:"
- EGN$(2)="S:":EGN$(3)="R:"
- PNLTYPE"OFF"
- FOR I=0 TO 3
- ICONCLR I
- NEXT
- PG=1:OY=16:TC=0
- OLDBN=-1:BW=0
- GOSUB @DSPINIT
-
- '---
- WS=0:GOSUB @SIZE
- FOR NO=0 TO MAX-1
- GOSUB @MKSIN
- ADSR$(NO)="7F3F0F3F"
- NEXT
- '---
- NO=0:GOSUB @WAVSET
-
- '---Main loop
- @MLOOP
- B=BTRIG():BN=BUTTON()
- SPOFS 0,TCHX,TCHY
- GOSUB @FILESUB
- GOSUB @SELNO
- GOSUB @EDIT
- VSYNC 1
- IF B!=1024 THEN @MLOOP
- '---Clean up
- CHRINIT "BGU0"
- END
-
- '---File related
- @FILESUB
- IF B==64 THEN @FSAVE
- IF B!=128 THEN RETURN
-
- '---Read
- @FLOAD
- GOSUB @MKFNAME
- LOAD NE$
- IF RESULT==FALSE THEN RETURN
- WS=VAL("&H;"+MID$(MEM$,0,2))
- GOSUB @SIZECNG
- ADSR$(NO)=MID$(MEM$,2,8)
- PRINT " WS:";WS
- PRINT "ADSR:";ADSR$(NO)
- LOAD NW$
- IF RESULT==FALSE THEN RETURN
- FOR I=0 TO WS-1
- W$=MID$(MEM$,I*2,2)
- V=VAL("&H;"+W$)
- IF V>127 THEN V=(256-V)*-1
- W(NO,I)=V
- NEXT
- GOSUB @WAVSET
- GOSUB @GRPDRAW
- RETURN
-
- '---Write
- @FSAVE
- GOSUB @MKFNAME
- GOSUB @MKWAVE
- MEM$=M$
- SAVE NW$
- MEM$=HEX$(WS,2)+ADSR$(NO)
- SAVE NE$
- RETURN
-
- '---
- @MKFNAME
- NW$="MEM:WAVE"+STR$(NO+224)
- NE$="MEM:EG"+STR$(NO+224)
- RETURN
-
- '---Target Switching
- @SELNO
- V=0
- IF B==1 THEN V=1
- IF B==2 THEN V=-1
- IF V==0 THEN RETURN
- NO=NO+V
- IF NO<0 THEN NO=MAX-1
- IF NO>MAX-1 THEN NO=0
- GOSUB @WAVSET
- GOSUB @GRPDRAW
- RETURN
-
- '---EDIT
- @EDIT
- IF B==16 THEN @PLAY
- IF B==32 THEN @SIZESET
- GOSUB @BTCHECK
- '---
- IF TC THEN @TCGET
- IF !TCHST THEN RETURN
- '---
- @TCGET
- IF TCHST THEN @TCCNT
- '---
- GOSUB @GRPDRAW
- TC=0
- RETURN
- '---
- @TCCNT
- X=TCHX:Y=TCHY-16
- IF Y<0 THEN Y=0
- IF Y>144 THEN RETURN
- IF Y>127 THEN Y=127
- '---
- X=FLOOR(X/ST):L=BN AND 256
- IF L THEN X=FLOOR(X/2)*2+1
- W(NO,X)=((127-Y)-64)*2
- EX=X*ST:EY=Y+OY
- IF TC==0 THEN TX=EX:TY=EY
- GLINE TX,TY,EX,EY,2
- TX=EX:TY=EY:TC=1
- RETURN
-
- '---Waveform size switching
- @SIZESET
- GOSUB @SIZE
- GOSUB @MKSIN
- GOTO @GRPDRAW
- '---
- @SIZE
- WS=WS+64
- IF WS>128 THEN WS=64
- '
- @SIZECNG
- ST=FLOOR(256/WS)
- PNLSTR 28,1,STR$(WS)+" "
- RETURN
-
- '---Simple Play
- @PLAY
- PRINT "О:@";NO+224;
- PRINT "CDEFGAB<C"
- GOSUB @MKWAVE
- VC=NO+224
- BGMPRG VC,EG(0),EG(1),EG(2),EG(3),M$
- M$="@"+STR$(VC)
- BGMPLAY M$+"CDEFGAB<C"
- RETURN
- '
- @MKWAVE
- COLOR 5:M$=""
- FOR I=0 TO WS-1
- C$=HEX$(W(NO,I),2)
- M$=M$+C$:PRINT C$;
- NEXT
- COLOR 0
- RETURN
-
- '---Initialize Screen
- 'CON:Caracter
- ' SP:Cursor
- 'BG0:Line Cursor
- 'GRP:Graph
- 'BG1:Background grid
- '
- @DSPINIT
- BGPAGE PG:BGCLR
- SPPAGE PG:SPCLR
- GCLS:GPAGE PG:GPRIO 2
- H$="D1D1D1D1"
- C$=H$+"00001111"*7
- CHRSET "BGU0",1,C$
- C$=H$+"00110011"*7
- CHRSET "BGU0",2,C$
- C$=H$+"0"*56
- CHRSET "BGU0",3,C$
- '---
- SPSET 0,110,0,0,0,0
- SPCOL 0,0,0,1,1,FALSE
- FOR N=0 TO 3
- X=N*40:Y=176
- GOSUB @BTOPEN
- NEXT
- '---
- C$="WAVE EDITOR"
- PNLSTR 0,0,C$
- C$="А=PLAY Ф=SAVE Х=LOAD "
- C$=C$+"Б=SIZE:"
- PNLSTR 0,1,C$,7
- RETURN
-
- '---Initialize Waveform
- @MKSIN
- S=360/WS
- FOR I=0 TO WS-1
- A=SIN(RAD(S*I))
- W(NO,I)=FLOOR(A*128)
- NEXT
- RETURN
- '---Switching Waveform
- @WAVSET
- FOR N=0 TO 3
- C$=MID$(ADSR$(NO),N*2,2)
- EG(N)=VAL("&H;"+C$)
- GOSUB @BTNUM
- NEXT
- '---Display of Graph
- @GRPDRAW
- C$="П↑↓=WAVE:"
- PNLSTR 0,19,"П↑↓=WAVE:",7
- C$=STR$(NO+224)
- PNLSTR 9,19,C$
- '---
- C=WS/64:Y=OY/8
- BGFILL 1,0,Y,31,Y+15,C
- BGFILL 1,0,Y+16,31,Y+16,3
- '---
- GCLS 0
- FOR I=0 TO WS-1
- X=I*ST
- Y=FLOOR((W(NO,I)+128)/2)
- Y=OY+128-Y
- GFILL X,Y,X+ST-1,OY+64,15
- NEXT
- RETURN
-
- '---Sprite Up/Down botton
- @BTOPEN
- SPSET N*2+1,92,0,0,0,1
- SPOFS N*2+1,X,Y
- SPSET N*2+2,93,0,0,0,1
- SPOFS N*2+2,X+16,Y
- PNLSTR X/8,(Y-8)/8,EGN$(N),4
- '---
- @BTNUM
- C$=HEX$(EG(N),2)
- PNLSTR N*5+2,(Y-8)/8,C$
- RETURN
-
- '---
- @BTCHECK
- IF TCHST THEN @BTCGO
- '---Separate
- FOR N=1 TO 8
- GOSUB @BTCOFF
- NEXT
- OLDBN=-1
- RETURN
- '---
- @BTCOFF
- SPREAD(N),X,Y
- X=X AND &HF8;:Y=Y AND &HF8;
- SPOFS N,X,Y
- RETURN
- '---
- @BTCGO
- X=TCHX:Y=TCHY
- I=SPHIT(0)
- IF !I THEN RETURN
- '
- N=SPHITNO
- IF N!=OLDBN THEN @BTC1ST
- '---Key repeat
- IF BW<15 THEN BW=BW+1:GOTO @BTCOFF
- BC=BC+1:IF BC<2 THEN @BTCOFF
- GOTO @BTCGET
- '---Press
- @BTC1ST
- OLDBN=N:BW=0
- '---
- @BTCGET
- BC=0
- SPREAD(N),X,Y
- X=X AND &HF8;:Y=Y AND &HF8;
- SPOFS N,X+1,Y+1
- '
- N=N-1
- V=-1:IF N AND 1 THEN V=1
- N=FLOOR(N/2):V=EG(N)+V
- IF V<0 THEN V=0
- IF V>127 THEN V=127
- EG(N)=V
- GOTO @BTNUM
These are advanced programs using a wide variety of BASIC commands. Each of these samples can also be used when you make your own games. You can view the programs in Edit Mode, and once you have mastered the BASIC commands, you can add your own unique features.
EXEC "CHRED" (Touch Enter to Run)
A character creation tool.This tool can be used to create character data for backgrounds or sprites. Select color samples and tools and input them in the Edit Area. Touch the A Button to access File Mode, enter L (or S) and then touch ENTER to load or save. You can access and use saved data via programs.
(ex.) LOAD "BGU0:MYBG00"
- '=====================
- 'CHARACTER EDITOR
- '(c)SmileBoom Co.Ltd.
- '=====================
- CLS:ICONCLR
- FOR P=1 TO 0 STEP -1
- GPAGE P,P,P:GCLS 0:GPRIO 3
- SPPAGE P:SPCLR
- BGPAGE P:BGCLR
- BGCLIP 0,0,31,23
- BGOFS 0,0,0:BGOFS 1,0,0
- NEXT
- VISIBLE 1,1,0,0,1,1
- '---
- CLEAR
- DIM CBANK(3),CBMAX(3),CSTR$(3)
- DIM CS$(3,4),CTYPE$(3)
- DIM MD$(4),SPIN(5),OFS(8,8)
- DIM BCNT(4),ZST(4),BZC(4)
- DIM SW(8,8)
- '--- Character bank
- DATA "BGU",4,"BG"
- DATA "SPU",8,"SP"
- DATA "BGF",1,"BG"
- FOR I=0 TO 2
- READ CSTR$(I),CBMAX(I),CTYPE$(I)
- NEXT
- '---
- BCNT(0)=1:ZST(0)=8:BZC(0)=2
- BCNT(1)=2:ZST(1)=8:BZC(1)=2
- BCNT(2)=4:ZST(2)=4:BZC(2)=4
- BCNT(3)=8:ZST(3)=2:BZC(3)=8
- '--- Cursor
- DATA "й","и","ж","з"
- DATA " "," "," "," "
- FOR I=0 TO 1
- FOR J=0 TO 3
- READ CS$(I,J)
- NEXT
- NEXT
- '--- String mode
- DATA " FILE"
- DATA "CLEAR"
- DATA "PAINT"
- DATA " PEN"
- FOR I=0 TO 3
- READ MD$(I)
- NEXT
- '--- Splite button
- _X=0:_Y=1:_N=2:_G=3
- _C=4:_T=5:_MAX=6
- TP=8:SPTOP=32:PR=0
- SBMAX=29:SPINTOP=19
- DIM SB(SBMAX,_MAX)
- '---0-7:chr bank
- DATA 8,160,48,1,0,0
- DATA 24,160,49,1,0,0
- DATA 40,160,50,1,0,0
- DATA 56,160,51,1,0,0
- DATA 72,160,52,1,0,0
- DATA 88,160,53,1,0,0
- DATA 104,160,54,1,0,0
- DATA 120,160,55,1,0,0
- '---8-10:bg/sp
- DATA 144,104,64,8,0,0
- DATA 144,120,67,8,0,1
- DATA 144,136,66,8,0,0
- '---11-18:size
- DATA 192,128,76,11,0,0
- DATA 208,128,77,11,0,0
- DATA 224,128,78,11,0,0
- DATA 240,128,79,11,0,0
- DATA 192,144,76,15,0,0
- DATA 208,144,77,15,0,0
- DATA 224,144,78,15,0,0
- DATA 240,144,79,15,0,0
- '---19-24:r,g,b
- DATA 152,24,92,0,0,0
- DATA 168,24,93,0,0,0
- DATA 152,48,92,0,0,0
- DATA 168,48,93,0,0,0
- DATA 152,72,92,0,0,0
- DATA 168,72,93,0,0,0
- '---25-28:anim c,w
- DATA 224, 96,92,0,0,0
- DATA 240, 96,93,0,0,0
- DATA 224,112,92,0,0,0
- DATA 240,112,93,0,0,0
- '---29
- SPPAGE 1
- FOR I=0 TO SBMAX-1
- FOR J=0 TO _MAX-1
- READ SB(I,J)
- NEXT
- SPSET I+SPTOP,SB(I,_N),0,0,0,PR
- SPOFS I+SPTOP,SB(I,_X),-16
- NEXT
- '---
- FOR I=0 TO 3
- BREPEAT I,20,2
- NEXT
- '--- Initialization
- CPTP=-1:CTYPE=0
- GOSUB @SETCSTR
- PAL=0:COL=0:XC=7
- MODE=3:SPSW=FALSE
- CX=0:CY=0
- CSX=1:CSY=1:CSZ=1
- ZX=BCNT(CSX):ZY=BCNT(CSY)
- GOSUB @CALCZ:ZZ=BCNT(CSZ)
- GSX=256:ANTOP=84
- W1=0:W2=0:OLDAC=-1
- SPIN(3)=2:SPIN(4)=16
- GOSUB @ZSWON
- GOSUB @MKOFS
- GOSUB @SETCSUB
- GOSUB @DISPINIT
-
- '+---------+
- '|Main loop|
- '+---------+
- @MAIN
- '
- OX=TX:OY=TY:OS=TS
- TX=TCHX:TY=TCHY:TS=TCHST
- OLDB=B:B=BTRIG():BN=BUTTON()
- OLDIC=IC:IC=ICONCHK()
- '
- GOSUB @SPBUT
- GOSUB @SELCOL
- GOSUB @CSRMOVE
- GOSUB @COLCSR
- GOSUB @DRAWCOL
- GOSUB @CHKMODE
- GOSUB @SETAN
- '
- VSYNC 1
- '
- GOTO @MAIN
-
- '=============================
- @CSRMOVE 'Cursor on upper screen
- '=============================
- VX=0:VY=0
- IF B AND 1 THEN VY=VY-1
- IF B AND 2 THEN VY=VY+1
- IF B AND 4 THEN VX=VX-1
- IF B AND 8 THEN VX=VX+1
- IF VX+VY==0 THEN @PUTCSR
- IF BN AND 256 THEN @LBUTSUB
- '---
- GOSUB @CLRCSR
- GOSUB @CMCHECK
- GOSUB @MKOFS
- GOSUB @CHRZOOM
- '---
- @PUTCSR
- N=OFS(0,0)+(CBANK(CTYPE)*256)
- LOCATE 23,23
- PRINT RIGHT$(" "+STR$(N),4);
- LOCATE 28,23
- PRINT RIGHT$(" "+STR$(CX),2);",";CY;
- COLOR CC:CC=CC+1
- CC=CC AND 15:N=0
- '---
- @PCSRSUB
- IF CY THEN O=0:YO=CY-1:GOSUB @PCSRX
- IF CX THEN O=1:XO=CX-1:GOSUB @PCSRY
- O=2:YO=CY+ZY:GOSUB @PCSRX
- IF CX<32-ZX THEN O=3:XO=CX+ZX:GOSUB @PCSRY
- COLOR 0
- RETURN
- '---
- @PCSRX
- FOR J=0 TO ZX-1
- IF CX+J<32 THEN LOCATE CX+J,YO:PRINT CS$(N,O)
- NEXT
- RETURN
- '---
- @PCSRY
- FOR J=0 TO ZY-1
- LOCATE XO,CY+J:PRINT CS$(N,O)
- NEXT
- RETURN
- '---
- @CLRCSR
- N=1:GOSUB @PCSRSUB
- RETURN
-
- '====================
- @CMCHECK
- IF CTYPE!=1 THEN @CMS
- VX=VX*BZC(CSX)
- VY=VY*BZC(CSY)
- '---
- @CMS
- CX=CX+VX
- IF CX<0 THEN CX=0
- IF CX>32-ZX THEN CX=32-ZX
- CY=CY+VY
- IF CY<0 THEN CY=0
- IF CY>8-ZY THEN CY=8-ZY
- '---
- IF CTYPE!=1 THEN RETURN
- '--- Position correction
- CX=FLOOR(CX/BZC(CSX))*BZC(CSX)
- CY=FLOOR(CY/BZC(CSY))*BZC(CSY)
- RETURN
-
- '====================
- @SELCOL 'Color selection
- '====================
- X=HDX:Y=HDY:W=255:H=15
- GOSUB @TOUCH
- IF R GOTO @_COLNEW
- '--- Bank
- X=PDX:Y=PDY:W=63:H=W
- GOSUB @TOUCH
- IF R==FALSE THEN RETURN
- X=FLOOR((X-PDX)/16)
- Y=FLOOR((Y-PDY)/16)
- SPCHR PAL+2,PAL+48,0,0,0,1
- C=PAL:PAL=Y*4+X
- SPCHR PAL+2,PAL+48,XC,0,0,1
- IF C==PAL THEN RETURN
- GOTO @SETCOLOR
- '--- Color
- @_COLNEW
- COL=FLOOR((X-HDX)/16)
- '---
- @COLCSR
- X=COL*16:Y=0
- SPOFS 0,HDX+X,HDY+Y
- '---
- @COLRGB
- X=19:C=PAL*16+COL
- COLREAD(CT$,C),SPIN(0),SPIN(1),SPIN(2)
- '---
- @PUTSPIN
- N=0:Y= 2:C=13:GOSUB @PSPIN
- N=1:Y= 5:C= 4:GOSUB @PSPIN
- N=2:Y= 8:C=11:GOSUB @PSPIN
- X=24
- N=3:Y=12:C= 0:GOSUB @PSPIN
- N=4:Y=14:C= 0:GOSUB @PSPIN
- RETURN
- '====================
- @COLBOX
- FOR I=0 TO 15
- X=I*16+HDX+1:Y=HDY+1
- GFILL X+1,Y,X+11,Y+12,PAL*16+I
- GFILL X,Y+1,X+12,Y+11,PAL*16+I
- NEXT
- X=HDX+1:Y=HDY+1
- GLINE X,Y+12,X+12,Y,PAL*16+15
- RETURN
-
- '====================
- @DRAWCOL 'Put a dot
- '====================
- IF BN AND 256 THEN @_SPOIT
- IF TS GOTO @DRCHECK
- IF DR THEN @DCOLSUB
- RETURN
-
- '---
- @DRCHECK
- X=EX:Y=EY:W=127:H=W
- GOSUB @TOUCH
- IF R==FALSE THEN RETURN
- '---
- GOSUB @CALCZ:Z=ZST(CSZ)
- X=EX+(FLOOR((TX-EX)/Z)*Z)
- Y=EY+(FLOOR((TY-EY)/Z)*Z)
- C=PAL*16+COL:DR=TRUE
- IF (C AND 15)==0 THEN C=0
- IF MODE==1 GOTO @_CLEAR
- IF MODE==3 GOTO @_PEN
- '---
- @_PAINT
- C2=C+16:C2=C2 AND 255
- GBOX EX-1,EY-1,EX+128,EY+128,C2
- GPAINT X,Y,C
- GOSUB @ZSWON
- RETURN
- '---
- @_CLEAR
- Z=Z*8
- X=FLOOR((X-EX)/Z)
- Y=FLOOR((Y-EY)/Z)
- XX=EX+X*Z:YY=EY+Y*Z
- GFILL XX,YY,XX+Z-1,YY+Z-1,C
- GOSUB @ZSWSET
- RETURN
- '---
- @_PEN
- GFILL X,Y,X+Z-1,Y+Z-1,C
- X=FLOOR((X-EX)/(Z*8))
- Y=FLOOR((Y-EY)/(Z*8))
- GOSUB @ZSWSET
- RETURN
- '---
- @_SPOIT
- COL=GSPOIT(TX,TY) AND 15
- RETURN
-
- '---
- @ZSWON
- N=1:GOTO @ZSW
- @ZSWOFF
- N=0
- @ZSW
- FOR Y=0 TO 7
- FOR X=0 TO 7
- SW(X,Y)=N
- NEXT
- NEXT
- RETURN
-
- '---
- @ZSWSET
- SW(X,Y)=1
- RETURN
-
- '====================
- @DCOLSUB 'Redraw at separate case
- GOSUB @REDO
- '---
- @DRAWSUB
- SPPAGE 0:BGPAGE 0:GPAGE 1
- ZS=ZST(CSZ):ZD=ZS*8
- FOR YD=0 TO ZY-1
- FOR XD=0 TO ZX-1
- IF SW(XD,YD)==0 THEN @DSN
- X=EX+XD*ZD:Y=EY+YD*ZD
- I=OFS(XD,YD):GOSUB @SETCHR
- @DSN
- NEXT
- NEXT
- GOSUB @ZSWOFF
- SPPAGE 1:BGPAGE 1
- DR=FALSE
- RETURN
- '---
- @SETCHR 'I=INDEX,X,Y=OFS
- CH$=""
- FOR IY=0 TO 7
- FOR IX=0 TO 7
- C=GSPOIT(IX*ZS+X,IY*ZS+Y)
- CH$=CH$+HEX$(C AND 15)
- NEXT
- NEXT
- '---
- X=(CX+XD)*8:Y=(CY+YD)*8
- CHRSET CN$,I,CH$
- GPAGE 0
- GFILL X,Y,X+7,Y+7,0
- GPUTCHR X,Y,CN$,I,PAL,1
- GPAGE 1
- RETURN
-
- '====================
- @CHKMODE 'Mode check
- '====================
- IF B==16 THEN @COPY
- IF B==32 THEN @PASTE
- IF B==64 THEN @REVH
- IF B==128 THEN @REVV
- IF B==512 THEN @UNDO
- '---
- IF MODE==IC THEN RETURN
- IF IC==-1 THEN RETURN
- IF IC==0 GOTO @FILEMODE
- MODE=IC
- '---
- @PUTMODE
- PNLSTR 27,20,MD$(MODE)
- RETURN
-
- '====================
- @LBUTSUB ' VX,VY
- GPAGE 0
- DX=ZX*8:XX=GX+DX-1
- DY=ZY*8:YY=GY+DY-1
- IF VY>0 THEN @SCRLD
- IF VY<0 THEN @SCRLU
- IF VX>0 THEN @SCRLR
- '--- ←
- GCOPY GX,GY,GX,YY,GX+DX,GY,1
- GCOPY GX+1,GY,XX+2,YY,GX,GY,1
- GPAGE 1
- RETURN
- '--- →
- @SCRLR
- GCOPY XX,GY,XX,YY,GX-1,GY,1
- GCOPY GX-2,GY,XX-1,YY,GX-1,GY,1
- GPAGE 1
- RETURN
- '--- ↑
- @SCRLU
- GCOPY GX,GY,XX,GY,GX,GY+DY,1
- GCOPY GX,GY+1,XX,YY+2,GX,GY,1
- GPAGE 1
- RETURN
- '--- ↓
- @SCRLD
- GCOPY GX,YY,XX,YY,GX,GY-1,1
- GCOPY GX,GY-2,XX,YY-1,GX,GY-1,1
- GPAGE 1
- RETURN
-
- '--- ←→
- @REVH
- GPAGE 0
- X1=GX:X2=GX+(ZX*8)-1:X3=GX-1
- YY=GY+(ZY*8)-1:DX=FLOOR(ZX*4)
- FOR XX=0 TO DX-1
- GCOPY X1,GY,X1,YY,X3,GY,1
- GCOPY X2,GY,X2,YY,X1,GY,1
- GCOPY X3,GY,X3,YY,X2,GY,1
- GFILL X3,GY,X3,YY,0
- X1=X1+1:X2=X2-1
- NEXT
- GPAGE 1
- RETURN
- '--- ↑↓
- @REVV
- GPAGE 0
- XX=GX+(ZX*8)-1:DY=FLOOR(ZY*4)
- Y1=GY:Y2=GY+(ZY*8)-1:Y3=GY-1
- FOR YY=0 TO DY-1
- GCOPY GX,Y1,XX,Y1,GX,Y3,1
- GCOPY GX,Y2,XX,Y2,GX,Y1,1
- GCOPY GX,Y3,XX,Y3,GX,Y2,1
- GFILL GX,Y3,XX,Y3,0
- Y1=Y1+1:Y2=Y2-1
- NEXT
- GPAGE 1
- RETURN
-
- '---Simple copy(Leave on upper screen)
- @COPY
- IX=GX:IY=GY
- '---
- @PUSHIMG
- GPAGE 0
- X=CX*8:Y=CY*8
- GFILL IX,IY,IX+63,IY+63,0
- J=((BN AND 256)!=0)
- GCOPY X,Y,X+ZX*8-1,Y+ZY*8-1,IX,IY,J
- GPAGE 1
- RETURN
-
- '---REDO
- @REDO
- IX=RX:IY=RY
- GOSUB @PUSHIMG
- RETURN
-
- '---UNDO
- @UNDO
- IX=RX:IY=RY
- GOTO @PSTSUB
-
- '---PASTE
- @PASTE
- GOSUB @REDO
- IX=GX:IY=GY
- '---
- @PSTSUB
- J=BN AND 256
- DX=ZST(CSZ):DY=ZST(CSZ)
- FOR YY=0 TO ZY*8-1
- FOR XX=0 TO ZX*8-1
- GPAGE 0
- I=GSPOIT(IX+XX,IY+YY)
- GPAGE 1
- IF J==0 THEN @PSTOK
- IF (I AND 15)==0 THEN @SKPPST
- @PSTOK
- GPSET EX+XX*DX,EY+YY*DY,I
- @SKPPST
- NEXT
- NEXT
- '---
- GOSUB @ZSWON
- GOSUB @DRAWSUB
- GOSUB @CHRZOOM
- RETURN
-
- '====================
- @SPBUT 'Sprite button
- '====================
- SBIX=-1
- IF SPSW==FALSE GOTO @_TOFF
- IF TS==0 GOTO @_TCLR0
- '--- Repeat check
- IF W1==30 GOTO @KR2
- W1=W1+1:IF W1<30 THEN RETURN
- GOTO @_TOFF
- @KR2
- W2=W2+1:IF W2<8 THEN RETURN
- GOTO @_TOFF
- '--- Relese Spin button
- @_TCLR0
- W1=0:W2=0
- SPSW=FALSE
- '---
- @_TCLR
- FOR I=SPINTOP TO SBMAX-1
- SB(I,_C)=0
- SPCHR I+SPTOP,SB(I,_N),SB(I,_C),0,0,PR
- SPOFS I+SPTOP,SB(I,_X),SB(I,_Y)
- NEXT
- RETURN
- '---
- @_TOFF
- IF TS==FALSE THEN @_TCLR0
- SPSW=FALSE:W=15:H=W
- FOR I=0 TO SBMAX-1
- IF SPSW GOTO @_SKIPSP
- IF SB(I,_C)==XC THEN @SKIPSP
- X=SB(I,_X):Y=SB(I,_Y)
- GOSUB @TOUCH
- IF R==FALSE GOTO @_SKIPSP
- GOSUB @SETSB
- SPSW=TRUE
- @_SKIPSP
- NEXT
- RETURN
- '--- Processed number button
- @SETSB
- OLDCB=CBANK(CTYPE)
- OLDCT=CTYPE
- OLDX=CSX:OLDY=CSY
- SBIX=I:G=SB(I,_G)
- IF G==1 THEN @SBCHRBK
- IF G==8 THEN @SBTYPE
- IF G==11 THEN @SBSX
- IF G==15 THEN @SBSY
- '--- Relese Spin button
- GOSUB @_TCLR
- I=SBIX:C=6:SB(I,_C)=C
- SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
- SPOFS I+SPTOP,SB(I,_X)+1,SB(I,_Y)+1
- '--- Change Spin
- I=SBIX-SPINTOP
- V=-1:IF I AND 1 THEN V=1
- I=FLOOR(I/2)
- MI=1:MX=1024
- IF I<3 THEN V=V*8:MI=0:MX=255
- J=SPIN(I)+V
- IF J<MI THEN J=MI
- IF J>=MX THEN J=MX-1
- SPIN(I)=J
- IF I>2 THEN RETURN
- '---
- C$=HEX$(SPIN(0),2)
- C$=C$+HEX$(SPIN(1),2)
- C$=C$+HEX$(SPIN(2),2)
- SPPAGE 0:BGPAGE 0
- P=COL+PAL*16:P2=COL
- GOSUB @CSET
- GOSUB @COLRGB
- GOSUB @SETCTYPE
- '---
- @SETCOLOR
- GOSUB @SETCSUB
- GOSUB @CHRALL
- GOSUB @CHRZOOM
- RETURN
-
- '--- set chrbank
- @SBCHRBK
- CBANK(CTYPE)=I
- GOTO @_SKIPSSB
-
- '--- change BGU/SPU/BGF
- @SBTYPE
- GOSUB @CLRCSR
- CTYPE=I-G
- GOSUB @CMCHECK
- '---
- @_SKIPSSB
- IF OLDCT!=CTYPE THEN @_SSBE
- IF OLDCB!=CBANK(CTYPE) THEN @_SSBE
- IF OLDX!=CSX THEN @_SSBE
- IF OLDY==CSY THEN RETURN
- @_SSBE
- GOSUB @SETCTYPE
- GOSUB @CHRALL
- GOSUB @CHRZOOM
- RETURN
-
- '--- set size
- @SBSY
- CSY=I-G:GOSUB @CLRCSR
- IF CSY==3 AND CSX<2 THEN CSY=2:BEEP
- IF CSY<2 AND CSX==3 THEN CSX=2:BEEP
- GOTO @_SBSE
- '---
- @SBSX
- CSX=I-G:GOSUB @CLRCSR
- IF CSX==3 AND CSY<2 THEN CSX=2:BEEP
- IF CSX<2 AND CSY==3 THEN CSY=2:BEEP
- '---
- @_SBSE
- ZX=BCNT(CSX):ZY=BCNT(CSY)
- GOSUB @CALCZ:ZZ=BCNT(CSZ)
- IF CX+ZX>=32 THEN CX=32-ZX
- IF CY+ZY>=8 THEN CY=8-ZY
- CX=FLOOR(CX/ZX)*ZX
- CY=FLOOR(CY/ZY)*ZY
- GOTO @_SKIPSSB
-
- '--- Color change at bank unit
- @SETCSUB
- TMP=COL
- P=PAL*16
- FOR COL=0 TO 15
- SPPAGE 0:BGPAGE 0
- COLREAD(CT$,P),SPIN(0),SPIN(1),SPIN(2)
- C$=HEX$(SPIN(0),2)
- C$=C$+HEX$(SPIN(1),2)
- C$=C$+HEX$(SPIN(2),2)
- P2=P:GOSUB @CSET
- P=P+1
- NEXT
- COL=TMP
- GOTO @COLBOX
-
- '---Color change(Single sprite BG)
- @CSET
- FOR I=0 TO 1
- SPPAGE I:BGPAGE I:GPAGE I
- COLSET CT$,P,C$
- COLSET "GRP",P2,C$
- NEXT
- RETURN
-
- '====================
- @SETCTYPE
- '====================
- '--- chr bank(off==minus)
- MAX=CBMAX(CTYPE)
- FOR I=0 TO 7
- SB(I,_Y)=ABS(SB(I,_Y))
- X=SB(I,_X):Y=SB(I,_Y):C=0
- IF I>MAX-1 THEN Y=-Y:SB(I,_Y)=Y
- IF CBANK(CTYPE)!=I GOTO @_CBKSKIP
- X=X+1:Y=Y+1:C=XC
- @_CBKSKIP
- SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
- SPOFS I+SPTOP,X,Y
- NEXT
- '--- chr type
- FOR I=8 TO 10
- X=SB(I,_X):Y=SB(I,_Y):C=0
- IF CTYPE==I-8 THEN X=X+1:Y=Y+1:C=XC
- SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
- SPOFS I+SPTOP,X,Y
- NEXT
- '--- size x
- FOR I=11 TO 14
- X=SB(I,_X):Y=SB(I,_Y):C=0
- IF CSX!=I-11 THEN @_CSX
- X=X+1:Y=Y+1:C=XC
- @_CSX
- SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
- SPOFS I+SPTOP,X,Y
- NEXT
- '--- size y
- FOR I=15 TO 18
- X=SB(I,_X):Y=SB(I,_Y):C=0
- IF CSY!=I-15 THEN @_CSY
- X=X+1:Y=Y+1:C=XC
- @_CSY
- SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
- SPOFS I+SPTOP,X,Y
- NEXT
-
- '--- Genelate Character name
- @SETCSTR
- CN$=CSTR$(CTYPE)
- CN$=CN$+STR$(CBANK(CTYPE))
- CT$=CTYPE$(CTYPE)
- RETURN
-
- '====================
- @SETAN 'Anime related
- '====================
- IF CTYPE==1 THEN @ASTART
- IF OLDCT==CTYPE THEN RETURN
- '--- erase
- OLDCT=CTYPE
- SPPAGE 0
- SPCLR ANTOP
- SPPAGE 1
- OLDAN=-1:OLDAP=-1:OLDAX=-1
- OLDAY=-1:OLDAC=-1:OLDAW=-1
- RETURN
- '--- start
- @ASTART
- OLDCT=CTYPE:AX=ZX*8:AY=ZY*8
- C=SPIN(3):IF C<1 THEN C=1
- W=SPIN(4):IF W<1 THEN W=1
- N=(OFS(0,0)+CBANK(CTYPE)*256)
- N=FLOOR(N/(2*2)):'(BZC(CSX)*BZC(CSY)))
- '--- Was it changeful?
- IF OLDAN!=N THEN @ATOP
- IF OLDAP!=PAL THEN @ATOP
- IF OLDAX!=AX THEN @ATOP
- IF OLDAY!=AY THEN @ATOP
- IF OLDAC!=C THEN @ATOP
- IF OLDAW==W THEN RETURN
- '---
- @ATOP
- OLDAN=N:OLDAX=AX:OLDAY=AY
- OLDAP=PAL:OLDAC=C:OLDAW=W
- SPPAGE 0
- SPSET ANTOP,N,PAL,0,0,PR,AX,AY
- SPOFS ANTOP,184,80
- SPANIM ANTOP,C,W,0
- SPPAGE 1
- RETURN
-
- '====================
- @DISPINIT 'Screen initialize
- '====================
- CLS:COLOR 0:GPAGE 0
- '+------------+
- '|Upper screen|
- '+------------+
- LOCATE 0,23
- PRINT"CHARACTER EDITOR v2.1";
- COLOR 14:X=10:Y=9
- RX=(X+1)*8:RY=(Y+1)*8
- GOSUB @PUTWIN
- COLOR 7:X=0:Y=9
- GX=(X+1)*8:GY=(Y+1)*8
- GOSUB @PUTWIN
- LOCATE 0,19
- PRINT"А=COPY К=PASTE2"
- PRINT"Б=PASTE"
- PRINT"Ф=←→ Х=↑↓
- PRINT"КП=SCROLL"
- COLOR 0
- X=22:Y=9:GOSUB @PUTWIN
- LOCATE X,Y+1:COLOR 7
- PRINT " SPANIM":COLOR 0
- GFILL 0,67,255,68,15
- GOSUB @CHRALL
- '+------------+
- '|Lower screen|
- '+------------+
- PNLTYPE "OFF"
- GPAGE 1:GCOLOR 0:GCLS
- '--- Software keybord area
- X=0:Y=2
- PNLSTR X,Y, "+"+"-"*16+"+"
- FOR I=1 TO 16
- 'PNLSTR X,Y+I,"|"+"С"*16+"|"
- PNLSTR X,Y+I,"|"+" "*16+"|"
- NEXT I
- I=Y+I:C$="|"+" "*16+"|"
- PNLSTR X,I+0, "+"+"-"*16+"+"
- PNLSTR X,I+1, C$
- PNLSTR X,I+2, C$
- PNLSTR X,I+3, "+"+"-"*16+"+"
- I=X+17:J=Y+10
- PNLSTR I,J , "+--+"
- FOR K=1 TO 6
- PNLSTR I,J+K,"| |"
- NEXT
- PNLSTR I,J+K, "+--+"
- '---
- EX=(X+1)*8:EY=(Y+1)*8
- DR=FALSE
- GOSUB @CHRZOOM
- FOR I=0 TO SBMAX-1
- SPOFS I+SPTOP,SB(I,_X),SB(I,_Y)
- NEXT
- '---
- PNLSTR 27,2,"color",7
- PNLSTR 26,11,"SPANIM",7
- PNLSTR 22,12,"cn",7
- PNLSTR 22,14,"wa",7
- PNLSTR 22,16,"sx",7
- PNLSTR 22,18,"sy",7
- '--- Color sample
- HX=0:HY=0:HDX=HX*8:HDY=HY*8
- GOSUB @COLBOX
- SPSET 0,103,0,0,0,0
- GOSUB @COLCSR
- GOSUB @SETCTYPE
- '--- Color bank
- X=23:Y=3
- PDX=X*8+8:PDY=Y*8
- FOR I=0 TO 15
- X=FLOOR(I%4)*16+PDX
- Y=FLOOR(I/4)*16+PDY
- SPSET I+2,I+48,0,0,0,PR
- SPOFS I+2,X,Y
- NEXT
- SPCHR PAL+2,PAL+48,XC,0,0,1
- '--- Sistem icon
- ICONPUSE=FALSE
- ICONPAGE=0
- ICONPMAX=4
- ICONSET 0,59:'ERASE
- ICONSET 1,39:'FILE
- ICONSET 2,6 :'PAINT
- ICONSET 3,5 :'PEN
- GOSUB @PUTMODE
- GOSUB @PUTGRID
- RETURN
- '---
- @PUTWIN
- LOCATE X,Y
- PRINT"+"+"-"*8+"+":Y=Y+1
- FOR I=0 TO 7
- LOCATE X,Y:PRINT"|"+" "*8+"|"
- Y=Y+1
- NEXT
- LOCATE X,Y
- PRINT"+"+"-"*8+"+"
- RETURN
- '---
- @PUTGRID
- GOSUB @CALCZ:Z=ZST(CSZ)
- FOR Y=0 TO 15
- J=FLOOR(Y%Z)
- FOR X=0 TO 15
- K=FLOOR(X%Z)
- GOSUB @MKGRID
- PNLSTR X+1,Y+3,C$
- NEXT
- NEXT
- RETURN
- '---
- @MKGRID
- IF J==0 AND K==0 THEN C$="С":RETURN
- IF J!=0 AND K==0 THEN C$="У":RETURN
- IF K!=0 AND J==0 THEN C$="Т":RETURN
- C$=" "
- RETURN
-
- '====================
- @TOUCH 'Collision detection
- R=FALSE
- IF TS==FALSE THEN RETURN
- IF TX<X THEN RETURN
- IF TX>X+W THEN RETURN
- IF TY<Y THEN RETURN
- IF TY>Y+H THEN RETURN
- X=TX AND &HF8;
- Y=TY AND &HF8;
- R=TRUE
- RETURN
-
- '====================
- @PSPIN '
- N=SPIN(N)
- @PUTNUM
- N$=RIGHT$(" "+STR$(N),4)
- PNLSTR X,Y,N$,C
- RETURN
-
- '====================
- @MKOFS 'Setting an appropriate offset
- IF CTYPE==1 GOTO @_OFSSP
- '---
- CH=CY*32+CX
- FOR Y=0 TO ZY-1
- FOR X=0 TO ZX-1
- OFS(X,Y)=CH+X+(Y*32)
- NEXT
- NEXT
- RETURN
- '---
- @_OFSSP
- X=BZC(CSX):Y=BZC(CSY)
- CH=FLOOR(CX/X)
- CH=CH+FLOOR(CY/Y)*(32/X)
- CH=CH*(X*Y)
- FOR Y=0 TO ZY-1
- FOR X=0 TO ZX-1
- OFS(X,Y)=CH+X+(Y*ZX)
- NEXT
- NEXT
- RETURN
-
- '====================
- @CHRZOOM 'Characters is displayed on lower screen
- GOSUB @MKOFS
- GOSUB @CALCZ:Z=ZST(CSZ)
- SPPAGE 0:BGPAGE 0:GPAGE 1
- GFILL EX,EY,EX+127,EY+127,0
- FOR Y=0 TO ZY-1
- YO=EY+(Y*Z*8)
- FOR X=0 TO ZX-1
- XO=EX+(X*Z*8)
- GPUTCHR XO,YO,CN$,OFS(X,Y),PAL,Z
- NEXT
- NEXT
- SPPAGE 1:BGPAGE 1
- GOSUB @PUTGRID
- RETURN
- '---
- @CALCZ
- CSZ=CSX
- IF CSZ<CSY THEN CSZ=CSY
- RETURN
-
- '====================
- @CHRALL 'Character of a bank is displayed on upper screen
- C$=CN$+"/"+CT$+"/("
- C$=C$+STR$(ZX*8)+","
- C$=C$+STR$(ZY*8)+") "
- PNLSTR 1,23, C$
- SPPAGE 0:BGPAGE 0:GPAGE 0
- GFILL 0,0,255,63,0
- X=0:Y=0:I=0:S=ZX*ZY
- IF CTYPE==1 THEN GOSUB @CHRSP
- IF CTYPE!=1 THEN GOSUB @CHRBG
- SPPAGE 1:BGPAGE 1:GPAGE 1
- RETURN
- '--- bg chr
- @CHRBG
- GPUTCHR X,Y,CN$,I,PAL,1
- X=X+8
- IF X>=GSX THEN X=0:Y=Y+8
- I=I+1
- IF I<256 THEN @CHRBG
- RETURN
- '--- sprite chr
- @CHRSP
- YY=Y:DX=BZC(CSX):DY=BZC(CSY)
- FOR J=0 TO DY-1
- XX=X
- FOR K=0 TO DX-1
- GPUTCHR XX,YY,CN$,I,PAL,1
- XX=XX+8:I=I+1
- NEXT
- YY=YY+8
- NEXT
- X=X+DX*8
- IF X>=GSX THEN X=0:Y=Y+DY*8
- IF I<256 THEN @CHRSP
- RETURN
-
- '====================
- @FILEMODE 'Read and Write files
- '====================
- PNLTYPE "KYA":ICONCLR
- GCLS 0
- GCOPY 0,0,0,255,63,0,0,TRUE
- GPAGE 0,1,1
- '---
- @_FLOOP
- CLS
- LOCATE 0,8
- PRINT"-"*32;
- PRINT" L:CHR Load"
- PRINT" S:CHR Save"
- PRINT"LC:Color Load"
- PRINT"SC:Color Save"
- PRINT" Q:File MENU end"
- PRINT" E:Tool end"
- PRINT"-"*32;
- '---
- INPUT"Command";K$
- IF K$=="Q" GOTO @_FQUIT
- IF K$=="E" GOTO @_FEXIT
- IF K$=="S" GOTO @_FSAVE
- IF K$=="L" GOTO @_FLOAD
- IF K$=="SC" GOTO @_FCSAVE
- IF K$=="LC" GOTO @_FCLOAD
- GOTO @_FLOOP
-
- '---
- @LCSUB
- 'SYSBEEP=FALSE
- FOR I=0 TO 1
- BGPAGE I:SPPAGE I
- LOAD N$,FALSE
- NEXT
- 'SYSBEEP=TRUE
- RETURN
-
- '--- Load color
- @_FCLOAD
- INPUT"Load color of Splite?(Y/N)";K$
- IF K$!="Y" THEN @FLD_BG
- INPUT"SP/Read name(COL):";K$
- N$="COL1:"+K$
- GOSUB @LCSUB
- '
- @FLD_BG
- INPUT"Load color of BG?(Y/N)";K$
- IF K$!="Y" THEN @_FQUIT
- INPUT"BG/Load name(COL):";K$
- N$="COL0:"+K$
- GOSUB @LCSUB
- GOTO @_FQUIT
-
- '--- Color save
- @_FCSAVE
- SPPAGE 0:BGPAGE 0
- INPUT"Save the color of Sprite?(Y/N)";K$
- IF K$!="Y" THEN @FSV_BG
- INPUT"SP:Save name(COL):";K$
- N$="COL1:"+K$
- SAVE N$
- '
- @FSV_BG
- INPUT"Save color of BG?(Y/N)";K$
- IF K$!="Y" THEN @_FQUIT
- INPUT"BG:Save name(COL):";K$
- N$="COL0:"+K$
- SAVE N$
- GOTO @_FQUIT
-
- '---
- @_FLOAD
- INPUT"Load name(CHR):";K$
- K$=CN$+":"+K$:PRINT K$
- BGPAGE 0:SPPAGE 0
- LOAD K$,FALSE
- BGPAGE 1:SPPAGE 1
- '--- Splites do not read under
- IF CTYPE==1 GOTO @_FQUIT
- LOAD K$,FALSE
- GOTO @_FQUIT
- '---
- @_FSAVE
- INPUT"Save name(CHR):";K$
- K$=CN$+":"+K$:PRINT K$
- BGPAGE 0:SPPAGE 0
- SAVE K$
- '---
- @_FQUIT
- BGPAGE 1:SPPAGE 1
- GPAGE 0,0,0
- GOSUB @DISPINIT
- RETURN
- '---
- @_FEXIT
- ICONCLR
- ACLS
- PRINT "Good job!"
- END
EXEC "SCRED" (Touch Enter to Run)
A background screen creation tool. This is a tool for creating BG screen data, for example, creating rows of houses. Select a character from the samples to paste them to the Edit Area. You can access and use saved data via programs.
(ex.) LOAD "SCU0:MYSC00"
- '====================
- 'SCREEN EDITOR
- '(C)SmileBoom Co.Ltd.
- '====================
- VISIBLE 1,1,0,0,0,0
- CLEAR:CLS:COLOR 0
- DIM SW$(2)
- SW$(0)="OFF":SW$(1)="ON "
- GPAGE 0:GCLS 0
- GPAGE 1:GCLS 0
- FOR I=0 TO 3
- BREPEAT I,20,4
- NEXT
- '--- Edit area
- BGLX=0:BGLY=0
- K1=0:K2=0
- GDX=0:GDY=0
- GRX=0:GRY=0:GRC=13
- GRID=TRUE:GRS=2
- '--- Reset variables
- PAL=0:LAYER=0
- REVH=FALSE:REVV=FALSE
- VIEW=TRUE:VB0=1:VB1=1:XC=7
- CX=0:CY=0:CSX=1:CSY=1
- CH=0:CBANK=0:CN$="BGU"
- B=0:PR=1:DRG=FALSE
- '--- Reset screen
- BGPG=0:MF=FALSE
- GOSUB @DISPINIT
- '---
- INPUT"Load character?(Y/N)";K$
- IF K$!="Y" THEN @SKIPCL
- '---
- GOSUB @_CLOAD
- GOTO @MAIN
- '---
- @SKIPCL
- GOSUB @DISPSET
- GOSUB @CHRALL
-
- '===========
- ' Main loop
- '===========
- @MAIN
- '
- OX=TX:OY=TY:OS=TS
- TX=TCHX:TY=TCHY:TS=TCHST
- OLDB=B:B=BTRIG():BN=BUTTON()
- '
- GOSUB @SELECT
- GOSUB @CSRMOVE
- GOSUB @DRAWCHR
- GOSUB @PUTCSEL
- '
- VSYNC 1
- '
- GOTO @MAIN
-
- '=============
- ' Sub process
- '=============
- @DISPSET
- CLS:COLOR 0:ICONCLR
- PNLTYPE "OFF"
- GOSUB @CLRMENU
- GOSUB @PUTOFS
- GOSUB @SETGRID
- BGPAGE 1:SPPAGE 1:GPAGE 1
- RETURN
-
- '---
- @DISPINIT 'Reset display
- '---
- FOR I=0 TO 1
- GPAGE I:GCOLOR 0
- SPPAGE I:SPCLR
- BGPAGE I
- BGOFS 0,0,0
- BGOFS 1,0,0
- BGCLIP 0,0,31,23
- NEXT
- '---Upper screen
- BGPAGE 0:SPPAGE 0:GPAGE 0
- CHRSET "BGU0",0,"0"*64
- BGCLR
- '---Lower screen
- BGPAGE 1:SPPAGE 1:GPAGE 1
- '---
- A$="0"*64
- B$="FFFFFFFF"+"0"*56
- C$="F0000000"*8
- CHRSET "SPS0",0,C$
- CHRSET "SPS0",1,A$
- CHRSET "SPS0",2,C$
- CHRSET "SPS0",3,A$
- CHRSET "SPS0",4,B$
- CHRSET "SPS0",5,B$
- CHRSET "SPS0",6,A$
- CHRSET "SPS0",7,A$
- '---
- @SETGRID
- GDXSP=100-16
- FOR I=0 TO 15
- SPSET GDXSP+I,1,GRC,0,0,0
- SPOFS GDXSP+I,I*16,GRY
- NEXT
- GDYSP=GDXSP-12
- FOR I=0 TO 11
- SPSET GDYSP+I,0,GRC,0,0,0
- SPOFS GDYSP+I,GRX,I*16
- NEXT
- RETURN
-
- '======
- ' MENU
- '======
- @CLRMENU
- VISIBLE 1,1,1,1,1,0
- COLOR 0:SPCLR
- GOSUB @SETLAY
- '---
- @PUTGRID
- C$=" "*16
- IF GRID THEN C$="С"*16
- LOCATE 0,22
- N1$="Ф=MENU Б=GRID Х=PAGE"
- N2$="П=SCROLL А+П=CHR SELECT"
- '---
- @SETPNL
- COLOR 0
- FOR Y=0 TO 23
- PNLSTR 0,Y,C$*2,GRS
- NEXT
- LOCATE 0,22:PRINT N1$;
- LOCATE 0,23:PRINT N2$;
- LOCATE 0,8
- PRINT"+------------------------------+";
- PRINT"|SCREEN EDITOR |";
- PRINT"+------------------------------+";
- RETURN
-
- '---
- @PUTMENU
- COLOR 0:CLS:SPCLR
- VISIBLE 1,1,0,0,1,1
- C$=" "*16
- N1$="Ф=Return to edit"
- N2$="А=FILE MENU К+П=SIZE"
- GOSUB @SETPNL
- GOSUB @PUTOFS
- '--- Frame
- X=0:Y=8:PNLSTR X,Y,"-"*32
- FOR I=1 TO 11
- PNLSTR X,Y+I," "*23+"|"
- NEXT I
- PNLSTR 23,11, "+"+"-"*8
- PNLSTR 23,20, "+"+"-"*8
- '--- Character bank(SP0-SP3
- CDX=24*8:CDY=9*8:N=0
- FOR I=0 TO 3
- X=I*16+CDX
- SPSET N,I+48,0,0,0,PR
- SPOFS N,X,CDY
- N=N+1
- NEXT
- GOSUB @CBICON
- '--- Colir bank(SP4-SP19
- PDX=24*8:PDY=12*8:PALSP=N
- FOR I=0 TO 15
- X=FLOOR(I%4)*16+PDX
- Y=FLOOR(I/4)*16+PDY
- SPSET N,I+48,0,0,0,PR
- SPOFS N,X,Y
- N=N+1
- NEXT
- GOSUB @PALICON
- '--- Tool
- @TLNAME
- DATA 75,"Foreground layer"
- DATA 74,"Rear layer"
- DATA 90,"Both display"
- DATA 90,"-"
- DATA 90,"-"
- DATA 80,"Flip horizontal"
- DATA 81,"Flip vertical"
- TDX=1*8:TDY=9*8+4
- Y=TDY:TLSP=N
- RESTORE @TLNAME
- FOR I=0 TO 6
- READ C,N$
- SPSET N,C,0,0,0,PR
- SPOFS N,TDX,Y
- PNLSTR TDX/8+2,Y/8+1,N$
- Y=Y+16
- N=N+1
- NEXT
- GOSUB @TLICON
- RETURN
-
- '==========================
-
- @CBICON
- FOR I=0 TO 3
- C=0:IF CBANK==I THEN C=XC
- SPCHR I,I+48,C,0,0,PR
- NEXT
- RETURN
- '---
- @PALICON
- FOR I=0 TO 15
- C=0:IF PAL==I THEN C=XC
- SPCHR I+PALSP,I+48,C,0,0,PR
- NEXT
- RETURN
- '---
- @SETLAY
- VB0=1:VB1=1
- IF VIEW THEN @SLEND
- VB0=(LAYER==0)
- VB1=(LAYER==1)
- @SLEND
- VISIBLE 1,1,VB0,VB1,1,0
- RETURN
-
- '---
- @TLICON
- '--- Edit screen
- C=0:IF LAYER==0 THEN C=XC
- SPCHR TLSP+0,75,C,0,0,PR
- C=0:IF LAYER==1 THEN C=XC
- SPCHR TLSP+1,74,C,0,0,PR
- '--- Both display
- N=90:C=0:IF VIEW THEN N=91:C=XC
- SPCHR TLSP+2,N,C,0,0,PR
- '--- Filp
- C=0:IF REVH THEN C=XC
- SPCHR TLSP+5,80,C,0,0,PR
- C=0:IF REVV THEN C=XC
- SPCHR TLSP+6,81,C,0,0,PR
- RETURN
-
- '==========================
- @TOUCH 'Collision detection
- '==========================
- R=FALSE
- IF TS==FALSE THEN RETURN
- IF TX<X THEN RETURN
- IF TX>X+W THEN RETURN
- IF TY<Y THEN RETURN
- IF TY>Y+H THEN RETURN
- X=TX AND &HF8;
- Y=TY AND &HF8;
- R=TRUE
- RETURN
-
- '--------------------------
- @CSRMOVE 'Scroll of lower screen
- '--------------------------
- VX=0:VY=0
- IF B AND 1 THEN VY=VY-1
- IF B AND 2 THEN VY=VY+1
- IF B AND 4 THEN VX=VX-1
- IF B AND 8 THEN VX=VX+1
- IF VX+VY==0 THEN RETURN
- IF BN AND 512 GOTO @SELSIZE
- IF BN AND 16 THEN @MOVCSR2
- IF MF==FALSE THEN @MVBGOFS
-
- '---Display MENU
- @MOVCSR2
- GOSUB @CCSRCLR
- X=FLOOR(CH%32)+VX
- Y=FLOOR(CH/32)+VY
- IF X<0 THEN X=0
- IF X>31 THEN X=31
- IF Y<0 THEN Y=0
- IF Y>7 THEN Y=7
- CH=(X+(Y*32)) AND 255
- RETURN
-
- '---Usually, it is lower scrolling at the time
- @MVBGOFS
- CX=CX+VX*8
- CX=CX AND 255
- BGLX=(BGLX+VX*8) AND 511
- CY=CY+VY*8
- CY=FLOOR(CY%192)
- BGLY=(BGLY+VY*8) AND 511
- BGOFS 0,BGLX,BGLY
- BGOFS 1,BGLX,BGLY
- GOSUB @PUTOFS
- VX=0:VY=0
- '---
- GRX=-BGLX AND 255
- GRY=-BGLY AND 255
- GOSUB @SETGRID
- '---
- @SELSIZE
- GOSUB @CCSRCLR
- CSX=CSX+VX
- CSY=CSY+VY
- IF CSX<1 THEN CSX=1
- IF CSX>8 THEN CSX=8
- IF CSY<1 THEN CSY=1
- IF CSY>8 THEN CSY=8
- GOSUB @CCSRPUT
- RETURN
-
- '---
- @CCSRCLR
- GOSUB @PUTOFS
- C$=" "
- GOTO @CCSR
- '---
- @PUTCSEL
- COLOR CC
- CC=CC+1:CC=CC AND 15
- '---
- @CCSRPUT
- C$="□"
- '---
- @CCSR
- X=FLOOR(CH%32)
- Y=FLOOR(CH/32)
- SX=CSX
- IF X+CSX>31 THEN SX=32-X
- SX=SX-1
- SY=CSY
- IF Y+CSY>7 THEN SY=8-Y
- SY=SY-1
- '---
- FOR IX=0 TO SX
- IF MF==FALSE THEN @CCSRXS
- PNLSTR X,Y,C$
- PNLSTR X,Y+SY,C$
- GOTO @CCSRXS2
- @CCSRXS
- LOCATE X,Y:PRINT C$
- LOCATE X,Y+SY:PRINT C$
- @CCSRXS2
- X=X+1
- NEXT
- '---
- X=FLOOR(CH%32)
- Y=Y+1
- FOR IY=1 TO SY-1
- IF MF==FALSE THEN @CCSRYS
- PNLSTR X,Y,C$
- PNLSTR X+SX,Y,C$
- GOTO @CCSRYS2
- @CCSRYS
- LOCATE X,Y:PRINT C$
- LOCATE X+SX,Y:PRINT C$
- @CCSRYS2
- Y=Y+1
- NEXT
- RETURN
-
- '---
- @PUTOFS
- C=0:COLOR C:X=0:Y=12
- '
- LOCATE X,Y:
- X=(BGLX/8) AND 63
- Y=(BGLY/8) AND 63
- PRINT" OFS:";X;",";Y;" "
- PRINT" CHR:&h;";
- N=CBANK*256+CH
- PRINT HEX$(N,3);"(";N;") "
- PRINT" BANK:";CBANK
- PRINT" PAL:";PAL
- PRINT"LAYER:";LAYER
- PRINT" REVH:";SW$(REVH)
- PRINT" REVV:";SW$(REVV)
- PRINT" VIEW:";SW$(VIEW)
- RETURN
-
- '--------------------------
- @SELECT 'Selection by MENU
- '--------------------------
- IF MF THEN @MENUMD
- IF B==32 THEN @SELGRID
- IF B==64 THEN @MENUON
- IF B==128 THEN @SELLAY
- RETURN
-
- '---MENU is displayd
- @MENUON
- MF=TRUE
- GOSUB @PUTMENU
- RETURN
-
- '---Change of grid
- @SELGRID
- GRID=GRID XOR 1
- GOSUB @PUTGRID
- GOSUB @PUTOFS
- RETURN
-
- '---Change of layer
- @SELLAY
- LAYER=LAYER XOR 1
- GOSUB @SETLAY
- GOSUB @PUTOFS
- RETURN
-
- '---
- @MENUMD
- IF B==16 THEN @TOFILE
- IF B!=64 THEN @SELCHR
-
- '---Close menu
- @MENUOFF
- MF=FALSE
- DRG=FALSE
- GOSUB @CLRMENU
- GOSUB @SETGRID
- RETURN
-
- '---Go to File mode
- @TOFILE
- GOSUB @MENUOFF
- GOTO @FILEMODE
-
- '---Select Character
- @SELCHR
- GOSUB @PUTCSEL
- X=GDX:Y=GDY:W=255:H=63
- GOSUB @TOUCH
- IF R THEN @SELCTOP
-
- '---Just dragging?
- IF DRG THEN DRG=FALSE
- GOTO @SELPAL
-
- '---Before drag?
- @SELCTOP
- IF DRG==FALSE THEN @SELC1ST
-
- '---End point
- NX=FLOOR(X/8)
- NY=FLOOR(Y/8)
- X=FLOOR(OLDCH%32):OX=X
- Y=FLOOR(OLDCH/32):OY=Y
- IF X>NX THEN OX=NX:NX=X
- IF Y>NY THEN OY=NY:NY=Y
- CHNEW=OY*32+OX
- OX=(NX-OX)+1
- OY=(NY-OY)+1
- GOSUB @CCSRCLR
- CH=CHNEW
- CSX=OX:CSY=OY
- GOTO @SELPAL
-
- '---Start point
- @SELC1ST
- IF OS==FALSE THEN @SELPAL
-
- DRG=TRUE
- OX=X:OY=Y
- GOSUB @CCSRCLR
- CSX=1:CSY=1
- X=FLOOR((OX-GDX)/8)
- Y=FLOOR((OY-GDY)/8)
- CH=Y*32+X
- OLDCH=CH
-
- '--- Color
- @SELPAL
- X=PDX:Y=PDY:W=63:H=W
- GOSUB @TOUCH
- IF R==FALSE GOTO @SELCB
- '
- X=FLOOR((X-PDX)/16)
- Y=FLOOR((Y-PDY)/16)
- PAL=Y*4+X
- GOSUB @PALICON
- GOSUB @CHRALL
- GOSUB @PUTOFS
- RETURN
-
- '--- Character bank
- @SELCB
- X=CDX:Y=CDY:W=63:H=15
- GOSUB @TOUCH
- IF R==FALSE GOTO @SELTOOL
- '
- CBANK=FLOOR((X-CDX)/16)
- GOSUB @CBICON
- GOSUB @CHRALL
- GOSUB @PUTOFS
- RETURN
-
- '--- Change tool
- @SELTOOL
- X=TDX:Y=TDY:W=167:H=111
- GOSUB @TOUCH
- IF R==FALSE THEN RETURN
- IF OS THEN RETURN
- '
- Y=FLOOR((Y-TDY)/16)
- ON Y GOTO @LY,@LY,@VW,@OF,@OF,@RH,@RV
- RETURN
- '---
- @LY
- LAYER=Y
- GOTO @OF
- '---
- @VW
- VIEW=VIEW XOR 1
- GOTO @OF
- '---
- @RH
- REVH=REVH XOR 1
- GOTO @OF
- '---
- @RV
- REVV=REVV XOR 1
- '---
- @OF
- GOSUB @PUTOFS
- GOSUB @TLICON
- RETURN
-
- '--------------------------
- @DRAWCHR 'Set Character
- '--------------------------
- IF MF THEN RETURN
- '
- X=0:Y=0:W=32*8-1:H=24*8-1
- GOSUB @TOUCH
- IF R==FALSE THEN RETURN
- '
- X=FLOOR(X/8)
- Y=FLOOR(Y/8)
- X=(X+FLOOR(BGLX/8)) AND 63
- Y=(Y+FLOOR(BGLY/8)) AND 63
- C=CH+CBANK*256
- '---
- IF (BN AND 256)==0 GOTO @SKIPSNAP
- X=FLOOR(X/CSX)*CSX
- Y=FLOOR(Y/CSY)*CSY
- '---
- @SKIPSNAP
- TX=FLOOR(CH%32)
- TY=FLOOR(CH/32)
- FOR IY=0 TO CSY-1
- IF IY+TY>7 GOTO @SKIPTY
- FOR IX=0 TO CSX-1
- IF IX+TX>31 GOTO @SKIPTX
- CX=X+IX:CY=Y+IY
- CCX=IX:CCY=IY
- IF REVH==FALSE THEN @SKIPRH
- CCX=CSX-1-IX
- @SKIPRH
- IF REVV==FALSE THEN @SKIPRV
- CCY=CSY-1-IY
- @SKIPRV
- CN=C+CCX+(CCY*32)
- BGPUT LAYER,CX,CY,CN,PAL,REVH,REVV
-
- @SKIPTX
- NEXT
-
- @SKIPTY
- NEXT
- RETURN
-
- '==========================
- @CHRALL
- '==========================
- '---Upper screen is draw by BG
- BGPAGE 0
- FOR Y=0 TO 7
- FOR X=0 TO 31
- N=CBANK*256+Y*32+X
- BGPUT 0,X,Y,N,PAL,0,0
- NEXT
- NEXT
- BGPAGE 1
- '---Lower screen is graphic
- GPAGE 1:BGPAGE 1
- C$=CN$+STR$(CBANK)
- GFILL 0,0,256,64,0
- FOR I=0 TO 255
- X=GDX+FLOOR(I%32)*8
- Y=GDY+FLOOR(I/32)*8
- GPUTCHR X,Y,C$,I,PAL,1
- NEXT
- RETURN
-
- '==========================
- @FILEMODE 'Load and save files
- '==========================
- VISIBLE 1,1,0,0,0,0
- COLOR 0
- PNLTYPE "KYA"
- FOR I=0 TO 3:ICONCLR I:NEXT
- SL$="SCU"+STR$(LAYER)+":"
- '---
- @_FLOOP
- CLS
- BGPAGE 1:SPPAGE 1:GPAGE 1
- PRINT" L:Load SCR (1 sheet)"
- PRINT" LW:Load SCR (2 sheet)"
- PRINT" S:Save SCR (1 sheet)"
- PRINT" SW:Save SCR (2 sheet)"
- PRINT"COL:Load color"
- PRINT"CHR:Load character"
- PRINT" Q:File MENU end"
- PRINT" E:Tool end"
- PRINT"--------------------------------";
- '---
- INPUT"Command";K$
- IF K$=="L" GOTO @_FLOAD
- IF K$=="LW" GOTO @_FLOADW
- IF K$=="S" GOTO @_FSAVE
- IF K$=="SW" GOTO @_FSAVEW
- IF K$=="COL" GOTO @_PLOAD
- IF K$=="CHR" GOTO @_CLOAD
- IF K$=="Q" GOTO @_FQUIT
- IF K$=="E" GOTO @_FEXIT
- GOTO @_FLOOP
- '---
- @_PLOAD
- INPUT"Name to load (COL):";K$
- K$="COL0:"+K$:PRINT K$
- FOR I=0 TO 1
- BGPAGE I
- LOAD K$,FALSE
- NEXT
- GOTO @_FQUIT
- '---
- @MKCOL
- N$="0"+HEX$(N)
- N$=MID$(N$,LEN(N$)-2,2)
- RETURN
- '---
- @_CLOAD
- INPUT"Name to load (CHR):";K$
- N$="BGU"+STR$(CBANK)
- K$=N$+":"+K$
- PRINT K$
- FOR I=0 TO 1
- BGPAGE I
- LOAD K$,FALSE
- NEXT
- GOTO @_FQUIT
- '---
- @_FLOAD
- INPUT"Name to load (SCR):";K$
- K$=SL$+K$:PRINT K$
- LOAD K$,FALSE
- GOTO @_FQUIT
- '---
- @_FLOADW
- INPUT"Name to load within seven characters (SCR):";K$
- N$=MID$(K$,0,7)
- K$="SCU0:0"+N$:PRINT K$
- LOAD K$,FALSE
- K$="SCU1:1"+N$:PRINT K$
- LOAD K$,FALSE
- GOTO @_FQUIT
- '---
- @_FSAVE
- INPUT"Name to save (SCR):";K$
- K$=SL$+K$:PRINT K$
- SAVE K$
- GOTO @_FQUIT
- '---
- @_FSAVEW
- INPUT"Name to save within seven characters (SCR):";K$
- N$=MID$(K$,0,7)
- K$="SCU0:0"+N$:PRINT K$
- SAVE K$
- K$="SCU1:1"+N$:PRINT K$
- SAVE K$
- '---
- @_FQUIT
- DSKIP=TRUE
- GOSUB @DISPSET
- GOSUB @CHRALL
- RETURN
-
- '---
- @_FEXIT
- FOR I=1 TO 0 STEP -1
- SPPAGE I:SPCLR
- GPAGE I:GCLS
- NEXT
- FOR I=0 TO 255
- COLINIT "GRP",I
- COLINIT "BG",I
- NEXT
- COLOR 0
- CLS
- PRINT "Good job!"
- END
EXEC "GRPED" (Touch Enter to Run)
A character creation tool. This is a tool for creating graphic data for the graphics Screen, utilizing up to 256 colors. Select a color from the samples and draw a picture in the Edit Area. You can access and use saved data via programs.
(ex.) LOAD "GRP0:MYGRP00"
- '====================
- 'GRAPHIC EDITOR
- '(C)SmileBoom Co.Ltd.
- '====================
- VISIBLE 1,1,0,0,1,1
- CLEAR:CLS:COLOR 0
- SPPAGE 0:SPCLR
- SPPAGE 1:SPCLR
- GPAGE 1,1,1:GPAGE 0,0,0
- DIM RGB(3),ZS(4)
- '--- Expansion size
- ZS(0)=0:ZS(1)=1
- ZS(2)=3:ZS(3)=7
- '---
- FOR I=0 TO 3
- BREPEAT I,20,4
- NEXT
- '--- Reset variables
- CX=0:CY=0:COL=0
- ZM=0:MAXZM=4
- TL=0:MAXTL=7:TSTEP=0
- OTX=-1:OTY=-1
- XC=7:PR=1:GM=0
- '--- Reset screen
- GOSUB @DISPINIT
-
- '===========
- ' Main loop
- '===========
- @MAIN
- '
- OX=TX:OY=TY:OS=TS
- TX=TCHX:TY=TCHY:TS=TCHST
- OLDB=B:B=BTRIG():BN=BUTTON()
- OLDIC=IC:IC=ICONCHK()
- '
- GOSUB @SELCOL
- GOSUB @DRAWSUB
- GOSUB @CHKMODE
- '
- VSYNC 1
- '
- GOTO @MAIN
-
- '==========================
- @DISPINIT 'Reset screen
- '==========================
- PNLTYPE "OFF"
- CLS:COLOR 0
- GCOLOR 0:GPAGE 0:GCLS 0
- PRINT "Erase screen? (А=YES)"
- GOSUB @BUTCHK
- GC=FALSE
- IF K==16 THEN GC=TRUE
- CLS
-
- '============
- 'Upper screen
- '============
- PRINT"+------------------------------+";
- PRINT"|GRAPHIC EDITOR |";
- PRINT"+------------------------------+";
-
- '--- Sumple color
- X=14:Y=4
- LOCATE X,Y
- PRINT "+"+"-"*16+"+"
- FOR I=1 TO 16
- LOCATE X,I+Y
- PRINT"|"+" "*16+"|"
- NEXT
- LOCATE X,I+Y
- PRINT "+"+"-"*16+"+"
- HX=X+1:HY=Y+1
- GOSUB @COLBOX
- GOSUB @COLCSR
-
- '--- Tool list
- MX=0:MY=6
- LOCATE MX,MY-2
- PRINT "<Ф:TOOL>"
- PRINT
- PRINT " PSET"
- PRINT " LINE"
- PRINT " BOX"
- PRINT " CIRCLE"
- PRINT " PAINT"
- PRINT " FILL"
- PRINT " CLS"
-
- '--- Pen size
- ZX=0:ZY=CSRY+3
- LOCATE ZX,ZY-2
- PRINT "<Х:PSET-PEN>"
- PRINT
- PRINT " x1"
- PRINT " x2"
- PRINT " x4"
- PRINT " x8"
-
- '---
- LOCATE 0,23
- PRINT "<А:FILE>";
- GOSUB @PUTMODE
-
- '============
- 'Lower screen
- '============
- PNLTYPE "OFF"
- GPAGE 1:GCOLOR 0
- IF GC THEN GCLS 0
-
- '---
- SPSET 0,110,0,0,0,0
- SPOFS 0,-16,-16
- '--- System icon
- ICONPUSE=FALSE
- 'ICONPAGE=0
- 'ICONPMAX=4
- ICONCLR
- RETURN
-
- '==========================
- @BUTCHK
- '==========================
- O=B:B=BUTTON()
- K=B AND (NOT O)
- VSYNC 1
- IF K==0 GOTO @BUTCHK
- LOCATE 0,0:PRINT K
- RETURN
-
- '==========================
- @TOUCH 'Collision detection
- '==========================
- R=FALSE
- IF TS==FALSE THEN RETURN
- IF TX<X THEN RETURN
- IF TX>X+W THEN RETURN
- IF TY<Y THEN RETURN
- IF TY>Y+H THEN RETURN
- X=TX AND &HF8;
- Y=TY AND &HF8;
- R=TRUE
- RETURN
-
- '==========================
- @PUTNUM
- '==========================
- COLOR C:LOCATE X,Y
- PRINT RIGHT$(" "+STR$(N),3);
- COLOR 0
- RETURN
-
- '==========================
- @SELCOL 'Select color
- '==========================
- VX=0:VY=0
- IF B AND 1 THEN VY=VY-1
- IF B AND 2 THEN VY=VY+1
- IF B AND 4 THEN VX=VX-1
- IF B AND 8 THEN VX=VX+1
- IF VX+VY==0 THEN @COLCSR
- '---
- GOSUB @COLCLR
- CX=CX+VX:CY=CY+VY
- IF CX<0 THEN CY=CY-1:CY=CY AND 15
- IF CX>15 THEN CY=CY+1:CY=CY AND 15
- IF CY<0 THEN CX=CX-1:CX=CX AND 15
- IF CY>15 THEN CX=CX+1:CX=CX AND 15
- CX=CX AND 15
- CY=CY AND 15
- GOTO @COLCSR
- '---
- @COLCLR
- LOCATE HX+CX,HY+CY
- PRINT " "
- RETURN
- '---
- @COLCSR
- COLOR CC
- CC=CC+1:CC=CC AND 15
- COL=CY*16+CX
- LOCATE HX+CX,HY+CY
- PRINT "□"
- COLOR 0
- '---
- @COLRGB
- X=15:Y=23:N=PAL*16+COL
- COLREAD("GRP",N),RGB(0),RGB(1),RGB(2)
- C=0:GOSUB @PUTNUM:PRINT":";
- N=RGB(0):X=CSRX+1:C=13
- GOSUB @PUTNUM:PRINT",";
- N=RGB(1):X=CSRX:C= 4
- GOSUB @PUTNUM:PRINT",";
- N=RGB(2):X=CSRX:C=11
- GOSUB @PUTNUM
- RETURN
- '---
- @COLBOX
- GPAGE 0
- DX=HX*8:DY=HY*8
- FOR I=0 TO 255
- X=FLOOR(I%16)*8+DX
- Y=FLOOR(I/16)*8+DY
- GFILL X,Y,X+7,Y+7,I
- NEXT
- GPAGE 1
- RETURN
-
- '==========================
- @DRAWSUB 'Set dot
- '==========================
- '--- Step check
- IF TSTEP==1 GOTO @_DSTEP1
-
- '--- 0:Until push
- IF TS==FALSE GOTO @_DSKIP0
- TX1=TX:TY1=TY
- TX2=TX:TY2=TY
- SPOFS 0,TX1,TY1
- '--- К Button:SPOIT
- IF BN AND 256 GOTO @_SPOIT
- SPCHR 0,110,0,0,0,PR
- GOTO @_DJUMP
-
- '---
- @_DSKIP0
- OTX=-1:OTY=-1
- SPOFS 0,-16,-16
- RETURN
-
- '--- 1:Until detach
- @_DSTEP1
- IF TS==FALSE GOTO @_DJUMP
- TX2=TX:TY2=TY
- RETURN
-
- '--- Branches the whole function
- @_DJUMP
- IF TL==0 GOTO @_PSET
- IF TL==4 GOTO @_PAINT
- IF TL==6 GOTO @_CLS
- '--- 2 Step tool
- IF TSTEP==0 THEN TSTEP=1:RETURN
- TSTEP=0
- ON TL GOTO @DED,@_LINE,@_BOX,@_CIRCLE,@DED,@_FILL,
- @DED
- RETURN
- '---
- @_LINE
- GLINE TX1,TY1,TX2,TY2,COL
- RETURN
- '---
- @_BOX
- GBOX TX1,TY1,TX2,TY2,COL
- RETURN
- '---
- @_FILL
- GFILL TX1,TY1,TX2,TY2,COL
- RETURN
- '---
- @_CIRCLE
- X=ABS(TX1-TX2)
- Y=ABS(TY1-TY2)
- IF X<Y THEN X=Y
- GCIRCLE TX1,TY1,X,COL
- RETURN
- '---
- @_CLS
- GCLS
- RETURN
- '---
- @_SPOIT
- SPCHR 0,114,0,0,0,PR
- GOSUB @COLCLR
- C=GSPOIT(TX,TY)
- CX=FLOOR(C%16)
- CY=FLOOR(C/16)
- GOSUB @COLCSR
- RETURN
- '---
- @_PAINT
- GPAINT TX,TY,COL
- RETURN
- '---
- @_PSET
- IF ZS(ZM)!=0 GOTO @_PSET2
- '---
- IF OTX<0 THEN OTX=TX1:OTY=TY1
- GLINE OTX,OTY,TX1,TY1,COL
- OTX=TX1:OTY=TY1
- RETURN
- '---
- @_PSET2
- X=TX-FLOOR(ZS(ZM)/2)
- Y=TY-FLOOR(ZS(ZM)/2)
- GFILL X,Y,X+ZS(ZM),Y+ZS(ZM),COL
- RETURN
-
- '==========================
- @CHKMODE 'Mode check
- '==========================
- VY=1:IF BN AND 256 THEN VY=-1
- IF B== 16 GOTO @FILEMODE
- IF B== 64 GOTO @TOOLSEL
- IF B==128 GOTO @ZOOMSEL
- IF B==512 GOTO @GRID
- RETURN
- '---
- @GRID
- IF GM==0 GOTO @GON
- FOR I=0 TO 23
- PNLSTR 0,I," "*32
- NEXT
- GM=0:RETURN
- '---
- @GON
- FOR I=0 TO 23
- PNLSTR 0,I,"С"*32
- NEXT
- GM=1:RETURN
-
- '---
- @ZOOMSEL
- LOCATE ZX,ZY+ZM:PRINT" "
- ZM=ZM+VY
- IF ZM<0 THEN ZM=MAXZM-1
- IF ZM>=MAXZM THEN ZM=0
- GOTO @PUTMODE
- '---
- @TOOLSEL
- LOCATE MX,MY+TL:PRINT" "
- TL=TL+VY
- IF TL<0 THEN TL=MAXTL-1
- IF TL>=MAXTL THEN TL=0
- TSTEP=0
- '---
- @PUTMODE
- LOCATE MX,MY+TL
- PRINT "Й";
- LOCATE ZX,ZY+ZM
- PRINT "Й";
- RETURN
-
- '==========================
- @FILEMODE 'Load and save files
- '==========================
- PNLTYPE "KYA"
- FOR I=0 TO 3:ICONCLR I:NEXT
- 'GOTO @_FLOOP
- '---
- CLS:GPAGE 0:GCLS
- INPUT "Copy upward? (Y/N)";K$
- IF K$!="Y" GOTO @_FLOOP
- '---
- FOR Y=0 TO 191
- FOR X=0 TO 255
- GPAGE 1
- C=GSPOIT(X,Y)
- GPAGE 0
- GPSET X,Y,C
- NEXT
- NEXT
- GPAGE 1
-
- '---
- @_FLOOP
- CLS
- PRINT"=========================="
- PRINT" L:Load GRP"
- PRINT" S:Save GRP"
- PRINT"LC:Load color"
- PRINT"SC:Save color"
- PRINT" Q:File menu end"
- PRINT" E:Tool end"
- PRINT"=========================="
- '---
- INPUT"Command";K$
- IF K$=="Q" GOTO @_FQUIT
- IF K$=="E" GOTO @_FEXIT
- IF K$=="S" GOTO @_FSAVE
- IF K$=="L" GOTO @_FLOAD
- IF K$=="SC" GOTO @_FCSAVE
- IF K$=="LC" GOTO @_FCLOAD
- GOTO @_FLOOP
- '---
- @_FCLOAD
- INPUT"Load name (COL):";K$
- K$="COL2:"+K$:PRINT K$
- GPAGE 0
- LOAD K$,FALSE
- GPAGE 1
- LOAD K$,FALSE
- GOTO @_FQUIT
- '---
- @_FCSAVE
- INPUT"Save name (COL):";K$
- K$="COL2:"+K$:PRINT K$
- SAVE K$
- GOTO @_FQUIT
- '---
- @_FLOAD
- INPUT"Load name (GRP):";K$
- K$="GRP1:"+K$:PRINT K$
- LOAD K$,FALSE
- GOTO @_FQUIT
- '---
- @_FSAVE
- INPUT"Save name (GRP):";K$
- K$="GRP1:"+K$:PRINT K$
- SAVE K$
- '---
- @_FQUIT
- GOSUB @DISPINIT
- RETURN
- '---
- @_FEXIT
- FOR I=1 TO 0 STEP -1
- SPPAGE I:SPCLR
- GPAGE I:GCLS
- NEXT
- FOR I=0 TO 255
- COLINIT "GRP",I
- COLINIT "BG",I
- NEXT
- COLOR 0
- CLS
- PRINT "Good job!"
- END
EXEC "DRWED" (Touch Enter to Run)
A drawing tool that stores elements in units such as lines and squares. This drawing tool can store up to 8000 command s for drawing elements such as lines and squares. It differs from pixel art by allowing you to reply stored data and adjust the pi cture as many times as you like. The picture data is stored on the upper screen in the form of colors.
- 'DRAW EDITOR
- '(C)SmileBoom Co.Ltd
- '
- '
- '
- CLEAR:ACLS:SPPAGE 1
- BGPAGE 1:BGCLR
- VISIBLE 1,1,1,1,1,1
- RECMAX=8000:HSIZE=256
- TXMAX=4:TXLEN=32
- _CMD=0:_TXY=1:_EXY=2:_MAX=3
- DIM B(RECMAX,_MAX)
- DIM TX$(TXMAX)
- FOR I=0 TO TXMAX-1
- TX$(I)=" "*TXLEN
- NEXT
-
- '---
- DATA "LINE "
- DATA "CIRCLE"
- DATA "BOX "
- DATA "PAINT "
- DATA "PSET "
- DATA "CLEAR "
- DATA "FILL "
- CMDMAX=7
- DIM C$(CMDMAX)
- FOR I=0 TO CMDMAX-1
- READ C$(I)
- NEXT
-
- '---
- N$="SPS0"
- C$="0"*8:Z$=C$*8
- B$="F0000000"+C$*7
- CHRSET N$,0,B$
- CHRSET N$,1,Z$
- CHRSET N$,2,Z$
- CHRSET N$,3,Z$
- A$="FFF00000"
- A$=A$+"F0F00000"+A$+C$*5
- CHRSET N$,4,A$
- CHRSET N$,5,Z$
- CHRSET N$,6,Z$
- CHRSET N$,7,Z$
- A$="F0000000"+C$*7
- CHRSET "BGU0",1,A$
- A$="E0E0E0E00E0E0E0E"*4
- CHRSET "BGU0",2,A$
- '---
- SPMAX=88
- FOR I=0 TO SPMAX-1
- SPSET I,0,0,0,0,0
- SPOFS I,-16,-16
- NEXT
- '---
- PNLTYPE"OFF"
- ICONPUSE=FALSE
- ICONCLR:ICONPMAX=3
- '---
- FOR I=0 TO 3
- BREPEAT I,20,4
- NEXT
- BREPEAT 7,20,2:'Y BUTTON
- '---
- OLDCMD=-1:CMD=4
- DR=0:GR=1:TM=FALSE
- REC=0:COL=15:QT=0:WM=16
- MX=0:MY=0:MW=8:MB=-1:MC=0
- GOSUB @INIT
-
- '========
- ' main
- '========
- @MAIN
- OS=TS:TS=TCHST
- OB=BT:BT=BTRIG():BN=BUTTON()
- IF TM==FALSE THEN @MSKIP
- K$=INKEY$()
- GOSUB @TEXTSUB
- GOTO @MNEXT
- '---
- @MSKIP
- GOSUB @BUTCTRL
- IF QT THEN @QUIT
- GOSUB @TOUCH
- '---
- @MNEXT
- GOSUB @PUTCOL
- VSYNC 1
- GOTO @MAIN
- '---
- @QUIT
- GPAGE 1:GCLS 0:
- GPAGE 0:GCLS 0
- CLS
- PRINT"Good job!"
- END
-
- '==============
- ' initialize
- '==============
- @INIT
- CLS
- PRINT"DRAW EDITOR V1.1"
- PRINT"-"*32;
- COLOR 7
- FOR I=0 TO CMDMAX-1
- PRINT " "+C$(I)
- NEXT
- '---
- LOCATE 0,11
- PRINT"А:file К:grid"
- PRINT"Х:delete"
- PRINT
- PRINT"START:setting"
- PRINT" wait( )"
- PRINT" bgm( )"
- '---
- LOCATE 18,0
- PRINT"REC: C:"
- '---
- WX=0:WY=20
- LOCATE 0,WY-2:PRINT"Б:text"
- COLOR 0:PRINT "-"*32;
- GFILL 0,(WY*8)-4,255,(WY+TXMAX)*8-1,255
- BGFILL 0,WX,WY,WX+31,WY+TXMAX-1,&H0002;
- GOSUB @PUTST
- GOSUB @PUTREC
- '---
- GPAGE 0:CX=15:CY=2
- LOCATE CX-1,CY-1
- PRINT"┬"+"-"*16+"┬";
- FOR Y=0 TO 15
- LOCATE CX-1,CY+Y
- PRINT"|"+" "*16+"|";
- FOR X=0 TO 15
- TX=CX*8+X*8:TY=CY*8+Y*8
- C=Y*16+X
- GFILL TX,TY,TX+7,TY+7,C
- NEXT
- NEXT
- LOCATE CX-1,CY+16
- PRINT"+"+"-"*16+"+";
- GPAGE 1
- GOSUB @PUTCOL0
- GOSUB @PUTGRID
- RETURN
-
- '---
- @PUTGRID
- SC=&H0;:IF GR THEN SC=&HE001;
- BGFILL 1,0,0,31,23,SC
- RETURN
-
- '================
- ' button control
- '================
- @BUTCTRL
- D=BT AND 15
- IF D THEN @BUTDIR
- IF BT==128 THEN @BUTY
- IF OB THEN RETURN
- IF BT==32 THEN @BUTB
- IF BT==64 THEN @BUTX
- IF BT==16 THEN @BUTA
- IF BT==512 THEN @BUTR
- IF BT==1024 THEN @BSTART
- RETURN
-
- '---
- @BSTART
- VISIBLE 1,1,0,0,0,0:CLS
- INPUT"BGM(0-,-1=OFF)=";MB
- INPUT"WAIT(0-)=";MW
- BGMPLAY MB
- VISIBLE 1,1,1,1,1,1
- GOSUB @INIT
- RETURN
-
- '---Б:text
- @BUTB
- TM=TRUE:TW=0:PNLTYPE"KYA"
- BGPAGE 0:DR=0
- RETURN
-
- '---А:file menu
- @BUTA
- GOSUB @FILE
- GPAGE 0:GCLS 0:GPAGE 1
- GOSUB @INIT
- GOSUB @CLRCOL
- GOSUB @PUTREC
- GOSUB @REPLAY
- RETURN
-
- '---К:grid
- @BUTR
- GR=GR XOR 1:DR=0
- GOSUB @PUTGRID
- RETURN
-
- '---Х:delete
- @BUTY
- IF REC==0 THEN RETURN
- REC=REC-1:DR=0
- GOSUB @CLRCOL
- GOSUB @PUTREC
- GOSUB @REPLAY
- GOSUB @PUTST
- OLDCMD=-1
- RETURN
-
- '---
- @GETVEC
- VX=0:VY=0
- IF D AND 1 THEN VY=-1
- IF D AND 2 THEN VY=1
- IF D AND 4 THEN VX=-1
- IF D AND 8 THEN VX=1
- RETURN
-
- '---
- @BUTDIR
- GOSUB @GETVEC
- IF VX+VY==0 THEN @PUTCOL
- '---
- @MOVCOL
- GOSUB @CLRCOL
- COL=COL+(VY*16)+VX
- COL=COL AND 255
- '---
- @PUTCOL0
- LOCATE 29,0
- PRINT RIGHT$(" "+STR$(COL),3);
- '---
- @PUTCOL
- LOCATE CX+COL%16,CY+COL/16
- CC=RND(15)
- COLOR CC:PRINT"□":COLOR 15
- RETURN
- '---
- @CLRCOL
- LOCATE CX+COL%16,CY+COL/16
- PRINT" "
- RETURN
-
- '---Ф:command select
- @BUTX
- LOCATE 0,2+CMD:PRINT" "
- VY=1:IF BN AND 256 THEN VY=-1
- CMD=CMD+VY
- IF CMD<0 THEN CMD=CMDMAX-1
- CMD=CMD%CMDMAX
- DR=0:GOSUB @PUTST
- RETURN
-
- '=============
- ' check touch
- '=============
- @TOUCH
- ON DR GOTO @L0,@L1,@L2
- RETURN
- '---
- @L0
- IF TS==FALSE THEN RETURN
- TX=TCHX:TY=TCHY
- IF CMD==3 THEN @L0P
- IF CMD==5 THEN @L0CLS
- EX=TX:EY=TY:DR=1
- RETURN
-
- '---
- @L0P
- N=GSPOIT(TX,TY)
- IF N==COL THEN RETURN
- GPAINT TX,TY,COL
- GOTO @LREC
-
- '---
- @L0CLS
- IF OLDCMD==CMD THEN RETURN
- GCLS COL
- GOTO @LREC
-
- '---
- @L1
- X=TX:Y=TY
- EX=TCHX:EY=TCHY
- GOSUB @GUIDE
- IF TS==0 THEN @L1SUB
- IF CMD==4 THEN @L1PS
- RETURN
- '---
- @L1SUB
- ON CMD GOTO @L1L,@L1C,@L1B
- IF CMD!=6 THEN RETURN
- '---
- GFILL TX,TY,EX,EY,COL
- GOTO @LREC
- '---
- @L1B
- GBOX TX,TY,EX,EY,COL
- '---
- @LREC
- GOSUB @CMDREC:DR=0
- RETURN
- '---
- @L1C
- EX=R:GCIRCLE TX,TY,EX,COL
- GOTO @LREC
- '---
- @L1L
- GLINE TX,TY,EX,EY,COL
- GOSUB @CMDREC
- TX=EX:TY=EY:DR=2
- RETURN
- '---
- @L1PS
- GOSUB @L1L:DR=1
- RETURN
- '---
- @L2
- IF TS==FALSE THEN RETURN
- TX=EX:TY=EY:DR=1
- RETURN
-
- '========
- ' record
- '========
- @CMDREC
- OLDCMD=CMD
- IF REC>=RECMAX THEN RETURN
- B(REC,_CMD)=CMD+(COL*256)
- B(REC,_TXY)=TX*256+TY
- B(REC,_EXY)=EX*256+EY
- REC=REC+1
- '---
- @PUTREC
- LOCATE 22,0:R=RECMAX-REC
- PRINT RIGHT$(" "+STR$(R),4);
- RETURN
- '---
- @PUTN
- PRINT RIGHT$(" "+STR$(N),3);
- RETURN
-
- '============
- ' text write
- '============
- @TEXTSUB
- IF OB THEN @TXTOP
- IF BT!=32 THEN @TXTOP
- '---Б:exit text
- PNLTYPE"OFF"
- BGPUT 0,MX+WX,MY+WY,1,0,0,0
- BGPAGE 1:TM=FALSE
- RETURN
- '---
- @TXTOP
- GOSUB @TXIN
- GOSUB @TXCSR
- N=13:IF TW>=8 THEN N=0
- BGPUT 0,MX+WX,MY+WY,N,0,0,0
- TW=TW+1
- IF TW==16 THEN TW=0
- RETURN
- '---
- @TXCSR
- D=BT:GOSUB @GETVEC
- IF VX+VY!=0 THEN @TXMOV
- RETURN
- '---
- @BS
- VX=-1:VY=0:K$=" "
- GOTO @TXIN2
- '---
- @ENTER
- BGPUT 0,MX+WX,MY+WY,1,0,0,0
- MX=0:VY=1:GOTO @TXMOV
- '---
- @TXIN
- IF KEYBOARD==15 THEN @BS
- IF KEYBOARD==60 THEN @ENTER
- IF K$=="" THEN RETURN
- VX=1:VY=0
- '---
- @TXIN2
- TX$(MY)=SUBST$(TX$(MY),MX,1,K$)
- GOSUB @PUTST
- '---
- @TXMOV
- BGPUT 0,MX+WX,MY+WY,1,0,0,0
- MX=MX+VX:M=TXLEN-1
- IF MX<0 THEN MX=M:VY=VY-1
- IF MX>M THEN MX=0:VY=VY+1
- MY=MY+VY
- IF MY>TXMAX-1 THEN MY=0
- IF MY<0 THEN MY=TXMAX-1
- W=0
- RETURN
-
- '============
- ' put status
- '============
- @PUTST
- LOCATE 0,2+CMD:PRINT"Ф"
- '---
- FOR I=0 TO TXMAX-1
- LOCATE WX,WY+I
- PRINT TX$(I);
- PNLSTR WX,WY+I,TX$(I)
- NEXT
- '---
- LOCATE 6,15:N=MW:GOSUB @PUTN
- LOCATE 6,16:N=MB:GOSUB @PUTN
- RETURN
-
- '============
- ' guide line
- '============
- @GUIDE
- ON CMD GOTO @SPL,@SPC,@SPB
- IF CMD==6 THEN @SPB
- RETURN
-
- '=============
- ' sprite line
- '=============
- @SPL
- N=0:M=20:C=RND(16)
- GOSUB @SPLSUB
- GOTO @SPOFF
-
- '---
- @SPLSUB
- VX=EX-X:SX=SGN(VX):AX=ABS(VX)
- VY=EY-Y:SY=SGN(VY):AY=ABS(VY)
- J=W:W=W+1:SMX=N+M
- IF AX>AY THEN @XLINE
- '---
- IF AY==0 THEN RETURN
- VX=VX/AY
- FOR I=Y TO EY STEP SY
- IF (J % WM) THEN @SKIPX
- IF N>=SMX THEN @SKIPX
- SPOFS N,X,I
- SPCHR N,0,C,0,0,0
- N=N+1
- @SKIPX
- X=X+VX:J=J+1
- NEXT
- GOTO @ELINE
- '---
- @XLINE
- IF AX==0 THEN RETURN
- VY=VY/AX
- FOR I=X TO EX STEP SX
- IF (J % WM) THEN @SKIPY
- IF N>=MX THEN @SKIPY
- SPOFS N,I,Y:SPCHR N,0
- SPCHR N,0,C,0,0,0
- N=N+1
- @SKIPY
- Y=Y+VY:J=J+1
- NEXT
- '---
- @ELINE
- SPOFS N,EX-1,EY-1
- SPCHR N,1,C,0,0,0
- N=N+1
- RETURN
-
- '===============
- ' sprite circle
- '===============
- @SPC
- VX=ABS(EX-X)
- VY=ABS(EY-Y)
- R=SQR(VX*VX+VY*VY)
- M=20:ST=360/M
- J=W/ST:W=W+WM
- C=RND(16)
- FOR N=0 TO M-1
- A=RAD(J%360):J=J+ST
- OX=X+COS(A)*R
- OY=Y+SIN(A)*R
- SPOFS N,OX,OY
- SPCHR N,0,C,0,0,0
- NEXT
- SPOFS M,X-1,Y-1
- SPCHR M,1,C,0,0,0
- RETURN
-
- '============
- ' sprite box
- '============
- @SPB
- TMPX=EX:TMPY=EY
- N=0:M=20:C=RND(16)
- X=TX:Y=TY:EY=Y
- GOSUB @SPLSUB
- X=EX:Y=TY:EY=TMPY
- GOSUB @SPLSUB
- X=EX:Y=EY:EX=TX
- GOSUB @SPLSUB
- X=TX:Y=EY:EX=X:EY=TY
- GOSUB @SPLSUB
- EX=TMPX:EY=TMPY
- '---
- @SPOFF
- FOR I=N TO SPMAX-1
- SPOFS I,-16,-16
- NEXT
- RETURN
-
- '===========
- ' file menu
- '===========
- @FILE
- CLS:GPAGE 0:GCLS 0
- GP=1:GPAGE GP
- GF$="GRP"+STR$(GP)+":"
- PRINT"FILE MENU"
- PRINT"="*32;
- PRINT" L:Load date"
- PRINT" S:Save date"
- PRINT"SG:Save picture"
- PRINT" X:Erase screen"
- PRINT" Q:File MENU end"
- PRINT" E:Tool end"
- PRINT"="*32;
- INPUT"Command";K$
- IF K$=="S" THEN @SVREC
- IF K$=="L" THEN @LDREC
- IF K$=="SG" THEN @SVGRP
- IF K$=="E" THEN QT=1
- IF K$=="X" THEN @XCLS
- RETURN
-
- '==========================
- @XCLS
- INPUT"Erases";K$
- IF K$!="Y" THEN @FILE
- REC=0
- RETURN
-
- '==========================
- @GLNUM
- TOTAL=TOTAL+1
- IF Y>191 THEN @LDERR
- N=GSPOIT(X,Y)
- X=X+1:IF X<256 THEN RETURN
- X=0:Y=Y+1
- RETURN
- '---
- @GLCHR
- GOSUB @GLNUM
- N$=CHR$(N):RETURN
- '---
- @GLWORD
- GOSUB @GLNUM:W=N*256
- GOSUB @GLNUM:W=W+N
- RETURN
- '---
- @LDERR
- PRINT"This file cannot be used"
- @LDLOOP
- IF INKEY$()=="" THEN @LDLOOP
- RETURN
-
- '==========================
- @LDREC
- GPAGE 1:X=0:Y=0:TOTAL=0
- INPUT"File name to load";K$
- LOAD GF$+K$
- IF RESULT!=TRUE THEN RETURN
- '--- header
- GOSUB @GLCHR:C$=N$
- GOSUB @GLCHR:C$=C$+N$
- GOSUB @GLCHR:C$=C$+N$
- GOSUB @GLCHR:C$=C$+N$
- IF C$!="DE1:" THEN @LDERR
- '---
- GOSUB @GLWORD:H=W
- GOSUB @GLWORD:REC=W
- GOSUB @GLWORD:MW=W
- GOSUB @GLWORD:MB=W-1
- GOSUB @GLWORD
- GOSUB @GLWORD
- '--- text
- FOR IX=0 TO TXMAX-1
- TX$(IX)=""
- FOR J=0 TO TXLEN-1
- GOSUB @GLCHR
- TX$(IX)=TX$(IX)+N$
- NEXT
- NEXT
- '--- skip
- FOR I=0 TO (HSIZE-TOTAL)-1
- GOSUB @GLNUM
- NEXT
- '--- command
- FOR I=0 TO REC-1
- GOSUB @GLWORD:B(I,_CMD)=W
- GOSUB @GLWORD:B(I,_TXY)=W
- GOSUB @GLWORD:B(I,_EXY)=W
- LOCATE 0,23
- PRINT I;"/";REC;
- NEXT
- RETURN
-
- '==========================
- @GSNUM
- TOTAL=TOTAL+1
- IF Y>191 THEN RETURN
- GPSET X,Y,N
- X=X+1:IF X<256 THEN RETURN
- X=0:Y=Y+1
- RETURN
- '---
- @GSWORD
- N=(W/256) AND 255
- GOSUB @GSNUM
- N=W AND 255
- GOSUB @GSNUM
- RETURN
-
- '==========================
- @SVREC
- GPAGE 1:X=0:Y=0:TOTAL=0
- '--- header
- N=ASC("D"):GOSUB @GSNUM
- N=ASC("E"):GOSUB @GSNUM
- N=ASC("1"):GOSUB @GSNUM
- N=ASC(":"):GOSUB @GSNUM
- '--- length
- W=HSIZE:GOSUB @GSWORD
- W=REC:GOSUB @GSWORD
- W=MW:GOSUB @GSWORD
- W=MB+1:GOSUB @GSWORD
- W=0:GOSUB @GSWORD
- W=0:GOSUB @GSWORD
- '--- text
- FOR IX=0 TO TXMAX-1
- C$=TX$(IX)
- FOR J=0 TO TXLEN-1
- N=ASC(MID$(C$,J,1))
- GOSUB @GSNUM
- NEXT
- NEXT
- '--- skip
- FOR I=0 TO (HSIZE-TOTAL)-1
- N=0:GOSUB @GSNUM
- NEXT
- '--- command
- LY=CSRY
- FOR I=0 TO REC-1
- W=B(I,_CMD):GOSUB @GSWORD
- W=B(I,_TXY):GOSUB @GSWORD
- W=B(I,_EXY):GOSUB @GSWORD
- NEXT
- '---
- INPUT"File name to save";K$
- SAVE GF$+K$
- RETURN
-
- '==========================
- @SVGRP
- GPAGE 1
- INPUT"File name saved as picture";K$
- SAVE GF$+K$
- RETURN
-
- '==========================
- @REPLAY
- GCLS 0
- FOR IX=0 TO REC-1
- O=_TXY:GOSUB @GETCMD
- TX=X:TY=Y
- O=_EXY:GOSUB @GETCMD
- EX=X:EY=Y
- O=_CMD:GOSUB @GETCMD
- GOSUB @CMDSUB
- NEXT
- RETURN
- '---
- @GETCMD
- X=B(IX,O):Y=X AND &HFF;
- X=(X AND &HFF00;)/256
- RETURN
- '---
- @CMDSUB
- ON Y GOTO @RL,@RC,@RB,@RP,@RL,@RX
- '---
- GFILL TX,TY,EX,EY,X:RETURN
- '---
- @RX
- GCLS X:RETURN
- '---
- @RL
- GLINE TX,TY,EX,EY,X:RETURN
- '---
- @RC
- GCIRCLE TX,TY,EX,X:RETURN
- '---
- @RB
- GBOX TX,TY,EX,EY,X:RETURN
- '---
- @RP
- GPAINT TX,TY,X:RETURN
These are sample games that have been created using Petit Computer. You can view the code for these games in Edit Mode. Feel free to adapt the program to your own needs, making enemies weaker, for example, or adjusting the speed of bullets.
EXEC "GAME1" (Touch Enter to Run)
A racing game where you erase on-screen dots. Steer your car with the +Control Pad, aiming to pass over all the dots on the screen. Your car will accelerate as it passes over dots.
- '+--------------+
- '|DOT-RACER v1.1|
- '+--------------+
- VISIBLE 1,1,0,0,0,1
- CLS:COLOR 0
- GPAGE 0:GCOLOR 0:GCLS
- CLEAR
- DIM MYCHR$(4),VX(4),VY(4),CL(4)
- DATA "Ь",1,0,14
- DATA "Э",0,1,8
- DATA "Ю",-1,0,7
- DATA "Ы",0,-1,3
- FOR I=0 TO 3
- READ MYCHR$(I),VX(I),VY(I),CL(I)
- VX(I)=SGN(VX(I))
- VY(I)=SGN(VY(I))
- PRINT MYCHR$(I),VX(I),VY(I)
- NEXT
- '---
- DIM E(16,16)
- _X=0:_Y=1:_C=2:_D=3
- _W=4:_WM=5
-
- '---
- FL=0:RQ=FL:BGMW=FALSE
- GOSUB @TITINIT
-
- '---
- @LOOP
- OLDB=B:B=BUTTON()
- '
- GOSUB @FLOW
- '
- VSYNC 1
- GOTO @LOOP
- END
-
- '---------------------------
- @FLOW 'Run screen
- '---------------------------
- IF RQ==FL GOTO @FLJUMP
- IF BGMW AND BGMCHK() THEN RETURN
- BGMW=FALSW
- '--- Go to new screen
- ON RQ GOSUB @TITINIT,@SSINIT,@GAMEINIT,@GOVINIT,@SCINIT
- FL=RQ
- '--- Go to process for various screen
- @FLJUMP
- ON FL GOTO @TIT,@SSTART,@GAME,@GOVER,@SCLEAR
- RETURN
-
- '---------------------------
- '
- '---------------------------
- @ANYBUT
- R=FALSE
- IF OLDB THEN RETURN
- IF B==0 THEN RETURN
- R=TRUE
- RETURN
-
- '---
- @SE
- P=(128/23)*X
- V=(100/23)*Y+27
- BEEP B,F,V,P
- RETURN
-
- '---------------------------
- @TIT
- '---------------------------
- GOSUB @TITPUT
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- BGMSTOP
- RQ=1
- RETURN
-
- '---
- @TITINIT
- CLS:BGMPLAY 14
- STG=0
- @TITPUT
- I=(C/4) AND 7
- IF I>3 THEN I=7-I
- COLOR CL(I):C=C+1
- X=6:Y=8
- LOCATE X,Y+0:PRINT"┣┫┳┏┗╋┏ ┻┏┓┗┫┳┏━┣┏┻┏┓"
- LOCATE X,Y+1:PRINT"┛┻┻ ┛┻ ┏┻┠━┯┨┻ ┣┏┻┠━"
- LOCATE X,Y+2:PRINT"┯┗┃┠━┻ ┻┃┓┛┻┃┠┓┯┠┻┃┓"
- COLOR 9:X=8:Y=Y+7
- LOCATE X,Y:PRINT"PUSH ANY BUTTON!"
- COLOR 2:X=4:Y=Y+5
- LOCATE X,Y:PRINT"(C)2011 SmileBoom Co.Ltd."
- RETURN
-
- '---------------------------
- @SSTART
- '---------------------------
- W=W-1:IF W<0 GOTO @_SIEND
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- @_SIEND
- RQ=2
- RETURN
- '---
- @SSINIT
- CLS:BGMSTOP
- X=13:Y=11:W=60*1
- LOCATE X,Y:PRINT"Ready?"
- RETURN
-
- '---------------------------
- @SCLEAR
- '---------------------------
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- RQ=3
- RETURN
- '
- @SCINIT
- CLS:BGMPLAY 9
- X=13:Y=11:W=60*1
- LOCATE X,Y:PRINT"CLEAR!"
- RETURN
-
- '---------------------------
- @GOVER
- '---------------------------
- GLINE MX*8,MY*8,RND(256),RND(256),RND(256)
- GCIRCLE MX*8,MY*8,RND(100)+2,RND(256)
- IF BGMCHK() THEN RETURN
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- GCLS
- RQ=0
- RETURN
- '---
- @GOVINIT
- CLS:BGMPLAY 6:BGMW=TRUE
- X=11:Y=11
- LOCATE X,Y:PRINT"GAME OVER"
- RETURN
-
- '---------------------------
- @GAME
- '---------------------------
- GOSUB @MYCAR
- GOSUB @ENEMY
- GOSUB @PUTSCO
- IF DOT==0 GOTO @MYCLR
- RETURN
-
- '---
- @MYCAR
- MW=MW+1
- IF MW<WMAX THEN RETURN
- MW=0
- LOCATE MX,MY:PRINT" "
- @_MYRETRY
- X=MX+VX(MD):Y=MY+VY(MD):D=MD
- IF MS THEN MS=FALSE:GOTO @_MYSVEC
- '--- Input check
- GOSUB @GETVEC
- '---
- @_MYSVEC
- X=X+KX:Y=Y+KY
- GOSUB @CHKDOT
- IF C==ASC("Е") GOTO @DEAD
- IF R GOTO @_MYMOVE
- '--- Adjust direction
- MD=D
- GOTO @_MYRETRY
- '--- Move
- @_MYMOVE
- IF C!=ASC("・") GOTO @_MYMOV2
- '--- Get DOT
- B=62:F=-4000:GOSUB @SE
- DOT=DOT-1
- SCO=SCO+10
- GOSUB @SPDUP
- '---
- @_MYMOV2
- MX=X:MY=Y
- GOSUB @PUTMCAR
- RETURN
-
- '---
- @MYCLR
- BEEP 32
- STG=STG+1
- IF STG==4 THEN RQ=4:RETURN
- '---
- BGMPLAY 4
- BGMW=TRUE
- RQ=1
- RETURN
-
- '---
- @GETVEC
- KX=0:KY=0:
- IF B==1 THEN KY=-1:O=3
- IF B==2 THEN KY=1:O=1
- IF B==4 THEN KX=-1:O=2
- IF B==8 THEN KX=1:O=0
- '---
- IF D==O GOTO @GVOFF
- O=O+2:O=O AND 3
- IF D==O GOTO @GVOFF
- '---
- OX=X+KX:OY=Y+KY
- C=CHKCHR(OX,OY)
- MS=TRUE
- IF C==ASC("・") THEN RETURN
- IF C==ASC(" ") THEN RETURN
- @GVOFF
- KX=0:KY=0:MS=FALSE
- RETURN
-
- '---
- @SPDUP
- WMAX=WMAX-0.05
- IF WMAX<0.01 THEN WMAX=0.01
- RETURN
-
- '---
- @DEAD
- BEEP 55,-2000
- RQ=3
- RETURN
-
- '---
- @ENEMY
- IF ECNT==0 THEN RETURN
- FOR I=0 TO ECNT-1
- WM=E(I,_WM)
- W=E(I,_W):W=W+1
- IF W<WM GOTO @_ESKIP
- W=0
- @_ERETRY
- X=E(I,_X):Y=E(I,_Y):D=E(I,_D)
- LOCATE X,Y:PRINT CHR$(E(I,_C))
- X=X+VX(D):Y=Y+VY(D)
- GOSUB @CHKDOT
- IF R GOTO @_EMOVE
- E(I,_D)=D
- GOTO @_ERETRY
- @_EMOVE
- E(I,_X)=X:E(I,_Y)=Y
- E(I,_C)=CHKCHR(X,Y)
- GOSUB @PUTENE
- @_ESKIP
- E(I,_W)=W
- NEXT
- RETURN
-
- '---
- @CHKDOT
- C=CHKCHR(X,Y):R=TRUE
- IF C==ASC("・") THEN RETURN
- IF C==ASC(" ") THEN RETURN
- D=D-1:D=D AND 3
- R=FALSE
- RETURN
-
- '---
- @PUTSCO
- X=25:Y=2
- LOCATE X,Y:PRINT" "
- LOCATE X,Y:PRINT SCO
- Y=Y+3
- LOCATE X,Y:PRINT" "
- LOCATE X,Y:PRINT WTOP-WMAX
- Y=Y+3
- LOCATE X,Y:PRINT" "
- LOCATE X,Y:PRINT DOT
- RETURN
-
- '---
- @GAMEINIT
- CLS
- BGMPLAY 13
- '---
- COLOR 7
- X=24:Y=1
- LOCATE X,Y:PRINT"SCORE";
- Y=Y+3
- LOCATE X,Y:PRINT"SPEED";
- Y=Y+3
- LOCATE X,Y:PRINT"REST";
- LOCATE 0,23:PRINT"STAGE:";
- PRINT STG+1;
- COLOR 0
-
- '---
- MW=0:WTOP=8:WMAX=WTOP
- MS=FALSE
- SCO=0
-
- '---
- @STAGE1
- '---
- DATA"+---------------------+"
- DATA"|・・・・・・・・・・・・・・・・・・・・・|"
- DATA"|・+------- -------+・|"
- DATA"|・|・・・・・・・・・・・・・・・・・|・|"
- DATA"|・|・+----- -----+・|・|"
- DATA"|・|・|・・・・・・・・・・・・・|・|・|"
- DATA"|・|・|・+--- ---+・|・|・|"
- DATA"|・|・|・|・・・・・・・・・|・|・|・|"
- DATA"|・|・|・|・+- -+・|・|・|・|"
- DATA"|・|・|・|・|・・・・・|・|・|・|・|"
- DATA"|・ ・ ・ ・ ・+-+・ ・ ・ ・ ・|"
- DATA"|・ ・ ・ ・ ・|Ч|・ ・ ・ ・ ・|"
- DATA"|・ ・ ・ ・ ・+-+・ ・ ・ ・ ・|"
- DATA"|・|・|・|・|・・・・・|・|・|・|・|"
- DATA"|・|・|・|・+- -+・|・|・|・|"
- DATA"|・|・|・|・・・・・・・・・|・|・|・|"
- DATA"|・|・|・+--- ---+・|・|・|"
- DATA"|・|・|・・・・・・・・・・・・・|・|・|"
- DATA"|・|・+----- -----+・|・|"
- DATA"|・|・・・・・・・・・・・・・・・・・|・|"
- DATA"|・+------- -------+・|"
- DATA"|・・・・・・・・・・ ・・・・・・・・・・|"
- DATA"+---------------------+"
- DATA 11,21,0
- DATA 3
- DATA 11,1,2
- DATA 11,5,2
- DATA 11,7,2
- '---
- RESTORE @STAGE1
- FOR I=0 TO 22
- READ C$
- LOCATE 0,I
- PRINT C$
- NEXT
- '--- Count DOT
- DOT=0
- FOR Y=0 TO 22
- FOR X=0 TO 22
- IF CHKCHR(X,Y)==ASC("・") THEN DOT=DOT+1
- NEXT
- NEXT
- '--- Player
- READ MX,MY,MD
- GOSUB @PUTMCAR
- '--- Enemy generate
- READ ECNT
- ECNT=STG
- IF STG==0 THEN RETURN
- FOR I=0 TO ECNT-1
- READ X,Y,D
- E(I,_X)=X:E(I,_Y)=Y:E(I,_D)=D
- E(I,_C)=CHKCHR(X,Y)
- E(I,_WM)=4+RND(60)
- GOSUB @PUTENE
- NEXT
- '---
- RETURN
-
- '---
- @PUTMCAR
- LOCATE MX,MY
- PRINT MYCHR$(MD)
- RETURN
- '---
- @PUTENE
- LOCATE E(I,_X),E(I,_Y)
- PRINT "Е"
- RETURN
EXEC "GAME2" (Touch Enter to Run)
A dungeon-crewling RPG. In this RPG, you'll use the +Control Pad to head to the top of the dungeion while bashing beasts and picking up items such as medicine and weapons.
- '+-----------------+
- '|Dungeon Adventure|
- '| |
- '+-----------------+
- ACLS:CLEAR
- VISIBLE 1,1,0,0,1,1
- COLOR 0
- BREPEAT 0,20,10
- BREPEAT 1,20,10
- BREPEAT 2,20,10
- BREPEAT 3,20,10
- '---
- DIM MAP(16,16)
- DIM NMAP(4,3)
- DIM LF(24)
- DIM GX(9),GY(9)
- DIM ESPR(2),EPLT(2)
- ECHR=0:EHP=0:ESTR=0
- PHP=100:PSTR=10:PEQUIP=0:PLEVEL=1
- LEVEL=0
- DIM PITEM(3)
- PITEM(0)=1
- PITEM(1)=0
- PITEM(2)=0
-
- 'Load about a coordinate of dungeon line
- RESTORE @GRID
- FOR I=1 TO 8
- READ GX(I),GY(I)
- NEXT
-
- @LEVSTART
- 'Load Map date
- ON LEVEL GOTO @LEV1,@LEV2,@LEV3
- @LEV1
- RESTORE @MAP1:GOTO @LEVREAD
- @LEV2
- RESTORE @MAP2:GOTO @LEVREAD
- @LEV3
- RESTORE @MAP3:GOTO @LEVREAD
- @LEVREAD
- READ BGMDUN,BGMBTL
- READ ESPR(0),EPLT(0),ESPR(1),EPLT(1)
- READ PX,PY,PDIR
- FOR Y=0 TO 15
- FOR X=0 TO 15
- READ MAP(Y,X)
- NEXT X
- NEXT Y
-
- 'Main routing
- BGMPLAY BGMDUN
- @LOOP
- GOSUB @PSTATUS
- 'Create mini-map to character circumference
- FOR Y=0 TO 3
- FOR X=0 TO 2
- NMAP(Y,X)=1
- NEXT X
- NEXT Y
- ON PDIR GOSUB @PRIGHT,@PDOWN,@PLEFT,@PUP
- 'Decide which line is draw from mini-map
- GOSUB @CALCMAP
- GOSUB @DRAWITEM
-
- 'Draw dungeon line
- GCLS 0
- FOR I=1 TO 23
- DPARTS=I-1
- IF LF(I)!=0 THEN GOSUB @DRAW
- NEXT
-
- 'Check to enemy generate
- IF RND(30)==0 THEN GOSUB @BATTLE
-
- 'Ladder and Treasure box
- IF MIGNORE==1 THEN @KEYWAIT
- IF NMAP(1,1)>2 THEN GOSUB @TBOX:GOTO @LOOP
- IF NMAP(1,1)!=2 THEN @KEYWAIT
- OLDLVL=LEVEL
- GOSUB @STAIR
- IF LEVEL!=OLDLVL THEN GOTO @LEVSTART
-
- 'Move by keystroke
- @KEYWAIT
- BTN=BTRIG()
- IF BTN==0 THEN WAIT 1:GOTO @KEYWAIT
- IF (BTN AND 1) THEN GOSUB @FORWARD
- IF (BTN AND 2) THEN GOSUB @BACK
- IF (BTN AND 4) THEN GOSUB @LEFT
- IF (BTN AND 8) THEN GOSUB @RIGHT
- VSYNC 1:GOTO @LOOP
-
- 'Move to front
- @FORWARD
- BEEP 9
- MIGNORE=0
- OLDX=PX:OLDY=PY
- IF PDIR==0 THEN PX=PX+1
- IF PDIR==1 THEN PY=PY+1
- IF PDIR==2 THEN PX=PX-1
- IF PDIR==3 THEN PY=PY-1
- IF (PX<0)OR(PX>=16)OR(PY<0)OR(PY>=16) THEN PX=OLDX:PY=OLDY
- IF MAP(PY,PX)!=0 THEN PX=OLDX:PY=OLDY
- RETURN
-
- 'Move to back
- @BACK
- BEEP 9
- MIGNORE=0
- OLDX=PX:OLDY=PY
- IF PDIR==0 THEN PX=PX-1
- IF PDIR==1 THEN PY=PY-1
- IF PDIR==2 THEN PX=PX+1
- IF PDIR==3 THEN PY=PY+1
- IF (PX<0)OR(PX>=16)OR(PY<0)OR(PY>=16) THEN PX=OLDX:PY=OLDY
- IF MAP(PY,PX)!=0 THEN PX=OLDX:PY=OLDY
- RETURN
-
- 'Turn left
- @LEFT
- BEEP 9
- PDIR=PDIR-1
- IF PDIR<0 THEN PDIR=3
- RETURN
-
- 'Turn right
- @RIGHT
- BEEP 9
- PDIR=PDIR+1
- IF PDIR>3 THEN PDIR=0
- RETURN
-
- 'Create mini-map to right
- @PRIGHT
- FOR Y=0 TO 3
- FOR X=0 TO 2
- YY=PY+X-1:XX=PX+Y
- IF(XX<16)AND(YY>=0)AND(YY<16) THEN NMAP(Y,X)=MAP(YY,XX)
- NEXT X
- NEXT Y
- RETURN
-
- 'Create mini-map to under
- @PDOWN
- FOR Y=0 TO 3
- FOR X=0 TO 2
- YY=PY+Y:XX=PX-X+1
- IF (YY<16)AND(XX>=0)AND(XX<16) THEN NMAP(Y,X)=MAP(YY,XX)
- NEXT X
- NEXT Y
- RETURN
-
- 'Create mini-map to left
- @PLEFT
- FOR Y=0 TO 3
- FOR X=0 TO 2
- YY=PY-X+1:XX=PX-Y
- IF(XX>=0)AND(YY>=0)AND(YY<16) THEN NMAP(Y,X)=MAP(YY,XX)
- NEXT X
- NEXT Y
- RETURN
-
- 'Create mini-map to upper
- @PUP
- FOR Y=0 TO 3
- FOR X=0 TO 2
- YY=PY-Y:XX=PX+X-1
- IF(YY>=0)AND(XX>=0)AND(XX<16) THEN NMAP(Y,X)=MAP(YY,XX)
- NEXT X
- NEXT Y
- RETURN
-
- 'Decide which line is draw from mini-map
- @CALCMAP
- FOR I=1 TO 23
- LF(I)=0
- NEXT
- IF NMAP(3,0)==1 THEN LF(7)=1:LF(20)=1
- IF NMAP(3,2)==1 THEN LF(14)=1:LF(23)=1
- IF NMAP(3,1)==1 THEN LF(17)=1:LF(20)=1:LF(23)=1
- IF NMAP(2,0)==1 THEN LF(3)=1:LF(5)=1:LF(6)=1:LF(19)=1:LF(20)=1:LF(7)=0
- IF NMAP(2,2)==1 THEN LF(10)=1:LF(12)=1:LF(13)=1:LF(22)=1:LF(23)=1:LF(14)=0
- IF NMAP(2,1)==1 THEN @CM21
- GOTO @CMN21
- @CM21
- LF(16)=1:LF(19)=1:LF(22)=1:LF(6)=0:LF(7)=0:LF(13)=0:LF(14)=0:LF(17)=0:LF(20)=0:LF(23)=0
- @CMN21
- IF NMAP(1,0)==1 THEN LF(2)=1:LF(4)=1:LF(18)=1:LF(19)=1:LF(3)=0:LF(5)=0
- IF NMAP(1,2)==1 THEN LF(9)=1:LF(11)=1:LF(21)=1:LF(22)=1:LF(10)=0:LF(12)=0
- IF NMAP(1,1)==1 THEN @CM11
- GOTO @CMN11
- @CM11
- LF(15)=1:LF(18)=1:LF(21)=1
- LF(4)=0:LF(5)=0:LF(6)=0:LF(7)=0:LF(11)=0:LF(12)=0:LF(13)=0:LF(14)=0:LF(16)=0:LF(17)=0:LF(19)=0
- LF(20)=0:LF(22)=0:LF(23)=0
- @CMN11
- IF NMAP(0,0)==1 THEN LF(1)=1:LF(18)=1:LF(2)=0:LF(3)=0
- IF NMAP(0,2)==1 THEN LF(8)=1:LF(21)=1:LF(9)=0:LF(10)=0
- RETURN
-
- 'Draw dungeon line
- @DRAW
- GCOLOR 15
- IF DPARTS<12 THEN ON DPARTS GOTO @D1,@D2,@D3,@D4,@D5,@D6,@D7,@D8,@D9,@D10,@D11,@D12
- DPARTS=DPARTS-12
- ON DPARTS GOTO @D13,@D14,@D15,@D16,@D17,@D18,@D19,@D20,@D21,@D22,@D23
- RETURN
- @D1
- LSX=0:LSY=0:LEX=1:LEY=1
- GOTO @LINE2
- @D2
- LSX=0:LSY=1:LEX=1:LEY=1
- GOTO @LINE2
- @D3
- LSX=0:LSY=2:LEX=1:LEY=2
- GOTO @LINE2
- @D4
- LSX=1:LSY=1:LEX=2:LEY=2
- GOTO @LINE2
- @D5
- LSX=1:LSY=2:LEX=2:LEY=2
- GOTO @LINE2
- @D6
- LSX=2:LSY=2:LEX=3:LEY=3
- GOTO @LINE2
- @D7
- LSX=2:LSY=3:LEX=3:LEY=3
- GOTO @LINE2
- @D8
- LSX=7:LSY=0:LEX=6:LEY=1
- GOTO @LINE2
- @D9
- LSX=7:LSY=1:LEX=6:LEY=1
- GOTO @LINE2
- @D10
- LSX=7:LSY=2:LEX=6:LEY=2
- GOTO @LINE2
- @D11
- LSX=6:LSY=1:LEX=5:LEY=2
- GOTO @LINE2
- @D12
- LSX=6:LSY=2:LEX=5:LEY=2
- GOTO @LINE2
- @D13
- LSX=5:LSY=2:LEX=4:LEY=3
- GOTO @LINE2
- @D14
- LSX=5:LSY=3:LEX=4:LEY=3
- GOTO @LINE2
- @D15
- LSX=1:LSY=1:LEX=6:LEY=1
- GOTO @LINE2
- @D16
- LSX=2:LSY=2:LEX=5:LEY=2
- GOTO @LINE2
- @D17
- LSX=3:LSY=3:LEX=4:LEY=3
- GOTO @LINE2
- @D18
- LSX=1:LSY=1:LEX=1:LEY=6
- GOTO @LINE1
- @D19
- LSX=2:LSY=2:LEX=2:LEY=5
- GOTO @LINE1
- @D20
- LSX=3:LSY=3:LEX=3:LEY=4
- GOTO @LINE1
- @D21
- LSX=6:LSY=1:LEX=6:LEY=6
- GOTO @LINE1
- @D22
- LSX=5:LSY=2:LEX=5:LEY=5
- GOTO @LINE1
- @D23
- LSX=4:LSY=3:LEX=4:LEY=4
- GOTO @LINE1
-
- @LINE1
- GLINE GX(LSX+1),GY(LSY+1),GX(LEX+1),GY(LEY+1)
- RETURN
-
- @LINE2
- GLINE GX(LSX+1),GY(LSY+1),GX(LEX+1),GY(LEY+1)
- GLINE GX(LSX+1),GY(7-LSY+1),GX(LEX+1),GY(7-LEY+1)
- RETURN
-
- 'Display item in map
- @DRAWITEM
- SPCLR 1:SPCLR 2
- IF NMAP(2,1)<=1 OR NMAP(1,1)==1 THEN @DICHK2
- IF NMAP(2,1)==2 THEN @DIUP
- SPSET 1,57,0,0,0,0
- SPOFS 1,182,85
- GOTO @DICHK2
- @DIUP
- SPSET 1,207,0,0,0,0
- SPOFS 1,182,43
- @DICHK2
- IF NMAP(1,1)<=1 THEN @DICHK3
- IF NMAP(1,1)==2 THEN @DIUP2
- SPSET 2,57,0,0,0,0
- SPOFS 2,174,82
- SPSCALE 2,200
- GOTO @DICHK3
- @DIUP2
- SPSET 2,207,0,0,0,0
- SPOFS 2,174,29
- SPSCALE 2,200
- @DICHK3
- RETURN
-
- @PSTATUS
- LOCATE 0,0:PRINT"+---------+";
- FOR Y=1 TO 5
- LOCATE 0,Y:PRINT"|";
- LOCATE 10,Y:PRINT"|";
- NEXT
- LOCATE 0,6:PRINT"+---------+";
- LOCATE 1,1:PRINT"HP ";PHP;" ";
- IF PEQUIP==0 THEN EQ$="Fist"
- IF PEQUIP==1 THEN EQ$="Club"
- IF PEQUIP==2 THEN EQ$="Normal Sword"
- IF PEQUIP==3 THEN EQ$="Legend Sword"
- LOCATE 1,2:PRINT EQ$;
- FOR Y=0 TO 2
- IF PITEM(Y)==1 THEN LOCATE 1,Y+3:PRINT"Herb";
- NEXT
- RETURN
-
- 'Battle
- @BATTLE
- ECHR=RND(2)
- BGMPLAY BGMBTL
- EHP=(ECHR*10+10)*(LEVEL+1)
- SPSET 0,ESPR(ECHR),EPLT(ECHR),0,0,0
- SPOFS 0,174,85
- SPSCALE 0,200
- SPANIM 0,2,10,0
- BCMD=0
- BEEP
- @BTURN
- CLS
- GOSUB @PSTATUS
- LOCATE 0,17:PRINT"A Monster Appeared!
- BOLDBTN=0
- LOCATE 1,18:PRINT" Attack"
- LOCATE 1,19:PRINT" Magic"
- LOCATE 1,20:PRINT" Item"
- LOCATE 1,21:PRINT" Escape"
- MCMD=BCMD:MMAXCMD=4:LOCATE 0,18:GOSUB @MENUSEL
- BCMD=MCMD
- @DOCMD
- RUNAWAY=0
- ON BCMD GOSUB @ATTACK,@SPELL,@ITEM,@RUNAWAY
- IF RUNAWAY==1 THEN RETURN
- IF EHP<=0 THEN GOTO @EDEAD
- GOSUB @EATTACK
- IF PHP<=0 THEN GOTO @PDEAD
- GOTO @BTURN
-
- @EDEAD
- BGMPLAY 5
- SPSCALE 0,0,60
- SPOFS 0,190,101,60
- @EDWAIT
- IF BGMCHK()==TRUE THEN WAIT 1:GOTO @EDWAIT
- SPCLR 0
- CLS
- GOSUB @PSTATUS
- LOCATE 0,17:PRINT"Enemy defeated!"
- LOCATE 4,19
- GOSUB @BWAIT
- CLS
- GOSUB @PSTATUS
- BGMPLAY BGMDUN
- RETURN
-
- @PDEAD
- BGMSTOP
- CLS:SPCLR:GCLS 0
- LOCATE 11,10:PRINT"You died"
- LOCATE 11,12:PRINT" GAMEOVER "
- LOCATE 15,14
- GOSUB @BWAIT
- CLS
- END
-
- @EATTACK
- CLS
- MYDMG=(RND(4)+(ECHR*3+1))*(LEVEL+1)
- BEEP 4
- LOCATE 0,17:PRINT"Enemy turn!"
- LOCATE 0,18:PRINT"You: ";MYDMG;" damage!"
- PHP=PHP-MYDMG
- GOSUB @PSTATUS
- LOCATE 5,20
- GOSUB @BWAIT
- RETURN
-
- @ATTACK
- CLS
- GOSUB @PSTATUS
- BDMG=(RND(4)+4)*(PEQUIP+1)
- BEEP 11
- LOCATE 0,17:PRINT"Your turn!"
- LOCATE 0,18:PRINT"Enemy: ";BDMG;" damage!"
- EHP=EHP-BDMG
- LOCATE 5,20
- GOSUB @BWAIT
- RETURN
-
- @SPELL
- CLS
- GOSUB @PSTATUS
- BDMG=RND(10)+5
- MYDMG=3
- BEEP 13
- LOCATE 0,17:PRINT"You cast a magic!"
- LOCATE 0,18:PRINT"Enemy,";BDMG;"damage!"
- EHP=EHP-BDMG
- PHP=PHP-MYDMG
- GOSUB @PSTATUS
- LOCATE 5,20
- GOSUB @BWAIT
- RETURN
-
- 'Escape
- @RUNAWAY
- BEEP 1
- CLS:GOSUB @PSTATUS
- IF RND(100)<50 THEN @RWSUCC
- 'Failed
- LOCATE 0,17:PRINT"Not got escape!";
- LOCATE 5,19:GOSUB @BWAIT
- RETURN
- @RWSUCC
- SPCLR 0
- BGMSTOP
- LOCATE 0,17:PRINT"Get escape・・・";
- LOCATE 5,19:GOSUB @BWAIT
- CLS:GOSUB @PSTATUS
- RUNAWAY=1
- BGMPLAY BGMDUN
- RETURN
-
- 'Item
- @ITEM
- CLS:GOSUB @PSTATUS
- FOR I=2 TO 0 STEP -1
- IF PITEM(I)!=0 THEN SELITEM=PITEM(I):PITEM(I)=0:GOTO @USEITEM
- NEXT
- LOCATE 0,17:PRINT"No Item!";
- LOCATE 5,19:GOSUB @BWAIT
- CLS:GOSUB @PSTATUS
- RETURN
- @USEITEM
- BEEP 5
- LOCATE 0,17:PRINT"Used Herb!"
- LOCATE 5,19:GOSUB @BWAIT
- PHP=PHP+60
- IF PHP>100 THEN PHP=100
- CLS:GOSUB @PSTATUS
- RETURN
-
-
- @BWAIT
- BWCNT=0
- BWX=CSRX:BWY=CSRY
- @BWLOOP
- IF (BUTTON() AND 16) !=0 THEN WAIT 1:GOSUB @BWPRMPT:GOTO @BWLOOP
- BWOLD=0
- @BWLOOP2
- IF (BTRIG() AND 16)!=0 THEN WAIT 1:RETURN
- WAIT 1:GOSUB @BWPRMPT:GOTO @BWLOOP2
-
- @BWPRMPT
- BWCNT=BWCNT+1
- IF BWCNT>40 THEN BWCNT=0
- IF BWCNT<20 THEN LOCATE BWX,BWY:PRINT"А";
- IF BWCNT>=20 THEN LOCATE BWX,BWY:PRINT" ";
- RETURN
-
- 'Treasure box
- @TBOX
- CLS
- GOSUB @PSTATUS
- LOCATE 0,17:PRINT"Treasure box was found・・・"
- LOCATE 1,18:PRINT" Wrench Open";
- LOCATE 1,19:PRINT" Use Magic";
- LOCATE 1,20:PRINT" Ignore";
- MCMD=0:MMAXCMD=3:LOCATE 0,18:GOSUB @MENUSEL
- ON MCMD GOSUB @TOPENF,@TOPENS,@TIGNORE
- RETURN
-
- 'Ignore
- @TIGNORE
- CLS:GOSUB @PSTATUS
- MIGNORE=1
- RETURN
-
- 'Wrenched Open
- @TOPENS
- PHP=PHP-3
- IF PHP<0 THEN GOSUB @PDEAD
- GOTO @TOSUCC
-
- 'Open by Muscle
- @TOPENF
- IF RND(10)<7 THEN @TOSUCC
- 'Failed
- BEEP 10
- CLS:GOSUB @PSTATUS
- LOCATE 0,17:PRINT"Trap!!"
- MYDMG=(RND(10)+5)*LEVEL
- LOCATE 0,18:PRINT MYDMG;"damage!"
- PHP=PHP-MYDMG
- IF PHP<0 THEN GOSUB @PDEAD
- GOSUB @PSTATUS
- GOTO @TOERASE
- 'Success
- @TOSUCC
- BEEP 12
- CLS:GOSUB @PSTATUS
- LOCATE 0,17:PRINT"Open Treasure box!"
- TITEM=NMAP(1,1)-3
- ON TITEM GOTO @POTION,@SWORDL,@SWORDM,@SWORDH
- @POTION
- LOCATE 0,18:PRINT"Get Herb!"
- FOR I=0 TO 2
- IF PITEM(I)==0 THEN PITEM(I)=1:GOTO @TOERASE
- NEXT
- GOTO @TOERASE
- @SWORDL
- LOCATE 0,18:PRINT"Get Club!"
- PEQUIP=1
- GOTO @TOERASE
- @SWORDM
- LOCATE 0,18:PRINT"Get Normal Sword!"
- PEQUIP=2
- GOTO @TOERASE
- @SWORDH
- LOCATE 0,18:PRINT"Get Legend Sword!"
- PEQUIP=3
- GOTO @TOERASE
- @TOERASE
- IF PDIR==0 THEN MAP(PY,PX+1)=0
- IF PDIR==1 THEN MAP(PY+1,PX)=0
- IF PDIR==2 THEN MAP(PY,PX-1)=0
- IF PDIR==3 THEN MAP(PY-1,PX)=0
- LOCATE 5,20:GOSUB @BWAIT
- CLS:GOSUB @PSTATUS
- RETURN
-
- 'Ladder
- @STAIR
- LOCATE 0,17:PRINT"Found to ladder・・・"
- LOCATE 0,18:PRINT"Climb?"
- LOCATE 1,19:PRINT" Yes"
- LOCATE 1,20:PRINT" No"
- MCMD=0:MMAXCMD=2:LOCATE 0,19:GOSUB @MENUSEL
- IF MCMD==0 THEN @UPSTAIR
- CLS:GOSUB @PSTATUS
- MIGNORE=1
- RETURN
- @UPSTAIR
- LEVEL=LEVEL+1
- IF LEVEL==3 THEN @GAMECLR
- BGMPLAY 4
- @UPSWAIT
- IF BGMCHK()==TRUE THEN WAIT 1:GOTO @UPSWAIT
- CLS:GOSUB @PSTATUS
- RETURN
-
- 'Game clear
- @GAMECLR
- BGMPLAY 6
- @CLWAIT
- IF BGMCHK()==TRUE THEN WAIT 1:GOTO @CLWAIT
- CLS:GCLS 0:SPCLR
- LOCATE 10,5:PRINT"GAME CLEAR!!"
- WAIT 120
- BGMPLAY 7
- LOCATE 0,8: PRINT" МSTAFF";
- LOCATE 0,10:PRINT" DIRECTOR O-RE"
- LOCATE 0,11:PRINT" PROGRAMMER WA-SHI"
- LOCATE 0,12:PRINT" TESTPLAY BO-KU"
- LOCATE 0,13:PRINT" DESIGNER GOTO"
- LOCATE 0,14:PRINT" ALL SOUND COMPOSED BY JOEDOWN"
- LOCATE 0,17:PRINT" You are the one who is going"
- LOCATE 0,18:PRINT" reprogram this game to make it"
- LOCATE 0,19:PRINT" better."
- LOCATE 16,21:GOSUB @BWAIT
- CLS
- BGMSTOP
- END
-
- 'Menu select sub routine
- @MENUSEL
- MTOPY=CSRY
- @MENULOOP
- LOCATE 0,MTOPY+MCMD:PRINT"Й";
- MBTN=BTRIG()
- OLDMCMD=MCMD
- IF (MBTN AND 1)!=0 THEN MCMD=MCMD-1
- IF (MBTN AND 2)!=0 THEN MCMD=MCMD+1
- IF (MBTN AND 16)!=0 THEN WAIT 1:RETURN
- IF MCMD<0 THEN MCMD=MMAXCMD-1
- IF MCMD>=MMAXCMD THEN MCMD=0
- IF OLDMCMD!=MCMD THEN LOCATE 0,MTOPY+OLDMCMD:PRINT" ";
- WAIT 1:GOTO @MENULOOP
-
- @GRID
- DATA 141,16
- DATA 152,27
- DATA 163,38
- DATA 174,49
- DATA 207,93
- DATA 218,104
- DATA 229,115
- DATA 240,126
-
-
- @MAP1
- 'BGM
- DATA 1,2
- 'Enemy Character
- DATA 130,2,194,2
- 'Player first time position and aspect
- DATA 14,1,1
- 'Map date
- '0:pass 1:wall 2:ladder 3-9:Treasure box
- DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- DATA 1,3,0,0,1,0,4,1,0,3,1,3,0,1,0,1
- DATA 1,1,1,0,1,0,0,1,0,0,1,1,0,1,0,1
- DATA 1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,1
- DATA 1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,1
- DATA 1,0,1,0,0,1,0,1,0,1,1,0,1,1,0,1
- DATA 1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1
- DATA 1,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1
- DATA 1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1
- DATA 1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1
- DATA 1,0,0,1,0,0,0,1,0,0,1,2,0,1,0,1
- DATA 1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1
- DATA 1,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1
- DATA 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1
- DATA 1,0,0,0,0,0,0,0,0,0,0,0,1,0,3,1
- DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
-
- @MAP2
- DATA 9,3
- DATA 130,6,194,6
- DATA 11,10,3
- DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- DATA 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1
- DATA 1,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1
- DATA 1,0,1,1,1,0,0,0,1,0,1,0,1,0,3,1
- DATA 1,0,1,5,0,0,1,1,1,0,1,0,1,0,1,1
- DATA 1,0,1,1,1,0,0,0,1,0,1,0,1,0,0,1
- DATA 1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1
- DATA 1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1
- DATA 1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1
- DATA 1,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1
- DATA 1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1
- DATA 1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1
- DATA 1,0,3,1,2,0,0,1,0,1,3,1,0,0,0,1
- DATA 1,0,0,1,1,1,1,1,0,1,0,0,0,1,0,1
- DATA 1,0,0,1,3,0,0,0,0,1,0,0,1,0,0,1
- DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
-
- @MAP3
- DATA 23,13
- DATA 130,3,194,3
- DATA 4,12,0
- DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- DATA 1,0,1,0,0,0,0,1,1,1,1,1,0,1,2,1
- DATA 1,0,1,0,1,1,0,1,3,0,0,1,0,1,0,1
- DATA 1,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1
- DATA 1,0,1,0,1,3,0,1,1,1,0,1,0,1,0,1
- DATA 1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1
- DATA 1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1
- DATA 1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1
- DATA 1,0,3,0,1,0,0,1,0,0,0,1,0,1,0,1
- DATA 1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1
- DATA 1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1
- DATA 1,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1
- DATA 1,0,1,1,0,0,0,1,0,1,0,0,0,1,3,1
- DATA 1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1
- DATA 1,0,0,0,0,0,0,1,0,0,0,0,0,0,6,1
- DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
EXEC "GAME3" (Touch Enter to Run)
Blast intergalactic foes in a vertically-scrolling shoot-em-up. Use the + Control Pad to move and the A Button to shoot as you zap the incoming enemies and take aim at the big bosses.
- '+--------------------+
- '|Shooting Sample v1.1|
- '+--------------------+
- 'SPRITE assignment
- ' 0~:Г myship
- ' 8~:↑ myshot
- ' 16~:Е enemy
- ' 24~:↓ enshot
- ' 64~:● explosion
- ' 72~:Н boss
-
- @INIT 'Initialize
- CLEAR
- UNUSED=-4096
- PHASE=0
- STAGE=1
- PHASCNT=0
-
- 'Screen
- ACLS
- BGMPLAY 23
- VISIBLE 0,1,0,0,0,0
- VSYNC 1
-
- 'Player
- SCORE=0: HISCORE=0
- MYX=120 : MYY=192 : MYSPD=3
- MYCNT=0 : MYSTAT=1
- SPSET 0,288,11,0,0,1
- SPOFS 0,MYX,MYY
- SPSET 1,289,11,0,0,1
- SPOFS 1,MYX,MYY+10
-
- 'Shot
- MSHMAX=4
- MSHCNT=0
- DIM MYSHOTX(4),MYSHOTY(4)
- FOR I=0 TO 3
- MYSHOTX(I) = UNUSED
- MYSHOTY(I) = 0
- SPSET I+8,223,12,0,0,1
- SPOFS I+8,-16,-16
- NEXT
-
- 'Background
- DIM STARX(16),STARY(16)
- DIM STARSPD(16)
- FOR I=0 TO 15
- STARX(I) = RND(256)
- STARY(I) = RND(192)
- STARSPD(I) = (RND(16)+1)/4
- NEXT
-
- 'Enemy
- DIM ENMX(8),ENMY(8),ENMCNT(8),ENMHP(8)
- GENMCNT=0 : ENMMAX=8
- FOR I=0 TO 7
- ENMX(I) = UNUSED
- ENMY(I) = 0
- ENMHP(I) = 0
- SPSET I+16,178,11,0,0,1
- SPANIM I+16,3,4,0
- SPOFS I+16,-16,-16
- NEXT
-
- 'Enemy shot
- DIM ENSHOTX(32),ENSHOTY(32),ENSHDIR(32)
- ESHTCNT=0 : ESHTMAX=32
- FOR I=0 TO 31
- ENSHOTX(I) = UNUSED
- ENSHOTY(I) = 0
- SPSET I+24,214,0,0,0,1
- SPANIM I+24,2,4,0
- SPOFS I+24,-16,-16
- NEXT
-
- 'Explosion
- DIM EXPX(4),EXPY(4),EXPCNT(4)
- GEXPCNT=0 : EXPMAX=4
- FOR I=0 TO 3
- EXPX(I) = UNUSED
- EXPY(I) = 0
- EXPCNT(I) = 0
- SPSET I+64,248,0,0,0,1
- SPOFS I+64,-16,-16
- NEXT
-
- 'Enemy Boss
- SPSET 72,340,11,0,0,1
- SPSET 73,341,11,0,0,1
- SPSET 74,342,11,0,0,1
- SPSET 75,343,11,0,0,1
- SPOFS 72,-16,-16
- SPOFS 73,-16,-16
- SPOFS 74,-16,-16
- SPOFS 75,-16,-16
- BOSSX=UNUSED
- BOSSY=0
- BOSSHP=60
- BOSSCNT=0
-
- VISIBLE 1,1,0,0,1,1
-
- @MAIN 'Main loop
- OLDBTN = BTN
- BTN = BUTTON()
- ON PHASE GOSUB @TITLE,@GAME,@BOSSSCN,@GAMEOVER
- PHASCNT=PHASCNT+1
- VSYNC 1
- GOTO @MAIN
-
- @ANYBTN
- R=0
- IF OLDBTN THEN RETURN
- IF BTN THEN R=BTN
- RETURN
-
- @TITLE
- GOSUB @ANYBTN
- LOCATE 6,4:PRINT"┗┫┻┻┓┨┻┏┓┛ ┣━ ┗┫┃┣┳┏┫"
- LOCATE 6,5:PRINT"┫┓┻┻┃┻┻┠━┛ ┯┓ ┫┓ ┛┻┳┠"
- LOCATE 6,6:PRINT"┓┻┻┻ ┻┻ ┛ ┛ ┓┻ ┛┻ ┻"
- LOCATE 6,7:PRINT"┃━┃┃ ┃┃ ┏━┏━ ┃━ ━ ┏━"
-
- LOCATE 9,17:PRINT"PUSH ANY BUTTON"
-
- IF PHASCNT<2 THEN RETURN
- IF R THEN PHASE = 1:BGMPLAY 23:PHASCNT=0:CLS
- RETURN
-
- @GAME
- IF PHASCNT<60 THEN LOCATE 11,11:PRINT "STAGE ";STAGE
- IF PHASCNT==60 THEN LOCATE 11,11:PRINT " "
- GOSUB @DISPBG
- GOSUB @DISPSCOR
- GOSUB @ENSHOT
- GOSUB @ENEMY
- GOSUB @MYSHOT
- GOSUB @MYSHIP
- GOSUB @EXPLSION
- IF PHASCNT==1200 THEN GOSUB @TOBOSS
- RETURN
-
- @TOBOSS
- PHASE=2
- PHASCNT=0
- BGMSTOP
- BOSSX=112
- BOSSY=-32
- BOSSHP=60+STAGE
- BOSSCNT=1
- TARGETX=112
- SPCHR 72,340
- SPCHR 73,341
- SPCHR 74,342
- SPCHR 75,343
- RETURN
-
- @BOSSSCN
- COLOR 13
- IF PHASCNT<60 THEN LOCATE 12,11:PRINT "WARNING!!"
- IF PHASCNT==60 THEN LOCATE 12,11:PRINT " "
- COLOR 0
- IF PHASCNT==120 THEN BGMPLAY 13
- GOSUB @DISPBG
- GOSUB @DISPSCOR
- GOSUB @ENSHOT
- GOSUB @ENEMY
- GOSUB @MYSHOT
- GOSUB @MYSHIP
- GOSUB @EXPLSION
- GOSUB @BOSS
- RETURN
-
- @BOSS 'Enemy Boss
- IF BOSSHP==0 THEN @BOSSTHRU
-
- 'Enemy Boss attack
- IF BOSSCNT%120==0 THEN TARGETX=RND(160)+32
- IF BOSSX>TARGETX THEN BOSSX=BOSSX-1
- IF BOSSX<TARGETX THEN BOSSX=BOSSX+1
-
- IF BOSSCNT<80 THEN BOSSY=BOSSY+1:GOTO @BOSHTHRU
- IF BOSSCNT%30==0 THEN GOSUB @BOSSSHOT
- @BOSHTHRU
-
- SPOFS 72,BOSSX,BOSSY
- SPOFS 73,BOSSX+16,BOSSY
- SPOFS 74,BOSSX,BOSSY+16
- SPOFS 75,BOSSX+16,BOSSY+16
-
- 'Boss collision
- FOR I=0 TO 3
- IF BOSSX-8>MYSHOTX(I) THEN @BOSSJDNX
- IF BOSSX+24<MYSHOTX(I) THEN @BOSSJDNX
- IF BOSSY-8>MYSHOTY(I) THEN @BOSSJDNX
- IF BOSSY+8<MYSHOTY(I) THEN @BOSSJDNX
- BOSSHP=BOSSHP-1
- MYSHOTY(I)=-16
- SPOFS I+8,0,-16
- BEEP 0
- IF BOSSHP==0 THEN BOSSCNT=0:BGMSTOP:SCORE=SCORE+5000
- @BOSSJDNX
- NEXT
-
- @BOSSTHRU
- BOSSCNT=BOSSCNT+1
-
- IF BOSSHP==0 THEN GOSUB @BOSSEXP
- RETURN
-
- @BOSSSHOT
- DIR = (RND(256)-128)*PI()/512
- FOR I=0 TO STAGE
- IF I==6 THEN RETURN
- IF ENSHOTX(ESHTCNT)!=UNUSED THEN RETURN
- ENSHOTX(ESHTCNT)=BOSSX+8
- ENSHOTY(ESHTCNT)=BOSSY+8
- ENSHDIR(ESHTCNT)=(RND(256)-128)*PI()/512
- SPOFS ESHTCNT+24,ENSHOTX(ESHTCNT),ENSHOTY(ESHTCNT)
- ESHTCNT=ESHTCNT+1
- IF ESHTCNT>=ESHTMAX THEN ESHTCNT=0
- NEXT
- RETURN
-
- @BOSSEXP 'Enemy Boss expiation
- IF BOSSCNT<64 THEN BEEP 13
- IF BOSSCNT==1 THEN @BOSSEXP1
- IF BOSSCNT==16 THEN @BOSSEXP2
- IF BOSSCNT==32 THEN @BOSSEXP3
- IF BOSSCNT==48 THEN @BOSSEXP4
- IF BOSSCNT==64 THEN @BOSSCLR
- IF BOSSCNT==240 THEN PHASE=1:STAGE=STAGE+1:PHASCNT=0:BGMPLAY 23
- RETURN
- @BOSSEXP1
- SPCHR 72,352
- SPCHR 73,353
- SPCHR 74,354
- SPCHR 75,355
- RETURN
- @BOSSEXP2
- SPCHR 72,356
- SPCHR 73,357
- SPCHR 74,358
- SPCHR 75,359
- RETURN
- @BOSSEXP3
- SPCHR 72,360
- SPCHR 73,361
- SPCHR 74,362
- SPCHR 75,363
- RETURN
- @BOSSEXP4
- SPCHR 72,364
- SPCHR 73,365
- SPCHR 74,366
- SPCHR 75,367
- RETURN
- @BOSSCLR
- SPOFS 72,-16,-16
- SPOFS 73,-16,-16
- SPOFS 74,-16,-16
- SPOFS 75,-16,-16
- RETURN
-
- @GAMEOVER
- FOR I=0 TO 99
- SPCLR I
- NEXT
- GLINE MYX+8,MYY+8,RND(256),RND(256),RND(256)
- GCIRCLE MYX+8,MYY+8,RND(100)+2,RND(256)
- LOCATE 12,12:PRINT "GAME OVER"
- GOSUB @ANYBTN
- IF R AND 16 THEN @INIT
- RETURN
-
- @DISPBG 'BG on display
- FOR I=0 TO 7
- GPSET STARX(I),STARY(I),0
- STARY(I)=STARY(I)+STARSPD(I)
- GPSET STARX(I),STARY(I),STAGE
- IF STARY(I) > 192 THEN GOSUB @STARINIT
- NEXT
- RETURN
-
- @STARINIT 'STAR to original position
- STARX(I) = RND(256)
- STARY(I) = 0
- STARSPD(I) = (RND(16)+1)/4
- RETURN
-
- @ENSHOT 'Enemy shot
- FOR I=0 TO 31
- IF ENSHOTX(I)==UNUSED THEN @ESHTHRU
- ENSHOTX(I)=ENSHOTX(I)+SIN(ENSHDIR(I))*2
- ENSHOTY(I)=ENSHOTY(I)+COS(ENSHDIR(I))*2
- SPOFS I+24,ENSHOTX(I),ENSHOTY(I),2
-
- IF ENSHOTX(I)>256 THEN ENSHOTX(I)=UNUSED
- IF ENSHOTX(I)<-16 THEN ENSHOTX(I)=UNUSED
- IF ENSHOTY(I)>192 THEN ENSHOTX(I)=UNUSED
- IF ENSHOTY(I)<-16 THEN ENSHOTX(I)=UNUSED
- @ESHTHRU
- NEXT
- RETURN
-
- @ENEMY 'Enemy
- IF PHASE!=1 THEN @GENMTHRU
- IF MAINCNTL%64 THEN @GENMTHRU
- IF ENMX(GENMCNT)!=UNUSED THEN @GENMTHRU
- ENMX(GENMCNT) = RND(240)
- ENMY(GENMCNT) = -16
- ENMHP(GENMCNT)= STAGE
- ENMCNT(GENMCNT) = 0
- SPOFS GENMCNT+16,ENMX(GENMCNT),-16
- GENMCNT=GENMCNT+1
- IF GENMCNT>=ENMMAX THEN GENMCNT=0
- @GENMTHRU
-
- FOR I=0 TO 7
- IF ENMX(I)==UNUSED THEN @ENMTHRU
- ENMY(I) = ENMY(I)+0.75
- ENMCNT(I) = ENMCNT(I)+1
- IF ENMY(I)>192 THEN ENMX(I)=UNUSED
- IF ENMCNT(I)%60==0 THEN GOSUB @GENMSHOT
-
- 'Enemy collision
- J=0
- @ENMJUDGE
- IF MYSHOTX(J)==UNUSED THEN @ENMJDGNX
- IF ENMX(I)-8>MYSHOTX(J) THEN @ENMJDGNX
- IF ENMX(I)+8<MYSHOTX(J) THEN @ENMJDGNX
- IF ENMY(I)-8>MYSHOTY(J) THEN @ENMJDGNX
- IF ENMY(I)+8<MYSHOTY(J) THEN @ENMJDGNX
- ENMHP(I)=ENMHP(I)-1
- MYSHOTY(J)=-32
- SPOFS J+8,-32,0
- IF ENMHP(I)>0 THEN @ENMJDGNX
- P1=ENMX(I):P2=ENMY(I)
- GOSUB @GENEXP
- ENMX(I)=UNUSED
- SCORE=SCORE+200
- @ENMJDGNX
- J=J+1
- IF J<=3 THEN @ENMJUDGE
-
- SPOFS I+16,ENMX(I),ENMY(I),2
-
- @ENMTHRU
- NEXT
- RETURN
-
- @GENMSHOT 'Enemy fire
- FOR J=0 TO STAGE
- IF J==6 GOTO @ENSHTHRU
- IF ENSHOTX(ESHTCNT)!=UNUSED THEN @ENSHTHRU
- ENSHOTX(ESHTCNT)=ENMX(I)
- ENSHOTY(ESHTCNT)=ENMY(I)
- ENSHDIR(ESHTCNT)=RND(1024)*PI()/512
- SPOFS ESHTCNT+24,ENSHOTX(ESHTCNT),ENSHOTY(ESHTCNT)
- ESHTCNT=ESHTCNT+1
- IF ESHTCNT>=ESHTMAX THEN ESHTCNT=0
- @ENSHTHRU
- NEXT
- RETURN
-
- @GENEXP 'Create Explosion
- BEEP 11
- EXPX(GEXPCNT)=P1
- EXPY(GEXPCNT)=P2
- EXPCNT(GEXPCNT)=0
- SPOFS GEXPCNT+64,P1,P2
- SPANIM GEXPCNT+64,4,8,1
- GEXPCNT=GEXPCNT+1
- IF GEXPCNT>=EXPMAX THEN GEXPCNT=0
- RETURN
-
- @MYSHOT 'My shot
- FOR I=0 TO 3
- IF MYSHOTX(I)==UNUSED THEN @MYSHTHR
- MYSHOTY(I) = MYSHOTY(I)-8
- SPOFS I+8,MYSHOTX(I),MYSHOTY(I),2
- IF MYSHOTY(I) < -16 THEN GOSUB @RMVMYSHT
- @MYSHTHR
- NEXT
- RETURN
-
- @RMVMYSHT 'Remove my shot
- MYSHOTX(I) = UNUSED
- RETURN
-
- @EXPLSION 'Explosion
- FOR I=0 TO 3
- IF EXPCNT(I) == 20 THEN SPOFS I+64,-16,-16
- EXPCNT(I)=EXPCNT(I)+1
- NEXT
- RETURN
-
- @DISPSCOR 'Score on display
- LOCATE 8,0
- PRINT "SCORE:";SCORE
- RETURN
-
- @MYSHIP 'Player
- IF MYCNT<24 THEN MYY=MYY-2
- IF MYCNT==128 THEN MYSTAT=0
-
- SPCHR 0,288:SPCHR 1,289
- IF BTN AND 1 THEN MYY=MYY-MYSPD
- IF BTN AND 2 THEN MYY=MYY+MYSPD
- IF BTN AND 4 THEN MYX=MYX-MYSPD:SPCHR 0,292:SPCHR 1,293
- IF BTN AND 8 THEN MYX=MYX+MYSPD:SPCHR 0,290:SPCHR 1,291
-
- IF MYX<0 THEN MYX=0
- IF MYX>239 THEN MYX=239
- IF MYY<0 THEN MYY=0
- IF MYY>175 THEN MYY=175
-
- IF MYCNT%4 THEN @GMSHTHRU
- IF BTN AND 16 THEN GOSUB @GENMYSHT
- @GMSHTHRU
-
- FOR I=0 TO 31
- IF ENSHOTX(I)==UNUSED THEN @ESJDTHRU
- IF ENSHOTX(I)<MYX-8 THEN @ESJDTHRU
- IF ENSHOTX(I)>MYX+8 THEN @ESJDTHRU
- IF ENSHOTY(I)<MYY-8 THEN @ESJDTHRU
- IF ENSHOTY(I)>MYY+8 THEN @ESJDTHRU
- GMOVFLG=TRUE
- PHASE=3
- BEEP 11
- BGMPLAY 6
- SPOFS 0,-16,-16
- SPOFS 1,-16,-16
- RETURN
- @ESJDTHRU
- NEXT
-
- SPOFS 0,MYX,MYY-5,2
- SPOFS 1,MYX,MYY+5,2
- MYCNT=MYCNT+1
- RETURN
-
- @GENMYSHT 'Generate my shot
- M=MSHCNT
- IF MYSHOTX(M)!=UNUSED THEN RETURN
- BEEP 9
- MYSHOTX(M)=MYX
- MYSHOTY(M)=MYY
- SPOFS M+8,MYX,MYY
- MSHCNT=MSHCNT+1
- IF MSHCNT>=MSHMAX THEN MSHCNT=0
- RETURN
-
- '+-------------------------+
- '|END |
- '+-------------------------+
EXEC "GAME4" (Press Enter to Run)
A shooting game where you dodge a barrage of bullets while taking out enemies. Advanced sprite commands fill the screen with foes and filepower. Avoid enemy strikes, blast your enemies and take on the giant boss. The scrolling background has three layers.
- '+------------------+
- '|SAGAME4 |
- '| DANMAKU |
- '+------------------+
-
- @START
-
- GOSUB @INIT
- GOSUB @TITLE
-
- OVR=0
- SHIP=3 'Remaining ship
- SC=0 'SCORE
- STA=4
- BOSS=0
-
- NOW=MAINCNTL
- FPS=0:CNT=NOW
- '--- MAIN LOOP
- @MAIN
-
- GOSUB @MYMOVE
- GOSUB @MYSHOT
- GOSUB @TKMOVE
- GOSUB @MAPCTR
-
- FPS=FPS+1
- NOW=MAINCNTL
- VSYNC 1
-
- IF NOW<CNT THEN CNT=NOW
- IF (NOW-CNT)<60 THEN @MAIN
- CNT=NOW
-
- LOCATE 0,1
- COLOR 0
- PRINT " SHIPS ";SHIP;" "
- PRINT " SCORE ";SC
- IF BOMB==0 THEN COLOR 13
- PRINT " BOMBS ";BOMB;" "
-
- IF DEBUG THEN PRINT FPS;"FPS ";
- FPS=0
-
- IF MSG THEN MSG=MSG-1
- IF MSG THEN @MAIN
- A$=" ":GOSUB @PNTSUB3
-
- IF SHIP==0 THEN @START
- IF OVR==0 THEN @MAIN
-
- STA=4
- OVR=0
- GOTO @MAIN
-
-
- '--- Move ship
- @MYMOVE
- IF OVR THEN @MYDEAD
-
- BT=BUTTON()
- IF (BT AND 1) THEN AY=AY-AD
- IF (BT AND 2) THEN AY=AY+AD
- IF (BT AND 4) THEN AX=AX-AD
- IF (BT AND 8) THEN AX=AX+AD
- IF AX<16 THEN AX=16
- IF AX>247 THEN AX=247
- IF AY<8 THEN AY=8
- IF AY>176 THEN AY=176
- SPOFS AN,AX,AY
-
- IF STA THEN @MYSTART
-
- '--- Ship collision
- IF SPHIT(AN,0)==0 THEN RETURN
-
- J=SPHITNO
- IF J<FN OR J>=FN+FMAX THEN RETURN
- C=SPGETV(J,0)
- IF C==0 THEN RETURN 'Blast
- IF C==4 THEN @ONEUP '1UP
- IF C==5 THEN @BOMBADD 'BOMB
- IF DEBUG THEN RETURN
- OVR=1
- BEEP 13
- GOSUB @MYDEAD
- SHIP=SHIP-1
- IF SHIP==0 THEN @GMOVER
- MSG=1
- RETURN
-
- '--- GAME OVER
- @GMOVER
- BGMN=6
- BGMPLAY BGMN
- A$="GAME OVER":GOSUB @PNTSUB2
- BGMSTOP
- RETURN
-
- '---
- @PAUSE
- COLOR 12
- BGMSTOP
- I=0
- @PAUSE2
- IF I==0 THEN A$="→Continue Destruct"
- IF I==1 THEN A$=" Continue →Destruct"
- GOSUB @PNTSUB3
- GOSUB @BTNOFF
- GOSUB @BTWAIT
- IF (BT AND &HF;) THEN I=I XOR 1
- IF (BT AND &H4F0;)==0 THEN @PAUSE2
- CLS
- GOSUB @BTNOFF
- IF I==0 THEN BGMPLAY BGMN:RETURN
- SHIP=0:OVR=1:MSG=3
- RETURN
-
- '--- GET 1UP
- @ONEUP
- BEEP 7
- SHIP=SHIP+1
- GOTO @ITEMCLR
-
- '--- GET BOMB
- @BOMBADD
- BEEP 12
- BOMB=BOMB+1
- @ITEMCLR
- SPOFS FN+J,0,999
- SPSETV FN+J,4,999 'Y
- SPSETV FN+J,1,0 'HP
- RETURN
-
- '---Used BOMB
- @BOMB
- IF BUSY THEN RETURN
- IF BOMB==0 THEN RETURN
-
- BUSY=3 'Re-use time
- BOMB=BOMB-1
- FOR J=0 TO FMAX-1
- GOSUB @TKDAMAGE 'Damage of enemy
- NEXT
- '--- BOMB visual
- FOR I=0 TO BMAX-1
- SPCHR BN+I,143
- SPOFS BN+I,AX,AY
- NEXT
- FOR I=0 TO BMAX-1
- R=RAD(I*360/BMAX)
- X=AX+COS(R)*300
- Y=AY+SIN(R)*300
- SPOFS BN+I,X,Y,60
- NEXT
-
- RETURN
-
- '--- Start my ship
- @MYSTART
- IF STA<4 THEN @MYSTA2
-
- BEEP 6
- AX=128:AY=200
- BOMB=3 'Initial equipment BOMB
- BUSY=2
-
- @MYSTA2
- AY=AY-(STA/4)
- STA=STA-0.05
- IF STA<=0 THEN STA=0
- IF RND(15) THEN RETURN
- X=AX:Y=AY+16
- NEWR=RAD(90):GOSUB @TKSMOKE
- RETURN
-
- '--- My ship explosion
- @MYDEAD
- BT=0
- NEWR=RAD(RND(360))
- X=AX:Y=AY:GOSUB @TKSMOKE
- SPOFS AN,999,999
- IF RND(10)==0 THEN BEEP 37
- RETURN
-
- '--- My fire process
- @MYSHOT
-
- '---B BUTTON=BOMB
- IF (BT AND 32) THEN @BOMB
-
- IF (FPS%8) THEN RETURN
-
- IF BUSY THEN BUSY=BUSY-1:RETURN
-
- '---A BUTTON=SHOT
- IF (BT AND 16) THEN @MYFIRE
-
- '---Y BUTTON=SHOT
- IF (BT AND 128) THEN @MYFIREY
-
- IF (BT AND 1024) THEN @PAUSE
-
- RETURN
-
-
- '--- My fire
- @MYFIRE
- X=AX:Y=AY
- X1=0:GOTO @MYFIRE2
-
-
- @MYFIREY
- X=AX:Y=AY
- X1= 90
- IF (FPS%16)<8 THEN X1=-X1
- GOTO @MYFIRE2
-
-
- @MYFIRE2
- I=BN
- @MYFIRE3
- '--- Search free SPRITE
- IF SPCHK(I)==0 THEN @MYFIRE4
- I=I+1
- IF I<BN+BMAX THEN @MYFIRE3
- RETURN 'Not have free SPRITE
-
- @MYFIRE4 'Find free SPRITE
- SPCHR I,37
- SPOFS I,X,Y
- SPOFS I,X+X1,Y-192,30
- RETURN
-
-
- '--- Move enemy
- @TKMOVE
- FOR I=0 TO FMAX-1
- Y=SPGETV(FN+I,4) 'Coordinate
- IF Y==999 THEN @TKMOVE2
-
- C=SPGETV(FN+I,0) 'Type
- T=SPGETV(FN+I,2) 'Operating time
- SPSETV FN+I,2,T+1 'Time+1
-
- X=SPGETV(FN+I,3) 'Coordinate
- R=FR(I) 'Angle
-
- GOSUB JMPTBL$(C)
-
- X=X+COS(R)*FD
- Y=Y+SIN(R)*FD
- IF X<-8 OR X>263 THEN Y=999
- IF Y<-31 OR Y>199 THEN Y=999
- SPSETV FN+I,3,X 'Coordinate
- SPSETV FN+I,4,Y '
- SPOFS FN+I,X,Y
-
- IF FR(I)!=R THEN FR(I)=R:SPANGLE FN+I,FLOOR(DEG(R-TKOF(C)))
- GOSUB @HITCHK
-
- @TKMOVE2
- NEXT
- RETURN
-
-
- '--- SMOKE
- @TK0
- FD=T/15
- X=X+RND(5)-2
- Y=Y+RND(5)-2
- IF T>40 THEN Y=999
- RETURN
-
- '--- FIRE
- @TK1
- FD=2
- RETURN
-
- '--- HOMING
- @TK2
- FD=T/17
- IF RND(3) THEN RETURN
- GOSUB @TRKING
- R=R+(SGN(R1)*0.04)
- RETURN
-
- '--- BEAM
- @TK3
- FD=FLOOR(T*T/200)
- IF FD>6 THEN FD=6
- RETURN
-
- '--- 1UP
- @TK4
- FD=0
- Y=Y+((T-35)/30)
- RETURN
-
- '--- BOMB
- @TK5
- FD=0.5
- X=X+COS(RAD((T*2)%360))*2
- RETURN
-
- @TK6
- RETURN
-
- @TK7
- RETURN
-
- '--- S CURVE
- @TK8
- FD=2
- R1=RAD(180/50)
- IF ABS(50-(T%100))<26 THEN R1=-R1
- R=R+R1
- IF (T%20) THEN RETURN
- NEWR=R:GOSUB @TKFIRE
- RETURN
-
- '--- SW BACK
- @TK9
- R=SGN(70-T)*1.57
- FD=FLOOR(ABS(60-T)/20)
- IF FD>0 THEN RETURN
- IF (T%16) THEN RETURN
- IF RND(10)>LVL THEN RETURN
- BEEP 38
- NEWR=RAD(90):NEWC=2:GOSUB @TKBORN
- RETURN
-
- '--- V SHOT
- @TK10
- FD=FLOOR(ABS(60-T)/18)
- IF T>100 THEN RETURN
- IF FD>0 THEN RETURN
- GOSUB @TRKING
- R=R+(SGN(R1)*0.05)
- IF (T%14) THEN RETURN
- NEWR=R-0.3:GOSUB @TKFIRE
- NEWR=R+0.3:GOSUB @TKFIRE
- BEEP 4
- RETURN
-
- '--- U TURN
- @TK11
- FD=ABS(70-T)/15
- R1=RAD(180/140)
- IF (I%2) THEN R1=-R1
- R=R+R1
- IF FD>1 OR (T%15) THEN RETURN
- NEWR=ATAN(AY-Y,AX-X)
- GOSUB @TKFIRE
- BEEP 4
- RETURN
-
- '--- SPIN
- @TK12
- FD=2
- IF T>170 THEN RETURN
- IF T>100 THEN @TKA12B
- IF (T%30) THEN RETURN
- J=85+FLOOR(I%2)*85
- R=ATAN(64-Y,J-X)
- RETURN
- @TKA12B
- FD=0
- IF (T%8) THEN RETURN
- R=R+0.8
- NEWR=R:GOSUB @TKFIRE
- RETURN
-
- '--- UFO
- @TK13
- FD=1+(T/150)
- IF RND(4)==0 THEN R=R-RAD(8)
- IF RND(4)==0 THEN R=R+RAD(8)
- IF (T%60) THEN RETURN
- NEWR=ATAN(AY-Y,AX-X)
- GOSUB @TKFIRE
- RETURN
-
-
- '--- HOMING MISSILE
- @TK14
- IF T>240 THEN J=I:GOTO @TKDEAD
-
- FD=3.5-(T/35)
- IF FD<1.6 THEN FD=1.6
- GOSUB @TRKING
- R=R+(SGN(R1)*0.05)
- RETURN
-
- '--- SIDE SHOT
- @TK15
- FD=FLOOR((T%90)/30)
- IF ABS(AY-Y)>20 THEN RETURN
- IF (T%20) THEN RETURN
- NEWR=RAD( 0):GOSUB @TKFIRE
- NEWR=RAD(180):GOSUB @TKFIRE
- RETURN
-
- '--- NEAR MISS
- @TK16
- FD=2.2
- J=T%64
- IF J THEN RETURN
- R=ATAN(120,(AX-48+RND(96))-X)
- RETURN
-
- '--- TSUBO
- @TK17
- J=T%60
- FD=0
- Y=Y+1
- IF J==59 THEN @TK17B
- IF J>30 THEN RETURN
- GOSUB @TRKING
- R=R+(SGN(R1)*0.04)
- RETURN
-
- @TK17B
- NEWR=R:GOSUB @TKFIRE
- RETURN
-
- '---
- @TK18
- @TK19
- RETURN
-
- '--- BOSS1
- @TK20
- FD=0.5
- IF T<90*2 THEN RETURN
- FD=0
- X=X+COS(RAD((T%90)*4))*2
- Y=Y+SIN(RAD((T%40)*9))*2
- IF (T%40) THEN RETURN
- IF (T%200)<20*LVL THEN @TK20B
- FOR NEWR=0 TO 3.14 STEP 0.45
- GOSUB @TKFIRE
- NEXT
- BEEP 11
- RETURN
-
- @TK20B
- TY=Y
- NEWR=RAD(90)
- GOSUB @TKBEAM
- Y=Y-32
- GOSUB @TKBEAM
- Y=Y-32
- GOSUB @TKBEAM
- Y=TY
- BEEP 5
- RETURN
-
- '--- BOSS2
- @TK21
- FD=0.5
- IF T<90*2 THEN RETURN
- FD=0
- J=130-(LVL*4)
- IF J<100 THEN J=100
- J=T%J
- IF J>=90 THEN @TK21B
- X=X+COS(RAD(J*4))*1.5
-
- GOSUB @TRKING
- R=R+(SGN(R1)*0.01)
- IF (T%40) THEN RETURN
-
- FOR NEWR=0 TO 3.14 STEP 0.6
- GOSUB @TKFIRE
- NEXT
- RETURN
-
- @TK21B
- IF (T%5) THEN RETURN
- IF RND(14) THEN BEEP 6
- TX=X:TY=Y
- NEWR=R
- X=TX+COS(NEWR)*30
- Y=TY+SIN(NEWR)*30
- GOSUB @TKBEAM
- X=TX:Y=TY
- RETURN
-
- '--- BOSS3
- @TK22
- FD=((90*2)-T)/220
- IF T<90*2 THEN RETURN 'Appearance
- FD=0
- J=T%360
- IF J<180 THEN @TK22B
- X=X+COS(RAD((J*2)%360))
- IF (T%90)==0 THEN @TK22D
- IF (T%12)==0 THEN @TK22C
- RETURN
-
- @TK22B
- Y=Y+(90-J)/40
- IF (T%30) THEN RETURN
- BEEP 9
- FOR NEWR=0 TO 6.28 STEP 0.7
- GOSUB @TKFIRE
- NEXT
- RETURN
-
- @TK22C
- IF LVL<RND(20) THEN RETURN
- BEEP 38
- TX=X 'BACKUP
- X=TX+RND(2)*80-40
- NEWR=RAD(90)
- NEWC=2
- GOSUB @TKBORN
- X=TX
- RETURN
-
- @TK22D
- BEEP 11
- NEWR=RAD(270)
- NEWC=14
- GOSUB @TKBORN
- RETURN
-
- @TK23
- @TK24
- @TK25
- RETURN
-
-
- '--- Keep track of my ship
- @TRKING
- R1=ATAN(AY-Y,AX-X)-R
- IF R1> 3.14 THEN R1=R1-6.28
- IF R1<-3.14 THEN R1=R1+6.28
- RETURN
-
- '--- Enemy+FireCollision
- @HITCHK
- IF Y==999 THEN RETURN
- IF C<8 THEN RETURN 'Invincibble character
-
- IF SPHIT(FN+I,BN)==0 THEN RETURN
- J=SPHITNO
- IF (J<BN) OR (J>=BN+BMAX) THEN RETURN
- IF SPCHK(J)==0 THEN RETURN
- SPOFS J,0,999
-
- J=I
-
- @TKDAMAGE
- NN=FN+J
- IF SPGETV(NN,4)==999 THEN RETURN
- C=SPGETV(NN,0)
- IF C<1 THEN RETURN
-
- HP=SPGETV(NN,1)
- IF HP THEN HP=HP-1 'Enemy life-1
- SPSETV NN,1,HP
- IF HP THEN BEEP 0,2048:RETURN
-
- X=SPGETV(NN,3) 'Coordinate
- Y=SPGETV(NN,4) 'Coordinate
- BEEP 13,2096
- GOSUB @TKDEAD
- SC=SC+1
-
- IF C<8 THEN RETURN
- 'Item is not used
-
- IF C<20 THEN @HITCHK2
- '--- Defeated the boss
- @BOSDEAD
- BGMN=15
- BGMPLAY BGMN
- LVL=LVL+1
- BOSS=BOSPOS+10000
- RETURN
-
- '--- Defeated the enemy
- @HITCHK2
- IF RND(8)==0 THEN NEWC=4:GOTO @ITEMADD '1UP
- IF RND(8)==0 THEN NEWC=5:GOTO @ITEMADD 'BOMB
- RETURN
- @ITEMADD 'Appearance item
- NEWR=RAD(90)
- GOSUB @TKBORN2
- RETURN
-
- '--- BG process
- @MAPCTR
-
- '--- BG0 Scroll through front
- HY=(HY-1)AND 511
- BGOFS 0,0,HY
- GOSUB @DRAWBG0
-
- '--- BG1 Scroll through back
- IF (HY%4) THEN RETURN
- GY=(GY-1)AND 511
- BGOFS 1,0,GY
- GOSUB @DRAWBG1
-
- IF OVR OR MSG THEN RETURN
- IF BOSS==0 THEN A$="STAGE "+STR$(LVL):BGMN=23:BGMPLAY BGMN:GOSUB @PNTSUB2
-
- BOSS=BOSS+1
- IF BOSS>=BOSPOS THEN @BOSS1
-
- '--- Enemy generating process
- IF (GY%4) THEN RETURN
- IF RND(12)>LVL THEN RETURN
- X=RND(256-64)+32:Y=-24
- NEWC=FLOOR((GY/(4*5))%10)+8
- NEWR=RAD(90)
- GOSUB @TKBORN
- RETURN
-
- '--- Boss generating process
- @BOSS1
- J=BOSS-BOSPOS
- IF J>10050 THEN BOSS=0:RETURN
- IF J>10000 THEN @BOSS3
- IF J>1500 THEN @BOSS4
- IF J>900 THEN RETURN
- IF J>20 THEN @BOSS2
-
- '--- Front of boss
- IF BOSS!=BOSPOS THEN RETURN
- BGMN=13
- BGMPLAY BGMN
- A$="WARNING!!":GOSUB @PNTSUB2
- RETURN
-
- '--- Boss generating
- @BOSS2
- X=128:Y=-31
- NEWC=20+((LVL-1) % 3)
- NEWR=RAD(90)
- GOSUB @TKBORN
- IF J>=0 THEN BOSS=BOSPOS+900
- RETURN
-
- '--- Boss exit
- @BOSS3
- X=128+RND(128)-64
- Y=96+RND(96)-48
- NEWR=RAD(RND(360))
- IF RND(10)==0 THEN BEEP 13
- GOSUB @TKSMOKE
- RETURN
-
- '--- Boss destruct
- @BOSS4
- FOR J=0 TO FMAX-1
- X=SPGETV(FN+J,3) 'Coordinate
- Y=SPGETV(FN+J,4) 'Coordinate
- IF Y!=999 THEN GOSUB @TKDEAD
- NEXT
- GOSUB @BOSDEAD
- RETURN
-
- '--- Enemy explosion
- @TKDEAD
- NEWC=0
- GOTO @TKBORN2
-
- '--- BEAM
- @TKBEAM
- NEWC=3
- GOTO @TKBORN
-
- '--- Explosion
- @TKSMOKE
- NEWC=0
- GOTO @TKBORN
-
- '--- Enemy firing a bullet
- @TKFIRE
- NEWC=1
- IF RND(9)>LVL THEN RETURN
- GOTO @TKBORN
-
- '--- Enemy/Effect generating
- @TKBORN
- J=0
- @TKBORN1 'Search free SPRITE
-
- IF SPGETV(FN+J,4)==999 THEN @TKBORN2
- J=J+1
- IF J<FMAX THEN @TKBORN1
- J=-1 'Not have free SPRITE
- RETURN
-
- @TKBORN2 'Search free SPRITE
- W=TKW(NEWC)
- H=TKH(NEWC)
- NN=FN+J
- SPSET NN,TKC(NEWC),TKPL(NEWC),0,0,1,W,H
- SPHOME NN,W/2,H/2
- SPCOL NN,-W/2,-H/2,W,H,TRUE
- SPOFS NN,X,Y
- SPSCALE NN,TKSC(NEWC)
- SPANIM NN,TKA(NEWC),8
- SPANGLE NN,FLOOR(DEG(NEWR-TKOF(NEWC)))
- FR(J)=NEWR
- SPSETV NN,0,NEWC 'Type
- SPSETV NN,1,TKHP(NEWC) 'Life
- SPSETV NN,2,0 'Operating time
- SPSETV NN,3,X 'Coordinate
- SPSETV NN,4,Y 'Coordinate
- RETURN
-
- '---BG0 Front
- @DRAWBG0
- IF (HY%8) THEN RETURN
- PAL=10+((LVL+2)%5)
- Y=((HY/8)-1)AND 63
- IF BOSS>(BOSPOS+1040) THEN @CLRBG0
-
- FOR X=0 TO 31
- C=0
- IF X<=1 THEN C=796+X+(Y%4)*32
- IF X>=30 THEN C=768+X+(Y%4)*32
- BGPUT 0,X,Y,C,PAL,0,0
- NEXT
- RETURN
-
- @CLRBG0
- FOR X=0 TO 31
- C=0:BGPUT 0,X,Y,C,PAL,0,0
- NEXT
- RETURN
-
- '---BG1 Back
- @DRAWBG1
- IF (GY%8) THEN RETURN
- Y=((GY/8)-1)AND 63
- IF BOSS>BOSPOS THEN @CLRBG1
-
- PAL=10+(LVL%5)
- FOR X=0 TO 31
- C=RND(4)+790
- J=ABS(X-16)
- IF J>4 AND ((Y%8)>1) THEN C=0
- BGPUT 1,X,Y,C,PAL,0,0
- NEXT
- RETURN
-
- @CLRBG1
- FOR X=0 TO 31
- C=0:BGPUT 1,X,Y,C,PAL,0,0
- NEXT
- RETURN
-
- '--- Initialize
- @INIT
-
- CLEAR
- ACLS
- LVL=1
- GY=0:HY=0 'BG Coordinate
- BOSPOS=300 'Boss generateing timing
-
- BMAX=16 'Maximum number of bullet
- FMAX=32 'Maximum number of enemy
- TMAX=26 'Type of enemy
-
- DIM FR(FMAX)
-
- DIM TKC(TMAX) 'Character
- DIM TKPL(TMAX) 'Palette
- DIM TKA(TMAX) 'Number of Anime
- DIM TKW(TMAX) 'Width
- DIM TKH(TMAX) 'Height
- DIM TKSC(TMAX) 'Scale
- DIM TKHP(TMAX) 'Life
- DIM TKOF(TMAX) 'Offset rotate
- DIM JMPTBL$(TMAX)
-
- FOR I=0 TO TMAX-1
- JMPTBL$(I)="@TK"+STR$(I)
- NEXT
-
- AN=60 'Ship SPRITE No.
- BN=62 'Fire SPRITE No.
- FN=0 'Enemy SPRITE No.
-
- '--- Reset Ship
- PAL=11
- AD=3
- W=16:H=32
- SPSET AN,288,PAL,0,0,1,W,H
- SPHOME AN,W/2,H/2
- SPCOL AN,-W/4,-H/4,W/2,H/2,FALSE
- SPOFS AN,999,999
-
- '--- Reset Fire
- PAL=4
- W=16:H=16
- FOR I=0 TO BMAX-1
- J=BN+I 'Management number
- SPSET J,37,PAL,0,0,1,W,H
- SPHOME J,W/2,H/2
- SPCOL J,-W/2,-H/2,W,H,FALSE
- SPOFS J,999,999
- NEXT
-
- '--- Reset enemy
- PAL=3
- FOR I=0 TO FMAX-1
- J=FN+I 'Management number
- SPSET J,142,PAL,0,0,1,W,H
- SPHOME J,W/2,H/2
- SPCOL J,-W/2,-H/2,W,H,TRUE
- SPOFS J,999,999
- SPSETV J,1,0 'Life
- SPSETV J,3,999 'Coordinate
- SPSETV J,4,999 'Coordinate
- NEXT
-
- '--- Sort character date
- DIM BF$(64)
-
- 'SPRITE No. 256-287
- CHRINIT "SPU4"
- BFMAX=2*1*4 'Number of character
- FOR C=0 TO 127 STEP BFMAX
- FOR I=0 TO BFMAX-1
- J=C+(I%2)
- J=J+FLOOR((I%4)/2)*4
- J=J+(FLOOR(I/4)%2)*2
- CHRREAD("SPU4",J),BF$(I)
- NEXT
- FOR I=0 TO BFMAX-1
- J=C+I
- CHRSET "SPU4",J,BF$(I)
- NEXT
- NEXT
-
- 'SPRITE No. 320-383
- CHRINIT "SPU5"
- BFMAX=2*2*4 'Number of character
- FOR C=0 TO 255 STEP BFMAX
- FOR I=0 TO BFMAX-1
- J=C+(I%2)
- J=J+FLOOR((I%4)/2)*4
- J=J+FLOOR(I/8)*8
- J=J+(FLOOR(I/4)%2)*2
- CHRREAD("SPU5",J),BF$(I)
- NEXT
- FOR I=0 TO BFMAX-1
- J=C+I
- CHRSET "SPU5",J,BF$(I)
- NEXT
- NEXT
-
- 'SPRITE No. 448-511
- CHRINIT "SPU7"
- BFMAX=4*4*4 'Number of character
- FOR C=0 TO 255 STEP BFMAX
- FOR I=0 TO BFMAX-1
- J=C+FLOOR(I/16)*16
- J=J+FLOOR((I%8)/2)*4
- J=J+(FLOOR(I/8)%2)*2
- J=J+(I%2)
- CHRREAD("SPU7",J),BF$(I)
- NEXT
- FOR I=0 TO BFMAX-1
- J=C+I
- CHRSET "SPU7",J,BF$(I)
- NEXT
- NEXT
-
- '---
- RESTORE @TEKIDATA
- FOR I=0 TO TMAX-1
- READ TKC(I)
- READ TKPL(I)
- READ TKA(I)
- READ TKSC(I)
- READ TKW(I),TKH(I)
- READ TKHP(I),TKOF(I)
- NEXT
-
- @TEKIDATA
- ' CHR,PL,AN,SCA,W, H,HP,Offset
- DATA 248,12, 8,150,16,16, 1,0
- DATA 40, 4, 2,120,16,16, 1,0
- DATA 237, 4, 2,120,16,16, 1,0
- DATA 169, 3, 1,200,16,16, 1,-0.01
-
- 'Item
- DATA 288, 4, 1,120,16,16, 4,1.57
- DATA 234, 4, 2,120,16,16, 4,1.57
- DATA 0, 0, 0, 0 , 0, 0, 0,0
- DATA 0, 0, 0, 0 , 0, 0, 0,0
-
- 'Enemy
- DATA 136, 2, 1,120,16,16, 1,0
- DATA 176, 2, 2,180,16,16, 4,0
- DATA 376,12, 1,100,32,32, 1,0
- DATA 204, 4, 1,120,16,16, 1,0
- DATA 174, 3, 2,180,16,16, 2,0
- DATA 184, 3, 2,150,16,16, 2,4.71
- DATA 272,11, 3,100,32,16, 1,3.14
- DATA 178, 3, 6,150,16,16, 6,0
- DATA 380,12, 1,100,32,32, 2,3.14
- DATA 206,11, 1,150,16,16, 4,-1.57
-
- 'Intact
- DATA 0, 0, 0, 0 , 0, 0, 0,0
- DATA 0, 0, 0, 0 , 0, 0, 0,0
-
- 'Boss
- DATA 340,12, 1,200,32,32,70,1.56
- DATA 372,12, 1,200,32,32,90,3.13
- DATA 448,12, 1,120,64,64,90,0
-
- 'Still not using
- DATA 0, 0, 0, 0 , 0, 0, 0,0
- DATA 0, 0, 0, 0 , 0, 0, 0,0
- DATA 0, 0, 0, 0 , 0, 0, 0,0
-
- PAL=10
- FOR Y=0 TO 63
- GOSUB @CLRBG0 'BG0 Front
- GOSUB @CLRBG1 'BG1 Back
- NEXT
-
- '--- GRAPHIC
- FOR I=0 TO 400
- X=RND(256):Y=RND(196)
- GPSET X,Y,242+RND(5)
- NEXT
-
- RETURN
-
- '---
- @TITLE
-
- BGMSTOP
- VISIBLE 1,1,0,0,1,1 'BGOFF
- CLS
- COLOR 0
- BEEP 42
- RESTORE @TITLE2
-
- Y=4
- @TITLE1
- READ A$
- IF A$=="END" THEN @TITLE3
- Y=23
- GOSUB @PNTSUB
- VSYNC 3
- 'Y=Y+1
- GOTO @TITLE1
-
- @TITLE2
- DATA "клклклклклклклклклклклкл"
- DATA "л ┣┫ ┗┏┓┯ ┛┯┳┛┗┏┓┛┳━┛ ┛к"
- DATA "к ┛ ┛┯┠┛┛┫┛┛━┛┯┠┛┯┛ ┛ ┛л"
- DATA "л ┯┗ ┛ ┛┛ ┛┛ ┛┛ ┛┛┃┓┫┠━к"
- DATA "к DANMAKU SHOOTING GAMEл"
- DATA "лклклклклклклклклклклклк"
- DATA ""
- DATA "HOW TO PLAY"
- DATA ""
- DATA "А:Normal Shot"
- DATA ""
- DATA "Б:Big Bomb "
- DATA ""
- DATA "П:Move Ship "
- DATA ""
- DATA ""
- DATA ""
- DATA ""
- DATA ""
- DATA "PUSH ANY BUTTON"
- DATA ""
- DATA "END"
-
- @TITLE3
-
- GOSUB @BTWAIT
- GOSUB @BTNOFF
-
- '--- (Secret)Invincible
- IF BT AND 4+8 THEN DEBUG=DEBUG XOR 1
-
- '--- (Secret)Stage select
- IF BT AND 1 THEN LVL=LVL+1
- IF BT AND 2 THEN LVL=LVL-1
- IF LVL<1 THEN LVL=1
- IF LVL>99 THEN LVL=99
- IF (BT AND &HF;)==0 THEN @TITLE4
-
- A$="[↑↓]STAGE "+STR$(LVL)+" "
- Y=17
- GOSUB @PNTSUB
-
- A$="Normal Mode"
- IF DEBUG THEN A$="Invincible Mode"
- A$="[←→]"+A$
- Y=19
- GOSUB @PNTSUB
-
- GOTO @TITLE3
-
- '--- Start
- @TITLE4
- CLS
- VISIBLE 1,1,1,1,1,1
- RETURN
-
- '--- Text
- @PNTSUB2
- COLOR 3
- MSG=4 'The Display of TIME
- @PNTSUB3
- Y=96/8
- @PNTSUB
- X=16-(LEN(A$)/2)
- LOCATE X,Y
- PRINT A$
- RETURN
-
- '--- Button is pushed
- @BTWAIT
- VSYNC 1
- BT=BUTTON()
- IF BT==0 THEN @BTWAIT
- BEEP 3
- RETURN
-
- '--- Button is release
- @BTNOFF
- VSYNC 1
- IF BUTTON() THEN @BTNOFF
- RETURN
-
- '+-------------------------+
- '|END |
- '+-------------------------+
-
EXEC "GAME5" (Press Enter to Run)
A fighting game where giant characters do battle. Two vast screen-filling characters wield mighty swords as they duel to the death.
- '+------------------+
- '|GAME5 |
- '| Fighting Game |
- '+------------------+
-
- GOSUB @INIT
-
- @START
- GOSUB @TITLE
-
- '--- MAIN
- @MAIN
-
- INOT=(I+1)%2 'Opponent ID
- NNOT=AN+INOT 'Opponent SPRITE NO.
- XNOT=SPGETV(NNOT,VX)
-
- N=AN+I
- GOSUB @VPOP
-
- X1=1-(I*2)
-
- BT=0
- IF I==0 THEN BT=BUTTON()
- IF I==1 AND RND(2)==0 THEN BT=POW(2,RND(8))
-
- GOSUB @JUMP
- GOSUB @PUNCH
- GOSUB @DAMAGE
-
- IF (BT AND 1) THEN KEN=16
- IF (BT AND 2) THEN KEN=40
- IF (BT AND 4) THEN X=X-1
- IF (BT AND 8) THEN X=X+1
-
- IF ABS(X-XNOT)<128 THEN X=X-X1 'チカヅキスギ
- IF X<32 THEN X=32
- IF X>224 THEN X=224
-
- SPOFS N,X,Y
- GOSUB @HITCHK
-
- GOSUB @VPUSH
-
- VSYNC 1
- IF HP<=0 THEN @GOVER
-
- I=(I+1)%2
-
- GOTO @MAIN
-
- '--- Game Over
- @GOVER
- BGMSTOP
- SPCHR AN+I,320+16*2
- A=0
- A1=-1
- IF I==1 THEN A1=-A1
-
- @GOVER2
- A=A+A1
- SPANGLE AN+I,A
- VSYNC 1
- IF A>=-45 AND A<=45 THEN @GOVER2
-
- BGMPLAY 4
- WAIT 180
- GOTO @START
-
- '---Load date
- @VPOP
- X =SPGETV(N,VX)
- Y =SPGETV(N,VY)
- HP =SPGETV(N,VHP)
- JMP=SPGETV(N,VJMP)
- PCH=SPGETV(N,VPCH)
- KEN=SPGETV(N,VKEN)
- DMG=SPGETV(N,VDMG)
- RETURN
-
- '---Store date
- @VPUSH
- SPSETV N,VX ,X
- SPSETV N,VY ,Y
- SPSETV N,VHP ,HP
- SPSETV N,VJMP,JMP
- SPSETV N,VPCH,PCH
- SPSETV N,VKEN,KEN
- SPSETV N,VDMG,DMG
- RETURN
-
- '--- Jump
- @JUMP
- IF JMP THEN @JUMP2
-
- IF DMG THEN RETURN
- IF Y<JY THEN Y=Y+JMPMAX
- IF Y>JY THEN Y=JY:JMP=0
- IF (BT AND 16) THEN @JUMP3
- RETURN
-
- '--- Jump Start
- @JUMP3
- JMP=JMPMAX
- 'BEEP 8
- RETURN
-
- '--- The midst of a Jump
- @JUMP2
- Y=Y+(JMPHF-JMP)
- JMP=JMP-0.5
- IF JMP<0 THEN JMP=0
- RETURN
-
- '--- Collision
- @HITCHK
- X2=X1*80
- IF PCH<PCHHF THEN X2=X2/2
- KX=X+X2 'Coordinates of a sword
- KY=Y+KEN
- SPOFS BN+I,KX,KY
- IF SPCHK(CN+I)==0 THEN SPOFS CN+I,999,999
-
- IF DMG THEN RETURN
- IF PCH<PCHHF THEN RETURN
-
- IF ABS(KX-XNOT)>64 THEN RETURN
-
- DMGNOT=SPGETV(NNOT,VDMG)
- IF DMGNOT THEN RETURN 'Opponent in damage
-
- KENNOT=SPGETV(NNOT,VKEN)
- IF ABS(KEN-KENNOT)<8 THEN @DEFEND
-
- SPSETV NNOT,VDMG,8 'Hit attack
- RETURN
-
- '--- Defence has been
- @DEFEND
- SPOFS CN+I,KX,KY
- KX2=KX+RND(60)-30
- KY2=KY+RND(60)-30
-
- PCH=PCHMAX/2
- SPOFS CN+I,KX2,KY2,40
- BEEP 8
- RETURN
-
- '--- Damage
- @DAMAGE
- IF DMG==0 THEN RETURN
- X=X-X1
- DMG=DMG-1
- IF DMG THEN RETURN
- HP=HP-1
- IF HP<0 THEN HP=0
- GOSUB @PRTHP2
- RETURN
-
- '--- Attack
- @PUNCH
- IF PCH THEN @PUNCH2
- IF DMG THEN RETURN
- IF (BT AND 32)==0 THEN RETURN
- PCH=PCHMAX
- BEEP 1
- SPCHR N,320+16
- RETURN
-
- '--- Attacking
- @PUNCH2
- X=X+(PCH-PCHHF)*X1
- IF PCH<PCHHF THEN SPCHR N,320
- PCH=PCH-1
- IF PCH<0 THEN PCH=0
- RETURN
-
- '--- Life meter
- @PRTHP
- HX=(I*16)+2
- COLOR 0
- LOCATE HX,0
- PRINT NAM$(I)
- COLOR 4
- FOR TMP=0 TO 10
- LOCATE TMP+HX,1
- PRINT "┿";
- NEXT
-
- @PRTHP2
- HX=(I*16)+2
- COLOR 13
- FOR TMP=10 TO HP STEP -1
- LOCATE TMP+HX,1
- PRINT "┿";
- NEXT
- RETURN
-
- '--- Initialize
- @INIT
- CLEAR
- ACLS
-
- PRINT " Initializing"
-
- DIM NAM$(2)
- NAM$(0)="YOU"
- NAM$(1)="CPU"
-
- PAL=2
- C2=0
- JIMEN=20
- JY=JIMEN*8-64
-
- AN=4 'Body SPRITE No.
- BN=2 'Weapon SPRITE No.
- CN=0 'Spark SPRITE No.
-
- JMPMAX=10
- PCHMAX=9
- PCHHF=FLOOR(PCHMAX/2)
- JMPHF=FLOOR(JMPMAX/2)
-
- NUM=64:GOSUB @CHRZOOM
- NUM=81:GOSUB @CHRZOOM
- NUM=88:GOSUB @CHRZOOM
- NUM=16:GOSUB @CHRZOOM
-
- W=64 'Character Size
- H=64
-
- VX=0 'Coordinate
- VY=1 '
- VHP=2 'Life
- VJMP=3 'Jump
- VPCH=4 'Punch
- VKEN=5 'Position of Sword
- VDMG=6 'Damage
-
- FOR I=0 TO 1
- N=AN+I
- PAL=2+(I*2)
- SPSET N,320,PAL,I,0,1,W,H
- SPHOME N,W/2,H/2
- SPSCALE N,200
-
- N=BN+I
- SPSET N,368,PAL,I,0,1,W,H
- SPHOME N,W/2,H/2
- SPSCALE N,100
-
- N=CN+I
- SPSET N,20,PAL,I,0,1
- SPHOME N,8,8
- SPSCALE N,200
- SPANIM N,4,20
- NEXT
-
- '--- Background
- GCLS
-
- GPAGE 0
- FOR Y=0 TO JY-1
- C=242+(5*Y/JY)
- GLINE 0,Y,255,Y,C
- NEXT
-
- J=0
- FOR Y=JY TO 191
- J=FLOOR(4*(Y-JY)/(191-JY))+1
- C = 247-(J*36)-(J*6)
- GLINE 0,Y,255,Y,C
- NEXT
-
- Y=JY
- C=0
- FOR J=0 TO 13
- GLINE 0,Y,255,Y,C
- Y=Y+J
- NEXT
-
- FOR X=0 TO 128 STEP 10
- GLINE 128+X,JY,128+X*5,191,C
- GLINE 128-X,JY,128-X*5,191,C
- NEXT
-
- RETURN
-
- '--- Expand character
- @CHRZOOM
- GCLS
- C1=(NUM % 64)*4
- S$="SPU"+STR$(FLOOR(NUM/64))
- '--- GPUTCHR
- FOR Y=0 TO 8*4 STEP 8*4
- FOR X=0 TO 8*4 STEP 8*4
- GPUTCHR X,Y,S$,C1,PAL,4
- C1=C1+1
- NEXT
- NEXT
- '--- CHRSET
- FOR SY=0 TO 63 STEP 8
- FOR SX=0 TO 63 STEP 8
- BF$=""
- FOR Y=0 TO 7
- FOR X=0 TO 7
- COL=GSPOIT(SX+X,SY+Y)
- BF$=BF$+HEX$(COL AND &HF;)
- NEXT
- NEXT
- CHRSET "SPU5",C2,BF$
- C2=C2+1
- NEXT
- NEXT
- RETURN
-
- '--- Title
- @TITLE
-
- BGMSTOP
- CLS
-
- FOR I=0 TO 1
- N=AN+I
- X=((128+64)*I)+32
- Y=JY
- HP=11
- KEN=16
- DMG=0
- PCH=0
- SPOFS N,X,Y
- SPCHR N,320
- GOSUB @VPUSH
-
- SPOFS BN+I,999,999
- SPOFS CN+I,999,999
- NEXT
-
- WAIT 20
- COLOR 0
- RESTORE @TITLE2
-
- Y=3
- @TITLE1
- READ A$
- IF A$=="END" THEN @TITLE3
- GOSUB @PNTSUB
- Y=Y+1
- GOTO @TITLE1
-
- @TITLE2
- DATA "┷┏┏┃┷━┨┏┏┏┻┛ ┻┛┏┷┏┃┷━┯ ┻┛┨┏┏┏"
- DATA "┷ ┷ ┷ ┻┛ ┻┛ ┷ ┷ ┷┯┻┛┷ "
- DATA "┷┏┏ ┷ ┷ ┏┷┻┣┏╋┛ ┷ ┷ ┷┃┷┛┷ ┏┷"
- DATA "┷ ┳┷┓╋┠┠┷┻┛ ┻┛ ┷ ┳┷┓┷ ┻┛╋┠┠┷"
- DATA ""
- DATA "┨┏┏┏┳┣┏┯┻┯ ┨┛┷┏┏━"
- DATA "┷ ┻┛ ┷┻┣┯┨╋┛┷┠┠┓"
- DATA "┷ ┏┷┻┣┏┷┻┛┃━┻┛┷ "
- DATA "╋┠┠┷┻┛ ┷┻┛ ┻┛┷┠┠┓"
- DATA ""
- DATA ""
- DATA "HOW TO PLAY"
- DATA ""
- DATA "А:Jump"
- DATA "Б:Attack"
- DATA "←→:Move"
- DATA "↑↓:Sword position"
- DATA ""
- DATA "PUSH ANY BUTTON"
- DATA ""
- DATA "END"
-
- '--- Bow
- @TITLE3
- A=0
- A1=1
-
- @TITLE4
- A=A+A1
- IF A<=0 OR A>=30 THEN A1=-A1
- SPANGLE AN+0,A
- SPANGLE AN+1,-A
-
- VSYNC 2
- BT=BUTTON()
- IF BT==0 THEN @TITLE4
-
- SPANGLE AN+0,0
- SPANGLE AN+1,0
- CLS
-
- J=20
- FOR I=0 TO 8
- BEEP 58
- WAIT J+5
- J=J/2
- NEXT
- FOR I=0 TO 1
- GOSUB @PRTHP
- NEXT
- BGMPLAY 1
-
- I=0
- RETURN
-
- '--- Text display
- @PNTSUB2
- COLOR 3
- @PNTSUB3
- Y=96/8
- @PNTSUB
- X=16-(LEN(A$)/2)
- LOCATE X,Y
- PRINT A$
- RETURN
-
- '+-------------------------+
- '|END |
- '+-------------------------+