}* FREE TUTORIAL EXAMPLE PROGRAM IN LISA GJ2 FIC3 WRITTEN BY }* }* ARISTO W.LAH, NORMAL YOGA4D CFDL, 2011:3:13 }* }* CREDITS.TXT IS A SIMPLE GAME WHERE YOU HAVE TO DIT THE }* }* CRES, OR, IN OTHER WORDS, DITCH THE CRETIC (MOUNTANEOUS) }* }* STRUCTURES. THESE ARE DRAWN IN THE SENSE OF OUTLINE IN 2D.}* }* THE CRES MOVE AROUND AND YOU FOLLOW AND HOME IN ON EACH }* }* AND USE THE WARP CANON TO BLAST THE WHOLE CRE. DIT THE }* }* CRES AND GET SCORES. }* }* TUTORIAL NOTES FOR THOSE WHO LEARN F3 PROGRAMMING: }* }* * WHEN YOU NEED A FRESH SERIES OF FLUCTUATING (RFFG) }* }* NUMBERS EACH TIME YOU START UP E.G. A GAME, BUT YOU NEED }* }* TO HAVE THE SAME SERIES OF NUMBERS -- EXACTLY -- }* }* AVAILABLE WITHIN EACH GAME SESSION, PERHAPS SO YOU CAN }* }* TRACE THE OUTLINES OF SOMETHING SHOWN (OR REMOVE IT }* }* EXACTLY), THEN BEGIN THE PROGRAM BY CALLING THIS ROUTINE }* }* AS MADE HERE -- START-UP-RANGE -- AND CALL ON NEXT-RFFG }* }* TO GET A HUGE RFFG NUMBER, WHICH YOU FIX TO THE SIZE }* }* YOU WANT, TYPICALLY BY MOD. TO GET THE SAME SERIES OVER }* }* AGAIN, CALL RESET-RFFG-RANGE AND VOILA! ;) }* }* * TO CHANGE GREEN TONE APPROACH E.G. TO HAVE A BLACK }* }* BACKGROUND, THERE ARE AT LEAST TWO OBVIOUS WAYS: }* }* ONE WAY IS TO CALL ON THE LITTLE PROGRAM DEFINED HERE, }* }* 'MODE OF NIGHT', OR, NITE-MODE, AND USE THE NITE-CLS TO }* }* CLEAR SCREEN, AND THE OTHER IS TO USE A COMBINATION OF }* }* WRITEPAL AND PUTPAL AND SUCH, AND CHANGE THE BACKGROUND }* }* SCHEME (THE WORD 'PAL' SIGNIFIES 'PALETTE'). }* }* AT ANY RATE, AN ADVANTAGE IN DOING IT THIS WAY AS DONE }* }* HERE IS THAT IF YOU DO IT IN A PROGRAM WHICH USES OTHER }* }* GRAPHICAL ELEMENTS WHICH ASSUMES THE NORMAL BACKGROUND }* }* PALETTE, THESE NORMALLY WILL NOT HAVE TO BE CHANGED. }* ((DATA GAME-TIMING )) }* VALUE OF THE ABOVE CAN BE CHANGED TO ADJUST TIMING }* }* FOR THIS GAME. VALUE IS SET IN THE COMPLETING LINES. }* ((DATA GAME-POSITION )) ((DATA YOUR-SCORE )) ((DATA CRE-ARRAY 4 => %MAKE CRE-ARRAY < ADD ; 1 ; CRE-ARRAY >>> => %PUT )) (( ^850 FR GETV ; 150 => ADD ; 2 ; CRE-ARRAY >>> => %PUT )) (( ^850 FR GETV ; 150 => ADD ; 3 ; CRE-ARRAY >>> => %PUT )) (( ^850 FR GETV ; 150 => ADD ; 4 ; CRE-ARRAY >>> => %PUT )) ((DATA RFFG-RANGE 10000 => %MAKE RFFG-RANGE < RECTFILL )) )) OK) (LET FRAME-NITE BE (( )) (( (( 1018 ; 38 ; 1024 ; 768 ; 191 => RECTFILL )) (( 1 ; 762 ; 1024 ; 768 ; 191 => RECTFILL )) (( 1 ; 38 ; 6 ; 768 ; 191 => RECTFILL )) (( 1 ; 38 ; 1024 ; 44 ; 191 => RECTFILL )) )) OK) (LET FRAME-NITE-OFF BE (( )) (( (( 1018 ; 38 ; 1024 ; 768 ; 128 => RECTFILL )) (( 1 ; 762 ; 1024 ; 768 ; 128 => RECTFILL )) (( 1 ; 38 ; 6 ; 768 ; 128 => RECTFILL )) (( 1 ; 38 ; 1024 ; 44 ; 128 => RECTFILL )) )) OK) (LET BLINK-NITE-FRAME BE (( )) (( (( 4 (COUNT (( FRAME-NITE-OFF )) (( 250 => GOODPAUSE )) (( FRAME-NITE )) (( 250 => GOODPAUSE )) COUNTUP) )) )) OK) (LET MINI-BLINK-NITE-FRAME BE (( )) (( (( 2 (COUNT (( FRAME-NITE-OFF )) (( 175 => GOODPAUSE )) (( FRAME-NITE )) (( 175 => GOODPAUSE )) COUNTUP) )) )) OK) (LET RESET-RFFG-RANGE BE (( )) (( (( RANGE-VALUE => SETDANCE )) )) OK) (LET START-UP-RANGE BE (( )) (( (( RFFG-RANGE >>> => & )) (( RESET-RFFG-RANGE )) (( # => %LENGTH (COUNT (( RFFG ; N1 ; # => %PUT )) COUNTUP) )) (( && )) )) OK) (LET NEXT-RFFG BE (( )) (( (( RFFG-RANGE >>> => & )) (( RANGE-VALUE >>> ; # => %LENGTH => INTGREATER (MATCHED (( RESET-RFFG-RANGE )) MATCHED) )) (( RANGE-VALUE >>> ; # => %GET => => )) (( RANGE-VALUE => INCVAR )) (( && )) )) OK) (LET GAME-INSTRUCTIONS BE (( )) (( (( FRAME-NITE )) (( }CREDITS.TXT: A GAME WHICH CALLS ON YOUR POWERS OF DESTRUCTION:} ; 125 ; 110 => B9-POP )) (( }-- A GAME BY ARISTO W.LAH, A FREE LISA GJ2 FIC3 PROGRAM} ; 125 ; 150 => B9-POP )) (( }ARE YOU READY TO D I T T H E C R E S ?} ; 125 ; 190 => B9-POP )) (( }IT IS A DANGEROUS AND DELICATE MISSION.} ; 125 ; 230 => B9-POP )) (( }THE EMPIRE GIVES YOU TEMPORARY PERMIT TO CARRY A WARP-CREYONIC GUN.} ; 125 ; 270 => B9-POP )) (( }DITCH -- "DIT" -- SMASH THE MOUNTAINS -- THE "CRE"S -- BY CTR-S.} ; 125 ; 310 => B9-POP )) (( }BUT AIM ROUGHLY AT THE CRE-ROOT! MOVE BY <- -> ARROWS. ONCE A CRE} ; 125 ; 350 => B9-POP )) (( }IS GONE, THEN, JUST LIKE EGOTISM, A NEW CRE ARISES, SO YOU MUST} ; 125 ; 390 => B9-POP )) (( }YOURSELF LIMIT THIS GALACTIC MISSION TO A MEANINGFUL DURATION!!!} ; 125 ; 430 => B9-POP )) (( BLINK-NITE-FRAME )) (( A-KEY )) )) OK) (LET UPDATE-SCORE BE (( )) (( (( 30 => MAKEBL ; 450 ; 1 => B9-POP )) (( }SCORE: } ; YOUR-SCORE >>> => CONCAT ; 450 ; 1 => B9-POP )) )) OK) (LET PEN-TONE-RFFG-AND-WAIT BE (( )) (( (( 40 => FUNNYRFFG ; 151 => ADD PEN-COLOR < FUNNYRFFG => GOODPAUSE )) )) OK) ((DATA SHOW-CRE-FUNNY-MODE SHOW-CRE-FUNNY-MODE => SETBASIS )) (LET SHOW-THIS-CRE BE (( >N6 >N1 )) (( (( CRE-ARRAY >>> => & )) (( N6 PEN-COLOR < %GET => >N8 )) (( N8 => ISPRO => NOT = && ; EXIT === )) (( N8 PEN-X < MUL RANGE-VALUE < VISDANCE = PEN-TONE-RFFG-AND-WAIT === )) (( NEXT-RFFG ; 25 => MOD ; 15 => ADD => PEN-BROAD-DRAW FT )) (( SHOW-CRE-FUNNY-MODE => VISDANCE = PEN-TONE-RFFG-AND-WAIT === )) (( NEXT-RFFG ; 1150 => MOD ; 150 => ADD => PEN-LEFT )) (( SHOW-CRE-FUNNY-MODE => VISDANCE = PEN-TONE-RFFG-AND-WAIT === )) (( NEXT-RFFG ; 25 => MOD ; 15 => ADD => PEN-BROAD-DRAW FT )) (( SHOW-CRE-FUNNY-MODE => VISDANCE = PEN-TONE-RFFG-AND-WAIT === )) (( NEXT-RFFG ; 1150 => MOD ; 150 => ADD => PEN-RIGHT )) COUNTUP) )) (( && )) )) OK) (LET SHOW-ALL-CRES BE (( >N6 )) (( (( 4 (COUNT (( N1 ; N8 => SHOW-THIS-CRE )) COUNTUP) )) )) OK) (LET MOVE-ALL-CRES BE (( )) (( (( CRE-ARRAY >>> => & )) (( 4 (COUNT (( N1 ; # => %GET => >N10 )) (( N10 => ISPRO (MATCHED (( ^200 FR GETV ; 100 => SUB ; N10 => ADD => >N10 )) (( N10 ; 120 ; 850 => SET-RANGE ; N1 ; # => %PUT )) MATCHED) )) COUNTUP) )) (( && )) )) OK) (LET CENTER-WARP-BLASTER BE (( )) (( (( 500 GAME-POSITION < ADDVAR )) (( GAME-POSITION >>> ; 35 ; 920 => SET-RANGE GAME-POSITION < ADDVAR )) (( GAME-POSITION >>> ; 35 ; 920 => SET-RANGE GAME-POSITION <>> => >N5 )) (( N5 ; 700 ; BRIDGE 75 ADD ; BRIDGE 60 ADD ; 191 => RECTFILL )) (( N5 30 ADD ; 680 ; BRIDGE 20 ADD ; BRIDGE 20 ADD ; 191 => RECTFILL )) )) OK) (LET HIDE-WARP-BLASTER BE (( )) (( (( GAME-POSITION >>> => >N5 )) (( N5 ; 700 ; BRIDGE 75 ADD ; BRIDGE 60 ADD ; 128 => RECTFILL )) (( N5 30 ADD ; 680 ; BRIDGE 20 ADD ; BRIDGE 20 ADD ; 128 => RECTFILL )) )) OK) (LET DIT-A-CRE BE (( )) (( (( CRE-ARRAY >>> => & )) (( GAME-POSITION >>> => >N9 )) (( N9 ; 20 => ADD ; 100 ; BRIDGE 38 ADD ; 700 ; 191 => RECTFILL )) (( MINI-BLINK-NITE-FRAME )) (( N9 ; 20 => ADD ; 100 ; BRIDGE 38 ADD ; 700 ; 128 => RECTFILL )) (( SHOW-WARP-BLASTER )) (( N9 ; 37 => ADD => >N9 )) (( 4 (COUNT (( N1 ; # => %GET => >N10 )) (( 31 ; (( N11 ; N10 => SUB => ABS )) => INTGREATER (MATCHED (( SHOW-CRE-FUNNY-MODE => SETDANCE )) (( N1 ; 191 => SHOW-THIS-CRE )) (( SHOW-CRE-FUNNY-MODE => SETBASIS )) (( N1 ; 128 => SHOW-THIS-CRE )) (( ^850 FR GETV ; 150 => ADD ; N1 ; CRE-ARRAY >>> => %PUT )) (( 10000 ; YOUR-SCORE => ADDVAR )) MATCHED) )) COUNTUP) )) (( && )) )) OK) (( LOOKSTK )) (LET PLAY-CREDITS BE (( )) (( (( NITE-CLS )) (( FRAME-NITE )) (( BLINK-NITE-FRAME )) (( YOUR-SCORE => SETBASIS )) (( UPDATE-SCORE )) (( CENTER-WARP-BLASTER ; SHOW-WARP-BLASTER )) (( 191 => SHOW-ALL-CRES )) (( 50 => GOODPAUSE )) (( 1 => >N2 )) (( GOLABEL2: )) (( 128 => SHOW-ALL-CRES )) (( MOVE-ALL-CRES )) (( 191 => SHOW-ALL-CRES )) (( MANUAL-CLEAR-KEYBUF )) (( GAME-TIMING >>> => GOODPAUSE )) (( KEYTOUCH (MATCHED (( KEYNUM => >N2 ; FKEYNUM => >N4 )) (( N2 ; 19 => EQN = DIT-A-CRE ; UPDATE-SCORE == )) (( N4 ; 82 => EQN = HIDE-WARP-BLASTER ; MOVE-WARP-BLASTER-LEFT ; SHOW-WARP-BLASTER == )) (( N4 ; 83 => EQN = HIDE-WARP-BLASTER ; MOVE-WARP-BLASTER-RIGHT ; SHOW-WARP-BLASTER === === === )) MATCHED) )) (( N2 ; KEY-ESC >>> => EQN => NOT = GOUP2 === )) (( CLS )) )) OK) (LET CREDITS BE (( )) (( (( GJ-ON )) (( NITE-MODE )) (( NITE-CLS )) (( GAME-INSTRUCTIONS )) (( START-UP-RANGE )) (( PEN-ORIGO )) (( PEN-STRAIGHT-UP )) (( 191 PEN-COLOR <