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(8)
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,8)
1330 CALL VCHAR(15,21,112,8) :: CALL VCHAR(15,22,112,8) :: CALL VCHAR(15,24,112,8) :: CALL VCHAR(21,25,112,2) :: CALL VCHAR(18,28,112,5)
1340 CALL VCHAR(16,29,112,7) :: CALL VCHAR(15,30,112,8)
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(8)
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,8)
1330 CALL VCHAR(15,21,112,8) :: CALL VCHAR(15,22,112,8) :: CALL VCHAR(15,24,112,8) :: CALL VCHAR(21,25,112,2) :: CALL VCHAR(18,28,112,5)
1340 CALL VCHAR(16,29,112,7) :: CALL VCHAR(15,30,112,8)
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(8)
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,8)
1330 CALL VCHAR(15,21,112,8) :: CALL VCHAR(15,22,112,8) :: CALL VCHAR(15,24,112,8) :: CALL VCHAR(21,25,112,2) :: CALL VCHAR(18,28,112,5)
1340 CALL VCHAR(16,29,112,7) :: CALL VCHAR(15,30,112,8)
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














