Jump to content
IGNORED

CITYBOMBER


orion1052003

Recommended Posts

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

 

 

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

 

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

 

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

 

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

 

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

 

 

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

 

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

Remove line 1170, and change line 1160 to

 

 

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

 

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

 

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

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

 

 

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

 

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

 

Same as above. CALL POSITION and IF.

 

:)

 

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

 

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

 

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

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

 

 

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

Okay.

 

 

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

 

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

I think there should be a main game loop handling:

 

1. Checking fire (player will release bomb)

2. Checking coincidence (between bomb and target)

3. Checking if bomb is off screen

 

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

 

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

 

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

 

 

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

 

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

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

 

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

FLIP=(FLIP+1) AND 3

 

To display the skyline we could then have something like

 

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

 

 

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

 

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

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

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

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

  • Like 2
Link to comment
Share on other sites

  • 1 month later...

The latest code to Citybomber...

 

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
783 CALL POSITION(#2,DR,DC) :: IF DC<233 THEN 785 ELSE 1000
785 FLIP=(FLIP+1)AND 3 :: DISPLAY AT(24,1):SEG$(BD$,FLIP*28+1,28)
787 IF D=45 THEN GOTO 1010
1000 GOTO 710
1010 CALL CLEAR :: CALL CHARPAT :: CALL HCHAR(1,1, ?  ,288) :: CALL HCHAR(10,1, ? ,320)
1015 !PYRAMID LINES LEFT SAND RIGHT
1030 CALL VCHAR(3,1,?,7)::CALL VCHAR(4,2,?,6)::CALL VCHAR(6,3,?,4)!BUILDINGS
1033 CALL VCHAR(5,5,?,5) :: CALL VCHAR(3,6,?,7) :: CALL VCHAR(4,7,?,6) :: CALL VCHAR(5,8,?,5)
1036 CALL VCHAR(6,10,?,4) :: CALL VCHAR(3,11,?,6) :: CALL VCHAR(3,12,?,6) :: CALL VCHAR(4,13,?,5)
1038 CALL VCHAR(5,15,?,5) :: CALL VCHAR(4,16,?,6) :: CALL VCHAR(3,17,?,7)
1040 !LEFT SIDE SMALL BUILDINGS
1041 CALL VCHAR(17,1,?,5) :: CALL VCHAR(17,2,?,5) :: CALL VCHAR(17,3,?,5)
1043 CALL VCHAR(12,7,?,4) :: CALL VCHAR(12,8,?,4) :: CALL VCHAR(12,9,?,4)
1045 CALL VCHAR(9,11,?,3) :: CALL VCHAR(9,12,?,3) :: CALL VCHAR(9,13,?,3)
1047 CALL VCHAR(2,19,?, :: CALL VCHAR(2,20,?,7)
1049 CALL VCHAR(2,22,?,7) :: CALL VCHAR(2,23,?, :: CALL VCHAR(2,24,
1051 CALL VCHAR(3,26,?,7) :: CALL VCHAR(4,27,?,6) :: CALL VCHAR(5,28,?,5)
1053 CALL VCHAR(4,30,?,6) :: CALL VCHAR(3,31,?,7) :: CALL VCHAR(3,32,7)
1060 !RIGHT SIDE SMALL BUILDINGS
1061 CALL VCHAR(9,20,?,3) :: CALL VCHAR(9,21,?,3) :: CALL VCHAR(9,22,?,3)
1063 CALL VCHAR(12,24,?,4) :: CALL VCHAR(12,25,?,4) :: CALL VCHAR(12,26,?,4)
1065 CALL VCHAR(17,30,?,5) :: CALL VCHAR(17,31,?,5) :: CALL VCHAR(17,32,?,5)
1070 !ROAD RUNWAY
1071 CALL HCHAR(10,16,?,2) :: CALL HCHAR(15,11,?,12) :: CALL HCHAR(20,6,?,22)
1073 CALL HCHAR(11,15,?,4) :: CALL HCHAR(16,10,?,14) :: CALL HCHAR(21,5,?,24)
1075 CALL HCHAR(12,14,?,6) :: CALL HCHAR(17,9,?,16) :: CALL HCHAR(22,4,?,26)
1077 CALL HCHAR(13,13,?, :: CALL HCHAR(18,8,?,18) :: CALL HCHAR(23,3,?,28)
1079 CALL HCHAR(14,12,?,10) :: CALL HCHAR(19,7,?,20) :: CALL HCHAR(24,2,?,30)
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
1151 SUB DAY
1152 CALL SCREEN( :: CALL COLOR(8,8,1) :: CALL LOCATE(#1,1,1,#8,17,121)
1154 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
1181 IF D=20 THEN CALL DAY
1182 IF D=30 THEN CALL NIGHT
1183 IF D=40 THEN CALL DAY
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

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...
  • 2 weeks later...

The building section "flips" now, but it does so constantly, rather than every time the plane reaches the right edge of the screen, as I thought line 783 would do.

 

783 CALL POSITION(#2,DR,DC) :: IF DC<233 THEN 785 ELSE 1000

785 FLIP=(FLIP+1)AND 3 :: DISPLAY AT(24,1):SEG$(BD$,FLIP*28+1,28)

787 IF D=45 THEN GOTO 1010

 

I used the alphabet instead of the buildings because I didn't know how to type in the higher ascii characters into the string on line 450, like the lowercase set. Running Mac OSX, running Parallels Windows emulator, running Win99/4A simulator. I tried to find where

I made the string for BD$ that you pointed out didn't connect to anything or could be misnamed. Couldn't find it, I think I had it on some scrap of paper, couldn't remember what I did, so I tried this alphabet thing instead.

10 !CITYBOMBER-CITY5
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$
450 BD$="ABCDEFGHIJKLMNOPQRSTUVWXYZASHLADHFGDHGKDHKHKHDKSJDJDJJGKSGSKFKGSFGSGHGHGFHGDEFGBTYHNJUIKAWRVTYHVXWERTYJHGXCVBNJU"
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
783 CALL POSITION(#2,DR,DC) :: IF DC<233 THEN 785 ELSE 1000
785 FLIP=(FLIP+1)AND 3 :: DISPLAY AT(24,1):SEG$(BD$,FLIP*28+1,28)
787 IF D=45 THEN GOTO 1010
1000 GOTO 710
1010 CALL CLEAR :: CALL CHARPAT :: CALL HCHAR(1,1,?,288) :: CALL HCHAR(10,1,?,320)
1015 !PYRAMID LINES LEFT SAND RIGHT
1030 CALL VCHAR(3,1,?,7) :: CALL VCHAR(4,2,?,6) :: CALL VCHAR(6,3,?,4)!BUILDINGS
1033 CALL VCHAR(5,5,?,5) :: CALL VCHAR(3,6,?,7) :: CALL VCHAR(4,7,?,6) :: CALL VCHAR(5,8,?,5)
1036 CALL VCHAR(6,10,?,4) :: CALL VCHAR(3,11,?,6) :: CALL VCHAR(3,12,?,6) :: CALL VCHAR(4,13,?,5)
1038 CALL VCHAR(5,15,?,5) :: CALL VCHAR(4,16,?,6) :: CALL VCHAR(3,17,?,7)
1040 !LEFT SIDE SMALL BUILDINGS
1041 CALL VCHAR(17,1,?,5) :: CALL VCHAR(17,2,?,5) :: CALL VCHAR(17,3,?,5)
1043 CALL VCHAR(12,7,?,4) :: CALL VCHAR(12,8,?,4) :: CALL VCHAR(12,9,?,4)
1045 CALL VCHAR(9,11,?,3) :: CALL VCHAR(9,12,?,3) :: CALL VCHAR(9,13,?,3)
1047 CALL VCHAR(2,19,?, :: CALL VCHAR(2,20,?,7)
1049 CALL VCHAR(2,22,?,7) :: CALL VCHAR(2,23,?, :: CALL VCHAR(2,24,
1051 CALL VCHAR(3,26,?,7) :: CALL VCHAR(4,27,?,6) :: CALL VCHAR(5,28,?,5)
1053 CALL VCHAR(4,30,?,6) :: CALL VCHAR(3,31,?,7) :: CALL VCHAR(3,32,7)
1060 !RIGHT SIDE SMALL BUILDINGS
1061 CALL VCHAR(9,20,?,3) :: CALL VCHAR(9,21,?,3) :: CALL VCHAR(9,22,?,3)
1063 CALL VCHAR(12,24,?,4) :: CALL VCHAR(12,25,?,4) :: CALL VCHAR(12,26,?,4)
1065 CALL VCHAR(17,30,?,5) :: CALL VCHAR(17,31,?,5) :: CALL VCHAR(17,32,?,5)
1070 !ROAD RUNWAY
1071 CALL HCHAR(10,16,?,2) :: CALL HCHAR(15,11,?,12) :: CALL HCHAR(20,6,?,22)
1073 CALL HCHAR(11,15,?,4) :: CALL HCHAR(16,10,?,14) :: CALL HCHAR(21,5,?,24)
1075 CALL HCHAR(12,14,?,6) :: CALL HCHAR(17,9,?,16) :: CALL HCHAR(22,4,?,26)
1077 CALL HCHAR(13,13,?, :: CALL HCHAR(18,8,?,18) :: CALL HCHAR(23,3,?,28)
1079 CALL HCHAR(14,12,?,10) :: CALL HCHAR(19,7,?,20) :: CALL HCHAR(24,2,?,30)
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
1151 SUB DAY
1152 CALL SCREEN( :: CALL COLOR(8,8,1) :: CALL LOCATE(#1,1,1,#8,17,121)
1154 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
1181 IF D=20 THEN CALL DAY
1182 IF D=30 THEN CALL NIGHT
1183 IF D=40 THEN CALL DAY
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

Link to comment
Share on other sites

Well, now I have a dunce cap to keep my head warm. It works much better, I just have to figure out how to get the buildings back in. I have one question though. On the leftmost and rightmost portions of the screen are a segment of static buildings and the rest of the "line" of buildings move. This is because of DISPLAY AT. It doesn't actually start at the first char of say, line 24,1. But say, 24,3 or something close to that. Is there a way around this without assembly?

Edited by orion1052003
Link to comment
Share on other sites

  • 3 years later...

I have one question though. On the leftmost and rightmost portions of the screen are a segment of static buildings and the rest of the "line" of buildings move. This is because of DISPLAY AT. It doesn't actually start at the first char of say, line 24,1. But say, 24,3 or something close to that. Is there a way around this without assembly?

You can do this with XB256, and on real iron with the standard XB cartridge. There is a subroutine called DISPLY that lets you print 32 characters in a line. I think RXB can do this as well, but you need an RXB cartridge if you are using a real TI.

Link to comment
Share on other sites

I like the video... The bomb wrap can be avoided by doing a CALL POSITION that will check the pixel row starting at 176. If PR (pixelrow) is greater than 176 (row 22), then DELSPRITE. It looks like you are already doing this but the check is missing for one reason or another... Perhaps the loop could be tightened a bit.

 

Look forward to playing it when it is finished. :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...