It has come to my attention that Battle Blips becomes confused under certain circumstances. Sometimes when playing the computer, it will bounce the cursor from one side of the playing grid to the other, never making a shot nor releasing control of the computer. To eliminate this confusion, it is necessary to modify procedure 'rand_pick' and move procedure 'get_next_hit' so 'rand_pick' can call it. This is all it takes to make the new, improved Battle Blips version 1.6. The page numbers below refer to the page of ST Log, July '88, issue 21, that the source code referenced can be found. To modify bbltlips.pas 1.5 into 1.6 : goto line 309, col 46 -- change '1.5' to '1.6' (page 60) goto line 1188 -- move entire procedure 'get_next_hit' (14 lines) to (page 68) line 1156, putting it before procedure 'rand_pick'. (rand_pick will be modified to call 'get_next_hit') goto line 1189 -- should be 'ctr := ctr+1 ;'. The next line will be (page 68) 'x_inc := 0 ;'. Between those two lines insert the following code block as is: (* BEGINNING OF CODE BLOCK *) IF (ctr > 3) THEN BEGIN { indicates an unresolved hit } { surrounded by tested squares } { so seek next hit and work from } { there... } col := col + inc; IF(col < 0) OR (col > 9) THEN BEGIN col := start_xy; row := row + inc; IF(row < 0) OR (row > 9) THEN row := start_xy; END; get_next_hit( col, row); { seek next hit, must be more to } { be here } x := col ; { untried uses globals } y := row ; { x and y... } ctr := 0; { reset counter } END ; (* END OF CODE BLOCK *) Listed below is the entire procedure 'rand_pick' with the above modification: PROCEDURE rand_pick( col, row : Integer ) ; VAR ctr, ctr2, direction : Integer ; srch_pattern, temp : Array[ 0..3 ] OF Integer ; BEGIN { rand_pick } FOR ctr := LOOK_LEFT TO LOOK_DOWN DO temp[ctr] := ctr ; FOR ctr := LOOK_DOWN DOWNTO LOOK_LEFT DO BEGIN direction := rand( ctr+1 ) ; srch_pattern[ ctr ] := temp[ direction ] ; FOR ctr2 := direction TO LOOK_UP DO temp[ctr2] := temp[ctr2 + 1] ; END ; x := col ; y := row ; ctr := -1 ; REPEAT ctr := ctr+1 ; IF (ctr > 3) THEN BEGIN { indicates an unresolved hit } { surrounded by tested squares } { so seek next hit and work from } { there... } col := col + inc; IF(col < 0) OR (col > 9) THEN BEGIN col := start_xy; row := row + inc; IF(row < 0) OR (row > 9) THEN row := start_xy; END; get_next_hit( col, row); { seek next hit, must be more to } { be here } x := col ; { untried uses globals } y := row ; { x and y... } ctr := 0; { reset counter } END ; x_inc := 0 ; y_inc := 0 ; CASE srch_pattern[ ctr ] OF LOOK_LEFT : x_inc := -1 ; LOOK_RIGHT : x_inc := 1 ; LOOK_UP : y_inc := -1 ; LOOK_DOWN : y_inc := 1 ; END ; { case } UNTIL ( untried( x_inc, y_inc, -1 ) >= shortest ) AND ( untried( x_inc, y_inc, 0 ) > 1 ) ; x := x + x_inc ; y := y + y_inc ; END ; { rand_pick } goto line 1257 -- look for these lines in procedure 'next_hit': (page 68) row2 := row2 - inc ; done := ( row2 < 0 ) OR ( row2 > 9 ) ; now insert this line: reverse := TRUE; before the line: IF NOT done THEN BEGIN goto line 1284 -- look for these lines in procedure 'next_hit': (pages 68-69) col2 := col2 - inc ; done := ( col2 < 0 ) OR ( col2 > 9 ) ; now insert this line: reverse := TRUE; before the line: IF NOT done THEN BEGIN Sorry for any inconvenience... --Patrick Dell'Era 06-30-88