Jump to content

orion1052003

Members
  • Content Count

    348
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by orion1052003


  1. I tried making another game where a plane constantly goes to the right, wraps around the screen, and the player drops a bomb on a red target that randomly covers one of the buildings on the bottom of the screen. The target is supposed to stay put until hit by the bomb, then pop up again on the same row somewhere, and maybe stop after a counter reaches 25 or whatever.

     

     

    How can I make the red target area(DOT) stay on the bottom line of the screen where the buildings are?(Row 24, Dot Row 185)

     

    I was thinking slightly changing the buildings string every time the plane reaches the rightmost of the screen to give the effect of moving over land. Flipping the string back and forth between 2 strings made up of the same characters in different positions. What kind of statement can I use to say whenever the plane reaches column 32, flip the building string?

     

    How can I make the bomb disappear whenever it hits row 24?

     

    50 !***************
    60 !* CITY BOMBER *
    70 !***************
    80 !11-01-11
    90 !NOVEMBER 1, 2011.
    95 CALL TITLE
    100 CALL CLEAR :: CALL SCREEN(
    110 CALL COLOR(9,5,1,8,8,1,12,7,1) :: DR=89
    120 N0$="3C2424242424243C"
    130 N1$="1818181818181818"
    140 N2$="3C04043C3C20203C"
    150 N3$="3C04043C3C04043C"
    160 N4$="2424243C04040404"
    170 N5$="3C20203C3C04043C"
    180 N6$="202020203C34343C"
    190 N7$="3C04040404040404"
    192 N8$="3C24243C3C24243C"
    194 N9$="3C24343C04040404"
    200 B1$="00007C7CFEFEFFFF"
    210 B2$="00E0E0E0E0FFFFFF"
    220 B3$="003C3C3C3CFFFFFF"
    230 B4$="00F8F8FBFBFFFFFF"
    240 B5$="007777777777FFFF"
    250 B6$="78787E7E7FFFFFFF"
    260 B7$="10387C7C7C7CFFFF"
    270 B8$="10545456DFFFFFFF"
    280 BR$="88C4FF1F0408000000000000000000000000C0F0000000000000000000000000"
    290 BL$="01023FFF0201000000000000000000001030F080000000000000000000000000"
    291 BO$="3838FE3838383810"!BOMB
    292 C1$="024827B41E532F5FFFFF7F3F1B0F030080A0F8F0F4FCECF0FEFAFEFDEAC28010"
    293 C2$="153F7FFFFFFFFF7F7F7C7EFF3E7C1A084862FCBCFAE492400000000000000000"
    294 S$="0000001818000000"!STAR
    295 D$="0000000000000F0F0F0F000000000000000000000000F0F0F0F0000000000000"
    300 CALL CHAR(96,B1$,97,B2$,98,B3$,99,B4$,100,B5$,101,B6$,102,B7$,103,B8$)!BUILDINGS
    310 CALL CHAR(88,S$,112,BR$,104,C1$,108,C2$,136,BO$,48,N0$,49,N1$,50,N2$,51,N3$,52,N4$,53,N5$,54,N6$,55,N7$,56,N8$,57,N9$,120,D$)
    320 !RINT 0;1;2;3;4;5;6;7;8;9
    330 !OTO 330
    340 FOR I=1 TO 30 :: R=INT(RND*24)+1 :: C=INT(RND*32)+1 :: CALL HCHAR(R,C,88) :: NEXT I!SCATTERSTARS
    385 !DRAW BUILDINGS
    390 CALL HCHAR(24,1,97,2) :: CALL HCHAR(24,31,103,2)
    400 BL1$=CHR$(96)&CHR$(97)&CHR$(98)&CHR$(99)&CHR$(100)&CHR$(101)&CHR$(102)&CHR$(103)
    410 BL2$=CHR$(102)&CHR$(99)&CHR$(96)&CHR$(103)&CHR$(101)&CHR$(98)&CHR$(100)&CHR$(97)
    420 BL3$=CHR$(97)&CHR$(101)&CHR$(98)&CHR$(102)&CHR$(96)&CHR$(100)&CHR$(99)&CHR$(103)
    430 BL4$=CHR$(99)&CHR$(96)&CHR$(98)&CHR$(97)&CHR$(102)&CHR$(100)
    440 DISPLAY AT(24,1):BL1$ :: DISPLAY AT(24,9):BL2$ :: DISPLAY AT(24,17):BL3$ :: DISPLAY AT(24,23):BL4$
    490 CALL MAGNIFY(4)
    495 CALL SPRITE(#1,104,16,1,1,0,1)!CLOUD1
    500 CALL SPRITE(#2,112,5,DR,1,0,10)!BOMBER RIGHT
    510 CALL SPRITE(#3,136,2,193,1)!BOMB
    515 CALL SPRITE(#4,120,7,185,1)!DOT
    520 CALL SPRITE(#8,108,16,17,121,0,1)!CLOUD2
    700 !MAIN LOOP
    710 CALL JOYST(1,X,Y) :: X=-4 :: CALL MOTION(#2,-Y*2.5,-X*2.5)!: CALL SOUND(100,-5,7)
    720 CALL KEY(1,K,S) :: IF K=18 THEN CALL BOMB(DR)
    730 CALL KEY(1,K,S) :: IF K=3 THEN CALL NIGHT
    750 IF BR>177 THEN CALL LOCATE(#3,193,1) :: CALL MOTION(#3,0,0)
    770 CALL DOT
    1000 GOTO 710
    1100 SUB BOMB(DR)
    1105 CALL POSITION(#2,DR,DC)
    1110 CALL LOCATE(#3,DR+5,DC) :: CALL MOTION(#3,20,0) :: CALL POSITION(#3,BR,BC) :: IF BR>177 THEN CALL LOCATE(#3,193,1) :: CALL MOTION(#3,0,0)
    1120 SUBEND
    1130 SUB NIGHT
    1135 CALL SCREEN(2) :: CALL LOCATE(#1,193,1) :: CALL LOCATE(#8,193,1)!MOVECLOUDSOFFSCREEN
    1140 CALL COLOR(8,16,1)!STARSCOMEOUT
    1150 SUBEND
    1155 SUB DOT
    1157 CALL COINC(#3,#4,10,C) :: IF C THEN 1160 ELSE 1190
    1160 RANDOMIZE :: A=INT(RND*185) :: B=INT(RND*255) :: CALL LOCATE(#4,A+1,B+1)
    1170 RANDOMIZE :: CALL PEEK(-31808,A,B) :: CALL LOCATE(#4,A+1,B+1)
    1175 !ALL COINC(#3,#4,10,C):: IF C THEN CALL SOUND(400,-2,5):: CALL LOCATE(#4,193,1)
    1190 SUBEND
    1200 SUB TITLE
    1205 CALL CHARSET :: CALL CLEAR :: CALL SCREEN(2) :: CALL COLOR(9,5,2,10,5,2,11,14,2)
    1210 CALL CHAR(96,RPT$("F",16)) :: CALL CHAR(97,"81C3E7E7E7E7E7FF") :: CALL CHAR(98,"FF7F3F1F0F070301") :: CALL CHAR(112,RPT$("F",16))
    1211 CALL CHAR(99,"FFFEFCF8F0E0C080") :: CALL CHAR(100,"FFFFC3C3C3C3FFFF") :: CALL CHAR(101,"7E3C181818181800")
    1212 CALL CHAR(102,"FFFEC08080C0FEFF") :: CALL CHAR(103,"000000FFFF000000") :: CALL CHAR(104,"000000F0F0000000")
    1214 CALL CHAR(105,"80C0E0F0F0F8F8F8")
    1220 CALL HCHAR(2,2,96,30)
    1230 CALL HCHAR(23,2,96,30)
    1240 CALL VCHAR(2,2,96,24)
    1250 CALL VCHAR(2,31,96,23)
    1260 CALL HCHAR(5,7,96,3) :: CALL HCHAR(7,7,96,3) :: CALL HCHAR(5,11,96,3) :: CALL HCHAR(7,11,96,3)
    1264 CALL VCHAR(6,20,96,2)
    1265 CALL HCHAR(6,7,96) :: CALL HCHAR(6,12,96) :: CALL VCHAR(5,16,96,3)
    1270 CALL HCHAR(5,15,96,3) :: CALL HCHAR(5,19,96) :: CALL HCHAR(5,21,96)
    1275 CALL VCHAR(10,7,96,3) :: CALL HCHAR(10,12,96) :: CALL HCHAR(12,12,96)
    1277 CALL HCHAR(10,9,96) :: CALL HCHAR(11,9,102) :: CALL HCHAR(12,9,96)
    1280 CALL VCHAR(10,11,96,3) :: CALL VCHAR(10,13,96,3) :: CALL VCHAR(10,15,96,3) :: CALL VCHAR(10,17,96,3)
    1290 CALL VCHAR(10,19,96,3) :: CALL VCHAR(10,21,96,3) :: CALL VCHAR(10,23,96,3) :: CALL HCHAR(10,24,96,2)
    1295 CALL HCHAR(12,24,96,2) :: CALL VCHAR(10,27,96,3)
    1300 CALL VCHAR(16,4,112,7) :: CALL VCHAR(16,5,112,7) :: CALL VCHAR(16,6,112,7) :: CALL VCHAR(19,7,112,4)
    1310 CALL HCHAR(17,11,112,4) :: CALL HCHAR(18,10,112,6) :: CALL HCHAR(19,10,112,6) :: CALL HCHAR(20,10,112,6)
    1320 CALL HCHAR(21,10,112,6) :: CALL HCHAR(22,10,112,6) :: CALL VCHAR(19,19,112,4) :: CALL VCHAR(15,20,112,
    1330 CALL VCHAR(15,21,112, :: CALL VCHAR(15,22,112, :: CALL VCHAR(15,24,112, :: CALL VCHAR(21,25,112,2) :: CALL VCHAR(18,28,112,5)
    1340 CALL VCHAR(16,29,112,7) :: CALL VCHAR(15,30,112,
    1350 CALL HCHAR(11,8,96) :: CALL HCHAR(11,16,96) :: CALL HCHAR(10,21,96) :: CALL HCHAR(11,20,96) :: CALL HCHAR(12,21,96)
    1360 CALL HCHAR(10,29,96) :: CALL HCHAR(11,28,96) :: CALL HCHAR(5,20,97) :: CALL HCHAR(6,19,98) :: CALL HCHAR(6,21,99)
    1370 CALL HCHAR(10,8,100) :: CALL HCHAR(12,8,100) :: CALL HCHAR(10,16,97) :: CALL HCHAR(12,16,101) :: CALL HCHAR(10,20,100)
    1380 CALL HCHAR(12,20,100) :: CALL HCHAR(11,21,102) :: CALL HCHAR(11,24,103) :: CALL HCHAR(11,25,104)
    1390 CALL HCHAR(10,28,100) :: CALL HCHAR(11,29,102) :: CALL HCHAR(12,29,98)
    1400 CALL HCHAR(12,30,105)
    1600 INPUT Z$
    1610 SUBEND
    

     

    I'd prefer if you post these questions to the forum. Gives everyone a chance to chip in if they have time or other ideas, learn something and general program, design and game activity.

     

     

    orion1052003, on Mon Nov 7, 2011 11:25 PM, said:

     

    How can I make the red target area(DOT) stay on the bottom line of the screen where the buildings are?(Row 24, Dot Row 185)

    Remove line 1170, and change line 1160 to

     

     

    1160 RANDOMIZE::A=175::B=INT(RND*255)::CALL LOCATE(#4,A+1,B+1)

     

    orion1052003, on Mon Nov 7, 2011 11:25 PM, said:

     

    I was thinking slightly changing the buildings string every time the plane reaches the rightmost of the screen to give the effect of moving over land. Flipping the string back and forth between 2 strings made up of the same characters in different positions. What kind of statement can I use to say whenever the plane reaches column 32, flip the building string?

    Using CALL POSITION will tell you the position of the plane. Using the IF statement will make the flip go in action. Clever use of the function SEG$ may come in handy.

     

     

    orion1052003, on Mon Nov 7, 2011 11:25 PM, said:

     

    How can I make the bomb disappear whenever it hits row 24?

     

    Same as above. CALL POSITION and IF.

     

    :)

     

    How would you feel about a couple more questions, then I copy/paste this stuff to the public forum and any further questions posted there? My friend is on the group and I wanted to surprise him with a new program that had made a bit of progress as a surprise.

     

    If that's cool, what is the best way to handle coinc? It seems kinda shaky when I run the program, for example if I hit the target the bomb will disappear. but if I miss it will continue on its journey up and down and wrapping down the screen again. I put the coinc before the boundary check, and I may be asking for trouble by having the boundary, coincing, bottom of the screen all on the same bottom row.

     

    If I can get the "building printing" animation working, but it prints too slow, is there any way to speed things up? I've been looking at Graphicomp. The game seems to sort of work, but not smoothy or "classy".

    50 !***************
    60 !* CITY BOMBER *
    70 !***************
    80 !11-01-11
    90 !NOVEMBER 1, 2011.
    95 CALL TITLE
    100 CALL CLEAR :: CALL SCREEN(
    110 CALL COLOR(9,5,1,8,8,1,12,7,1) :: DR=89
    120 N0$="3C2424242424243C"
    130 N1$="1818181818181818"
    140 N2$="3C04043C3C20203C"
    150 N3$="3C04043C3C04043C"
    160 N4$="2424243C04040404"
    170 N5$="3C20203C3C04043C"
    180 N6$="202020203C34343C"
    190 N7$="3C04040404040404"
    192 N8$="3C24243C3C24243C"
    194 N9$="3C24343C04040404"
    200 B1$="00007C7CFEFEFFFF"
    210 B2$="00E0E0E0E0FFFFFF"
    220 B3$="003C3C3C3CFFFFFF"
    230 B4$="00F8F8FBFBFFFFFF"
    240 B5$="007777777777FFFF"
    250 B6$="78787E7E7FFFFFFF"
    260 B7$="10387C7C7C7CFFFF"
    270 B8$="10545456DFFFFFFF"
    280 BR$="88C4FF1F0408000000000000000000000000C0F0000000000000000000000000"
    290 BL$="01023FFF0201000000000000000000001030F080000000000000000000000000"
    291 BO$="3838FE3838383810"!BOMB
    292 C1$="024827B41E532F5FFFFF7F3F1B0F030080A0F8F0F4FCECF0FEFAFEFDEAC28010"
    293 C2$="153F7FFFFFFFFF7F7F7C7EFF3E7C1A084862FCBCFAE492400000000000000000"
    294 S$="0000001818000000"!STAR
    295 D$="0000000000000F0F0F0F000000000000000000000000F0F0F0F0000000000000"
    300 CALL CHAR(96,B1$,97,B2$,98,B3$,99,B4$,100,B5$,101,B6$,102,B7$,103,B8$)!BUILDINGS
    310 CALL CHAR(88,S$,112,BR$,104,C1$,108,C2$,136,BO$,48,N0$,49,N1$,50,N2$,51,N3$,52,N4$,53,N5$,54,N6$,55,N7$,56,N8$,57,N9$,120,D$)
    320 !RINT 0;1;2;3;4;5;6;7;8;9
    330 !OTO 330
    340 FOR I=1 TO 30 :: R=INT(RND*24)+1 :: C=INT(RND*32)+1 :: CALL HCHAR(R,C,88) :: NEXT I!SCATTERSTARS
    385 !DRAW BUILDINGS
    390 CALL HCHAR(24,1,97,2) :: CALL HCHAR(24,31,103,2)
    400 BL1$=CHR$(96)&CHR$(97)&CHR$(98)&CHR$(99)&CHR$(100)&CHR$(101)&CHR$(102)&CHR$(103)
    410 BL2$=CHR$(102)&CHR$(99)&CHR$(96)&CHR$(103)&CHR$(101)&CHR$(98)&CHR$(100)&CHR$(97)
    420 BL3$=CHR$(97)&CHR$(101)&CHR$(98)&CHR$(102)&CHR$(96)&CHR$(100)&CHR$(99)&CHR$(103)
    430 BL4$=CHR$(99)&CHR$(96)&CHR$(98)&CHR$(97)&CHR$(102)&CHR$(100)
    440 DISPLAY AT(24,1):BL1$ :: DISPLAY AT(24,9):BL2$ :: DISPLAY AT(24,17):BL3$ :: DISPLAY AT(24,23):BL4$
    490 CALL MAGNIFY(4)
    495 CALL SPRITE(#1,104,16,1,1,0,1)!CLOUD1
    500 CALL SPRITE(#2,112,5,DR,1,0,10)!BOMBER RIGHT
    510 CALL SPRITE(#3,136,2,193,1)!BOMB
    515 CALL SPRITE(#4,120,7,185,1)!DOT
    520 CALL SPRITE(#8,108,16,17,121,0,1)!CLOUD2
    700 !MAIN LOOP
    710 CALL JOYST(1,X,Y) :: X=-4 :: CALL MOTION(#2,-Y*2.5,-X*2.5)!: CALL SOUND(100,-5,7)
    720 CALL KEY(1,K,S) :: IF K=18 THEN CALL BOMB(DR)
    730 CALL KEY(1,K,S) :: IF K=3 THEN CALL NIGHT
    760 CALL POSITION(#3,DR,DC) :: DISPLAY AT(20,10):"DR= ";DR;"DC= ";DC
    765 !F DR>165 THEN CALL LOCATE(#3,193,1):: CALL MOTION(#3,0,0)
    770 CALL DOT(D)
    780 DISPLAY AT(1,25):"HITS=";D
    1000 GOTO 710
    1100 SUB BOMB(DR)
    1105 CALL POSITION(#2,DR,DC)
    1110 CALL LOCATE(#3,DR+5,DC) :: CALL MOTION(#3,20,0) :: CALL POSITION(#3,DR,DC) :: IF DR>165 THEN CALL LOCATE(#3,193,1) :: CALL MOTION(#3,0,0)
    1120 SUBEND
    1130 SUB NIGHT
    1135 CALL SCREEN(2) :: CALL LOCATE(#1,193,1) :: CALL LOCATE(#8,193,1)!MOVECLOUDSOFFSCREEN
    1140 CALL COLOR(8,16,1)!STARSCOMEOUT
    1150 SUBEND
    1155 SUB DOT(D)
    1157 CALL COINC(#3,#4,10,C) :: IF C THEN 1160 ELSE 1190
    1160 D=D+1 :: RANDOMIZE :: A=175 :: B=INT(RND*255) :: CALL LOCATE(#4,A+1,B+1)
    1170 CALL POSITION(#3,DR,DC) :: IF DR>165 THEN CALL LOCATE(#3,193,1) :: CALL MOTION(#3,0,0)
    1175 !ALL COINC(#3,#4,10,C):: IF C THEN CALL SOUND(400,-2,5):: CALL LOCATE(#4,193,1)
    1180 IF D=10 THEN CALL NIGHT
    1190 SUBEND
    1200 SUB TITLE
    1205 CALL CHARSET :: CALL CLEAR :: CALL SCREEN(2) :: CALL COLOR(9,5,2,10,5,2,11,14,2)
    1210 CALL CHAR(96,RPT$("F",16)) :: CALL CHAR(97,"81C3E7E7E7E7E7FF") :: CALL CHAR(98,"FF7F3F1F0F070301") :: CALL CHAR(112,RPT$("F",16))
    1211 CALL CHAR(99,"FFFEFCF8F0E0C080") :: CALL CHAR(100,"FFFFC3C3C3C3FFFF") :: CALL CHAR(101,"7E3C181818181800")
    1212 CALL CHAR(102,"FFFEC08080C0FEFF") :: CALL CHAR(103,"000000FFFF000000") :: CALL CHAR(104,"000000F0F0000000")
    1214 CALL CHAR(105,"80C0E0F0F0F8F8F8")
    1220 CALL HCHAR(2,2,96,30)
    1230 CALL HCHAR(23,2,96,30)
    1240 CALL VCHAR(2,2,96,24)
    1250 CALL VCHAR(2,31,96,23)
    1260 CALL HCHAR(5,7,96,3) :: CALL HCHAR(7,7,96,3) :: CALL HCHAR(5,11,96,3) :: CALL HCHAR(7,11,96,3)
    1264 CALL VCHAR(6,20,96,2)
    1265 CALL HCHAR(6,7,96) :: CALL HCHAR(6,12,96) :: CALL VCHAR(5,16,96,3)
    1270 CALL HCHAR(5,15,96,3) :: CALL HCHAR(5,19,96) :: CALL HCHAR(5,21,96)
    1275 CALL VCHAR(10,7,96,3) :: CALL HCHAR(10,12,96) :: CALL HCHAR(12,12,96)
    1277 CALL HCHAR(10,9,96) :: CALL HCHAR(11,9,102) :: CALL HCHAR(12,9,96)
    1280 CALL VCHAR(10,11,96,3) :: CALL VCHAR(10,13,96,3) :: CALL VCHAR(10,15,96,3) :: CALL VCHAR(10,17,96,3)
    1290 CALL VCHAR(10,19,96,3) :: CALL VCHAR(10,21,96,3) :: CALL VCHAR(10,23,96,3) :: CALL HCHAR(10,24,96,2)
    1295 CALL HCHAR(12,24,96,2) :: CALL VCHAR(10,27,96,3)
    1300 CALL VCHAR(16,4,112,7) :: CALL VCHAR(16,5,112,7) :: CALL VCHAR(16,6,112,7) :: CALL VCHAR(19,7,112,4)
    1310 CALL HCHAR(17,11,112,4) :: CALL HCHAR(18,10,112,6) :: CALL HCHAR(19,10,112,6) :: CALL HCHAR(20,10,112,6)
    1320 CALL HCHAR(21,10,112,6) :: CALL HCHAR(22,10,112,6) :: CALL VCHAR(19,19,112,4) :: CALL VCHAR(15,20,112,
    1330 CALL VCHAR(15,21,112, :: CALL VCHAR(15,22,112, :: CALL VCHAR(15,24,112, :: CALL VCHAR(21,25,112,2) :: CALL VCHAR(18,28,112,5)
    1340 CALL VCHAR(16,29,112,7) :: CALL VCHAR(15,30,112,
    1350 CALL HCHAR(11,8,96) :: CALL HCHAR(11,16,96) :: CALL HCHAR(10,21,96) :: CALL HCHAR(11,20,96) :: CALL HCHAR(12,21,96)
    1360 CALL HCHAR(10,29,96) :: CALL HCHAR(11,28,96) :: CALL HCHAR(5,20,97) :: CALL HCHAR(6,19,98) :: CALL HCHAR(6,21,99)
    1370 CALL HCHAR(10,8,100) :: CALL HCHAR(12,8,100) :: CALL HCHAR(10,16,97) :: CALL HCHAR(12,16,101) :: CALL HCHAR(10,20,100)
    1380 CALL HCHAR(12,20,100) :: CALL HCHAR(11,21,102) :: CALL HCHAR(11,24,103) :: CALL HCHAR(11,25,104)
    1390 CALL HCHAR(10,28,100) :: CALL HCHAR(11,29,102) :: CALL HCHAR(12,29,98)
    1400 CALL HCHAR(12,30,105)
    1600 INPUT Z$
    1610 SUBEND
    

     

     

    How would you feel about a couple more questions, then I copy/paste this stuff to the public forum and any further questions posted there? My friend is on the group and I wanted to surprise him with a new program that had made a bit of progress as a surprise.

    Okay.

     

     

    orion1052003, on Tue Nov 8, 2011 10:24 PM, said:

     

    If that's cool, what is the best way to handle coinc?

    I think there should be a main game loop handling:

     

    1. Checking fire (player will release bomb)

    2. Checking coincidence (between bomb and target)

    3. Checking if bomb is off screen

     

    This should be accomplished in 2-3 program lines. That should catch the coincidence most of the time or always, if the bomb does not travel too fast.

     

    Making a experimental program with not more lines than the above will let you experiment with different speeds. In this case I think I would use the ALL in COINC, so no need to fiddle with a tolerance value.

     

    I tested the POSITION values of a sprite travelling down the screen, and the values are in the 1-256 range. The bomb will effectively be off screen with value between 193-256, that should make plenty of room to catch it before it reappears at the top.

     

     

    orion1052003, on Tue Nov 8, 2011 10:24 PM, said:

     

    It seems kinda shaky when I run the program, for example if I hit the target the bomb will disappear. but if I miss it will continue on its journey up and down and wrapping down the screen again.

    If that's what's happening then you programmed it that way. You probably delete the bomb sprite when there's a collision. The routine (if any) for checking the bomb going off screen is obviously not working.

     

     

    orion1052003, on Tue Nov 8, 2011 10:24 PM, said:

     

    If I can get the "building printing" animation working, but it prints too slow, is there any way to speed things up? I've been looking at Graphicomp. The game seems to sort of work, but not smoothy or "classy".

     

    Printing numbers on the screen might help you trace a problem, but printing in the main loop is not a good idea. If you have to update a score, then do it after a hit.

     

    I don't know Graphicomp, but it I think it looked as if it pulled some graphics statements into data statements. Not sure if that really is going to help or the opposite.

     

    I don't seem to see any "building printing" animation. What is it supposed to be ?

     

    Lines 200-270 are the graphic codes for the buildings on the bottom off the screen. Perhps the buildings are 2 small in proportion to the plane. Line 385 where it says !DRAW BUILDINGS to line 440 draws them on screen in an initialization set-up phase. I tried lines 450 and 460 to make a "flippable" sequence of buildings, and when printed they came out blank, although I did not get a syntax error. I do not know if 450 and 460 are correct or acceptable to the TI. My thought was whenever the plane got to the right of the screen, the buildings on the bottom could flip between to frames, to give the illusion of passing over terrain. The plane constantly moves only right and wraps around like I think Atlantis by Imagic. Anyway, the static buildings look nice, but I thought I could add some realism. Not sure why it doesn't work when I put 450, 460 in. The space becomes blank. Lines 1050 to 1080 is where I try to implement the idea, in SUB BUILDN.

     

    I changed line 720 big time to try and implement your advice, if I interpreted it correctly. The game loop is from line 700-1000. Now the DOT does not show up, although the CALL SPRITE statement to place it on screen is still there. ??? I know I probably accidentally told it to do what is happening, but I can't find where.

     

    I REMmed out SUB BUILDN to try and make DOT run like it had before, when the buildings are normal "static" in the background.

     

    I never use double sized sprite pixels unless it's for something squarish like rectangular or frame stuff. I can understand the need for sprites to be big for attention, but I much more like the same resolution with sprites and background. I guess most have emulators (and real hardware) showing all the pixels at a certain magnification (I use 2x1 no filters all the time - also when I post screenshots). Only thing is - with no double size sprite pixels - coincidence checking is of course going to be about twice as difficult (for the program to catch).

     

    I would then only have buildings/skyline in the DISPLAY range (28 characters wide).

     

    Make a string which is a multiple of 28 (that would then be 28*2=56, 28*3=84, 112, 140, 168, 196, 224 or 252). Then use SEG$ to extract what is going to be displayed.

     

    Using 56, 112 or 224 is convenient because we can make bit masking.

     

    Let's take the width of 112 (4*28). You create an interesting skyline with 112 characters in one string.

     

    To control the flips though the 112 characters, we need a variable. Let's call it FLIP.

     

    Every time we need to flip, we can increase FLIP by one and secure it's range to be in 0-3.

     

    FLIP=(FLIP+1) AND 3

     

    To display the skyline we could then have something like

     

    DISPLAY AT(24,1):SEG$(SKYLINE$,FLIP*28+1,28);

     

     

    My advice for logic is to only have one IF on a program line. If you have more than one IF then the second IF is only executed if the first is true. Something one might forget when changing the logic, testing etc. And it only becomes worse if one introduces ELSE. Only use ELSE for very simple program lines. I'm just saying it since this is the source of errors in pretty much all higher level programming languages (if you nest things up too much). When the game is finished and everything is working, and you want to optimize or make program code more compact and/or faster, then go ahead and try, but remember to test, test and test.

     

    10 !CITYBOMBER4
    50 !***************
    60 !* CITY BOMBER *
    70 !***************
    80 !11-01-11
    90 !NOVEMBER 1, 2011.
    95 CALL TITLE
    100 CALL CLEAR :: CALL SCREEN(
    110 CALL COLOR(9,5,1,8,8,1,12,7,1) :: DR=89 :: F=-1
    120 N0$="3C2424242424243C"
    130 N1$="1818181818181818"
    140 N2$="3C04043C3C20203C"
    150 N3$="3C04043C3C04043C"
    160 N4$="2424243C04040404"
    170 N5$="3C20203C3C04043C"
    180 N6$="202020203C34343C"
    190 N7$="3C04040404040404"
    192 N8$="3C24243C3C24243C"
    194 N9$="3C24343C04040404"
    200 B1$="00007C7CFEFEFFFF"
    210 B2$="00E0E0E0E0FFFFFF"
    220 B3$="003C3C3C3CFFFFFF"
    230 B4$="00F8F8FBFBFFFFFF"
    240 B5$="007777777777FFFF"
    250 B6$="78787E7E7FFFFFFF"
    260 B7$="10387C7C7C7CFFFF"
    270 B8$="10545456DFFFFFFF"
    280 BR$="88C4FF1F0408000000000000000000000000C0F0000000000000000000000000"
    290 BL$="01023FFF0201000000000000000000001030F080000000000000000000000000"
    291 BO$="3838FE3838383810"!BOMB
    292 C1$="024827B41E532F5FFFFF7F3F1B0F030080A0F8F0F4FCECF0FEFAFEFDEAC28010"
    293 C2$="153F7FFFFFFFFF7F7F7C7EFF3E7C1A084862FCBCFAE492400000000000000000"
    294 S$="0000001818000000"!STAR
    295 D$="0000000000000F0F0F0F000000000000000000000000F0F0F0F0000000000000"
    300 CALL CHAR(96,B1$,97,B2$,98,B3$,99,B4$,100,B5$,101,B6$,102,B7$,103,B8$)!BUILDINGS
    310 CALL CHAR(88,S$,112,BR$,104,C1$,108,C2$,136,BO$,48,N0$,49,N1$,50,N2$,51,N3$,52,N4$,53,N5$,54,N6$,55,N7$,56,N8$,57,N9$,120,D$)
    320 !RINT 0;1;2;3;4;5;6;7;8;9
    330 !OTO 330
    340 FOR I=1 TO 30 :: R=INT(RND*24)+1 :: C=INT(RND*32)+1 :: CALL HCHAR(R,C,88) :: NEXT I!SCATTERSTARS
    385 !DRAW BUILDINGS
    390 CALL HCHAR(24,1,97,2) :: CALL HCHAR(24,31,103,2)
    400 BL1$=CHR$(96)&CHR$(97)&CHR$(98)&CHR$(99)&CHR$(100)&CHR$(101)&CHR$(102)&CHR$(103)
    410 BL2$=CHR$(102)&CHR$(99)&CHR$(96)&CHR$(103)&CHR$(101)&CHR$(98)&CHR$(100)&CHR$(97)
    420 BL3$=CHR$(97)&CHR$(101)&CHR$(98)&CHR$(102)&CHR$(96)&CHR$(100)&CHR$(99)&CHR$(103)
    430 BL4$=CHR$(99)&CHR$(96)&CHR$(98)&CHR$(97)&CHR$(102)&CHR$(100)
    440 DISPLAY AT(24,1):BL1$ :: DISPLAY AT(24,9):BL2$ :: DISPLAY AT(24,17):BL3$ :: DISPLAY AT(24,23):BL4$
    450 BN2$=BL4$&BL2$&BL1$&BL3$
    490 CALL MAGNIFY(4)
    495 CALL SPRITE(#1,104,16,1,1,0,1)!CLOUD1
    500 CALL SPRITE(#2,112,5,DR,1,0,10)!BOMBER RIGHT
    510 CALL SPRITE(#3,136,2,193,1)!BOMB
    515 CALL SPRITE(#4,120,7,185,1)!DOT
    520 CALL SPRITE(#8,108,16,17,121,0,1)!CLOUD2
    700 !MAIN LOOP
    710 CALL JOYST(1,X,Y) :: X=-4 :: CALL MOTION(#2,-Y*2.5,-X*2.5)!: CALL SOUND(100,-5,7)
    720 CALL KEY(1,K,S) :: IF K=18 THEN CALL POSITION(#2,DR,DC) :: CALL LOCATE(#3,DR+5,DC) :: CALL MOTION(#3,20,0) :: CALL COINC(#3,#4,10,C) :: IF C THEN D=D+1 :: RANDOMIZE :: A=175 :: B=INT(RND*255) :: CALL LOCATE(#4,A+1,B+1)
    725 CALL POSITION(#3,DR,DC) :: IF DR>165 THEN CALL LOCATE(#3,193,1) :: CALL MOTION(#3,0,0)
    730 IF D=10 THEN CALL NIGHT
    760 CALL POSITION(#3,DR,DC) :: DISPLAY AT(20,10):"DR= ";DR;"DC= ";DC
    780 DISPLAY AT(1,30):"HITS=";D
    790 !ALL BUILDN(F)
    1000 GOTO 710
    1050 SUB BUILDN(F)
    1060 F=F*-1 :: CALL POSITION(#2,DR,DC) :: IF F=1 AND DC>200 THEN DISPLAY AT(24,1):BN$
    1070 IF F=-1 AND DC>200 THEN DISPLAY AT(24,1):BN2$
    1080 SUBEND
    1130 SUB NIGHT
    1135 CALL SCREEN(2) :: CALL LOCATE(#1,193,1) :: CALL LOCATE(#8,193,1)!MOVECLOUDSOFFSCREEN
    1140 CALL COLOR(8,16,1)!STARSCOMEOUT
    1150 SUBEND
    1200 SUB TITLE
    1205 CALL CHARSET :: CALL CLEAR :: CALL SCREEN(2) :: CALL COLOR(9,5,2,10,5,2,11,14,2)
    1210 CALL CHAR(96,RPT$("F",16)) :: CALL CHAR(97,"81C3E7E7E7E7E7FF") :: CALL CHAR(98,"FF7F3F1F0F070301") :: CALL CHAR(112,RPT$("F",16))
    1211 CALL CHAR(99,"FFFEFCF8F0E0C080") :: CALL CHAR(100,"FFFFC3C3C3C3FFFF") :: CALL CHAR(101,"7E3C181818181800")
    1212 CALL CHAR(102,"FFFEC08080C0FEFF") :: CALL CHAR(103,"000000FFFF000000") :: CALL CHAR(104,"000000F0F0000000")
    1214 CALL CHAR(105,"80C0E0F0F0F8F8F8")
    1220 CALL HCHAR(2,2,96,30)
    1230 CALL HCHAR(23,2,96,30)
    1240 CALL VCHAR(2,2,96,24)
    1250 CALL VCHAR(2,31,96,23)
    1260 CALL HCHAR(5,7,96,3) :: CALL HCHAR(7,7,96,3) :: CALL HCHAR(5,11,96,3) :: CALL HCHAR(7,11,96,3)
    1264 CALL VCHAR(6,20,96,2)
    1265 CALL HCHAR(6,7,96) :: CALL HCHAR(6,12,96) :: CALL VCHAR(5,16,96,3)
    1270 CALL HCHAR(5,15,96,3) :: CALL HCHAR(5,19,96) :: CALL HCHAR(5,21,96)
    1275 CALL VCHAR(10,7,96,3) :: CALL HCHAR(10,12,96) :: CALL HCHAR(12,12,96)
    1277 CALL HCHAR(10,9,96) :: CALL HCHAR(11,9,102) :: CALL HCHAR(12,9,96)
    1280 CALL VCHAR(10,11,96,3) :: CALL VCHAR(10,13,96,3) :: CALL VCHAR(10,15,96,3) :: CALL VCHAR(10,17,96,3)
    1290 CALL VCHAR(10,19,96,3) :: CALL VCHAR(10,21,96,3) :: CALL VCHAR(10,23,96,3) :: CALL HCHAR(10,24,96,2)
    1295 CALL HCHAR(12,24,96,2) :: CALL VCHAR(10,27,96,3)
    1300 CALL VCHAR(16,4,112,7) :: CALL VCHAR(16,5,112,7) :: CALL VCHAR(16,6,112,7) :: CALL VCHAR(19,7,112,4)
    1310 CALL HCHAR(17,11,112,4) :: CALL HCHAR(18,10,112,6) :: CALL HCHAR(19,10,112,6) :: CALL HCHAR(20,10,112,6)
    1320 CALL HCHAR(21,10,112,6) :: CALL HCHAR(22,10,112,6) :: CALL VCHAR(19,19,112,4) :: CALL VCHAR(15,20,112,
    1330 CALL VCHAR(15,21,112, :: CALL VCHAR(15,22,112, :: CALL VCHAR(15,24,112, :: CALL VCHAR(21,25,112,2) :: CALL VCHAR(18,28,112,5)
    1340 CALL VCHAR(16,29,112,7) :: CALL VCHAR(15,30,112,
    1350 CALL HCHAR(11,8,96) :: CALL HCHAR(11,16,96) :: CALL HCHAR(10,21,96) :: CALL HCHAR(11,20,96) :: CALL HCHAR(12,21,96)
    1360 CALL HCHAR(10,29,96) :: CALL HCHAR(11,28,96) :: CALL HCHAR(5,20,97) :: CALL HCHAR(6,19,98) :: CALL HCHAR(6,21,99)
    1370 CALL HCHAR(10,8,100) :: CALL HCHAR(12,8,100) :: CALL HCHAR(10,16,97) :: CALL HCHAR(12,16,101) :: CALL HCHAR(10,20,100)
    1380 CALL HCHAR(12,20,100) :: CALL HCHAR(11,21,102) :: CALL HCHAR(11,24,103) :: CALL HCHAR(11,25,104)
    1390 CALL HCHAR(10,28,100) :: CALL HCHAR(11,29,102) :: CALL HCHAR(12,29,98)
    1400 CALL HCHAR(12,30,105)
    1600 INPUT Z$
    1610 SUBEND
    

    post-19460-0-87621300-1323313582_thumb.jpg

    post-19460-0-70447100-1323313596_thumb.jpg

    post-19460-0-41623600-1323313612_thumb.jpg

    • Like 2

  2. Using Win99/4a on a mac. The mac is emulating windows, which is simulating the 4a. Ha. Using a virtual disk, have to check if it is nearly full or not. Oh, and happy 11-1-11. I wonder how the object file gets "embedded" into XB. I thought it was something simple, but perhaps it has to do with that complicated list of things you have to build in another Traver article, with "XBALBASE" I think it was called, and all that.


  3. 10 GOTO 60
    20 DIM A$(100),B$(100)
    30 AA$,AB,AB$,AC,AC$,AD,AF,AF$,AG,AG$,AH,AI,AJ,AO,AP,AQ,AR,BD,D,E,E$,EP$,G,H,J,K,O,P,P$,Q,Q$,R,R$,S,S$,T$,V$,W$,Z$
    40 CALL ACCKEY :: CALL CLS :: CALL DECHEX :: CALL DELAY :: CALL END :: CALL EQWS :: CALL FB :: CALL GS :: CALL HDG :: CALL PAUSE :: CALL PN
    50 CALL SCREEN :: CALL START :: CALL WTSU
    60 [email protected]
    100 ! GRAPHICOMP COPYRIGHT (C) 1991 by Barry Traver, 835 Green Valley Drive, Philadelphia, PA 19128 (phone: 215/483-1379)
    110 CALL FB(2,12) :: DISPLAY AT(1,10):"GRAPHICOMP": :"	    Version 1.4a": :"	  for MICROpendium"
    120 DISPLAY AT(7,6):"Copyright (C) 1991":"	 by Barry A. Traver":"    All Rights Reserved!": : :"GRAPHICOMP is a limited XB"
    130 DISPLAY AT(13,1):"graphics compiler to help   beginners to learn assembly language.  Limitations:  Usesimple graphics statements"
    140 DISPLAY AT(17,1):"with only constants (numericand string) as parameters.  Use an XB LISTing as your   input file." :: CALL PAUSE
    170 CALL FB(16,14) :: DISPLAY AT(1,5)ERASE ALL:"Here are the XB commands": :"GRAPHICOMP 1.4a can handle:": : :" CALL CLEAR"
    190 DISPLAY AT(8,1):" CALL HCHAR(A,B,C[,D])": :" CALL VCHAR(A,B,C[,D])": :" DISPLAY AT(A,B)):C$[;]": :" DISPLAY AT(A,B)ERASE ALL:C$"
    210 DISPLAY AT(17,1):"More commands will be added": :"in GRAPHICOMP 1.4b in next": :"month's MICROpendium." :: CALL PAUSE
    220 D,K,AR,BD=0 :: CALL FB(2,4) :: DISPLAY AT(2,1)ERASE ALL:"Here are your choices:"
    230 DISPLAY AT(5,1):"1. Many output files, many	 entry points (one file	  for each line number,	   one entry point for"
    240 DISPLAY AT(9,4):"each file)": : :"2. One output file, many	   entry points (again,	    one entry point for"
    250 DISPLAY AT(15,4):"each line number)": : :"3. One output file, one	    entry point (i.e., one	  CALL LINK does it all!)"
    260 DISPLAY AT(23,1)BEEP:"What is your choice?" :: CALL ACCKEY(23,22,"13",E) :: CALL FB(2,12)
    270 DISPLAY AT(7,1):"Input (LISTing) File?": :" DSK" :: IF E=1 THEN DISPLAY AT(15,1):"Output Drive (1-9)? "
    280 IF E<>1 THEN DISPLAY AT(13,1):"Output File? ": :" DSK" :: IF E=3 THEN DISPLAY AT(19,1):"Entry Point?":"":" START"
    290 ACCEPT AT(9,2)SIZE(-27)$ :: ON ERROR 300 :: OPEN #2:P$,INPUT :: ON ERROR STOP :: CALL SCREEN(12) :: DISPLAY AT(24,1):"" :: GOTO 320
    300 ON ERROR 310 :: CLOSE #2
    310 CALL SCREEN(10) :: DISPLAY AT(24,3):"Disk Error - Try Again!" :: RETURN 290
    320 IF E=1 THEN 380 ELSE ACCEPT AT(15,2)SIZE(-27)$ :: ON ERROR 360 :: OPEN #1:P$,OUTPUT :: ON ERROR STOP
    330 CALL SCREEN(12) :: DISPLAY AT(24,1):"" :: CALL HDG :: IF E=2 THEN 390
    340 ACCEPT AT(21,2)VALIDATE(UALPHA)SIZE(-6):EP$ :: PRINT #1:"* ACCESSED BY":"* CALL LINK(""&EP$&"")":"" :: GOTO 390
    360 ON ERROR 370 :: CLOSE #1
    370 CALL SCREEN(10) :: DISPLAY AT(24,3):"Disk Error - Try Again!" :: RETURN 320
    380 CALL ACCKEY(15,21,"19",AB)
    390 CALL FB(2, :: PRINT "EXTENDED BASIC CODE:": :
    400 IF EOF(2)THEN PRINT "EMPTY FILE!" :: STOP ELSE LINPUT #2:T$ :: IF T$="" THEN 400 ELSE 450
    440 IF EOF(2)THEN 670 ELSE LINPUT #2:T$
    450 IF LEN(T$)=80 THEN LINPUT #2:P$ :: T$=T$&P$! DV80 BAND-AID
    480 PRINT T$ :: D=D+1 :: A$(D)=T$ :: B$(D-1)="L"&SEG$(T$,1,POS(T$," ",1)-1) :: IF POS(T$,"GOTO",1)<>0 THEN 440
    490 AD=POS(T$," ",1) :: IF SEG$(T$,AD+1,1)="!" OR SEG$(T$,AD+1,3)="REM" THEN 440
    530 IF E=1 THEN 440
    550 IF POS(T$,"CALL CLEAR",1)<>0 OR POS(T$,"DISPLAY AT",1)<>0 THEN BD=(BD OR 2) :: GOTO 440
    590 IF POS(T$,"CALL HCHAR",1)<>0 OR POS(T$,"CALL VCHAR",1)<>0 THEN BD=(BD OR 2) :: GOTO 440
    660 GOTO 15000! ERROR
    670 CALL DELAY(100) :: CALL FB(2,16) :: DISPLAY AT(11,11)ERASE ALL:"ENTERING": :TAB(10);"CONVERSION": :TAB(11);"SECTION!" :: CALL DELAY(100)
    680 IF E>1 THEN DISPLAY ERASE ALL :: CALL FB(16,5) :: PRINT "ASSEMBLY CODE:":"" :: CALL GS(BD,AR)
    690 IF E<>3 THEN 710
    700 FOR R=0 TO 1 :: PRINT #R:"* DEFINE ENTRY POINT": :"	   DEF  "&EP$: :EP$;TAB(;"LWPI WS":"	   B    @"&B$(0):"" :: NEXT R
    710 FOR Q=1 TO D :: T$=A$(Q) :: AD=POS(T$," ",1) :: S$=SEG$(T$,1,AD-1) :: Q$=S$&RPT$(" ",6-LEN(S$)) :: CALL FB(2,
    720 DISPLAY AT(11,1):"EXTENDED BASIC LINE:": :T$ :: CALL DELAY(100) :: IF POS(T$,"GOTO",1)<>0 THEN GOSUB 14000 :: GOTO 915
    740 AD=POS(T$," ",1) :: IF SEG$(T$,AD+1,1)="!" THEN GOSUB 14000 :: GOTO 915
    750 AD=POS(T$," ",1) :: IF SEG$(T$,AD+1,3)="REM" THEN GOSUB 14000 :: GOTO 915
    770 IF POS(T$,"CALL CLEAR",1)<>0 THEN GOSUB 2000 :: GOTO 910
    810 IF POS(T$,"DISPLAY AT",1)<>0 THEN GOSUB 6000 :: GOTO 910
    820 IF POS(T$,"CALL HCHAR",1)<>0 THEN AF$="H" :: AG$="INC  R0" :: GOSUB 7000 :: GOTO 910
    890 IF POS(T$,"CALL VCHAR",1)<>0 THEN AF$="V" :: AG$="AI   R0,32" :: GOSUB 7000 :: GOTO 910
    900 GOTO 15000! ERROR
    910 Z$=""
    915 IF E<>3 THEN 930 ELSE IF Q=D THEN CALL END(5,Z$) :: GOTO 930
    920 FOR R=0 TO 1 :: PRINT #R:"* BRANCH TO NEXT SECTION":"":Z$;TAB(;"B    @"&B$(Q):"" :: NEXT R
    930 NEXT Q :: IF E=1 THEN 980 ELSE CALL FB(2, :: DISPLAY AT(12,10):"End-Of-File": :TAB(;"FOR INPUT FILE" :: CALL DELAY(100)
    940 DISPLAY ERASE ALL :: CALL FB(16,5) :: PRINT "ASSEMBLY SOURCE CODE:": :
    960 FOR R=0 TO 1 :: PRINT #R:"* GENERAL WRAPUP":"" :: NEXT R :: CALL END(3,"") :: IF K THEN CALL WTSU
    970 CALL END(24,"")
    980 CLOSE #2 :: DISPLAY ERASE ALL :: CALL SCREEN(4) :: DISPLAY AT(11,11):"FINISHED!" :: DISPLAY AT(13,1)BEEP:"    Another file (Y/N)?"
    990 CALL ACCKEY(13,25,"YN",S) :: IF S THEN 220 ELSE DISPLAY ERASE ALL :: STOP
    2000 ! CLEAR
    2010 CALL START(E,AB,S$,T$) :: IF E=1 THEN CALL EQWS(10)
    2020 CALL PN(E,S$,Z$) :: CALL CLS(E,S$) :: IF E=1 THEN CALL END(27,"")ELSE IF E=2 THEN CALL END(5,"")
    2030 RETURN
    6000 ! DISPLAY AT
    6010 G=0 :: K=1 :: AD=POS(T$,"ERASE ALL",1) :: IF AD<>0 THEN G=1
    6020 AF=POS(T$,"DISPLAY AT(",1)+10 :: AG=POS(T$,",",AF+1) :: AH=POS(T$,")",AG+1) :: AI=POS(T$,""",AH+1) :: AJ=POS(T$,""",AI+1)
    6030 AP=VAL(SEG$(T$,AF+1,AG-AF-1)) :: H=VAL(SEG$(T$,AG+1,AH-AG-1)) :: AO=32*(AP-1)+(H-1)+2 :: V$=SEG$(T$,AI+1,AJ-AI-1)
    6040 IF SEG$(T$,AJ+1,1)<>";" THEN V$=V$&RPT$(" ",28-(H+LEN(V$))+1)
    6050 R$=STR$(LEN(V$)) :: W$="'"&V$&"'" :: CALL START(E,AB,S$,T$) :: IF E=1 THEN CALL EQWS(10)ELSE R=1 :: GOTO 6130
    6060 FOR R=0 TO 1 :: PRINT #R:"* TEXT FOR MESSAGE": :"T"&Q$&"TEXT "&W$:"	   EVEN":"" :: NEXT R
    6070 CALL PN(E,S$,Z$) :: IF G THEN CALL CLS(E,S$) :: IF AD<>0 THEN Z$=""
    6080 FOR R=0 TO 1
    6090 PRINT #R:"* DISPLAY MESSAGE": :Z$;TAB(;"LI   R0,"&STR$(AO):"	   LI   R1,"&"T"&S$:"	   LI   R2,"&R$:"	   BLWP @VMBWS":""
    6100 NEXT R :: IF E=1 THEN CALL END(3,"")ELSE IF E=2 THEN CALL END(5,"")
    6110 IF E=1 THEN CALL WTSU :: CALL END(8,"") :: CLOSE #1
    6120 RETURN
    6130 J=ASC(SEG$(V$,R,1)) :: IF J<32 OR J=39 OR J>127 THEN 6140 :: R=R+1 :: IF R>LEN(V$)THEN 6060 ELSE 6130
    6140 FOR R=0 TO 1 :: PRINT #R:"* DATA FOR DISPLAY":"":"T"&Q$ :: NEXT R :: AC$="	   BYTE " :: FOR P=1 TO LEN(V$) :: O=ASC(SEG$(V$,P,1))
    6150 IF O<30 THEN O=O+128
    6160 AC$=AC$&STR$(O)&","
    6170 IF P/8=INT(P/8)OR P=LEN(V$)THEN AC$=SEG$(AC$,1,LEN(AC$)-1) :: FOR R=0 TO 1 :: PRINT #R:AC$ :: NEXT R :: AC$="	   BYTE "
    6180 NEXT P :: FOR R=0 TO 1 :: PRINT #R:"	   EVEN":"" :: NEXT R :: GOTO 6070
    7000 ! HCHAR AND VCHAR
    7010 AF=POS(T$,"CALL "&AF$&"CHAR"&"(",1)+10 :: AG=POS(T$,",",AF+1) :: AH=POS(T$,",",AG+1) :: AI=POS(T$,",",AH+1)
    7020 IF AI<>0 THEN AQ=1 ELSE AI=POS(T$,")",AH+1) :: AQ=0 :: GOTO 7040
    7030 AJ=POS(T$,")",AI+1)
    7040 AP=VAL(SEG$(T$,AF+1,AG-AF-1)) :: H=VAL(SEG$(T$,AG+1,AH-AG-1)) :: E$=STR$(VAL(SEG$(T$,AH+1,AI-AH-1))+96) :: CALL DECHEX(E$,2)
    7050 AA$=STR$(32*(AP-1)+(H-1)) :: IF AQ=1 THEN AB$=SEG$(T$,AI+1,AJ-AI-1)ELSE AB$="1"
    7060 CALL START(E,AB,S$,T$) :: IF AF$="H" THEN AC=(32*(AP-1)+(H-1)+VAL(AB$)>768)ELSE AC=(AP+VAL(AB$)>24)
    7070 IF E=1 THEN CALL EQWS(10)
    7080 CALL PN(E,S$,Z$) :: FOR R=0 TO 1 :: PRINT #R:"* WRITE "&AF$&"CHAR": :Z$;TAB(;"LI   R0,"&AA$:"	   LI   R1,>"&E$&"00"
    7090 PRINT #R:"	   LI   R2,"&AB$:AF$&Q$&"BLWP @VSBW":"	   "&AG$
    7100 IF AC THEN PRINT #R:"	   CI   R0,768":"	   JLT  C"&S$:"	   AI   R0,-"&STR$(767-(AF$="H")):"C"&S$;
    7110 PRINT #R:TAB(;"DEC  R2":"	   JGT  "&AF$&Q$:"" :: NEXT R :: IF E=1 THEN CALL END(27,"")ELSE IF E=2 THEN CALL END(5,"")
    7120 RETURN
    14000 ! REM AND ! (AND GOTO)
    14010 CALL START(E,AB,S$,T$) :: IF E=1 THEN CALL EQWS(
    14020 CALL PN(E,S$,Z$) :: T$="* "&T$ :: FOR R=0 TO 1 :: PRINT #R:SEG$(T$,1,80) :: IF LEN(T$)>80 THEN PRINT #R:"* "&SEG$(T$,81,LEN(T$)-80)
    14030 IF POS(T$,"GOTO",1)<>0 THEN PRINT #R:"* NOT IMPLEMENTED!"
    14040 PRINT #R:"" :: NEXT R :: IF E=1 THEN CALL END(27,"")ELSE IF E=2 THEN CALL END(5,"")
    14050 RETURN
    15000 ! ERROR
    15010 CALL SCREEN(10) :: PRINT: :"E R R O R !": : :"An error in processing has  occurred.  Please check the"
    15020 PRINT "input file at point where   the problem occurred." :: CALL DELAY(300) :: STOP
    29999 [email protected]+
    30000 SUB DECHEX(A$,A) :: IF SEG$(A$,1,1)="-" AND VAL(A$)>-129 THEN A$=STR$(256-VAL(SEG$(A$,2,LEN(A$)-1)))
    30010 B=0 :: C=LEN(A$) :: FOR D=1 TO C :: B=B+(POS("0123456789ABCDEF",SEG$(A$,D,1),1)-1)*10^(C-D) :: NEXT D :: A$=""
    30020 E=INT(B/16) :: A$=SEG$("0123456789ABCDEF",B-16*E+1,1)&A$ :: IF E<>0 THEN B=E :: GOTO 30020
    30030 IF A<>0 THEN IF LEN(A$)<A THEN A$="0"&A$ :: GOTO 30030
    30040 SUBEND
    30050 SUB DELAY(A) :: FOR B=1 TO A :: NEXT B :: SUBEND
    30300 SUB FB(A,B) :: DISPLAY ERASE ALL :: FOR C=0 TO 14 :: CALL COLOR(C,A,1) :: NEXT C :: CALL SCREEN(B) :: SUBEND
    30310 SUB START(A,B,A$,B$) :: CALL FB(16,5) :: PRINT "ASSEMBLY SOURCE CODE:": : :
    30320 IF A=1 THEN OPEN #1:"DSK"&STR$(B)&".L"&A$&"/S",OUTPUT :: CALL HDG
    30330 FOR C=0 TO 1 :: PRINT #C:"* ASSEMBLY EQUIVALENT OF" :: IF LEN(B$)<79 THEN PRINT #C:"* "&B$ :: GOTO 30350
    30340 C$="* "&SEG$(B$,1,78) :: D$="* "&SEG$(B$,79,LEN(B$)-78) :: PRINT #C:C$$
    30350 IF A=3 THEN 30380
    30360 PRINT #C:"* ACCESSED BY":"* "&A$&" CALL LINK("L"&A$&"")":"":"* DEFINE ENTRY POINT": :"	   DEF  L"&A$
    30380 PRINT #C:"" :: NEXT C :: SUBEND
    30400 SUB PN(A,A$,B$) :: B$="L"&A$&RPT$(" ",5-LEN(A$)) :: IF A=3 THEN SUBEXIT
    30410 FOR B=0 TO 1 :: PRINT #B:"* PROGRAM START": :B$&" LWPI WS":"" :: NEXT B :: B$="" :: SUBEND
    30430 SUB END(A,B$) :: FOR B=0 TO 1 :: IF(A AND 1)THEN PRINT #B:"* RETURN TO XB":""
    30440 IF(A AND 2)THEN PRINT #B:"RETURN LWPI GPLWS":"	   B    @BASIC":""
    30450 IF(A AND 4)THEN PRINT #B:B$;TAB(;"B    @RETURN":""
    30460 IF(A AND 8)THEN PRINT #B:"	   END":""
    30470 NEXT B :: IF(A AND 16)THEN CLOSE #1
    30480 SUBEND
    30490 SUB CLS(E,B$) :: IF E=3 THEN L$="L"&B$ ELSE L$=""
    30495 FOR A=0 TO 1 :: PRINT #A:"* CLEAR THE SCREEN": :L$;TAB(;"CLR  R0":"	   LI   R1,>8000":"	   LI   R2,768"
    30500 PRINT #A:"C"&B$;TAB(;"BLWP @VSBW":"	   INC  R0":"	   DEC  R2":"	   JGT  C"&B$:""
    30510 NEXT A :: SUBEND
    30520 SUB EQWS(A) :: FOR B=0 TO 1
    30530 PRINT #B:"* XB EQUATES":"":"BASIC  EQU  >006A":"GPLWS  EQU  >83E0"
    30550 IF(A AND 2)THEN PRINT #B:"VSBW   EQU  >2020"
    30570 PRINT #B:""
    30580 NEXT B :: IF(A AND 8)THEN CALL WS
    30590 SUBEND
    30600 SUB WTSU :: FOR A=0 TO 1
    30610 PRINT #A:"* WRITE-TO-SCREEN UTILITY": :"VMBWS  DATA VWS,VPN":"VWS    BSS  32":"VPN    MOV  *R13,R0":"	   MOV  @2(R13),R2"
    30620 PRINT #A:"	   MOV  @4(R13),R3":"VLP    MOVB *R2+,R1":"	   AI   R1,>6000":"	   BLWP @VSBW":"	   INC  R0":"	   DEC  R3"
    30630 PRINT #A:"	   JNE  VLP":"	   RTWP":"" :: NEXT A :: SUBEND
    30650 SUB GS(A,B) :: FOR C=0 TO 1 :: PRINT #C:"* GENERAL SETUP":"" :: NEXT C :: CALL EQWS(A) :: CALL WS :: SUBEND
    30710 SUB PAUSE :: DISPLAY AT(24,1):"(Press any key to continue.)"
    30720 CALL KEY(0,A,B) :: IF B<1 THEN 30720
    30730 DISPLAY ERASE ALL :: SUBEND
    30740 SUB WS :: FOR A=0 TO 1 :: PRINT #A:"* DEFINE WORKSPACE": :"WS	 BSS  32":"" :: NEXT A :: SUBEND
    30770 SUB HDG :: PRINT #1:"* THIS ASSEMBLY SOURCE CODE":"*	  WAS CREATED BY":"*  GRAPHICOMP (VERS. 1.4a),":"*  AN XB GRAPHICS COMPILER"
    30780 PRINT #1:"*    BY BARRY A. TRAVER":"*  835 GREEN VALLEY DRIVE":"*  PHILADELPHIA, PA 19128":"*  (PHONE:  215/483-1379)":"" :: SUBEND
    30790 SUB ACCKEY(A,B,A$,C) :: CALL GCHAR(A,B+2,D) :: DISPLAY AT(A,B)BEEP:CHR$(D); :: E=0
    30800 CALL KEY(0,F,G) :: E=E+1 :: IF E=5 THEN CALL HCHAR(A,B+2,30)
    30810 IF E=10 THEN CALL HCHAR(A,B+2,D) :: E=0
    30820 IF G<1 THEN 30800 ELSE IF F>96 THEN F=F-32
    30830 IF F=13 THEN F=D
    30840 IF A$<>"YN" THEN 30850
    30845 IF CHR$(F)<>"Y" AND CHR$(F)<>"N" THEN 30800 ELSE CALL HCHAR(A,B+2,F) :: C=F :: IF C=89 THEN C=1 :: SUBEXIT ELSE C=0 :: SUBEXIT
    30850 IF CHR$(F)<SEG$(A$,1,1)OR CHR$(F)>SEG$(A$,2,1)THEN 30800
    30860 CALL HCHAR(A,B+2,F) :: IF F>64 THEN F=F-64
    30870 IF F>48 THEN F=F-48
    30880 C=F :: SUBEND
    


  4. I got past that point, and assembled the source code it created to Dsk2.O. I meant to call it Dsk2.S, but I couldn't figure out how to rename it. Named the assembled object file DSK2.O2, but got an error. Can't figure out why. The Micropendium issue from 1991 has the first article and .dsk of GRAPHICOMP. I believe this is only the first version, not the final one I would need to use. I will try to upload the .dsk, article, and even the .mp3 of Barry Traver talking about graphicomp if it is small enough to fit here.

     

    http://pdf.textfiles.com/zines/MICROPEDIUM/mp9101.max.pdf

     

    It won't attach the 9101.dsk that goes with the magazine, at least not when I just tried.

    post-19460-0-88014700-1320112068_thumb.jpg

    post-19460-0-18011200-1320112080_thumb.jpg


  5. Does anyone know how to use GRAPHICOMP by Barrry Traver? Do you you let his program look at your whole program listing, or do you just make a file of only graphic related parts? How do you get past the 4th screen?

     

    Here is a sample of some GRAPHICs I would like to speed up the drawing of in XB. I guess if it works, it makes a file and you CALL LINK to that file somehow.

     

    James

     

    250 GOSUB 4000! DISPLAY EARTH
    4000 !DRAW EARTH 645-760,970-1010
    4010 CALL COLOR(2,6,1,3,6,1,4,3,6,5,15,2)
    4020 RESTORE 4060
    4030 FOR I=6 TO 14 :: CALL COLOR(I,16,2) :: NEXT I
    4040 FOR I=0 TO 13 :: READ E$(I) :: CALL CHAR(40+I,E$(I)) :: NEXT I
    4050 FOR I=0 TO 7 :: READ E$(I) :: CALL CHAR(I+56,E$(I)) :: NEXT I
    4060 DATA 0000000000000F7F,000000000000F0FE,01030F1F3F7FFFFF
    4070 DATA 80C0F0F8FCFEFFFF,0001010103030303,FFFFFFFFFFFFFFFF
    4080 DATA 00808080C0C0C0C0,0303030301010100,C0C0C0C080808000
    4090 DATA FF7F3F3F1F0F0703,FFFEFCFCF8F0E0C0,7F0F000000000000
    4100 DATA FEF0000000000000,0800667C18666810
    4110 DATA E0F07F7F7FFFFFFF,0818F8F8F0F8F0F0,7F7F7F3D1C0E0201
    4120 DATA F0F0908800180000,03070F0F0F070703,F0FFFFFEFCFCF8F0
    4130 DATA 0303010101010101,E0C0C0C080808000
    4140 DISPLAY AT(2,24):CHR$(40)&CHR$(41) :: DISPLAY AT(3,23):CHR$(42)&CHR$(56)&CHR$(57)&CHR$(43)
    4150 DISPLAY AT(4,22):CHR$(44)&CHR$(45)&CHR$(58)&CHR$(59)&CHR$(45)&CHR$(46)
    4160 DISPLAY AT(5,22):CHR$(47)&CHR$(45)&CHR$(60)&CHR$(61)&CHR$(45)&CHR$(48)
    4170 DISPLAY AT(6,23):CHR$(49)&CHR$(62)&CHR$(63)&CHR$(50)
    4180 DISPLAY AT(7,24):CHR$(51)&CHR$(52) :: RETURN
    

    post-19460-0-63535700-1320004352_thumb.jpg

    post-19460-0-33149600-1320004458_thumb.jpg

    post-19460-0-56245300-1320004479_thumb.jpg

    post-19460-0-51088400-1320004490_thumb.jpg


  6. Does anyone have videotapes or DVDs of TI-99/4A video they want to upload? Besides Bruce Maret's site, and several I've uploaded from Charles Good's DVDs, I don't know of any. I uploaded 2 by CRaig MIller. Are there any more Craig Miller videos? Does anyone know if he ever made one about NIght MIssion?


  7. Can you do a CALL SOUND and a CALL COINC at the same time? Or does it actually do one and then the other next? I ask because I hear that CALL SOUND is the only command or SUB that can run while another statement is running. While maybe DATA does that too.


  8. Lee, thanks for pointing that out. I think I forgot to add some statements.

     

    I made a program called JOYPROG.

     

    First, I was just trying to make a test that would show the joystick values. It ended being 4 dots for the directions, one of which will light up when you move in that direction. Also, it shows some values on screen of variables like X,Y,R, and C. Then, it became a test to try CALL LOCATE with JOYST. Then I figured to test COINC. I put a stationary dot on screen, you can move your dot, touch the stationary one, and it beeps a coincidence. I wanted to try subprograms

    on a game, and I couldn't get em to work. I thought, why not try these subprograms one at a time in this test program?

     

    Changed the name to JOYSUB.

    In line 193 I set the Meteor coordinates for off screen. In 195 I create the Sprite, off screen and stationary. In the comment I remind myself of where it should start on screen and how fast it should go in the subprogram.

     

    I think I should have put 1074 CALL LOCATE(#3,DR,DC) :: CALL MOTION(#3,20,-20)

     

    The meteor probably appears to move because it is repeatedly called inside the loop. But since it is stuck at the spot like you said, Sprite #1 has to

    be moved there by the joystick and it registers a coincidence. I just added line 1074.

    Now it moves across screen, but gets cut off and starts again. Probably this happens each time as the sub is called. I guess CALL LOCATE and some statements have to be dome outside of subprograms, due to the looping effect?

    post-19460-0-73379200-1319537176_thumb.jpg


  9. This is a Joystick tester program and a test to see if SUBPROGRAMS will work with it. The CALL COINC works, but the "meteor" will appear over and over in the loop. Which seems to mean you can't use subprograms to call adversaries for the game player. It is at magnification one, so the meteor resembles a small piece of hair.

     

    100 !TEST PROGRAM-USE CALL LOCATE WITH JOYST
    110 P1=15 :: P2=10
    120 CALL CLEAR :: CALL SCREEN(6)
    130 A$=RPT$("F",16) :: CALL CHAR(96,A$)
    140 CALL SPRITE(#1,96,2,89,121)!JOYST DOT
    143 S$=RPT$("F",16) :: CALL CHAR(104,S$)
    145 CALL SPRITE(#2,104,16,57,223)!STATIONARY DOT
    150 DR=100 :: DC=100
    160 CALL HCHAR(1,16,104)!UP
    170 CALL HCHAR(24,16,112)!DOWN
    180 CALL HCHAR(12,3,120)!LEFT
    190 CALL HCHAR(12,30,128)!RIGHT
    192 M$="00000000000F10204980A0829041221C0000000000C020A02020204080000000"!METEOR
    193 CALL CHAR(128,M$) :: MDR=193 :: MDC=1
    195 CALL SPRITE(#3,128,16,MDR,MDC)!METEOR 1,169,20,-20
    200 CALL JOYST(1,X,Y)
    210 CALL COLOR(10,P1,P1,11,P1,P1,12,P1,P1,13,P1,P1)
    220 R=R-Y/4 :: C=C+X/4
    230 DR=DR-Y*4 :: DC=DC+X*4
    260 CALL LOCATE(#1,DR,DC)
    270 CALL KEY(1,K,S)
    280 DISPLAY AT(16,1):"SAME KEY=0 NEW KEY=1 NO KEY PRESS=-1"
    290 DISPLAY AT(18,5):"KEY= ";K;"STATUS= ";S
    300 DISPLAY AT(20,1):"X= ";X;"Y= ";Y
    310 DISPLAY AT(21,1):"R= ";R;"C= ";C
    320 DISPLAY AT(22,1):"DR= ";DR;"DC= ";DC
    330 IF Y=4 AND X=0 THEN CALL COLOR(10,P2,P2)
    340 IF Y=0 AND X=4 THEN CALL COLOR(13,P2,P2)
    350 IF Y=-4 AND X=0 THEN CALL COLOR(11,P2,P2)
    360 IF Y=0 AND X=-4 THEN CALL COLOR(12,P2,P2)
    365 CALL COINC(#1,#2,10,C) :: IF C THEN CALL SOUND(300,-2,10)
    368 DISPLAY AT(14,12):"C= ";C
    369 CALL METEOR(MDR,MDC)
    370 GOTO 200
    1071 SUB METEOR(DR,DC)
    1072 DR=1 :: DC=169
    1075 CALL COINC(#1,#3,10,CO) :: IF CO THEN CALL SOUND(300,-2,10) :: CALL DELSPRITE(#3)
    1078 !HOWLONGSHOULDMETEORLAST?
    1079 SUBEND
    


  10. I put the code in the CALL COINC thread...but here's the latest version. I think the only thing pertaining to the shooting part was the CALL ALIEN part. First game, practically first program, getting really confused but still trying.

     

    170 DIM E$(13)
    180 CALL CHARSET :: CALL CLEAR :: CALL SCREEN(2)
    200 L$="00233123213F0303033F20202020E0000080808080F888889888808080FC0404"
    210 L2$="0003010B09090F010101011F10101070008080808080F8888880808080FC0404"
    220 R$="000303037F43434303030202023E303000880888F880808080F8080808080E0E"
    230 R2$="00030303070F172747070707FCFCC0C0008000808080FC000000E0E060607878"
    280 C$="000302030F0B1B03030302020202060600808080E0A0B080808080808080C0C0"
    290 C2$="000302030F0B1B03030302020202060600808080E0A0B080808080808080C0C0"
    300 !ENEMY ANIMATIONS
    305 D$="00003C3C3C3C0000"!DOT
    310 M$="00000000000F10204980A0829041221C0000000000C020A02020204080000000"!METEOR
    320 A$="08040F1B3F2F280600000000000000002040E0B0F8E828C00000000000000000"!ALIEN
    330 B$="0000001818000000"!ALIENS BULLET
    340 P$="804020100F080B0A0A0B080F1020408001020408F010D05050D010F008040201"!PULSAR
    350 R$=""!SUNRAY
    360 !ALL CHAR(124,D$,128,M$,136,A$,140,B$,72,P$,76,R$)!ENEMIES
    365 CALL CHAR(128,M$,136,A$,140,B$,72,P$,76,R$)!ENEMIESTEST
    380 CALL CHAR(64,RPT$("F",16))!GREY FLOOR
    390 CALL HCHAR(21,1,64,128)!GREY FLOOR
    400 !CLR CENTER LEFT RIGHT
    410 !CENTER 96 LEFT 100 RIGHT 116 CENTER B 112 LEFT B 104 RIGHT B 120
    420 CALL CHAR(96,C$,100,L$,104,L2$)! 96-120 CHARSETS 9-12
    440 CALL CHAR(112,C2$,116,R$,120,R2$)
    450 !DRAW EARTH 645-760,970-1010
    460 CALL COLOR(2,6,1,3,6,1,4,3,6,5,15,2)
    465 RESTORE 500
    470 FOR I=6 TO 14 :: CALL COLOR(I,16,2) :: NEXT I
    480 FOR I=0 TO 13 :: READ E$(I) :: CALL CHAR(40+I,E$(I)) :: NEXT I
    490 FOR I=0 TO 7 :: READ E$(I) :: CALL CHAR(I+56,E$(I)) :: NEXT I
    500 DATA 0000000000000F7F,000000000000F0FE,01030F1F3F7FFFFF
    510 DATA 80C0F0F8FCFEFFFF,0001010103030303,FFFFFFFFFFFFFFFF
    520 DATA 00808080C0C0C0C0,0303030301010100,C0C0C0C080808000
    530 DATA FF7F3F3F1F0F0703,FFFEFCFCF8F0E0C0,7F0F000000000000
    540 DATA FEF0000000000000,0800667C18666810
    550 DATA E0F07F7F7FFFFFFF,0818F8F8F0F8F0F0,7F7F7F3D1C0E0201
    560 DATA F0F0908800180000,03070F0F0F070703,F0FFFFFEFCFCF8F0
    570 DATA 0303010101010101,E0C0C0C080808000
    580 DISPLAY AT(2,24):CHR$(40)&CHR$(41) :: DISPLAY AT(3,23):CHR$(42)&CHR$(56)&CHR$(57)&CHR$(43)
    590 DISPLAY AT(4,22):CHR$(44)&CHR$(45)&CHR$(58)&CHR$(59)&CHR$(45)&CHR$(46)
    600 DISPLAY AT(5,22):CHR$(47)&CHR$(45)&CHR$(60)&CHR$(61)&CHR$(45)&CHR$(48)
    610 DISPLAY AT(6,23):CHR$(49)&CHR$(62)&CHR$(63)&CHR$(50)
    620 DISPLAY AT(7,24):CHR$(51)&CHR$(52)
    633 DR=130 :: DC=1 :: MEN=3 :: MDR=193 :: MDC=1
    634 CALL SPRITE(#1,96,16,DR,DC) :: CALL MAGNIFY(4)
    635 !ALL SPRITE(#2,124,6,193,1)!DOT
    636 CALL SPRITE(#3,128,16,MDR,MDC)!METEOR 1,169,20,-20
    637 CALL SPRITE(#4,136,4,193,1)!ALIEN 1,1,0,10
    638 CALL SPRITE(#5,140,4,193,1)!BULLET AR+10,AC,20,0
    639 CALL SPRITE(#6,72,6,193,1)!PULSAR 18,1,0,20
    640 !ALL SPRITE(#7,76,?,193,1)!RAY
    642 MDR=1 :: MDC=169
    643 CALL LOCATE(#3,MDR,MDC) :: CALL MOTION(#3,10,-10)
    645 !MAIN LOOP
    650 CALL METEOR(MDR,MDC)
    660 ANIM=ABS(ANIM-4) :: CALL JOYST(1,X,Y) :: DC=DC+X*4 :: CALL LOCATE(#1,(DR AND 255)+1,(DC AND 255)+1)
    661 CALL COINC(#1,#3,10,HIT) :: IF HIT THEN CALL SOUND(300,-1,10) :: CALL DELSPRITE(#1)
    663 CALL KEY(1,K,S) :: IF K=18 THEN CALL JUMP(DR,DC,DCD)
    664 IF X<>0 THEN CALL PATTERN(#1,ANIM+X*2+108) :: FACE=SGN(X+4) :: DCD=SGN(X) :: GOTO 650
    665 CALL PATTERN(#1,FACE*16+96) :: GOTO 650
    770 !ENDOFMAINLOOP
    775 !ENDING ROUTINE
    780 CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL CHARPAT :: CALL SCREEN(5)
    785 CALL SOUND(300,-2,10) :: CALL SAY("PLAY AGAIN")
    790 DISPLAY AT(12,16):"PLAY MOON MAN AGAIN? PRESS Y OR N"
    800 ACCEPT AT(14,16)BEEPVALIDATE("YN"):Z$ :: IF Z$="Y" THEN 160 ELSE END
    804 END
    805 !///SUBPROGRAMS///
    810 SUB JUMP(DR,DC,DCD)
    840 SDR=DR :: A=1
    844 DISPLAY AT(16,12):"DC= ";DC
    850 CALL KEY(1,K,S) :: IF K=18 THEN DR=DR-4 :: DC=DC+(A*PI/45)*5*DCD :: IF DC>240 THEN DC=1 ELSE IF DCD<1 THEN DC=240
    853 !F MEN=0 THEN 775
    855 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1) :: MEN=MEN-1
    860 !DISPLAY AT(23,1):A;" ";SIN(A*PI/45)
    870 IF DR<8 THEN 890
    880 CALL LOCATE(#1,DR,DC) :: IF S<0 THEN A=A+1 :: GOTO 850
    890 IF DR<SDR THEN DR=DR+4 :: DC=DC+1 :: CALL LOCATE(#1,DR,DC) :: IF DC>240 THEN DC=17
    895 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1) :: MEN=MEN-1
    900 IF DR<SDR THEN 890
    910 SUBEND
    980 SUB DOT
    1000 CALL COLOR(#2,12)
    1030 DX=INT(RND*256)+1 :: DY=INT(RND*192)+1!DOT ROWS?
    1050 CALL COINC(#1,#2,10,C)!TOUCH DOT
    1060 COUNT=1
    1065 IF C=0 THEN 1030
    1067 IF C THEN CALL SOUND(500,110,15) :: CALL DELSPRITE(#2)
    1069 !GOTO 1075 HOLD ON SCREEN
    1070 SUBEND
    1071 SUB METEOR(DR,DC)
    1072 DR=1 :: DC=169
    1075 CALL COINC(#1,#3,10,CO) :: IF CO THEN CALL SOUND(300,-2,10) :: CALL DELSPRITE(#1)
    1076 CALL POSITION(#3,DR,DC) :: IF DR>130 THEN CALL DELSPRITE(#3)
    1078 !HOWLONGSHOULDMETEORLAST?
    1079 SUBEND
    1081 SUB ALIEN
    1082 AR,AC=1
    1083 CALL LOCATE(#4,AR,AC) :: CALL MOTION(#4,0,10)!ALIEN
    1084 CALL LOCATE(#5,AR+10,AC) :: CALL MOTION(#5,20,0)!BULLET
    1086 !ALL SOUND(XX,XX,XX)!FILL IN
    1087 CALL POSITION(#4,AR,AC)
    1097 CALL COINC(#4,#1,10,A) :: CALL COINC(#5,#1,10,B)!B=BULLET
    1098 IF A OR B THEN CALL SOUND(XX,XX,XX) :: CALL DELSPRITE(#1,#5)
    1099 SUBEND
    1100 SUB PULSAR
    1120 CALL LOCATE(#6,18,1) :: CALL MOTION(#6,0,20)
    1135 P1=6 :: P2=7
    1165 FOR I=1 TO 100
    1170 CALL COLOR(#6,P1) :: CALL COLOR(#6,P2)
    1172 CALL SOUND(100,-1,10,200,5)
    1180 CALL COINC(#1,#6,10,C) :: IF C THEN CALL SOUND(300,-1,10) :: CALL DELSPRITE(#1)
    1185 NEXT I
    1200 SUBEND
    


  11. How would you do an "enemy" controlled bullet? I was trying to make a space invader near the top of the screen go across from left to right and shoot down at the hero. The hero is on the ground below or jumping in the air at any given moment. This is what I got, doesn't work yet, might be incorrect.

     

     

    320 A$="08040F1B3F2F280600000000000000002040E0B0F8E828C00000000000000000"!ALIEN

    330 B$="0000001818000000"!ALIENS BULLET

     

     

    1081 SUB ALIEN

    1082 AR,AC=1

    1083 CALL LOCATE(#4,AR,AC) :: CALL MOTION(#4,0,10)!ALIEN

    1084 CALL LOCATE(#5,AR+10,AC) :: CALL MOTION(#5,20,0)!BULLET

    1086 !ALL SOUND(XX,XX,XX)!FILL IN

    1087 CALL POSITION(#4,AR,AC)

    1097 CALL COINC(#4,#1,10,A) :: CALL COINC(#5,#1,10,B)!B=BULLET

    1098 IF A OR B THEN CALL SOUND(XX,XX,XX) :: CALL DELSPRITE(#1,#5)

    1099 SUBEND


  12. A question on CALL COINC. Does it matter if CALL COINC is called from the MAIN or called from a SUBPROGRAM? Is it better to have it in both main and sub like I do now, as you mentioned about Line 661, or is it overkill/unnecessary? I thought the more you call it, the more likely to catch a coincidence, but perhaps only one CALL COINC per subprogram is necessary? If I call all those subprograms from the game loop, won't it slow the game loop action down considerably? Is there a way to CALL the Subprograms outside of the main game loop?


  13. I will try this pseudocode/brainstorming/flowchart thing. What is the first thing you would need to do to make the man able to jump both left and right? Do you need to use the variable Face to accomplish this?


  14. Since I am both not understanding and misunderstanding Subprograms, I thought I would run some tests to find out what passing a variable is and how it works. (In the program I've been writing the variables never pass, and I'm not even sure when they need to be passed or left alone) Probably another 10 tests to do after this, but here's something. In some of the looped RUNS of the subprogram testing program I only wrote down the first results, because the other results were expected, and I took screenshots of all 10 runs. Just lazy to write all that down.

    These tests may seem silly, or not even make sense, but it is just an attempt to understand.

     

    RUN 1
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    70 DISPLAY AT(6,12):"CALLING SUBPROGRAM..."
    80 CALL TEST
    85 GOTO 85
    90 SUB TEST
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2 SUBPROGRAM= X=0 Y= 0 Z=0 X+Y=0
    RUN 2
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    70 DISPLAY AT(6,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    85 GOTO 85
    90 SUB TEST(X,Y)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2 SUBPROGRAM= X=3 Y= 2 Z=5 X+Y=5
    RUN 3
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    70 DISPLAY AT(6,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(A,B)
    85 GOTO 85
    90 SUB TEST(A,B)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2 SUBPROGRAM= X=0 Y= 0 Z=0 X+Y=0
    RUN 4
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    70 DISPLAY AT(6,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    85 GOTO 85
    90 SUB TEST(A,B)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RUN 5 & 6
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5
    25 FOR I=1 TO 3
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    70 DISPLAY AT(6,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    83 X=4 :: Y=6
    84 DISPLAY AT(23,1):"PRESS A LETTER"
    85 ACCEPT AT(24,1):L$
    86 NEXT I
    90 SUB TEST(X,Y)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    5 RESULTS- MAIN= X=3 Y=2 SUBPROGRAM= X=3 Y= 2 Z=5 X+Y=5
    6 RESULTS- MAIN= X=4 Y=6 SUBPROGRAM= X=4 Y= 6 Z=10 X+Y=10
    RUN 7
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5
    25 FOR I=1 TO 3
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    65 DISPLAY AT(5,12):"X+Y= ";Z
    70 DISPLAY AT(9,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    83 X=4 :: Y=6
    84 DISPLAY AT(23,1):"PRESS A LETTER"
    85 ACCEPT AT(24,1):L$
    86 NEXT I
    90 SUB TEST(X,Y)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2 X+Y=0 SUBPROGRAM= X=3 Y= 2 Z=5 X+Y=5
    RUN 8
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5 :: Z=0
    25 FOR I=1 TO 3
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    65 DISPLAY AT(5,12):"X+Y= ";Z
    70 DISPLAY AT(9,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    83 X=4 :: Y=6
    84 DISPLAY AT(23,1):"PRESS A LETTER"
    85 ACCEPT AT(24,1):L$
    86 NEXT I
    90 SUB TEST(X,Y)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2  X+Y=0 SUBPROGRAM= X=3 Y= 2 Z=5 X+Y=5
    RUN 9
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5 :: Z=0
    25 FOR I=1 TO 3
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    63 Z=X+Y
    65 DISPLAY AT(5,12):"X+Y= ";Z
    70 DISPLAY AT(9,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    83 X=4 :: Y=6
    84 DISPLAY AT(23,1):"PRESS A LETTER"
    85 ACCEPT AT(24,1):L$
    86 NEXT I
    90 SUB TEST(X,Y)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2  X+Y=5 SUBPROGRAM= X=3 Y= 2 Z=5 X+Y=5
    RUN 10
    10 !SUBTEST
    20 X=3 :: Y=2 :: A=4 :: B=5 :: Z=0
    25 FOR I=1 TO 3
    30 CALL SCREEN(4) :: CALL CLEAR
    40 DISPLAY AT(2,:"MAIN PROGRAM"
    50 DISPLAY AT(3,:"------------"
    60 DISPLAY AT(4,12):"X= ";X;"Y= ";Y
    63 Z=X+Y+1
    65 DISPLAY AT(5,12):"X+Y= ";Z
    70 DISPLAY AT(9,12):"CALLING SUBPROGRAM..."
    80 CALL TEST(X,Y)
    83 X=4 :: Y=6
    84 DISPLAY AT(23,1):"PRESS A LETTER"
    85 ACCEPT AT(24,1):L$
    86 NEXT I
    90 SUB TEST(X,Y)
    100 Z=X+Y
    110 DISPLAY AT(15,:"SUBPROGRAM"
    120 DISPLAY AT(16,:"----------"
    130 DISPLAY AT(17,12):"X= ";X;"Y= ";Y
    140 DISPLAY AT(19,12):"Z= ";Z
    150 DISPLAY AT(21,12):"X+Y= ";Z
    160 SUBEND
    RESULTS- MAIN= X=3 Y=2  X+Y=6 SUBPROGRAM= X=3 Y= 2 Z=5 X+Y=5
    
    

    post-19460-0-89409800-1319174876_thumb.jpg

    post-19460-0-80196700-1319174889_thumb.jpg

    post-19460-0-81591800-1319174901_thumb.jpg

    post-19460-0-56997900-1319175086_thumb.jpg


  15. Well, my thought for my first game was to finish it completely, then dish out a free game to the community as a surprise. I figure it putting it all on here would blow the surprise, even though the game is probably no big deal. It does make it easier to learn with the public forum, with trial and error and different input instead of trying to finish it in private. I put most of the code on the CALL COINC thread. Not sure how to do 3 things at once. It seems like the program can CALL JOYST, CALL DOT, and CALL enemies one at a time in a sequence, but it needs to be done simultaneously. When you have to wait for all the enemies to go by before you can move the joystick again, it's not working right.

     

    It seems to be like this

     

    CALL JOYST

    CALL DOT

    CALL ENEMIES

    REPEAT

     

    instead of CALL JOYST- CALL DOT - CALL ENEMIES , where you can move around, touch the dot, jump out of the way of an enemy all in "real time". When I call the subprograms, it seems to be just a stack of tasks that are completed in order, so I have to do all of them before I can start over, preventing the program from doing several things at once. I don't know if the structure is call all subprograms in the game loop and make the game loop too long and slow, or make a short fast game loop and not be able to call the subprograms. Catch-22.


  16. 170 DIM E$(13)
    180 CALL CHARSET :: CALL CLEAR :: CALL SCREEN(2)
    190 !MAN
    200 L$="00233123213F0303033F20202020E0000080808080F888889888808080FC0404"
    210 L2$="0003010B09090F010101011F10101070008080808080F8888880808080FC0404"
    220 R$="000303037F43434303030202023E303000880888F880808080F8080808080E0E"
    230 R2$="00030303070F172747070707FCFCC0C0008000808080FC000000E0E060607878"
    280 C$="000302030F0B1B03030302020202060600808080E0A0B080808080808080C0C0"
    290 C2$="000302030F0B1B03030302020202060600808080E0A0B080808080808080C0C0"
    300 !ENEMY ANIMATIONS
    305 D$="00003C3C3C3C0000"!DOT
    310 M$="00000000000F10204980A0829041221C0000000000C020A02020204080000000"!METEOR
    320 A$="08040F1B3F2F280600000000000000002040E0B0F8E828C00000000000000000"!ALIEN
    330 B$="0000001818000000"!ALIENS BULLET
    340 P$="804020100F080B0A0A0B080F1020408001020408F010D05050D010F008040201"!PULSAR
    350 R$=""!SUNRAY
    360 !ALL CHAR(124,D$,128,M$,136,A$,140,B$,72,P$,76,R$)!ENEMIES
    365 CALL CHAR(128,M$,136,A$,140,B$,72,P$,76,R$)!ENEMIESTEST
    380 CALL CHAR(64,RPT$("F",16))!GREY FLOOR
    390 CALL HCHAR(21,1,64,128)!GREY FLOOR
    400 !CLR CENTER LEFT RIGHT
    410 !CENTER 96 LEFT 100 RIGHT 116 CENTER B 112 LEFT B 104 RIGHT B 120
    420 CALL CHAR(96,C$,100,L$,104,L2$)!MAN 96-120 CHARSETS 9-12
    440 CALL CHAR(112,C2$,116,R$,120,R2$)
    450 !DRAW EARTH 645-760,970-1010
    460 CALL COLOR(2,6,1,3,6,1,4,3,6,5,15,2)
    465 RESTORE 500
    470 FOR I=6 TO 14 :: CALL COLOR(I,16,2) :: NEXT I
    480 FOR I=0 TO 13 :: READ E$(I) :: CALL CHAR(40+I,E$(I)) :: NEXT I
    490 FOR I=0 TO 7 :: READ E$(I) :: CALL CHAR(I+56,E$(I)) :: NEXT I
    500 DATA 0000000000000F7F,000000000000F0FE,01030F1F3F7FFFFF
    510 DATA 80C0F0F8FCFEFFFF,0001010103030303,FFFFFFFFFFFFFFFF
    520 DATA 00808080C0C0C0C0,0303030301010100,C0C0C0C080808000
    530 DATA FF7F3F3F1F0F0703,FFFEFCFCF8F0E0C0,7F0F000000000000
    540 DATA FEF0000000000000,0800667C18666810
    550 DATA E0F07F7F7FFFFFFF,0818F8F8F0F8F0F0,7F7F7F3D1C0E0201
    560 DATA F0F0908800180000,03070F0F0F070703,F0FFFFFEFCFCF8F0
    570 DATA 0303010101010101,E0C0C0C080808000
    580 DISPLAY AT(2,24):CHR$(40)&CHR$(41) :: DISPLAY AT(3,23):CHR$(42)&CHR$(56)&CHR$(57)&CHR$(43)
    590 DISPLAY AT(4,22):CHR$(44)&CHR$(45)&CHR$(58)&CHR$(59)&CHR$(45)&CHR$(46)
    600 DISPLAY AT(5,22):CHR$(47)&CHR$(45)&CHR$(60)&CHR$(61)&CHR$(45)&CHR$(48)
    610 DISPLAY AT(6,23):CHR$(49)&CHR$(62)&CHR$(63)&CHR$(50)
    620 DISPLAY AT(7,24):CHR$(51)&CHR$(52)
    630 !MAN SPRITE
    633 DR=130 :: DC=1 :: MEN=3 :: MDR=193 :: MDC=1
    634 CALL SPRITE(#1,96,16,DR,DC) :: CALL MAGNIFY(4)
    635 !ALL SPRITE(#2,124,6,193,1)!DOT
    636 CALL SPRITE(#3,128,16,MDR,MDC)!METEOR 1,169,20,-20
    637 CALL SPRITE(#4,136,4,193,1)!ALIEN 1,1,0,10
    638 CALL SPRITE(#5,140,4,193,1)!BULLET AR+10,AC,20,0
    639 CALL SPRITE(#6,72,6,193,1)!PULSAR 18,1,0,20
    640 !ALL SPRITE(#7,76,?,193,1)!RAY
    642 MDR=1 :: MDC=169
    643 CALL LOCATE(#3,MDR,MDC) :: CALL MOTION(#3,10,-10)
    645 !MAIN LOOP
    650 CALL METEOR(MDR,MDC)
    660 ANIM=ABS(ANIM-4) :: CALL JOYST(1,X,Y) :: DC=DC+X*4 :: CALL LOCATE(#1,(DR AND 255)+1,(DC AND 255)+1)
    661 CALL COINC(#1,#2,10,HIT) :: IF HIT THEN CALL SOUND(300,-1,10) :: CALL DELSPRITE(#1)
    663 CALL KEY(1,K,S) :: IF K=18 THEN CALL JUMP(DR,DC,MEN)
    664 IF X<>0 THEN CALL PATTERN(#1,ANIM+X*2+108) :: FACE=SGN(X+4) :: GOTO 650
    665 CALL PATTERN(#1,FACE*16+96) :: GOTO 650
    770 !ENDOFMAINLOOP
    775 !ENDING ROUTINE
    780 CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL CHARPAT :: CALL SCREEN(5)
    785 CALL SOUND(300,-2,10) :: CALL SAY("PLAY AGAIN")
    790 DISPLAY AT(12,16):"PLAY AGAIN? PRESS Y OR N"
    800 ACCEPT AT(14,16)BEEPVALIDATE("YN"):Z$ :: IF Z$="Y" THEN 160 ELSE END
    804 END
    805 !///SUBPROGRAMS///
    810 SUB JUMP(DR,DC,MEN)
    840 SDR=DR :: A=1
    844 DISPLAY AT(16,12):"DC= ";DC
    850 CALL KEY(1,K,S) :: IF K=18 THEN DR=DR-4 :: DC=DC+(A*PI/45)*5 :: IF DC>240 THEN DC=1
    853 !F MEN=0 THEN 775
    855 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1) :: MEN=MEN-1 :: GOTO 630
    860 !DISPLAY AT(23,1):A;" ";SIN(A*PI/45)
    870 IF DR<8 THEN 890
    880 CALL LOCATE(#1,DR,DC) :: IF S<0 THEN A=A+1 :: GOTO 850
    890 IF DR<SDR THEN DR=DR+4 :: DC=DC+1 :: CALL LOCATE(#1,DR,DC) :: IF DC>240 THEN DC=17
    895 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1) :: MEN=MEN-1 :: GOTO 630
    900 IF DR<SDR THEN 890
    910 SUBEND
    980 SUB DOT
    1000 CALL COLOR(#2,12)
    1030 DX=INT(RND*256)+1 :: DY=INT(RND*192)+1!DOT ROWS?
    1050 CALL COINC(#1,#2,10,C)!TOUCH DOT
    1060 COUNT=1
    1065 IF C=0 THEN 1030
    1067 IF C THEN CALL SOUND(500,110,15) :: CALL DELSPRITE(#2)
    1069 !GOTO 1075 HOLD ON SCREEN
    1070 SUBEND
    1071 SUB METEOR(DR,DC)
    1072 DR=1 :: DC=169
    1075 CALL COINC(#1,#3,10,CO) :: IF CO THEN CALL SOUND(300,-2,10) :: CALL DELSPRITE(#1)
    1076 CALL POSITION(#3,DR,DC) :: IF DR>130 THEN CALL DELSPRITE(#3)
    1078 !HOWLONGSHOULDMETEORLAST?
    1079 SUBEND
    1081 SUB ALIEN
    1082 AR,AC=1
    1083 CALL LOCATE(#4,AR,AC) :: CALL MOTION(#4,0,10)!ALIEN
    1084 CALL LOCATE(#5,AR+10,AC) :: CALL MOTION(#5,20,0)!BULLET
    1086 !ALL SOUND(XX,XX,XX)!FILL IN
    1087 CALL POSITION(#4,AR,AC)
    1097 CALL COINC(#4,#1,10,A) :: CALL COINC(#5,#1,10,B)!B=BULLET
    1098 IF A OR B THEN CALL SOUND(XX,XX,XX) :: CALL DELSPRITE(#1,#5)
    1099 SUBEND
    1100 SUB PULSAR
    1120 CALL LOCATE(#6,18,1) :: CALL MOTION(#6,0,20)
    1135 P1=6 :: P2=7
    1165 FOR I=1 TO 100
    1170 CALL COLOR(#6,P1) :: CALL COLOR(#6,P2)
    1172 CALL SOUND(100,-1,10,200,5)
    1180 CALL COINC(#1,#6,10,C) :: IF C THEN CALL SOUND(300,-1,10) :: CALL DELSPRITE(#1)
    1185 NEXT I
    1200 SUBEND
    

     

    Basically the gameplay idea is to collect several dots one at a time until you reach a certain number and the game ends. While running around the screen after a dot, one enemy would always be on screen pestering you. After a short time, a new enemy would appear. A series of enemies would just repeat over and over, one enemy at a time. Kind of like the Spider on Centipede keeps popping up again every few minutes after you killed it. Except there would be a gnat, and then an earwig, followed by another bug in this games' logic. Not actually bugs, just any "enemies" for the player.

     

    The program doesn't work, and as you can tell this is my first game. Currently, you can move left or right and wrap around, do a buggy jump, and get some coincidences out of a meteor that disappears when it hits the ground. (Intended) The collision detection is a mess, and I'm not sure which of the several CALL COINCs are working and which ones aren't. I think the ones in the SUBPROGRAMS aren't. It seems like nothing I put in a subprogram works, and it gets confusing when it comes to what variables and values need to be passed from SUB to MAIN and what ones don't need to be passed. Not understanding Subprograms so far.


  17. The movement seems a little better than before. The problem I notice is when you run to the left, and are near the right edge or another spot more in the left of center screen,... when you press the button, the man pops into a much further spot to the left suddenly before jumping. The jump still only goes to the right, not sure how to make it jump left when facing left, and keep jumping right like it currently does when facing right. Now, that was a run-on sentence.

     

    635 DR=130 :: DC=1
    640 CALL SPRITE(#1,96,16,DR,DC) :: CALL MAGNIFY(4)
    641 !METEOR SPRITE
    642 CALL CHAR(136,M$) :: MDR=1 :: MDC=249
    643 CALL SPRITE(#2,136,16,MDR,MDC,1,-1)!SPEED,20,-20
    644 !MOVEMETEORBELOWSCREEN?DR=193
    645 !MAIN LOOP
    650 CALL METEOR
    660 ANIM=ABS(ANIM-4) :: CALL JOYST(1,X,Y) :: DC=DC+X*4 :: CALL LOCATE(#1,(DR AND 255)+1,(DC AND 255)+1)
    661 CALL COINC(#1,#2,10,HIT) :: IF HIT THEN CALL SOUND(300,-1,10) :: CALL DELSPRITE(#1)
    663 CALL KEY(1,K,S) :: IF K=18 THEN CALL JUMP(DR,DC,FACE)
    664 IF X<>0 THEN CALL PATTERN(#1,ANIM+X*2+108) :: FACE=SGN(X+4) :: GOTO 650
    665 CALL PATTERN(#1,FACE*16+96) :: GOTO 650
    770 !ENDOFMAINLOOP
    780 CALL CHARPAT :: CALL SCREEN(5)
    790 DISPLAY AT(12,16):"PLAY MOON MAN AGAIN? PRESS Y OR N"
    800 ACCEPT AT(14,16)BEEPVALIDATE("YN"):Z$ :: IF Z$="Y" THEN 160
    803 IF Z$="N" THEN END
    805 !///SUBPROGRAMS///
    810 SUB JUMP(DR,DC,FACE)
    840 SDR=DR :: A=1
    844 DISPLAY AT(16,12):"DC= ";DC
    850 CALL KEY(1,K,S) :: IF K=18 THEN DR=DR-4 :: DC=ABS(DC)+ABS(INT(A*PI/45)*5) :: IF DC>240 THEN DC=17
    855 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1)
    860 !DISPLAY AT(23,1):A;" ";SIN(A*PI/45)
    870 IF DR<8 THEN 890
    875 IF DR=126 THEN M=DC
    880 CALL LOCATE(#1,DR,DC) :: IF S<0 THEN A=A+1 :: GOTO 850
    890 IF DR<SDR THEN DR=DR+4 :: DC=DC+1 :: CALL LOCATE(#1,DR,DC) :: IF DC>240 THEN DC=17
    900 IF DR<SDR THEN 890
    910 SUBEND
    920 SUB METEOR
    925 CALL COLOR(6,16,2)
    950 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(300,-2,10) :: CALL DELSPRITE(#1)
    955 CALL POSITION(#2,DR,DC) :: IF DR>130 THEN CALL DELSPRITE(#2)
    960 !HOWLONGSHOULDMETEORLAST?
    970 SUBEND
    

     

    The collision detection between the Meteor and the Man seems to be such that it works when the man is standing or jumping upwards. When coming down from a jump, he passes right over the meteor without a beep or a flash.


  18. Sometimes, what is your private e-mail?

     

    At 23 seconds in this video, there is a dot chasing routine. I have a subprogram to place a random dot on screen. Like the car, the man would touch the dot, and it would disappear only to present itself again somewhere else on screen. The Man would have to touch the dot a certain number of times, say 25. How could this subprogram be called, and simultaneously have another subprogram of an "enemy" running at the same time? I thought the pesky enemies would make it harder for the man to get the dot.

     


  19. Hmm. Does this solve the negative non integer number, and out of range error? Or merely "patch" it? I know not what I do...

     

     

    810 SUB JUMP(DR,DC,FACE)
    840 SDR=DR :: A=1
    844 DISPLAY AT(16,12):"DC= ";DC
    850 CALL KEY(1,K,S) :: IF K=18 THEN DR=DR-4 :: DC=ABS(DC)+ABS(INT(A*PI/45)*5) :: IF DC>240 THEN DC=17
    855 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1)
    860 !DISPLAY AT(23,1):A;" ";SIN(A*PI/45)
    870 IF DR<8 THEN 890
    875 IF DR=126 THEN M=DC
    880 CALL LOCATE(#1,DR,DC) :: IF S<0 THEN A=A+1 :: GOTO 850
    890 IF DR<SDR THEN DR=DR+4 :: DC=DC+1 :: CALL LOCATE(#1,DR,DC) :: IF DC>240 THEN DC=17
    900 IF DR<SDR THEN 890
    910 SUBEND
    

     

    I changed line 850 stop negative and non-integer numbers. The error I continually got under these conditions - when the man was at the rightmost corner of the screen, DR=126, and pressed the jump button- stopped after this. The error was always at line 880 If I remember right.

    880error.tiff

    ERROR_880.tiff

    ERRORDC.tiff


  20. My friend also has a question about using call locate with joyst.

     

     

    CALL LOCATE(#1,(DR AND 255)+1,(DC AND 255)+1) I am not sure that I understand what you are trying to do here. (DR AND 255) and (DC AND 255) will return -1 if DR=255 or DC=255 thus only acting if either is 255 and then it changes the statement to be CALL LOCATE(#1,-1+1,-1+1) making either parameter zero which will cause an error. Since DR never changes I would rewrite as CALL LOCATE(#1,DR,(DC AND 255)+2)


  21. Thanks, RXB. I changed the lines around a little.

     

     

    635 DR=130 :: DC=1
    640 CALL SPRITE(#1,96,16,DR,DC) :: CALL MAGNIFY(4)
    641 !METEOR SPRITE
    642 CALL CHAR(136,M$) :: MDR=1 :: MDC=249
    643 CALL SPRITE(#2,136,16,MDR,MDC,1,-1)!SPEED,20,-20
    644 !MOVEMETEORBELOWSCREEN?DR=193
    645 !MAIN LOOP
    650 CALL METEOR(C)
    660 ANIM=ABS(ANIM-4) :: CALL JOYST(1,X,Y) :: DC=DC+X*4 :: CALL LOCATE(#1,(DR AND 255)+1,(DC AND 255)+1)
    661 CALL COINC(#1,#2,10,HIT) :: IF HIT THEN CALL SOUND(300,-1,10) :: CALL DELSPRITE(#1)::GOTO 780
    663 CALL KEY(1,K,S) :: IF K=18 THEN CALL JUMP(DR,DC,FACE)
    664 IF X<>0 THEN CALL PATTERN(#1,ANIM+X*2+108) :: FACE=SGN(X+4) :: GOTO 650
    665 CALL PATTERN(#1,FACE*16+96) :: GOTO 650
    770 !ENDOFMAINLOOP
    780 CALL CHARPAT :: CALL SCREEN(5)
    790 DISPLAY AT(12,16):"PLAY MOON MAN AGAIN? PRESS Y OR N"
    800 ACCEPT AT(14,16)BEEP VALIDATE("YN"):Z$::IF Z$="Y" THEN 160
    803 IF Z$="N" THEN END
    805 !///SUBPROGRAMS///
    810 SUB JUMP(DR,DC,FACE)
    840 SDR=DR :: A=1
    850 CALL KEY(1,K,S) :: IF K=18 THEN DR=DR-4 :: DC=DC+(A*PI/45)*5 :: IF DC>240 THEN DC=1
    855 CALL COINC(#1,#2,10,CO) :: IF CO THEN CALL SOUND(150,-2,4) :: CALL DELSPRITE(#1):: SUBEXIT! GOTO 780?
    860 !DISPLAY AT(23,1):A;" ";SIN(A*PI/45)
    870 IF DR<8 THEN 890
    880 CALL LOCATE(#1,DR,DC) :: IF S<0 THEN A=A+1 :: GOTO 850
    890 IF DR<SDR THEN DR=DR+4 :: DC=DC+1 :: CALL LOCATE(#1,DR,DC) :: IF DC>240 THEN DC=1
    900 IF DR<SDR THEN 890
    910 SUBEND
    920 SUB METEOR(C)
    925 CALL COLOR(6,16,2)
    950 CALL COINC(#1,#2,10,C) :: :: IF HIT THEN CALL SOUND(300,-2,10) :: IF C THEN CALL DELSPRITE(#1)
    955 CALL POSITION(#2,DR,DC) :: IF DR>130 THEN CALL DELSPRITE(#2)
    960 !HOWLONGSHOULDMETEORLAST?
    970 SUBEND
    


  22. Darn, somehow it posted twice. I meant to say I thought for sure I typed a 1 and a 0 instead of typing two 1s the other day on the 2 IF statements that would not have worked anyway. I think your post helped me to understand some stuff.

×
×
  • Create New...