[comp.sys.handhelds] Tetris2.1 update for HP48

akcs.falco@hpcvbbs.UUCP (Andrey Dolgachev) (03/15/91)

O.K., the last posting of Tetris2 had a problem with one or both of the
PIC files.  Therefore, I have posted an update and bug fix.  From now on,
I will simply ASC the GROB's, that should make it easier, and so I ASC'd
the two GROB"s and they're in this post.  The other thing I did is to
make it possible for the user to choose which kinds of dissolves are
wanted.  The variable DLST contains a list of 3 numbers.  The first
number refers to the beginning, the second to the high-score display, and
the last to the return to the stack.  At each of these stages, 3 things
are possible.  If a 0 is in that position in the list, then no dissolve
will happen, it will instantly goes to the next screen.  If a 1 is in
that position, then a bit-wise dissolve takes place.  If a 2 is in that
position, then a tiling effect dissolve will take place.  The default is
{1 1 1} and the variable DLST is the first in the second row of the
TETRIS2 VAR menu (after you press SETUP).  O.K., follow these steps:
  1)  Download the following to your computer.
  2)  Now do either the a or the b steps, with a being easeir (for me)
  3a) Paste the files from the following into your previous TETRIS2
posting.  Only copy the actual programs from the following directory, and
put them between any of the other files.
  4a) Erase the programs which have the same names as the ones that you
just pasted into TETRIS2, the old ones that is.
  5a) Download into your 48, press SETUP and voila.
  3b) Erase the two files PIC1 and PIC2 from your previous posting of
Tetris2.
  4b) Download both postings of Tetris2, this one and the one you just
edited.
  5b) Replace the corresponding programs from the old postings with the
ones from the new one and also put the completely new programs into the
Tetris2 directory.  Press SETUP and voila.

O.K.  That's it, I checked everything and I'll check the actual posting
after I finished.  Hpefully, this will all come together.  Now, an
additional thought.  SETUP strips, or takes away the << and >> from each
program which has its name in TLIST.  The stripping saves 5 bytes per
program, which is nice, but it also means that you cannot edit the
program on the 48.  You can send it to your computer in text mode, but
you can not reveive a stripped program in text mode, unless you put the
<< and >>'s in front and in back of each program.  If you do not want the
progrmas to be stripped, simply take whatever programs you don't want
stripped out of the TLIST listk, making sure that you at least leave the
{ } in the variable.  SETUP just strips the TLIST programs , ASC->'s the
ML and grobs, and orders everything.  O.K., that's it, please give me
feedback on the progra, experiment with the diff. dissolving screens, and
tell me what you would like to see on a future version of Tetris.  BTW,
call the file TETRIS2, and refer to this version as Tetris2.1.

--------------------cut here-----------------
%%HP: T(3)A(D)F(.);
DIR
  SETUP
    \<<
      IF XFIG ASC\->
DEPTH 2 ==
      THEN
"PLEASE PUT ASC\-> IN
OR ABOVE THIS DIR."
1 DISP INFLP DROP2
      ELSE TLIST 1
1 TLIST SIZE
        START GETI
DUP RCL STRIP SWAP
STO
        NEXT DROP2
'XFIG' STO TFIG
ASC\-> 'TFIG' STO
DISS ASC\-> 'DISS'
STO PIC1 ASC\->
'PIC1' STO PIC2
ASC\-> 'PIC2' STO {
start RESU ABOUT
HELP HIGH Erase
DLST XFIG TFIG DISS
PIC1 PIC2 } ORDER {
TLIST STRIP SETUP }
PURGE
      END
    \>>
  TLIST { start
RESU ABOUT HELP
HIGH DRHI DISER
Erase TETRIS INFLP
delay HI DRSC FIN
CHHS SHNP ADDL ADDP
FULL MKSCR MSIDE
RK2 P2 PACK ROTF
TLIN }
  start
    \<< LCD\-> RCLF
SWAP DEPTH 'L' STO
      IFERR TETRIS
      THEN
      END "" 3 DISP
DEPTH L - DROPN 3
DISER STOF "" 'SAV'
STO
    \>>
  DLST { 1 1 1 }
  DISER
    \<< DLST SWAP GET
      IF DUP 0 ==
      THEN DROP
ERASE PICT SWAP {
# 0h # 0h } SWAP
REPL
      ELSE 1 - SWAP
DISS
      END
    \>>
  PIC1
"E1B20FF0008100022000FFFFFF3000FFFFFF3000308300300010830020000083
0000000083000000008300000000830000000083000000008300000000830000
0000830000000083000000008300000000830000000083EFCF3000836CC63000
8368462000836006000083E706000083600600008368060000836C060000C7EF
0F00D0FE"
  PIC2
"E1B20FF000810002200000008FFF3000008FFF30000083003000008100200000
8100000000810000000081000000008100000000810000000081000000008100
00000087000000008FFF300000000C300000000030E7E700003036C300003016
810000303681000030E7810000308681800030C68181083066C38FFF3037E78F
FF3002D5"
  HIGH
    \<< LCD\-> DUP PICT
SWAP { # 0h # 0h }
SWAP REPL { # 0h
# 0h } PVIEW DRHI 3
DISER
    \>>
  DRHI
    \<< -.8 1.9 -6
-2.5 4.5 \-> N Y X1
X2 X3
      \<< # 83h # 40h
BLANK "HIGH SCORES"
3 \->GROB (-3.2,3.1)
SWAP REPL "SCORE"
-6.3 Y DRSC "NAME"
-1.1 Y DRSC "LINES"
3.5 Y DRSC 1 5 -.2
'Y' STO+
        FOR I N 'Y'
STO+ SCORES I GET
LIST\-> DROP 4 ROLL
SWAP X3 Y DRSC SWAP
X2 Y DRSC SWAP X1 Y
DRSC
        NEXT 2
DISER INFLP
      \>>
    \>>
  MKSCR
    \<< DUP ERASE
PICT { # 5Bh # 26h
} PIC2 REPL
(-6.5,3.2)
(6.5,-3.1) BOX
(-2.2,3.2)
(1.9,-2.8) BOX
(-6.5,1.8)
(6.5,1.6) BOX 1.5
1.1
      FOR I -6.5 I
R\->C 6.5 I .1 - R\->C
BOX -.2
      STEP PICT {
# 3h # 26h } PIC1
REPL PICT { # 2Ch
# 0h } # 28h # 3Ch
BLANK REPL PICT {
# 5Fh # 2h }
"LINES :" 1 \->GROB
REPL PICT { # 2h
# 2h } "SCORE :" 1
\->GROB REPL PICT {
# 7h # 1Ch }
"NEXT :" 1 \->GROB
REPL PICT RCL SWAP
PICT SWAP { # 0h
# 0h } SWAP REPL {
# 0h # 0h } PVIEW 1
DISER
    \>>
END

akcs.falco@hpcvbbs.UUCP (Andrey Dolgachev) (03/15/91)

O.K., I checked the above, and d/l it into my comp and HP, and it works
fine.  Have fun all,
     ---Falco

ervin@pinbot.enet.dec.com (Joseph James Ervin) (03/15/91)

Andrey,

Thank you for the work you have done on TETRIS.  This game is one of the
truely fun games for the HP48SX.

Also, I think your idea regarding using the DLIST for selecting the type
of
screen dissolves was a good one.

However, I must respond to your recent TETRIS2.1 UPDATE post in C.S.H.

Basically, I think the code in your post is good, and the right thing to
do, but I think the format you chose to distribute this code (using an
update procedure in which the user has to follow several steps) is prone
to
user-error, and will probably lead to more user "download" confusion
and
problems in general.
 
To be honest, the first time I read through your post, I had no idea
what I
was supposed to do.  It wasn't until the third reading that it started
to
make sense.  For example:

>  1)  Download the following to your computer.
>  2)  Now do either the a or the b steps, with a being easeir (for me)

Requiring the user to choose between multiple sets of instructions is
dangerous, especially when they will be deleting sections of code.  


>  3a) Paste the files from the following into your previous TETRIS2
> posting.  Only copy the actual programs from the following directory, 
> and put them between any of the other files.
>  4a) Erase the programs which have the same names as the ones that 
> you just pasted into TETRIS2, the old ones that is.

This requires entirely too much work on the part of the casual user in
my
opinion.  The opportunities for errors here are intense.   Also, once
you
require the user to edit the source listing, you have lost control over
the
code.  Anything is possible at this point.  


>  3b) Erase the two files PIC1 and PIC2 from your previous posting of
>Tetris2.
>  4b) Download both postings of Tetris2, this one and the one you just
>edited.
>  5b) Replace the corresponding programs from the old postings with the
>ones from the new one and also put the completely new programs into
>the
>Tetris2 directory.  Press SETUP and voila.

This also requires the user to edit the sources, and in my mind is also
a
poor solution.


>BTW, call the file TETRIS2, and refer to this version as Tetris2.1.

When you say "call the file TETRIS2", do you mean the filename on my PC,
or
on the HP48?  If you mean the filename on the HP48, then I'm confused
since
you are only supplying a few of the routines in this posting.  What am
I
supposed to name "TETRIS2" ??    

When you say "refer to this version as Tetris2.1", I'm not sure what you
mean.  The whole reason for appending a version number to a program's
filename, like TETRIS2, is so you can identify the version.  If you
distribute the update, and tell people to still store it as TETRIS2, but
then tell them that the version is actually TETRIS2.1, they are going to
be
very confused.  I'm confused already. 
 

Please do not misunderstand.  I appreciate you're effort, but it pains
me
to think of how many users will never get version 2.1 of tetris running
because of the difficulty of doing this update procedure.  

In my opinion, when you change the code, the "best" thing to do is to
simply post the new version.  I still do not understand why you do not
simply post the ASC version of the whole program.  Is there some reason
why
this is not possible?  

There has been a tremendous amount of confusion in this conference
regarding which version of TETRIS is the most recent, and how to get 
this version.  I believe that your update post is only going to add to 
that confusion.  I pity latecomers to this conference who will be 
trying to get the latest version of TETRIS in the coming weeks.  

Please put an end to this confusion by reposting version 2.1 in ASC
format, and please clearly label the post as being the official post of
version 2.1 of TETRIS.  


Humbly yours,

>>>Joe Ervin 

akcs.falco@hpcvbbs.UUCP (Andrey Dolgachev) (03/16/91)

Thanks for your opinion Joe, you are correct, the update is not the best
thing to do, but I didn't have the time to post the whole thing.  I will
post the whole Tetris2.1 again as soon as possible.  I'll try for tonite,
but I doubt it, otherwise, I can't post it till late Saturday eve. 
That's why I decided that I should put the update up as soon as possible.

As for the complex procedure, your're right it sucks, but again, I don't
have the time to do anything else yet.  The connection I had was really
bad and as it is I had to split the Update into 4 r 5 sections to post it
up, becasue the board kept on suddenly stopping receiving the file,
forcing me to start again.

As for the version and naming Tetris, Tetris2, I call it Tetris2 on my
48, becasue I don't want to have a large filename, and I don't want it to
be confused with Etetris2.0 or tetris2.1 or Tetris2.2 which is what the
computer or calc's do if you already have that filename.  If you want to
live with having your Tetris game being called Tetris2.1.0 or whatever,
that's obviously your choice.    However, the about command contains the
real version number.  The user can always change the name of the program,
and that's not a good way to keep track of the version number on a 48. 
The reason I called it Tetris2 is because there has to be a difference
between the names of the smalltetris and the large Tetris.  The version
number of 2.1 is the one that should always be used when you refer to
anything about the program.  When I post the Tetris2.1 again, I will be
sure to clarify what version it is.

The reason I did not ASC the entire file is because it would then be over
13k in length which is getting pretty large.  Also, ASC'ing and UnAsc'ing
a 13k file takes a lot of time and memory.  It also takes longer to d/l 
and u/l and to transfer to your HP.  However, I might do it anyways,
since it would help in the corruption problems.

Anyways, thanks for your input JOe, I prefer it over people complaining
about my post to themselves and not d/ling it.  I will post the final
Tetris2.1 version as soon as I can.
    ---Falco

ruhtra@turing.toronto.edu (Arthur Tateishi) (03/17/91)

In article <959@sousa.enet.dec.com> ervin@pinbot.enet.dec.com (Joseph James Ervin) writes:
>Andrey,
>
>Thank you for the work you have done on TETRIS.  This game is one of the
>truely fun games for the HP48SX.
Very true.

>Basically, I think the code in your post is good, and the right thing to
>do, but I think the format you chose to distribute this code (using an
>update procedure in which the user has to follow several steps) is prone
>to user-error, and will probably lead to more user "download" confusion
>and problems in general.
This is true. Patch procedures are always risky.

>In my opinion, when you change the code, the "best" thing to do is to
>simply post the new version.  I still do not understand why you do not
>simply post the ASC version of the whole program.  Is there some reason
>why this is not possible?  

I'll give you a very good reason why it is inadvisable to post as one
big ASC version. Size. If I didn't have my CMT card, I would not be
able to download it. Personally, I'd rather see a uuencoded binary
version. Before I got my RAM card, I had about 6-7k free usually.
Tetris is now about 8700 bytes. I guess people in those situations
should stick with smtetris anyway, but would you be able to resist
all the accolades about DISS within TETRIS?

The thing I could never understand was that removing linefeeds
from big GROBs was rarely mentioned. Making these ASC format
will help things a lot.

-- 
Red Alert.
    -- Q, "Deja Q", stardate 43539.1
Arthur Tateishi                 g9ruhtra@zero.cdf.utoronto.edu

frechett@spot.Colorado.EDU (-=Runaway Daemon=-) (03/17/91)

Everyone has no mentioned that puting tetris in ASC format makes it 
big like 14K but nobody has mentioned the real reason why that is a pain 
in the ass for people without extra memory.  
Here is a question for you.. 
If I have 20K available, could I download a 14K asc encoded file?  

Nope.  When it tries to download it apears to make a full copy of ascii files
so that you literally need twice the memory.  To download tetris you would need
28K available, which it is very doubtful that many people have.  Of course with
some extra memory the problem doesn't happen.. I haven't even touched my
second 128K card yet.. :)

	ian

-=Runaway Daemon=-

akcs.falco@hpcvbbs.UUCP (Andrey Dolgachev) (03/18/91)

Exactly, you do need 28K available to d/l Tetris.  I did ASC it anyways
and you can d/l it if (the big if) you have a calc with that much memory.
 That means, if you don't have a RAM-card, time to press those three keys
and d/l ASC and TETRIS.  However, once you've done that, and after you
restored your memory, you can u/l and d.l in binary w/o a problem. 
Somebody also posted the uuencoded version of my Tetris, so that is also
a alternative.  If people post post problems with not being able to d/l
TETRIS because of memory problems, I might be convinced to do a non ASC
version again, though it is a big pain, especially with this board.  And
I'll see if I can't try putting it up on a ftp.
    ---Falco