-
Content Count
348 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Member Map
Forums
Blogs
Gallery
Calendar
Store
Everything posted by orion1052003
-
Thanks for the video and pics. Are you planning on selling this one later on to many customers? http://www.ti99iuc.it/ebay/ParsecTSNera-2.jpg
-
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
-
orion1052003 channel on youtube
-
Happy Binary Day, everyone! It's 11-1-11. OR, 11-01-11 if you're a party pooper. 99ers are de best! James
-
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.
-
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
-
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.
-
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
- 6 replies
-
- barry traver
- graphicomp
-
(and 3 more)
Tagged with:
-
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?
-
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.
-
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?
-
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
-
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
-
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
-
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?
-
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?
-
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
-
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.
-
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.
-
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.
-
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.
-
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
-
Awesome!! Is this just Extended Basic on a regular TI or normal TI emulator? James
-
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)
-
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
