Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!sdd.hp.com!hp-pcd!hpcvra.cv.hp.com!rnews!hpcvbbs!akcs.falco From: akcs.falco@hpcvbbs.UUCP (Andrey Dolgachev) Newsgroups: comp.sys.handhelds Subject: New Tetris Keywords: tetris Message-ID: <27974602:1739comp.sys.handhelds@hpcvbbs.UUCP> Date: 18 Jan 91 19:40:20 GMT Lines: 444 O.K., here's another version of tetris. First of all, I have simply modified the original Tetris, so full credit goes to the original author of the partial machine-code version. And of course, the usual disclaimers about this causing your eyes to pop out of your head and you hand developing a tetris disease apply. O.K., now that I'm done with the disclaimers, tetris now has a more interesting screen, both score and line counts, a next piece function, high score list (Top 5), pause key, off key, all with the same speed. The good news is that it looks and acts more like the real tetris, and stil has the same speed as the partial machine code version(the main loop has not been added on to). The bad news is that it is now 7k. I am working on a compacted version, with more machine code, but for now,you all are going to have to be satisfied with the mostly gag, userlang version. Please feel free to fix, compact, speed up, etc. the added functions. O.K., download the below, d/l into your hp using text, asc the files xfig and tfig, press help if you need it and have fun. BTW asc is found in message 887 or 888 of c.s.h. ---Andrey Dolgachev --------------------"it's just a flesh wound!"------------ %%HP: T(0)A(D)F(.); DIR start + DEPTH LIST TETRIS DEPTH 1 - DROPN OBJ DROP ; HELP + CLLCD "HIGH - Show Top 5 ERASE - Erases Top 5 DURING GAME N - Toggle Next O - Off 8 - Flip P - Pause 4,6 - R,L Q - Quit 0 - Drop" 1 DISP DO UNTIL KEY END DROP ; HIGH + -.8 2.2 -6 -2.5 4.5 N Y X1 X2 X3 + PICT PURGE "HIGH SCORES" 3 GROB PICT SWAP (-3.2,3.1) SWAP REPL -.3 'Y' STO+ "SCORE" -6.3 Y DRSC "NAME" -1.1 Y DRSC "LINES" 3.5 Y DRSC 1 5 -.2 'Y' STO+ (-6.3,1.1) (6.3,1.1) LINE FOR I N 'Y' STO+ SCORES I GET LIST DROP X3 Y DRSC X2 Y DRSC X1 Y DRSC NEXT { # 0d # 0d } PVIEW DO UNTIL KEY END DROP ; ; Erase + SC2 'SCORES' STO ; TETRIS + .101 'a' STO 0 'DONE' STO .101 1 CF 7 CF MKSCR RAND 7 * IP 1 + 'NPC' STO 0 'PNTS' STO 0 'LINS' STO 0 ADDL 0 ADDP DO delay FLST NPC RAND 7 * IP 1 + 'NPC' STO SHNP DUP 'OB1' STO GET 1 DUP 'OB2' STO GET # 11d 1 CF DO IF 1 FC? THEN RK2 RK2 RK2 RK2 END IF DONE NOT THEN DUP2 # 0d XFIG # 256d + DUP2 # 0d + TFIG IF # 0d == THEN DUP2 # 63903d XFIG ELSE # 256d - # 63903d XFIG # 0d END END UNTIL DUP # 0d == DONE OR END IF DONE NOT THEN 20 ADDP DROP PACK MEM DROP END UNTIL FULL DONE OR END .5 WAIT WHILE KEY REPEAT DROP END FIN ; delay + a .001 - DUP IF 0 THEN 0 'a' STO DROP ELSE 'a' STO END ; a .098 HI + 4 I + "CONGRATS, YOU REACHED THE TOP FIVE" { "" } INPUT PNTS STR SWAP LINS STR 3 LIST IF SWAP THEN 1 LIST SCORES SWAP + 'SCORES' STO ELSE DO IF I 0 == THEN 0 ELSE SCORES I GETI CHHS END IF THEN IF I 4 == THEN ELSE GETI PUT 'SCORES' STO END -1 'I' STO+ 0 ELSE SCORES I 1 + GETI PUT 'SCORES' STO DROP2 SCORES I 1 + 3 ROLL PUT 'SCORES' STO 1 END UNTIL END END ; ; DRSC + R C SWAP 2 GROB PICT 3 ROLL 3 ROLL REPL ; FIN + SCORES SIZE IF 5 < THEN 1 HI ELSE SCORES 5 GET CHHS IF THEN 0 HI END END HIGH ; CHHS + 1 GET OBJ PNTS < ; CPC GROB 8 12 000000000000000000000000 PGB { { GROB 8 12 F09090F0FF9999FFF09090F0 GROB 8 12 000000000000000000000000 } { GROB 8 12 FF9999FFF09090F0F09090F0 GROB 8 12 000000000000000000000000 } { GROB 8 12 FF9999FF0F09090F0F09090F GROB 8 12 000000000000000000000000 } { GROB 8 12 0F09090FFF9999FFF09090F0 GROB 8 12 000000000000000000000000 } { GROB 8 12 F09090F0FF9999FF0F09090F GROB 8 12 000000000000000000000000 } { GROB 4 16 F09090F0F09090F0F09090F0F09090F0 GROB 4 16 00000000000000000000000000000000 } { GROB 8 8 FF9999FFFF9999FF GROB 8 8 0000000000000000 } } NPC 2 SHNP + IF 7 FS? THEN PICT { # 32d # 27d } CPC REPL PICT { # 32d # 27d } PGB NPC GET LIST DROP 'CPC' STO REPL END ; LINS 0 ADDL + 'LINS' STO+ PICT { # 100d # 8d } LINS 1 GROB REPL ; IPIC GROB 131 64 FFFFFFFFFFF0000000000FFFFFFFFFFF70100000000080000000000100000000004099DDC1 00008000000000010882D91000405445504000800000000001088654040040944DC1000080 0000000001088ED90000401545504000800000000001088A50140040D8D5D1000080000000 000108B2DD0000401000000000800000000001000000000040140000000080000000000100 02000000401A000000008000000000010005000000401A0000000080000000000100050000 00401A00000000800000000001000500000040140000000080000000000100020000004010 00000000800000000001000000000040FFFFFFFFFFF0000000000FFFFFFFFFFF7010000000 00800000000001000000000040FFFFFFFFFFF0000000000FFFFFFFFFFF70FFFFFFFFFFF000 0000000FFFFFFFFFFF70FFFFFFFFFFF0000000000FFFFFFFFFFF70FFFFFFFFFFF000000000 0FFFFFFFFFFF70FFFFFFFFFFF0000000000FFFFFFFFFFF70FFFFFFFFFFF0000000000FFFFF FFFFFF70FFFFFFFFFFF0000000000FFFFFFFFFFF7010000000008000000000010000000000 40100000000080000000000100000000004010000000008000000000010000000000401000 00000080000000000100000000004010000000008000000000010000000000401847570000 80000000000100000000004018515201008000000000010000000000401877220000800000 00000100000000004018615201008000000000010000000000401847520000800000000001 00000000004010000000008000000000010000000000401000000000800000000001000000 00004010000000008000000000010000000000401000000000800000000001000000000040 10000000008000000000010000000000409FFFFFF100800000000001000000EFFF409FFFFF F100800000000001000000EFFF40910C108100800000000001000000E00C40900C10010080 0000000001000000600840100C100000800000000001000000600040100C10000080000000 0001000000600040100C100000800000000001000000600040100C10000080000000000100 0000600040100C100000800000000001000000600040100C10000080000000000100000060 0040100C100000800000000001000000600040100C100000800000000001000000E1004010 0C100000800000000001000000EFFF40100C100000800000000001000000000F40100C1000 00800000000001000000000C40100C1F7EF180000000000108F9F1000C40100C1366B18000 000000010C81F0000C40100C134231800000000001048160000C40100C1300308000000000 010C8160000C40100C1F303080000000000108F160000C40100C13003080000000000100A1 60200C40100C13403080000000000100B160600E40100C1360308FFFFFFFFFF10891F0EFFF 40100E3F78700000000000000CC9F1EFFF401000000000000000000000000000000040FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF70 XFIG Code TFIG Code ADDP + 'PNTS' STO+ PICT { # 5d # 8d } PNTS 1 GROB REPL ; FLST { { # 17802707620356d # 279242096899d # 35399189680388d # 279242096901d } { # 279242096645d # 17802707620357d # 279242097155d # 17806986854917d } { # 206226604548d # 17944425808389d # 279242097157d # 17802707620355d } { # 279241044483d # 17802708664837d } { # 210504794628d # 35399188627717d } { # 52926935483141d # 279242097412d } { # 206226600196d } } FULL + # 72356802986000645d # 778d DUP2 # 0d + TFIG ROT ROT # 5d + TFIG + # 0d > ; MKSCR + PICT PURGE PICT { # 0d # 0d } IPIC REPL { # 0d # 0d } PVIEW ; MSIDE + CD + DUP2 # 0d XFIG CD + DUP2 # 0d + TFIG IF # 0d THEN CD - END DUP2 # 63903d XFIG ; ; RK2 + IF KEY THEN IF { 72 74 92 63 34 35 33 32 36 } SWAP POS DUP THEN { + # 1d NEG MSIDE ; + # 1d MSIDE ; + 1 SF ; ROTF + DO UNTIL KEY END DROP ; + 1 'DONE' STO ; + OFF ; + 7 FC?C IF THEN 7 SF SHNP END ; + ; } SWAP GET EVAL ELSE DROP END END a WAIT ; OB1 6 OB2 1 P2 + 100 ADDP 1 ADDL DUP # 3840d AND SRB 4 * 3 + # 43d SWAP 2 LIST PICT SWAP { # 83d # 8d } SUB PICT { # 43d # 12d } ROT REPL ; PACK + # 3338d DO TLIN IF # 4d == THEN P2 ELSE # 256d - END UNTIL DUP # 512d < END DROP ; ROTF + DUP2 # 0d XFIG FLST OB1 GET OB2 1 - IF DUP 0 THEN DROP DUP SIZE END DUP OS2 + GET SWAP DUP2 # 0d + TFIG IF # 0d == THEN ROT DROP OS2 'OB2' STO ELSE SWAP DROP END DUP2 # 63903d XFIG ; ; TLIN + DUP # 72356802986000645d SWAP DUP2 # 0d + TFIG ROT ROT # 5d + TFIG + ; PPAR { (-6.5,-3.1) (6.5,3.2) X 0 (0,0) FUNCTION Y } SCORES { { "40" "YO" "0" } { "0" "" "0" } { "0" "" "0" } { "0" "" "0" } { "0" "" "0" } } PNTS 40 SC2 { { "0" "" "0" } { "0" "" "0" } { "0" "" "0" } { "0" "" "0" } { "0" "" "0" } } DONE 1 END --------------"that's all , folkes"---------------------