123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582 |
- *********************************************
- **** SET UP SCANNER DATA ****
- *********************************************
- Setup_Scanner_Data
- bsr Clear_Hostage_Indicators
- move.l #scanner_point_data,scanner_points_list_end
- move.w #$ffff,scanner_point_data
- move.w #$ffff,points_on_scanner
- bsr Setup_Points_Of_Interest
- bsr Dim_Scanner
- rts
- *********************************************
- **** CONVERT CLIP DATA ****
- *********************************************
- Convert_Clip_Data
- move.l #scanner_x_clip_data,a0
- move.w #31-1,d0
- convert_data_loop
- move.w (a0),d1
- mulu #(1152/31),d1
- move.w d1,(a0)+
- move.w (a0),d1
- mulu #(1152/31),d1
- subq.w #1,d1 ;cos bits on scanner two high
- move.w d1,(a0)+
- dbra d0,convert_data_loop
- rts
-
- *********************************************
- **** SETUP POINTS OF INTEREST ****
- *********************************************
- Setup_Points_Of_Interest
- clr.w number_of_hostages
- move.l current_alien_map_pointer,a5
- moveq #0,d1
- move.l #generic_map_header,a1
-
- move.w map_data_y(a1),d3
- subq.w #1,d3
- scanner_x_loop
- moveq #0,d0
- move.w map_data_x(a1),d2
- subq.w #1,d2
- move.l a5,a0
- scanner_setup_loop
- move.b (a0),d5
- cmp.b #GENERATOR,d5
- bne.s check_for_hos
- move.w d0,generator_x
- move.w d1,generator_y
- move.l a0,generator_map_pos
- check_for_hos
- cmp.b #HOSTAGE,d5
- bne.s keep_checking_map
- addq.w #1,number_of_hostages
- bsr Add_Scanner_Point
- keep_checking_map
- addq.l #1,a0
- add.w #16,d0
- subq.w #1,d2
- bne.s scanner_setup_loop
- add.l #BIGGEST_MAP_X,a5 ;next line
- add.w #16,d1
- subq.w #1,d3
- bne.s scanner_x_loop
- bsr Display_Hostage_Indicators
- rts
-
- DOT_DIST EQU 72
- *********************************************
- **** REMOVE HOSTAGE SCANNER POINT ****
- *********************************************
- Remove_Hostage_Scanner_Point
- *alien info in a1
- moveq #0,d7 ;use as flag
- move.l #scanner_point_data,a0
- move.l a0,a5
- remove_hos_loop
- cmp.w #$ffff,(a0)
- beq.s found_end_of_list
-
- tst d7
- bne.s copy_list_data
-
- move.l scanner_map_pos(a0),a4
- cmp.l alien_map_pos(a1),a4
- bne.s copy_list_data
- moveq #1,d7
- bra.s update_list_pos
- copy_list_data
- move.l scanner_point_x(a0),scanner_point_x(a5)
- move.l scanner_map_pos(a0),scanner_map_pos(a5)
- add.l #scanner_data_size,a5
- update_list_pos
- add.l #scanner_data_size,a0
- bra.s remove_hos_loop
- found_end_of_list
- move.w #$ffff,(a5)
- move.l a5,scanner_points_list_end
-
- subq.w #1,number_of_hostages
- bne not_collected_all_hostages
- move.w number_of_hostages,d7
- bsr Remove_Hostage_Char
- rts
- not_collected_all_hostages
- move.w number_of_hostages,d7
- bsr Remove_Hostage_Char
- rts
-
-
- *************************************************
- **** COLLECTED LAST HOSTAGE *****
- *************************************************
- Collected_Last_Hostage
- *use block d6 and d7 pos
- move.w #-1,number_of_hostages
- move.l #scanner_point_data,a2
- move.l generator_map_pos,a0
- move.w generator_x,d0
- move.w generator_y,d1
- sub.w #DOT_DIST,d1
- move.w d0,scanner_point_x(a2)
- move.w d1,scanner_point_y(a2)
- move.l a0,scanner_map_pos(a2)
- add.l #scanner_data_size,a2
- add.w #DOT_DIST,d1
- move.w d0,scanner_point_x(a2)
- move.w d1,scanner_point_y(a2)
- move.l a0,scanner_map_pos(a2)
- add.l #scanner_data_size,a2
- sub.w #DOT_DIST,d0
- move.w d0,scanner_point_x(a2)
- move.w d1,scanner_point_y(a2)
- move.l a0,scanner_map_pos(a2)
- add.l #scanner_data_size,a2
- add.w #DOT_DIST*2,d0
- move.w d0,scanner_point_x(a2)
- move.w d1,scanner_point_y(a2)
- move.l a0,scanner_map_pos(a2)
- add.l #scanner_data_size,a2
- sub.w #DOT_DIST,d0
- add.w #DOT_DIST,d1
- move.w d0,scanner_point_x(a2)
- move.w d1,scanner_point_y(a2)
- move.l a0,scanner_map_pos(a2)
- add.l #scanner_data_size,a2
- move.w #$ffff,(a2)
- move.w d6,d0
- andi.w #$fff0,d0
- move.w d7,d1
- sub.w #160,d1
- move.l #Fire_Key_object,d2
- bsr Simple_Add_Alien_To_List
- move.w #Sound_Switch,sound_chan4
- rts
-
- *********************************************
- **** ADD SCANNER POINT ****
- *********************************************
- Add_Scanner_Point
- move.l scanner_points_list_end,a2
- move.w d0,scanner_point_x(a2)
- move.w d1,scanner_point_y(a2)
- move.l a0,scanner_map_pos(a2)
- add.l #scanner_data_size,a2
- move.w #$ffff,(a2)
- move.l a2,scanner_points_list_end
- rts
- scanner_points_list_end
- dc.l scanner_point_data
-
- *********************************************
- **** DISPLAY POINTS ON SCANNER ****
- *********************************************
- Display_Points_On_Scanner
- clr.w d2
- moveq #0,d0
- moveq #0,d1
- move.w actual_player_map_x_position,d0
- move.w actual_player_map_y_position,d1
-
- move.w d1,d3
- sub.w #240*2,d1
- add.w #240*2,d3
- sub.w #288*2,d0
- move.l #scanner_x_clip_data,a2
- move.l #scanner_point_data,a0
- move.l #points_on_scanner,a3
- add_points_to_scanner_loop
- cmp.w #$ffff,(a0)
- beq done_adding_points_to_scanner
- move.w scanner_point_y(a0),d4
- cmp.w d1,d4
- ble not_point_on_scanner
- cmp.w d3,d4
- bgt not_point_on_scanner
-
- move.w d0,d5
- move.w d0,d6
- *Test x against position using clipper
- sub.w d1,d4
- ext.l d4
- divs #((240*4)/31)+1,d4 ;number from 0 - 31
- ext.l d4
- asl #2,d4
- add.w (a2,d4),d5
- move.w scanner_point_x(a0),d7
- cmp.w d5,d7
- ble not_point_on_scanner
-
- add.w 2(a2,d4),d6
- cmp.w d6,d7
- bgt not_point_on_scanner
- *Is point on scanner (d7 = x and d4 = y)
- asr #2,d4
- addq.b #1,d2
- *Plot point on scanner
- sub.w d0,d7
- moveq #0,d6
- ext.l d7
- divs #(288*4)/31,d7
- move.l #scanner1+4,a4
- move.w d7,d6
- asr #4,d7 ;get sprite 0 - 3
- muls #(SCANNER_HEIGHT+2)*4,d7
- add.l d7,a4 ;get sprite
- addq.l #4,a4 ;get past header info
- clr.b scanner_sprpos(a3)
- moveq #0,d7 ;flag
- andi.w #$f,d6
- cmp.w #8,d6
- blt.s in_first_byte
- subq.w #8,d6
- addq.l #1,a4
- moveq #1,d7
- in_first_byte
-
- asl #2,d4
- add.l d4,a4 ;actual place
-
- neg.b d6
- add.b #$7,d6 ;pixel position
-
- move.l a4,scanner_mem_pos(a3)
- move.b d6,scanner_pix_pos(a3)
-
-
- bchg d6,(a4)
- bchg d6,4(a4)
-
- subq.b #1,d6
- bge.s not_gone_over_bound
- addq.l #1,a4
- tst d7
- beq.s not_onto_next_sprite_draw
- add.l #((SCANNER_HEIGHT+2)*4)-2,a4
- move.b #1,scanner_sprpos(a3)
- not_onto_next_sprite_draw
-
- bchg #7,(a4)
- bchg #7,4(a4)
- bra.s done_big_pix
- not_gone_over_bound
- bchg d6,(a4)
- bchg d6,4(a4)
- done_big_pix
-
- done_draw_point
- add.l #scanner_pixels_size,a3
-
-
- not_point_on_scanner
- add.l #scanner_data_size,a0
- bra add_points_to_scanner_loop
- done_adding_points_to_scanner
- move.w #$ffff,(a3)
- tst d2
- beq.s no_hostages_plotted
- bsr Brighten_Scanner
- rts
- no_hostages_plotted
- bsr Dim_Scanner
- rts
- *********************************************
- **** BRIGHTEN SCANNER ****
- *********************************************
- Brighten_Scanner
- move.l #sprite_cols+2,a0
- move.w #$0d0,9*4(a0)
- move.w #$0d0,13*4(a0)
- move.w #$0a2,11*4(a0)
- move.w #$0a2,15*4(a0)
- rts
-
- *********************************************
- **** DIM SCANNER ****
- *********************************************
- Dim_Scanner
- move.l #sprite_cols+2,a0
- move.w #$0a0,9*4(a0)
- move.w #$0a0,13*4(a0)
- move.w #$071,11*4(a0)
- move.w #$071,15*4(a0)
- rts
-
-
- *********************************************
- **** DELETE POINTS FROM SCANNER ****
- *********************************************
- Delete_Points_From_Scanner
- move.l #points_on_scanner,a0
- moveq #0,d0
- delete_points_loop
- cmp.w #$ffff,(a0)
- beq.s all_points_deleted
-
- move.l scanner_mem_pos(a0),a1
- move.b scanner_pix_pos(a0),d0
-
- bchg d0,(a1)
- bchg d0,4(a1)
- subq.b #1,d0
- bge.s del_not_gone_over_bound
- addq.l #1,a1
- tst.b scanner_sprpos(a0)
- beq.s not_onto_next_sprite_del
- add.l #((SCANNER_HEIGHT+2)*4)-2,a1
- not_onto_next_sprite_del
- bchg #7,(a1)
- bchg #7,4(a1)
- bra.s done_del_big_pix
- del_not_gone_over_bound
- bchg d0,(a1)
- bchg d0,4(a1)
- done_del_big_pix
-
- add.l #scanner_pixels_size,a0
- bra.s delete_points_loop
- all_points_deleted
- rts
- *****************************************
- ****** CLEAR KEY INDICATORS *******
- *****************************************
- Clear_Key_Indicators
- move.l #scanner1+39*4,a0
- move.l #scanner2+39*4,a1
- move.w #7-1,d0
- clear_key_chars
- clr.w (a0)
- clr.w (a1)
- addq.l #4,a0
- addq.l #4,a1
- dbra d0,clear_key_chars
- rts
- *****************************************
- ****** CLEAR HOSTAGE INDICATORS *******
- *****************************************
- Clear_Hostage_Indicators
- move.l #scanner1+33*4,a0
- move.l #scanner2+33*4,a1
- move.w #5-1,d0
- clear_hos_chars
- clr.w (a0)
- clr.w (a1)
- addq.l #4,a0
- addq.l #4,a1
- dbra d0,clear_hos_chars
- rts
- *********************************************
- **** SET END KEY ON SCANNER ****
- *********************************************
- Set_End_Key_On_Scanner
- move.l #scanner1+33*4,a0
- move.l #scanner2+33*4,a1
-
- move.w #%0000000000010100,(a0)
- move.w #%0011000000000000,(a1)
-
- move.w #%0000000000010100,4(a0)
- move.w #%0100100000000000,4(a1)
- move.w #%0000000000111111,8(a0)
- move.w #%1100100000000000,8(a1)
- move.w #%0000000000000000,12(a0)
- move.w #%0100100000000000,12(a1)
- move.w #%0000000000000000,16(a0)
- move.w #%0011000000000000,16(a1)
-
- rts
- *****************************************
- ****** DISPLAY HOSTAGE INDICATORS *******
- *****************************************
- Display_Hostage_Indicators
- move.w number_of_hostages,d0
- cmp.w #7,d0
- ble.s dont_draw_more_than_display
- move.w #7,d0
- dont_draw_more_than_display
- tst d0
- beq.s none_to_display
-
- subq.w #1,d0
- display_all_hos
- move.w d0,d7
- bsr Display_Hostage_Char
- dbra d0,display_all_hos
- none_to_display
- rts
-
- *****************************************
- ****** DISPLAY HOSTAGE CHAR *******
- *****************************************
- Display_Hostage_Char
- *send num in d7
- cmp.w #7,d7
- ble.s hostage_on_scanner
- rts
- hostage_on_scanner
- cmp.w #4,d7
- blt.s second_sprite
- move.l #scanner1+33*4,a0
- subq.w #4,d7
- bra.s copy_hostage_data_in
- second_sprite
- move.l #scanner2+33*4,a0
- copy_hostage_data_in
- lsl #2,d7
- move.w #$a,d6
- lsl d7,d6
- or.w d6,(a0)
- or.w d6,4(a0)
- or.w d6,12(a0)
- or.w d6,16(a0)
- move.w #$e,d6
- lsl d7,d6
- or.w d6,8(a0)
- rts
- *****************************************
- ****** REMOVE HOSTAGE CHAR *******
- *****************************************
- Remove_Hostage_Char
- *send num in d7
- cmp.w #7,d7
- ble.s clear_hostage_on_scanner
- rts
- clear_hostage_on_scanner
- cmp.w #4,d7
- blt.s clear_second_sprite
- move.l #scanner1+33*4,a0
- subq.w #4,d7
- bra.s clear_hostage_data_in
- clear_second_sprite
- move.l #scanner2+33*4,a0
- clear_hostage_data_in
- lsl #2,d7
- move.w #$fff0,d6
- rol d7,d6
-
- and.w d6,(a0)
- and.w d6,4(a0)
- and.w d6,8(a0)
- and.w d6,12(a0)
- and.w d6,16(a0)
- rts
- *****************************************
- ****** DISPLAY KEY CHAR *******
- *****************************************
- Display_Key_Char
- *send num in d7
- cmp.w #7,d7
- ble.s key_on_scanner
- rts
- key_on_scanner
- cmp.w #4,d7
- blt.s key_second_sprite
- move.l #scanner1+39*4,a0
- subq.w #4,d7
- bra.s copy_key_data_in
- key_second_sprite
- move.l #scanner2+39*4,a0
- copy_key_data_in
- lsl #2,d7
- move.w #$4,d6
- lsl d7,d6
-
- or.w d6,(a0)
- or.w d6,8(a0)
- or.w d6,12(a0)
- or.w d6,20(a0)
-
- move.w #$a,d6
- lsl d7,d6
- or.w d6,4(a0)
-
- move.w #$c,d6
- lsl d7,d6
- or.w d6,16(a0)
- or.w d6,24(a0)
- rts
- *****************************************
- ****** REMOVE KEY CHAR *******
- *****************************************
- Remove_Key_Char
- *send num in d7
- cmp.w #7,d7
- ble.s clear_key_on_scanner
- rts
- clear_key_on_scanner
- cmp.w #4,d7
- blt.s key_clear_second_sprite
- move.l #scanner1+39*4,a0
- subq.w #4,d7
- bra.s clear_key_data_in
- key_clear_second_sprite
- move.l #scanner2+39*4,a0
- clear_key_data_in
- lsl #2,d7
- move.w #$fff0,d6
- rol d7,d6
-
- and.w d6,(a0)
- and.w d6,4(a0)
- and.w d6,8(a0)
- and.w d6,12(a0)
- and.w d6,16(a0)
- and.w d6,20(a0)
- and.w d6,24(a0)
- rts
-
- generator_x dc.w 0
- generator_y dc.w 0
- generator_map_pos dc.l 0
|