123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473 |
- GET_READY_WORDS EQU 10
- GET_READY_HEIGHT EQU 61
- GET_READY_PLANE EQU GET_READY_HEIGHT*GET_READY_WORDS*2
- GET_READY_Y_POS EQU 70
- GET_READY_BYTE_POS EQU ((20-GET_READY_WORDS)/2)*2
- *****************************************
- *** TEXT TEST *****
- *****************************************
- Text_Test
- bsr Copy_In_Level_Name
- move.w #$ff,scroll_value
- bsr Work_Out_Scroll_Movement ;dont ask - makes player appear in right place
- bsr Black_Colours
- bsr Draw_Initial_Aliens_On_Screen
- bsr Show_BackGround
- bsr Display_Scanner
- move.w #Sound_GetReady,sound_chan1
- bsr Sound_Effects
- bsr Wait_For_Fire_Press
- bsr Remove_Get_Ready
- bsr Do_Sprite_Colours
- bsr Do_Level_Colours
- rts
- *****************************************
- *** COPY IN LEVEL NAME *****
- *****************************************
- Copy_In_Level_Name
- clr.l d0
- move.b level_number,d0
- sub.w #'A',d0
- move.l #Get_Ready_Names,a0
- move.l a0,a1
- add.l #16*9*4*8,a1
- add.l d0,a1 ;get number
-
- mulu #18*8,d0 ;get name
- add.l d0,a0
-
- move.l #Get_Ready_Graphics,a2
- add.l #((GET_READY_WORDS*2)*37)+12,a2
-
- move.w #4-1,d1
- insert_level_number
- move.l a1,a3
- move.l a2,a4
- move.w #8-1,d2
- insert_number_lines
- move.b (a3),(a4)
- add.l #8,a3 ;next line
- add.l #GET_READY_WORDS*2,a4
- dbra d2,insert_number_lines
- add.l #8*8,a1 ;next plane
- add.l #GET_READY_PLANE,a2
- dbra d1,insert_level_number
- move.l #Get_Ready_Graphics,a2
- add.l #((GET_READY_WORDS*2)*53)+2,a2
- move.w #4-1,d1
- insert_level_name
- move.l a0,a3
- move.l a2,a4
-
- move.w #8-1,d2
- insert_name_lines
- movem.l a3-a4,-(sp)
- move.w #9-1,d3
- insert_name_words
- move.w (a3)+,(a4)+
- dbra d3,insert_name_words
- movem.l (sp)+,a3-a4
-
- add.l #18,a3 ;next line
- add.l #GET_READY_WORDS*2,a4
-
- dbra d2,insert_name_lines
- add.l #16*9*8,a0 ;next plane
- add.l #GET_READY_PLANE,a2
- dbra d1,insert_level_name
-
-
- rts
- *****************************************
- *** DRAW INITIAL ALIENS ON SCREEN *****
- *****************************************
- Draw_Initial_Aliens_On_Screen
- jsr Run_Alien_Code ;get aliens to draw on screen
- jsr Run_Alien_Code
- bsr Display_Get_Ready
- jsr Run_Alien_Code
- jsr Run_Alien_Code
- rts
- *****************************************
- *** WHITE COLOURS *****
- *****************************************
- White_Colours
- move.w #16-1,d0
- move.l #copper_colours+2,a0
- blank_them_all
- move.w #$fff,(a0)
- addq.l #4,a0
- dbra d0,blank_them_all
- rts
- *****************************************
- *** CLEAR BLACK COLOURS *****
- *****************************************
- Clear_Black_Colours
- move.w #32-1,d0
- move.l #black_list,a0
- clear_bls
- clr.w (a0)+
- dbra d0,clear_bls
- rts
- *****************************************
- *** SET COLOURS *****
- *****************************************
- Set_Colours
- *list in a0
- *col in d0
- move.w #16-1,d1
- set_bls
- move.w d0,(a0)+
- dbra d1,set_bls
- rts
- *****************************************
- *** SET COPPER COLOURS *****
- *****************************************
- Set_Copper_Colours
- *copper list in a0
- *col in d0
- move.w #16-1,d1
- addq.l #2,a0
- set_cbls
- move.w d0,(a0)
- addq.l #4,a0
- dbra d1,set_cbls
- rts
- *****************************************
- *** CLEAR GAME COLOURS *****
- *****************************************
- Clear_Game_Colours
- move.w #32-1,d0
- move.l #game_list,a0
- clear_gcs
- clr.w (a0)+
- dbra d0,clear_gcs
- rts
-
- *****************************************
- *** BLACK COLOURS *****
- *****************************************
- Black_Colours
- move.w #16-1,d0
- move.l #copper_colours+2,a0
- black_them_all
- clr.w (a0)
- addq.l #4,a0
- dbra d0,black_them_all
- rts
-
- *****************************************
- *** FADE TEXT TO BACKGROUND *****
- *****************************************
- Fade_Text_To_Background
- move.l #white_list,a0
- move.l level_palette,a1
- move.l #sprite_cols+2,a2
- move.w #8-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List
- rts
- *****************************************
- *** FADE REST OF TEXT TO BACKGROUND*****
- *****************************************
- Fade_Rest_Of_Text_To_Background
- jsr Sync
- move.l #sprite_cols+2,a2
- move.w #8-1,d7
- move.l #store_text_nums,a3
- bsr Reduce_All_Colours
- rts
- *****************************************
- *** SHOW BACK GROUND *****
- *****************************************
- Show_BackGround
-
- move.l level_palette,a1
- move.l #copper_colours+2,a2
- move.w #16-1,d7
- stick_in_cols
- move.w (a1)+,(a2)
- addq.l #4,a2
- dbra d7,stick_in_cols
- rts
- *****************************************
- *** FADE LIST TO LIST *****
- *****************************************
- Fade_List_To_List
- *send current colour list in a0, dest colour in a1
- *send copper list ptr in a2
- *send store list in a3
- move.l a3,a5
- move.w #16-1,d0
- init_list_loop
- *init list
- move.w (a0)+,d1
- move.w (a1)+,d4
-
- move.w d1,d2
- move.w d2,d3
- andi.w #$f00,d1 ;get rgb of source
- lsr #8,d1
- andi.w #$f0,d2
- lsr #4,d2
- andi.w #$f,d3
-
- asl #6,d1
- asl #6,d2
- asl #6,d3
-
- move.w d1,(a5)+ ;store scaled values
- move.w d2,(a5)+
- move.w d3,(a5)+
-
- asr #6,d1
- asr #6,d2
- asr #6,d3
-
- move.w d4,d5 ;get rgb of dest
- move.w d5,d6
- andi.w #$f00,d4
- lsr #8,d4
- andi.w #$f0,d5
- lsr #4,d5
- andi.w #$f,d6
-
- sub.w d4,d1 ;get diff
- sub.w d5,d2
- sub.w d6,d3
-
- asl #6-4,d1 ;(vals *64)/16
- asl #6-4,d2
- asl #6-4,d3
-
- move.w d1,(a5)+ ;store reduce values
- move.w d2,(a5)+
- move.w d3,(a5)+
-
- dbra d0,init_list_loop
-
- reduce_all_colours
- move.w fade_speed,d0
- subq.w #1,d0
- wait_fade_speed
- jsr Sync
- dbra d0,wait_fade_speed
-
- move.l a2,a5 ;copper
- move.l a3,a4
- move.w #16-1,d1
- reduce_loop
- move.w 6(a4),d2
- move.w 8(a4),d3
- move.w 10(a4),d4
-
- sub.w d2,(a4)
- sub.w d3,2(a4)
- sub.w d4,4(a4)
-
- move.w (a4),d2
- move.w 2(a4),d3
- move.w 4(a4),d4
-
- asr #6,d2
- asr #6,d3
- asr #6,d4
-
- lsl #8,d2
- lsl #4,d3
- or.w d2,d4
- or.w d3,d4
-
- move.w d4,(a5)
-
- addq.l #4,a5
- add.l #12,a4
-
- dbra d1,reduce_loop
-
- dbra d7,reduce_all_colours
- rts
- *****************************************
- *** CREATE FADE PALETTES *****
- *****************************************
- Create_Fade_Palettes
- move.l #Level_1_Colour_List,a0
- move.l #Faded_Palettes,a1
- move.w #16-1,d0
- cr_fade_loop
- move.w (a0)+,d1
-
- move.w d1,d2
- move.w d2,d3
- andi.w #$f00,d1 ;get rgb of source
- lsr #8,d1
- andi.w #$f0,d2
- lsr #4,d2
- andi.w #$f,d3
-
- move.w d1,d4 ;store
- move.w d2,d5
- move.w d3,d6
-
- asl #6,d1
- asl #6,d2
- asl #6,d3
-
- asl #6-4,d4 ;(vals *64)/16
- asl #6-4,d5
- asl #6-4,d6
-
- move.l a1,a2
- move.w #4-1,d7
- store_fade_cols
-
- sub.w d4,d1
- sub.w d5,d2
- sub.w d6,d3
-
- movem.l d1-d3,-(sp)
- asr #6,d1
- asr #6,d2
- asr #6,d3
-
- lsl #8,d1
- lsl #4,d2
- or.w d1,d3
- or.w d2,d3
-
- move.w d3,(a2)
- add.l #32,a2 ;next palette
- movem.l (sp)+,d1-d3
- dbra d7,store_fade_cols
- addq.l #2,a1
- dbra d0,cr_fade_loop
- rts
- *****************************************
- *** FADE 32 LIST TO LIST *****
- *****************************************
- Fade_32_List_To_List
- *send current colour list in a0, dest colour in a1
- *send copper list ptr in a2
- *send store list in a3
- move.l a3,a5
- move.w #32-1,d0
- init_list_loop32
- *init list
- move.w (a0)+,d1
- move.w (a1)+,d4
-
- move.w d1,d2
- move.w d2,d3
- andi.w #$f00,d1 ;get rgb of source
- lsr #8,d1
- andi.w #$f0,d2
- lsr #4,d2
- andi.w #$f,d3
-
- asl #6,d1
- asl #6,d2
- asl #6,d3
-
- move.w d1,(a5)+ ;store scaled values
- move.w d2,(a5)+
- move.w d3,(a5)+
-
- asr #6,d1
- asr #6,d2
- asr #6,d3
-
- move.w d4,d5 ;get rgb of dest
- move.w d5,d6
- andi.w #$f00,d4
- lsr #8,d4
- andi.w #$f0,d5
- lsr #4,d5
- andi.w #$f,d6
-
- sub.w d4,d1 ;get diff
- sub.w d5,d2
- sub.w d6,d3
-
- asl #6-4,d1 ;(vals *64)/16
- asl #6-4,d2
- asl #6-4,d3
-
- move.w d1,(a5)+ ;store reduce values
- move.w d2,(a5)+
- move.w d3,(a5)+
-
- dbra d0,init_list_loop32
-
- reduce_all_colours32
- move.w fade_speed,d0
- subq.w #1,d0
- wait_fade_speed32
- jsr Sync
- dbra d0,wait_fade_speed32
-
- move.l a2,a5 ;copper
- move.l a3,a4
- move.w #32-1,d1
- reduce_loop32
- move.w 6(a4),d2
- move.w 8(a4),d3
- move.w 10(a4),d4
-
- sub.w d2,(a4)
- sub.w d3,2(a4)
- sub.w d4,4(a4)
-
- move.w (a4),d2
- move.w 2(a4),d3
- move.w 4(a4),d4
-
- asr #6,d2
- asr #6,d3
- asr #6,d4
-
- lsl #8,d2
- lsl #4,d3
- or.w d2,d4
- or.w d3,d4
-
- move.w d4,(a5)
-
- addq.l #4,a5
- add.l #12,a4
-
- dbra d1,reduce_loop32
-
- dbra d7,reduce_all_colours32
- rts
-
- *****************************************
- *** Wait_For_Fire_Press *****
- *****************************************
- Wait_For_Fire_Press
-
- clr.w Fire
- Wait_For_User_To_Get_Bored
- jsr Sync
- bsr get_stick_readings
- tst fire
- beq.s Wait_For_User_To_Get_Bored
- bsr Clear_Stick
- rts
- *****************************************
- *** TAKE COPY OF AREA *****
- *****************************************
- Take_Copy_Of_Area
- move.l copyback_area,a0
- move.l copy_store_area,a1
-
- move.w #(SINGLE_PLANE/4)-1,d0
- make_copy
- move.l (a0),(a1)+
- clr.l (a0)+
- dbra d0,make_copy
- rts
-
- *****************************************
- *** RESTORE COPY AREA *****
- *****************************************
- Restore_Copy_Area
- move.l copyback_area,a1
- move.l copy_store_area,a0
- move.w #(SINGLE_PLANE/4)-1,d0
- restore_copy
- move.l (a0)+,(a1)+
- dbra d0,restore_copy
- rts
- *****************************************
- *** WHITE_ALL_PALETTE *****
- *****************************************
- White_All_Palette
- move.l #sprite_cols+2,a0
- move.w #16-1,d0
- white_all
- move.w #$fff,(a0)
- addq.l #4,a0
- dbra d0,white_all
- rts
- *****************************************
- *** SWITCH ON TEXT SCREEN *****
- *****************************************
- Switch_On_Text_Screen
- jsr Sync
- move.l copyback_area,d0 ;insert into copper
- move.w d0,plane5_lo
- swap d0
- move.w d0,plane5_hi
- move.w #$5200,plane_control ;pow!
- rts
-
- *****************************************
- *** SWITCH OFF TEXT SCREEN *****
- *****************************************
- Switch_Off_Text_Screen
- jsr Sync
- move.w #$4200,plane_control
- rts
- *****************************************
- *** CENTER TEXT *****
- *****************************************
- Center_Text
- *send text in a4, will set d0 = position
- moveq #0,d0
- moveq #0,d5
- moveq #0,d7
- move.l a4,a5
- center_loop
- move.b (a5)+,d7
- ble.s got_the_cent_pos
- cmp.b #"j",d7
- bge.s cent_last_line
- cmp.b #"F",d7
- bge.s cent_middle_line
- move.l #malfont_width_table,a1
- sub.b #" ",d7
- bra.s get_cent_pos
- cent_middle_line
- move.l #malfont_width_table2,a1
- sub.b #"F",d7
- bra.s get_cent_pos
- cent_last_line
- move.l #malfont_width_table3,a1
- sub.b #"j",d7
- get_cent_pos
- move.b (a1,d7),d5
- add.w d5,d0
- bra.s center_loop
- got_the_cent_pos
- neg.w d0
- add.w #320,d0
- asr d0
-
- move.w scroll_value,d7
- andi.w #$f,d7
- sub.w #$f,d7
- neg.w d7
-
- add.w d7,d0
-
- rts
- *****************************************
- *** DISPLAY STRING *****
- *****************************************
- Display_String
- *Send in null terminated string along with start x and y co-ords in a4,d0,d1
- *mem area in a3
- move.w d0,d3 ;save
- letter_extract_and_draw
- clr.l d2
- move.b (a4)+,d2
- beq.s finished_drawing_string
- bpl.s not_a_new_line
- cmp.b #CENTER_LINE,d2
- beq.s cent_line
- move.w d3,d0
- add.w #MALFONT_HEIGHT,d1
- bra.s letter_extract_and_draw
- cent_line
- bsr Center_Text
- bra.s letter_extract_and_draw
- not_a_new_line
- bsr Draw_Letter
- bra.s letter_extract_and_draw
- finished_drawing_string
- rts
- *****************************************
- *** DRAW LETTER *****
- *****************************************
- Draw_Letter
- *send in x and y in d0 and d1
- *letter in d2
- *mem in a3
- movem.l d0-d1/d3/a3,-(sp)
- cmp.b #"j",d2
- bge.s last_line
- cmp.b #"F",d2
- bge.s middle_line
- move.l #malfont,a0
- move.l #malfont_width_table,a1
- sub.b #" ",d2
- bra.s get_letter_pos
- middle_line
- move.l #malfont+MALFONT_HEIGHT*40,a0
- move.l #malfont_width_table2,a1
- sub.b #"F",d2
- bra.s get_letter_pos
- last_line
- move.l #malfont+(MALFONT_HEIGHT*2)*40,a0
- move.l #malfont_width_table3,a1
- sub.b #"j",d2
- get_letter_pos
-
- moveq #0,d5
- moveq #0,d3 ;pix pos in reg
- moveq #0,d4
- move.b (a1,d2),d4 ;the width of char
- move.w d4,wait_width ;title screen scroll stuff
- move.w d4,d7
- tst.b d2
- beq.s pix_at_zero
- find_pix_position
- move.b (a1)+,d5
- add.w d5,d3
- subq.w #1,d2
- bne.s find_pix_position
- pix_at_zero
- *Right, d4 = width, d3 = pixel position of char in graphics
- move.w d3,d5
- andi.w #$f,d5 ;shift of char
-
- andi.w #$fff0,d3
- asr #3,d3 ;bytes in
- add.l d3,a0 ;graphics position
-
- move.l #malfont_mask_table,a2
- asl #2,d4
- move.l (a2,d4),d4
-
- ror.l d5,d4
-
- *right so now work out where graphics have to go
- mulu text_bpr,d1
- add.l d1,a3
-
- sub.w d5,d0 ;sub char offset from desired pix dest
- bpl.s no_problem
- move.w text_bpr,d1
- move.w d1,d6
- ext.l d6
- asl #3,d1
- add.w d1,d0 ;if minus treat as on prev line
- sub.l d6,a3
- no_problem
- move.w d0,d1
- ext.l d1
- andi.w #$fff0,d1 ;work out bytes in (word bound)
- asr #3,d1
- add.l d1,a3
- andi.w #$f,d0 ;shift
-
- ror #4,d0
- move.w d0,d1
- ori.w #$0fea,d0 ;AB+C=D
- swap d0 ;blit shift
- move.w d1,d0 ;b's shift
-
- wait_for_all_blits
- btst #14,dmaconr(a6)
- bne.s wait_for_all_blits
-
- move.l d4,malfont_mask
- move.l d0,bltcon0(a6)
- move.w text_bpr,d0
- subq.w #6,d0
- move.w d0,bltcmod(a6)
- move.w d0,bltdmod(a6)
- move.w #-6,bltbmod(a6)
- move.w #40-6,bltamod(a6)
-
- move.l a3,bltcpth(a6)
- move.l a3,bltdpth(a6)
- move.l a0,bltapth(a6) ;graphics
- move.l #malfont_mask,bltbpth(a6) ;char mask
-
- move.l #$ffffffff,bltafwm(a6)
-
- move.w #MALFONT_HEIGHT<<6+3,bltsize(a6)
-
- movem.l (sp)+,d0-d1/d3/a3
- add.w d7,d0 ;update x position
-
- rts
-
- *Text Commands
- CENTER_LINE EQU -2
- CHANGE_COLOUR EQU -3
-
- *****************************************
- *** CENTER SMALL TEXT *****
- *****************************************
- Center_Small_Text
- *send text in a4, will set d0 = position
- moveq #0,d0
- moveq #0,d5
- moveq #0,d7
- move.l a4,a5
- center_small_loop
- move.b (a5)+,d7
- cmp.b #-1,d7
- beq.s got_the_small_cent_pos
- cmp.b #CHANGE_COLOUR,d7
- bne.s not_change_c
- move.b (a5)+,d7
- bra.s center_small_loop
- not_change_c
- cmp.b #"e",d7
- bge.s small_cent_last_line
- move.l #smallfont_width_table,a1
- sub.b #" ",d7
- bra.s get_small_cent_pos
- small_cent_last_line
- move.l #smallfont_width_table2,a1
- sub.b #"e",d7
- get_small_cent_pos
- move.b (a1,d7),d5
- add.w d5,d0
- bra.s center_small_loop
- got_the_small_cent_pos
- neg.w d0
- move.w text_bpr,d7
- asl #3,d7
- add.w d7,d0
- asr d0
- rts
- *****************************************
- *** DISPLAY SMALL STRING *****
- *****************************************
- Display_Small_String
- *Send in null terminated string along with start x and y co-ords in a4,d0,d1
- *mem area in a3
-
- move.w #WHITE,default_colour
- Display_Small_String_Skip
- small_wait_for_all_blits_before_start
- btst #14,dmaconr(a6)
- bne.s small_wait_for_all_blits_before_start
- move.w text_bpr,d2
- subq.w #6,d2
- move.w d2,bltcmod(a6)
- move.w d2,bltdmod(a6)
- move.w #-6,bltbmod(a6)
- move.w #40-6,bltamod(a6)
- move.l #$ffffffff,bltafwm(a6)
- move.w d0,d3 ;save
- small_letter_extract_and_draw
- clr.l d2
- move.b (a4)+,d2
- beq.s finished_drawing_small_string
- bpl.s not_a_new_small_line
- cmp.b #CHANGE_COLOUR,d2
- bne.s not_col_change
- move.b (a4)+,d2
- ext.w d2
- move.w d2,default_colour
- bra.s small_letter_extract_and_draw
- not_col_change
- cmp.b #CENTER_LINE,d2
- beq.s cent_small_line
- move.w d3,d0
- add.w #SMALLFONT_HEIGHT,d1
- bra.s small_letter_extract_and_draw
- cent_small_line
- bsr Center_Small_Text
- bra.s small_letter_extract_and_draw
- not_a_new_small_line
- bsr Draw_Small_Letter
- bra.s small_letter_extract_and_draw
- finished_drawing_small_string
- rts
- default_colour dc.w WHITE
- *****************************************
- *** DRAW SMALL LETTER *****
- *****************************************
- Draw_Small_Letter
- *send in x and y in d0 and d1
- *letter in d2
- *mem in a3
- cmp.b #' ',d2
- bne.s not_a_space
- addq.w #5,d0
- rts
- not_a_space
- movem.l d0-d1/d3/a3,-(sp)
- cmp.b #"e",d2
- bge.s last_small_line
- move.l #smallfont,a0
- move.l #smallfont_width_table,a1
- sub.b #" ",d2
- bra.s get_small_letter_pos
- last_small_line
- move.l #smallfont+SMALLFONT_HEIGHT*40,a0
- move.l #smallfont_width_table2,a1
- sub.b #"e",d2
- get_small_letter_pos
-
- moveq #0,d5
- moveq #0,d3 ;pix pos in reg
- moveq #0,d4
- move.b (a1,d2),d4 ;the width of char
- move.w d4,d7
- tst.b d2
- beq.s small_pix_at_zero
- small_find_pix_position
- move.b (a1)+,d5
- add.w d5,d3
- subq.w #1,d2
- bne.s small_find_pix_position
- small_pix_at_zero
- *Right, d4 = width, d3 = pixel position of char in graphics
- move.w d3,d5
- andi.w #$f,d5 ;shift of char
-
- andi.w #$fff0,d3
- asr #3,d3 ;bytes in
- add.l d3,a0 ;graphics position
-
- move.l #malfont_mask_table,a2
- asl #2,d4
- move.l (a2,d4),d4
-
- ror.l d5,d4
-
- *right so now work out where graphics have to go
- mulu text_bpr,d1
- add.l d1,a3
-
- sub.w d5,d0 ;sub char offset from desired pix dest
- bpl.s small_no_problem
- move.w text_bpr,d1
- move.w d1,d6
- ext.l d6
- asl #3,d1
- add.w d1,d0 ;if minus treat as on prev line
- sub.l d6,a3
- small_no_problem
- move.w d0,d1
- ext.l d1
- andi.w #$fff0,d1 ;work out bytes in (word bound)
- asr #3,d1
- add.l d1,a3
- andi.w #$f,d0 ;shift
-
- ror #4,d0
- move.w d0,d1
- ori.w #$0fea,d0 ;AB+C=D
- swap d0 ;blit shift
- move.w d1,d0 ;b's shift
-
- move.w default_colour,d6
- draw_coloured_text
- lsr.w d6
- bcc.s dont_draw_plane
- small_wait_for_all_blits
- btst #14,dmaconr(a6)
- bne.s small_wait_for_all_blits
- move.l d4,malfont_mask
- move.l d0,bltcon0(a6)
- move.l a3,bltcpth(a6)
- move.l a3,bltdpth(a6)
- move.l a0,bltapth(a6) ;graphics
- move.l #malfont_mask,bltbpth(a6) ;char mask
-
- move.w #SMALLFONT_HEIGHT<<6+3,bltsize(a6)
-
- dont_draw_plane
- add.l Plane_Skip_Size,a3
- tst.w d6
- bne.s draw_coloured_text
- movem.l (sp)+,d0-d1/d3/a3
- add.w d7,d0 ;update x position
-
- rts
- Plane_Skip_Size
- dc.l LO_RES_PLANE
- *****************************************
- *** SET SPRITE TO SCREEN *****
- *****************************************
- Set_Sprite_To_Screen
- *send in colour to make in d0
- *Set the sprite colours to the game colours
- move.l #sprite_cols+2,a0
- move.l #copper_colours+2,a2
- move.l #black_list,a1
- move.l #game_list,a3
- move.w #16-1,d1
- set_sprite_to_game
- move.w (a2),(a0)
- move.w (a2),(a3)+
- move.w d0,(a1)+
- addq.l #4,a0
- addq.l #4,a2
- dbra d1,set_sprite_to_game
- rts
- *****************************************
- *** CHECK FOR CONTINUE *****
- *****************************************
- Check_For_Continue
-
- move.w Continue_Credits,d0
- add.w #48,d0
- move.b d0,Number_Of_Continues+14
- move.w #BPR,text_bpr
- bsr Take_Copy_Of_Area
- bsr Remove_Scanner
- bsr Remove_Player
- bsr White_All_Palette
- move.l #Continue_Text,a4
- move.w scroll_value,d0
- andi.w #$f,d0
- sub.w #$f,d0
- neg.w d0
-
- add.w #40,d0
- move.w #90,d1
- move.l copyback_area,a3
- bsr Display_String
- bsr Switch_On_Text_Screen
- Wait_For_Response
- jsr Sync
- bsr Read_Keyboard
- cmp.w #'N',d7
- beq.s Dont_Continue_Game
- cmp.w #'n',d7
- beq.s Dont_Continue_Game
- cmp.w #'Y',d7
- beq.s Continue_With_Game
- cmp.w #'y',d7
- beq.s Continue_With_Game
- bra.s Wait_For_Response
- Continue_With_Game
- subq.w #1,Continue_Credits
- clr.w Cash
- clr.w Cash_Request
- clr.l Score
- clr.w Inter_Score
- bsr Switch_Off_Text_Screen
- bsr Restore_Copy_Area
- move.w #3,Player_Lives
- move.w Player_Energy_Limit,Player_Current_Energy
- bsr Display_Total_Energy
- bsr Display_Player_Lives
- move.w #GAME_LOOP,Schedule_Entry
- bsr Do_Sprite_Colours
- bsr Display_Scanner
- bsr Display_Player
- move.w #1,d0
- rts
- Dont_Continue_Game
- bsr Switch_Off_Text_Screen
- clr.w d0
- rts
-
- *****************************************
- *** GAME OVER SCREEN *****
- *****************************************
- Game_Over_Screen
- move.w #BPR,text_bpr
- bsr Take_Copy_Of_Area
- bsr Remove_Scanner
- bsr Remove_Player
- bsr Delete_Points_From_Scanner
-
- move.l #Game_Over_Text,a4
- move.w scroll_value,d0
- andi.w #$f,d0
- sub.w #$f,d0
- neg.w d0
-
- add.w #60,d0
- move.w #90,d1
- move.l copyback_area,a3
- bsr Display_String
- move.l #black_list,a0
- move.w #16-1,d0
- fill_bl_wr
- move.w #$a00,(a0)+
- dbra d0,fill_bl_wr
- move.w #1,Fade_Speed
- jsr Sync
- move.l level_palette,a0
- move.l #black_list,a1
- move.l #copper_colours+2,a2
- move.w #10-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List
- bsr Switch_On_Text_Screen
- move.w #$fff,d0
- bsr Set_Sprite_To_Screen
-
- *Fade text screen colours to black
- move.w #3,Fade_Speed
- jsr Sync
- move.l #Game_list,a0
- move.l #black_list,a1
- move.l #sprite_cols+2,a2
- move.w #12-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List
- bsr Wait_For_Fire_Press
- rts
-
- Fade_Speed dc.w 1
-
- *****************************************
- *** BLACK OUT EVERYTHING *****
- *****************************************
- Black_Out_Everything
- move.l #copper_colours+2,a0
- move.l #sprite_cols+2,a1
- move.l #panel_colours+2,a2
- move.w #16-1,d0
- black_out_loop
- clr.w (a0)
- clr.w (a1)
- clr.w (a2)
- addq.l #4,a0
- addq.l #4,a1
- addq.l #4,a2
- dbra d0,black_out_loop
- rts
- *****************************************
- *** WAIT FOR USER FIRE PRESS *****
- *****************************************
- Wait_For_User_Fire_Press
- btst #7,$bfe001
- bne.s Wait_For_User_Fire_Press
- rts
- *****************************************
- *** LEVEL OVER SCREEN *****
- *****************************************
- Level_Over_Screen
- bsr Remove_Scanner
- bsr Remove_Player
- bsr Convert_Cash_To_String
- move.l #score_line+11,a5
- clr.w d7 ;convert zero's
- bsr Convert_Score_To_String
- move.w #BPR,text_bpr
- bsr Take_Copy_Of_Area
- move.l #Level_Over_Text,a4
- move.w #0,d0
- move.w #0,d1
- move.l copyback_area,a3
- bsr Display_String
- bsr Clear_Black_Colours
- move.w #1,Fade_Speed
- jsr Sync
- move.l level_palette,a0
- move.l #black_list,a1
- move.l #copper_colours+2,a2
- move.w #4-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List
- bsr Switch_On_Text_Screen
-
- move.w #$fff,d0
- bsr Set_Sprite_To_Screen
- *Fade text screen colours to black
- move.w #3,Fade_Speed
- jsr Sync
- move.l #Game_list,a0
- move.l #black_list,a1
- move.l #sprite_cols+2,a2
- move.w #8-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List
- bsr Wait_For_Fire_Press
- bsr Switch_Off_Text_Screen
- rts
- *****************************************
- *** DISPLAY END GAME *****
- *****************************************
- Display_End_Game
- bsr Clear_Black_Colours
- move.w #1,Fade_Speed
- move.l #black_list,a1
- move.l #panel_cols,a0
- move.l #panel_colours+2,a2
- move.w #16-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List ;fade to black
- move.w #3,Fade_Speed
- move.l #black_list,a1
- move.l level_palette,a0
- move.l #copper_colours+2,a2
- move.w #16-1,d7
- move.l #store_text_nums,a3
- bsr Fade_List_To_List ;fade to black
- move.w #BIT_PLANE_DMA+SPRITE_DMA,dmacon(a6)
-
- move.l memory_base,d0
- move.w d0,SHPlane1_lo
- swap d0
- move.w d0,SHPlane1_hi
- swap d0
- add.l #LO_RES_PLANE,d0
- move.w d0,SHPlane2_lo
- swap d0
- move.w d0,SHPlane2_hi
- swap d0
- add.l #LO_RES_PLANE,d0
- move.w d0,SHPlane3_lo
- swap d0
- move.w d0,SHPlane3_hi
- swap d0
- add.l #LO_RES_PLANE,d0
- move.w d0,SHPlane4_lo
- swap d0
- move.w d0,SHPlane4_hi
- swap d0
- add.l #LO_RES_PLANE,d0
- move.w d0,SHPlane5_lo
- swap d0
- move.w d0,SHPlane5_hi
- bsr Clear_Black_Colours
- bsr Clear_Game_Colours
- bsr Load_EndGame_Picture
- move.l #shareware_screen_copper,cop1lch(a6)
- clr.w copjmp1(a6)
- jsr Sync
- move.w #BIT_PLANE_DMA+$8000,dmacon(a6)
- move.l #black_list,a0
- move.l colour_map_ptr,a1
- move.l #share_cols+2,a2
- move.w #16-1,d7
- move.l #store_text_nums,a3
- bsr Fade_32_List_To_List
-
- bsr Wait_For_Fire_Press
-
- move.l #black_list,a1
- move.l colour_map_ptr,a0
- move.l #share_cols+2,a2
- move.w #16-1,d7
- move.l #store_text_nums,a3
- bsr Fade_32_List_To_List
- rts
- *****************************************
- *** DISPLAY GET READY *****
- *****************************************
- Display_Get_Ready
- move.w split_position,d3
- cmp.w #GET_READY_Y_POS,d3
- bgt.s gr_before_split
- move.l current_alien_split_draw_position,a3
- move.w #GET_READY_Y_POS,d2
- move.w d2,d4
- sub.w d3,d4
- mulu #BPR,d4
- add.l d4,a3
- bra.s do_the_bis
- gr_before_split
- move.l current_alien_draw_position,a3
- add.l #GET_READY_Y_POS*BPR,a3
- move.w #GET_READY_Y_POS,d2
- do_the_bis
- add.l #GET_READY_BYTE_POS,a3
-
- move.w d2,get_ready_split
- move.l a3,get_ready_mem_pos
- move.l #get_ready_graphics,a1
- move.l copy_store_area,a0
- move.w #GET_READY_HEIGHT-1,d0
- get_ready_y_loop
- move.w #GET_READY_WORDS-1,d1
- copy_back_and_in
- *make mask
- move.w (a1),d4
- or.w GET_READY_PLANE(a1),d4
- or.w GET_READY_PLANE*2(a1),d4
- or.w GET_READY_PLANE*3(a1),d4
- not.w d4
-
- move.w (a3),(a0)+ ;back
-
- and.w d4,(a3)
- move.w (a1),d5
- or.w d5,(a3) ;in
-
- move.w PLANE_INC(a3),(a0)+ ;back
- and.w d4,PLANE_INC(a3)
- move.w GET_READY_PLANE(a1),d5
- or.w d5,PLANE_INC(a3) ;in
- add.l #PLANE_INC*2,a3
- move.w (a3),(a0)+ ;back
- and.w d4,(a3)
- move.w GET_READY_PLANE*2(a1),d5
- or.w d5,(a3) ;in
-
- move.w PLANE_INC(a3),(a0)+ ;back
- and.w d4,PLANE_INC(a3)
- move.w GET_READY_PLANE*3(a1),d5
- or.w d5,PLANE_INC(a3) ;in
-
- sub.l #(PLANE_INC*2)-2,a3
- addq.l #2,a1
-
- dbra d1,copy_back_and_in
- add.l #BPR-(GET_READY_WORDS*2),a3
- addq.w #1,d2
- cmp.w d2,d3
- bne.s gr_stillbefore_split
- move.l current_alien_split_draw_position,a3
- add.l #GET_READY_BYTE_POS,a3
- gr_stillbefore_split
- dbra d0,get_ready_y_loop
- rts
- get_ready_mem_pos
- dc.l 0
- get_ready_split
- dc.w 0
- *****************************************
- *** REMOVE GET READY *****
- *****************************************
- Remove_Get_Ready
- move.w #$8080,d7 ;mask
-
-
- keep_going_until_mask_complete
- jsr Sync
- move.w d7,d4
- not.w d4
- move.l get_ready_mem_pos,a3
- move.w split_position,d3
- move.w get_ready_split,d2
- move.l copy_store_area,a0
- move.w #GET_READY_HEIGHT-1,d0
- get_rep_ready_y_loop
- move.w #GET_READY_WORDS-1,d1
- copy_rep_back
-
- move.w (a0)+,d6
- move.w (a3),d5
- and.w d7,d6
- and.w d4,d5
- or.w d5,d6
- move.w d6,(a3)
-
- move.w (a0)+,d6
- move.w PLANE_INC(a3),d5
- and.w d7,d6
- and.w d4,d5
- or.w d5,d6
- move.w d6,PLANE_INC(a3)
-
- add.l #PLANE_INC*2,a3
-
- move.w (a0)+,d6
- move.w (a3),d5
- and.w d7,d6
- and.w d4,d5
- or.w d5,d6
- move.w d6,(a3)
-
- move.w (a0)+,d6
- move.w PLANE_INC(a3),d5
- and.w d7,d6
- and.w d4,d5
- or.w d5,d6
- move.w d6,PLANE_INC(a3)
- sub.l #(PLANE_INC*2)-2,a3
- dbra d1,copy_rep_back
- add.l #BPR-(GET_READY_WORDS*2),a3
- addq.w #1,d2
- cmp.w d2,d3
- bne.s gr_rep_stillbefore_split
- move.l current_alien_split_draw_position,a3
- add.l #GET_READY_BYTE_POS,a3
- gr_rep_stillbefore_split
- dbra d0,get_rep_ready_y_loop
- cmp.w #$ffff,d7
- beq.s finished_wipe
- ror.w d7
- or.w #$8080,d7
- bra keep_going_until_mask_complete
- finished_wipe
- rts
-
-
- ****************************************
- **** CONVERT CASH TO STRING ********
- ****************************************
- Convert_Cash_To_String
- move.w cash,d0
- move.l #cash_line+10,a0
- ext.l d0
- move.l #10000,d1
- convert_csh_loop
- divu d1,d0
- move.w d0,d2 ;units
- clr.w d0
- swap d0
-
- add.b #'0',d2
- move.b d2,(a0)+
- cmp.w #1,d1
- beq.s done_csh_convert
- divu #10,d1
- bra.s convert_csh_loop
- done_csh_convert
- rts
- ****************************************
- **** CONVERT SCORE TO STRING ********
- ****************************************
- Convert_Score_To_String
- *send string in a5
- *leading zero flag in d7 - 0 = keep zeros
- move.l score,d0
- clr.w d3
- move.l #long_num_vals,a1
- move.l (a1)+,d1
- convert_scr_loop
- clr.w d2
- instance_count
- sub.l d1,d0
- bmi.s reached_end_c
- addq.w #1,d2
- bra.s instance_count
- reached_end_c
- add.l d1,d0
- tst d7
- beq.s forget_zeros
- tst d2
- bne.s forget_zeros
- tst d3
- bne.s forget_zeros
- move.b #' ',(a5)+
- bra.s done_z_tst
- forget_zeros
- move.w #1,d3
- add.b #'0',d2
- move.b d2,(a5)+
- done_z_tst
- cmp.w #1,d1
- beq.s done_scr_loop
- move.l (a1)+,d1
- bra.s convert_scr_loop
- done_scr_loop
- rts
-
-
|