Advertisement
Nightseeker

Soul Star X (32X) SoulStarX-fragment.s

Mar 10th, 2020
1,207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *************************
  2. * rotate sprite routine *
  3. *************************
  4.  
  5.     cnop    0,4
  6.  
  7. rotate_player
  8.     move    #comport1,r0        ;get level
  9.     move.w  (r0)+,r1
  10.     move.w  (r0)+,r2
  11.     move.w  (r0)+,r3
  12.  
  13.     move.w  (r0)+,r4
  14.     shll2   r4
  15.     move    #frame_table,r0
  16.     move    (r0,r4),r4
  17.  
  18. * R1 = xpos
  19. * R2 = ypos
  20. * R3 = angle
  21. * R4 = ptr to source data
  22.  
  23. rot_spr
  24.     move    #divider_unit,r14
  25.  
  26.     push    r1  ;xpos
  27.     push    r2  ;ypos
  28.  
  29.     shll    r3
  30.     move    #sintab,r0
  31.     move.w  (r0,r3),r13     ;sine (Dy)
  32.     move    #costab,r0
  33.     move.w  (r0,r3),r12     ;cosine (Dx)
  34.  
  35.     move.w  (r4)+,r8        ;xsize
  36.     move.w  (r4)+,r9        ;ysize
  37.  
  38.     move    r12,r10     ;xadd
  39.     move    r13,r11     ;yadd
  40.     add r10,r10
  41.     add r11,r11
  42.  
  43.     move    #rline_buf,r0       ;offset table
  44.     move    #0,r1           ;dstX
  45.     move    #0,r2           ;dstY
  46.  
  47.     move    #320,r3
  48.  
  49.     move    r8,r7
  50. .loop
  51.     swap.w  r2,r14          ;Yint * 320
  52.     exts.w  r14,r14
  53.     dmuls   r3,r14
  54.     swap.w  r1,r5
  55.     exts.w  r5,r5
  56.     move    macl,r14
  57.     add r5,r14          ;+ Xint
  58.     move.w  r14,(r0)        ;store xy pos
  59.     add #2,r0
  60.  
  61.     add r10,r1
  62.     add r11,r2
  63.  
  64.     dt  r7
  65.     bf  .loop
  66.  
  67.     pop r2
  68.     pop r1
  69.  
  70.     shll16  r1
  71.     shll16  r2
  72.  
  73.     move    r4,r0
  74.     add #4,r0
  75. .yloop
  76.     move    #overwrite,r3
  77.     move    r1,r5
  78.     shlr16  r5
  79.     exts.w  r5,r5
  80.     add r5,r3
  81.     move    r2,r5
  82.     shlr16  r5
  83.     exts.w  r5,r5
  84.     move    #320,r4
  85.     dmuls   r4,r5
  86.     move    macl,r5
  87.     add r5,r3
  88.  
  89.     move    r8,r5
  90.  
  91.     move    #rline_buf,r7
  92. .oloop
  93.     move.w  (r7)+,r6        ;get screen offset
  94.     add r3,r6           ;add screen base addr
  95.     move.b  (r0)+,r4
  96.     dt  r5          ;R7 = line length
  97.  
  98.     move.b  r4,(r6)         ;store pixel
  99.     add #1,r6
  100.  
  101.     bf/s    .oloop
  102.     move.b  r4,(r6)         ;store pixel
  103.  
  104.     sub r11,r1
  105.     add r10,r2
  106.  
  107.     dt  r9
  108.     bf  .yloop
  109.  
  110.     rts
  111.     nop
  112.  
  113.     lits
  114.  
  115.     cnop    0,4
  116.  
  117. rline_buf   ds.w    128*2
  118.  
  119. ;;rotate_player
  120. ;;  move    #comport1,r0        ;get level
  121. ;;  move.w  (r0)+,r1
  122. ;;  move.w  (r0)+,r2
  123. ;;  move.w  (r0)+,r3
  124. ;;  move.w  (r0)+,r4
  125. ;;
  126. ;;  move    #sp_pl_ship00,r4
  127. ;;
  128. ;;* R1 = xpos
  129. ;;* R2 = ypos
  130. ;;* R3 = angle
  131. ;;* R4 = ptr to source data
  132. ;;
  133. ;;  cnop    0,4
  134. ;;
  135. ;;rot_spr
  136. ;;  move    #divider_unit,r14
  137. ;;
  138. ;;  push    r1  ;xpos
  139. ;;  push    r2  ;ypos
  140. ;;
  141. ;;  shll    r3
  142. ;;  move    #sintab,r0
  143. ;;  move.w  (r0,r3),r13     ;sine (Dy)
  144. ;;  move    #costab,r0
  145. ;;  move.w  (r0,r3),r12     ;cosine (Dx)
  146. ;;
  147. ;;  move.w  (r4)+,r7        ;get line length
  148. ;;  dmuls   r12,r7
  149. ;;  move    r7,r9
  150. ;;  move    macl,r7
  151. ;;  add r7,r7
  152. ;;  shlr16  r7
  153. ;;  exts.w  r7,r7
  154. ;;
  155. ;;  move    r9,r1       ;get line y height
  156. ;;  dmuls   r13,r1
  157. ;;  move    macl,r1
  158. ;;  add r1,r1
  159. ;;  shlr16  r1
  160. ;;  exts.w  r1,r1
  161. ;;
  162. ;;  shll16  r9          ;calc line source x add
  163. ;;  divs    r7,r9           ;r9 = x adder,r7 = line length
  164. ;;
  165. ;;  move    r13,r6      ;get x adder for draw loop
  166. ;;  shll2   r6
  167. ;;
  168. ;;  move.w  (r4)+,r8        ;get sprite height
  169. ;;  dmuls   r12,r8
  170. ;;  move    r8,r10
  171. ;;  move    macl,r8
  172. ;;  add r8,r8
  173. ;;  shlr16  r8
  174. ;;  exts.w  r8,r8
  175. ;;
  176. ;;  shll16  r10
  177. ;;  divs    r0,r10          ;r10 = y adder,r8 = height
  178. ;;
  179. ;;  push    r7  ;
  180. ;;  push    r8  ;
  181. ;;  push    r10 ;
  182. ;;
  183. ;;  move    #320,r10    ;address yadd
  184. ;;  cmppz   r1
  185. ;;  bt  .1
  186. ;;  neg r10,r10
  187. ;;  neg r1,r1
  188. ;;.1
  189. ;;  move    r1,r0
  190. ;;  cmpeq   #0,r0
  191. ;;  bt  .2
  192. ;;
  193. ;;  shll16  r1
  194. ;;  divs    r8,r1
  195. ;;  shll16  r1  ;yadder
  196. ;;.2
  197. ;;  move    r1,r2   ;yfraction
  198. ;;  shar    r2  ;yfraction/2
  199. ;;
  200. ;;  move    #rline_buf,r0       ;offset table
  201. ;;  move    #0,r8           ;sourceX********************************
  202. * 32X Initial 68K Header Code. *
  203. ********************************
  204.  
  205.     opt l.
  206.  
  207. cramw       equ $C0000000
  208. icramw  macro
  209. .val    =   ((\1)>>14)
  210. .vala   =   ((\1)<<16)&111111111111110000000000000000
  211. .val    =   cramw!.val!.vala
  212.     move.l  #.val,(a6)
  213.     endm
  214.  
  215.     include debug.inc
  216.  
  217. l_type      equ 1   0=eur,1=jap,2=USA
  218.  
  219. eur =   0
  220. jap =   1
  221. usa =   0
  222.  
  223. marsipl     equ $880000
  224.  
  225. acomm0      equ $20     *       * Communcation Reg.
  226. acomm2      equ $22     *       * Communcation Reg.
  227. acomm4      equ $24     *       * Communcation Reg.
  228. acomm6      equ $26     *       * Communcation Reg.
  229. acomm8      equ $28     *       * Communcation Reg.
  230. acomm9      equ $29     *       * Communcation Reg.
  231. acomm10     equ $2a     *       * Communcation Reg.
  232. acomm12     equ $2c     *       * Communcation Reg.
  233. acomm14     equ $2e     *       * Communcation Reg.
  234.  
  235. vectors     group
  236. header      group
  237. code68k     group  
  238. ramcode68k  group
  239. ramcodesh2  group
  240.  
  241.     xref    master_start,slave_start,master_vbr,slave_vbr
  242.  
  243. ***************************
  244. * 68000 vector ($000000). *
  245. ***************************
  246.  
  247.     regs    pc=$3f0
  248.     regs    sr=$2700
  249.  
  250. entry_point equ $000003f0
  251. stack_top   equ $00000000
  252.  
  253. vdp_d       equ $c00000
  254. vdp_c       equ $c00004
  255.  
  256. cp_0    equ $a15120
  257. cp_2    equ $a15122
  258. cp_4    equ $a15124
  259. cp_6    equ $a15126
  260. cp_8    equ $a15128
  261. cp_a    equ $a1512a
  262. cp_c    equ $a1512c
  263. cp_e    equ $a1512e
  264.  
  265. pollhost    equ $fc0000         ;downloader ROM.
  266. exception   equ $fc0004         ;entry points.
  267.  
  268.         if  debug=1
  269.  
  270. polhost     macro               ;
  271.         dc.w    $a000           ;poll host machine.
  272.         endm                ;
  273.  
  274. break       macro               ;
  275.         dc.w    $a002           ;software breakpoint.
  276.         endm                ;
  277.  
  278. softentry   macro               ;
  279.         dc.w    $a003           ;link to host machine.
  280.         endm                ;
  281.  
  282.         else
  283.  
  284. polhost     macro               ;
  285.         endm                ;
  286.  
  287. break       macro               ;
  288.         endm                ;
  289.  
  290. softentry   macro               ;
  291.         endm                ;
  292.  
  293.         endc
  294.  
  295. exc_buserror    equ $02000000+exception
  296. exc_addrerr equ $03000000+exception
  297. exc_illinst equ $04000000+exception
  298. exc_div0    equ $05000000+exception
  299. exc_chk     equ $06000000+exception
  300. exc_trapv   equ $07000000+exception
  301. exc_priv    equ $08000000+exception
  302. exc_trace   equ $09000000+exception
  303. exc_linea   equ pollhost
  304.  
  305.     section vecs,vectors
  306.  
  307.     dc.l    stack_top           ;Initial SSP and PC.
  308.     dc.l    entry_point
  309.  
  310.     dc.l    $0220800c   ;EX_BusError
  311.     dc.l    $0320800c   ;EX_AddressError
  312.     dc.l    $0420800c   ;EX_IllegalInstruction
  313.     dc.l    $0520800c   ;EX_DivideBy0
  314.     dc.l    $0620800c   ;EX_CHK
  315.     dc.l    $0720800c   ;EX_TrapV
  316.     dc.l    $0820800c   ;EX_Priviledge
  317.     dc.l    $0920800c   ;EX_Trace
  318.     dc.l    EXC_LineA
  319.     dc.l    EXC_LineF
  320. * Reserved by motorola
  321.     dcb.l   12,0        ; EX_Motorola
  322. * Hardware interrupts
  323.     dc.l    EXC_Spurious
  324.     dc.l    EXC_Level1
  325.     dc.l    EXC_Level2
  326.     dc.l    EXC_Level3
  327.     dc.l    EXC_Level4
  328.     dc.l    EXC_Level5
  329.     dc.l    EXC_Level6
  330.     dc.l    EXC_Level7
  331.     dc.l    $20208008   ;EX_Trap0
  332.     dc.l    EXC_Trap1
  333.     dc.l    EXC_Trap2
  334.     dc.l    EXC_Trap3
  335.     dc.l    EXC_Trap4
  336.     dc.l    EXC_Trap5
  337.     dc.l    EXC_Trap6
  338.     dc.l    EXC_Trap7
  339.     dc.l    EXC_Trap8
  340.     dc.l    EXC_Trap9
  341.     dc.l    EXC_TrapA
  342.     dc.l    EXC_TrapB
  343.     dc.l    EXC_TrapC
  344.     dc.l    EXC_TrapD
  345.     dc.l    EXC_TrapE
  346.     dc.l    EXC_TrapF
  347. * Reserved by motorola
  348.  
  349.     dcb.l   16,_error0
  350.  
  351. *************************
  352. * Genesis ID ($000100). *
  353. *************************
  354.  
  355.     section hdr,header
  356.  
  357.     dc.b    'SEGA 32X        '
  358.         dc.b    '©T115 1995.APR'
  359.     dc.b    'SOULSTAR X                                      '
  360.     dc.b    'SOULSTAR X                                      '
  361.     dc.b    'T-11505B-50   '        ;stuff
  362.     dc.w    0           ;checksum.
  363.     dc.b    'J               '  ;joystick.
  364.     dc.l    $000000         ;rom start.
  365.     dc.l    $1fffff         ;rom end.
  366.     dc.l    $ff0000         ;ram start.
  367.     dc.l    $ffffff         ;ram end.
  368.     dc.b    'MR',0,0
  369.     dc.l    0,0
  370.     dc.b    '    '********************
  371. * Game Code Start. *
  372. ********************
  373.  
  374.     include mequates.68k
  375.     include obj_equ.s
  376.  
  377. ******************************************************************************
  378.     include coms_equ.s
  379.  
  380. com macro
  381.     move    #com_\1,d0
  382.     jsr send_com
  383.     endm
  384.  
  385. com4    macro
  386.     move    #com_\1,d0
  387.     jsr send_com4
  388.     endm
  389.  
  390. jcom    macro
  391.     move    #com_\1,d0
  392.     jmp send_com
  393.     endm
  394.  
  395. jcom4   macro
  396.     move    #com_\1,d0
  397.     jmp send_com4
  398.     endm
  399.  
  400. ******************************************************************************
  401.  
  402. no_traps    equ 1
  403. briefings   equ 0
  404.  
  405. ******************************************************************************
  406.  
  407. button_a    equ 0
  408. button_b    equ 1
  409. button_c    equ 2
  410. button_pause    equ 3
  411. button_option   equ 4
  412. button_y    equ 5
  413. button_z    equ 6
  414.  
  415. ******************************************************************************
  416.  
  417. ram_duration    equ 31*20
  418. bonus_hits  equ 10
  419. sh_del      equ 4
  420. mt_countdown08  equ 4
  421.  
  422. ******************************************************************************
  423. music   macro
  424.     move    #cdm_\1,d0
  425.     jsr start_music
  426.     endm
  427.  
  428. cdm_title   equ $00
  429. cdm_boss    equ $2d
  430. cdm_l360    equ $41
  431. cdm_death   equ $59
  432. cdm_fame    equ $5a
  433. cdm_credits equ $6b
  434. cdm_level123    equ $7b
  435. cdm_kutra   equ $93
  436. cdm_gigun   equ $a9
  437. cdm_bulkan  equ $c1
  438. cdm_twingha equ $d6
  439. cdm_guha    equ $ea
  440. cdm_metafus equ $101
  441. cdm_krast   equ $11a
  442.  
  443. ******************************************************************************
  444. ******************************************
  445. ntempsp     equ 16
  446. nweaps      equ 16
  447. nenweap     equ 16
  448. nenemy      equ 20
  449. nfxspr      equ 32
  450. wbase       equ 128
  451.  
  452. maxshield   equ 30
  453. maxacc      equ 224
  454.  
  455. ******************************************************************************
  456. ******************************************************************************
  457. hp_mult     equ 4
  458. hp_shift    equ 2
  459.  
  460. cpu_hits    equ 128*hp_mult
  461. guha_hits   equ 512*hp_mult
  462. bulkan_hits equ 128*hp_mult ; Mid-Boss
  463. bulkan2_hits    equ (256/2)*hp_mult ; BOSS
  464. metafus_hits    equ 256*hp_mult
  465. gigun_hits  equ 256*hp_mult
  466.  
  467. hp_a0   macro
  468.     move    #(\1)*hp_mult,en_hp(a0)
  469.     endm
  470.  
  471. hp_a5   macro
  472.     move    #(\1)*hp_mult,en_hp(a5)
  473.     endm
  474.  
  475. hp_a6   macro
  476.     move    #(\1)*hp_mult,en_hp(a6)
  477.     endm
  478. ******************************************************************************
  479. sclip   equ 200
  480. *************************************************
  481. pickup  macro
  482.     dc  (pu_\1<<12)+\2  ;tttt0mmmssssssss
  483.     endm
  484. pu_shield   equ 0
  485. pu_energy   equ 1
  486. pu_shot     equ 2
  487. pu_hunter   equ 3
  488. pu_ring     equ 4
  489. pu_laser    equ 5
  490. pu_missile  equ 6
  491. pu_bomb     equ 7
  492. pu_rocket   equ 8
  493. pu_charge   equ 9
  494. ******************************************************************************
  495. odb macro
  496.     dc  \1  ;col-dist
  497.     dc  \2,\3   ;x1,x2
  498.     dc  \4,\5   ;y1,y2
  499.     dc.l    \6  ;hit handler
  500.     dc.l    \7  ;logic handler
  501.     dc.l    \8  ;360 logic handler
  502.     dc.l    \9  ;output handler
  503.     dc.l    \10 ;initialiser
  504.     dc.b    \11 ;targetable
  505.     dc.b    \12 ;radarable
  506.     endm
  507.  
  508. push    macros
  509.     move.   \1,-(sp)
  510. pop macros
  511.     move.   (sp)+,\1
  512.  
  513. pushm   macros
  514.     movem. \1,-(sp)
  515. popm    macros
  516.     movem. (sp)+,\1
  517.  
  518. pushal  macros
  519.     movem   d3-d5,-(sp)
  520. popal   macros
  521.     movem   (sp)+,d3-d5
  522.  
  523. pusha   macros
  524.     movem.l d0-d7/a0-a6,-(sp)
  525. popa    macros
  526.     movem.l (sp)+,d0-d7/a0-a6
  527.  
  528. enemy   macro
  529.     dc  \1,ot_\2
  530.     dc  \3,\4,\5
  531.     endm
  532.  
  533. set_ld  macro
  534.     IF  l_type=0
  535.     move.b  #\1-1,ldel
  536.     ELSE
  537.     move.b  #\1-1,ldel
  538.     ENDIF
  539. *   bsr modify_fire_rate
  540.     endm
  541.  
  542. set_ld2 macro
  543.     IF  l_type=0
  544.     move.b  #\1-1,ldel2
  545.     ELSE
  546.     move.b  #\1-1,ldel2
  547.     ENDIF
  548.     endm
  549.  
  550. mp_sfx  macro
  551.     pushm.l d1-d3
  552.     moveq   #sam_\1,d1
  553.     move    #(\2)/2,d2
  554.     move    #\3,d3
  555.     com4    play_sfx
  556.     popm.l  d1-d3
  557.     rts
  558.     endm
  559.  
  560. ******************************************************************************
  561.  
  562. scratch_ram equ $ffff0000   ;guess wot?
  563.  
  564. v_spratt    equ $fc00       ;SAT base.
  565. v_hscrl     equ $f000       ;H-scroll table base.
  566.  
  567.         include equates.68k ;equates + macros.
  568.  
  569. game_code
  570.     SOFTENTRY
  571.  
  572.     lea $880000+grouporg(ramcode68k),a0
  573.     lea $ffff8000,a1
  574.     move.l  #groupend(ramcode68k)-grouporg(ramcode68k)-1,d7
  575. .ccl    move.b  (a0)+,(a1)+
  576.     dbf d7,.ccl
  577.  
  578.     move.l  sp,sp_save
  579.  
  580.     jsr setup_player
  581.  
  582. ******************
  583. * Game RAM Code. *
  584. ******************
  585.  
  586. game_start
  587.     di          ;disable interrupts.
  588.  
  589.     jsr init_vdp    ;write initial values to VDP.
  590.     jsr init_joy    ;read joystick types.
  591.  
  592.     ei
  593.  
  594. main_start
  595.     jsr screen_on
  596.  
  597.     clr level
  598. ;   MOVE    #2,LEVEL
  599. ;   MOVE    #3,LEVEL
  600.  
  601.     bsr restart_life_lost
  602.     move    #3,lives
  603.  
  604.     sf  diff_level
  605.     clr.l   score
  606.  
  607.     bsr level_setup
  608.  
  609.     moveq   #0,d0
  610.     jsr add_to_score
  611. *******************************************************************************
  612.     lea node_head,a0
  613.     lea node_tail,a1
  614.     move.l  a1,node_next(a0)
  615.     move.l  a0,node_prev(a1)
  616.     clr game_del
  617.     clr fade_delay
  618. *******************************************************************************
  619. ;   jsr scroff
  620.  
  621.     move.b  #2,vbl_count
  622.     clr startup_count
  623.     st  in_game
  624. mloop
  625.  
  626. .1  jsr wait_vbl
  627.     tst.b   vbl_count
  628.     bne.s   .1
  629.     IF  l_type=1
  630.     move.b  #3,vbl_count
  631.     ELSE
  632.     move.b  #2,vbl_count
  633.     ENDIF
  634.  
  635.     lea vdp_c,a6
  636.     ivramw  v_hscrl
  637.     move    back_x,-4(a6)
  638.     move    back_x,-4(a6)
  639.  
  640. ***************************************
  641.     jsr level_flipper
  642. ***************************************
  643.  
  644.     jsr level_output
  645.  
  646. ***************************************
  647.     addq    #1,game_del
  648.     and #$7fff,game_del
  649.     bne.s   .ng_roll
  650.     or  #$1000,game_del
  651. .ng_roll:
  652. ***************************************
  653.     move    scr_spd,d0
  654.     IF  l_type=0
  655.     muls    #$3334,d0
  656.     swap    d0
  657.     add scr_spd,d0
  658.     ENDIF
  659.     move    d0,scr_spd2
  660. ***************************************
  661.     tst sh_hit_num
  662.     beq.s   .sh_hit_ok
  663.     tst dying_cnt
  664.     bne.s   .sh_hit_ok
  665.     subq    #1,sh_hit_del
  666.     bpl.s   .sh_hit_ok
  667.     subq    #1,sh_hit_num
  668.     jsr do_low_shield_sfx
  669.     move    #sh_del,sh_hit_del
  670. .sh_hit_ok:
  671. ***************************************
  672.     jsr pickup_system
  673.     cmp #04,level
  674.     bne.s   .not_gigun
  675.     jsr gigun_checks
  676. .not_gigun:
  677.     jsr end_fader
  678. ***************************************
  679.     sf  hit_sfx_already
  680.  
  681. ***************************************
  682.     clr tmp_slot
  683. ***************************************
  684. * Do all processing here! *
  685. ***************************
  686.     subq    #1,gcnt3
  687.     bpl.s   .gcnt3
  688.     move    #3-1,gcnt3
  689. .gcnt3:
  690.     subq    #1,gcnt5
  691.     bpl.s   .gcnt5
  692.     move    #5-1,gcnt5
  693. .gcnt5:
  694.     subq    #1,gcnt6
  695.     bpl.s   .gcnt6
  696.     move    #6-1,gcnt6
  697. .gcnt6:
  698.     subq    #1,gcnt9
  699.     bpl.s   .gcnt9
  700.     move    #9-1,gcnt9
  701. .gcnt9:
  702.     subq    #1,gcnt10
  703.     bpl.s   .gcnt10
  704.     move    #9-1,gcnt10
  705. .gcnt10:
  706.     subq    #1,gcnt12
  707.     bpl.s   .gcnt12
  708.     move    #12-1,gcnt12
  709. .gcnt12:
  710.     subq    #1,gcnt19
  711.     bpl.s   .gcnt19
  712.     move    #19-1,gcnt19
  713. .gcnt19:
  714.     tst dying_cnt
  715.     beq.s   .not_dying
  716.     jsr do_player_dying
  717.     bra.s   .no_ctl
  718. .not_dying:
  719.     tst startup_count
  720.     bne.s   .no_ctl
  721.     jsr do_v_control
  722. .no_ctl:
  723.     tst.b   is_360
  724.     beq.s   .no_360
  725.     jsr set_360_map_pos
  726. .no_360:
  727. ***************************************
  728.     bsr level_control
  729. ***************************************
  730.     jsr create_enemies
  731.     jsr get_all_enemies
  732.     jsr get_all_weapons
  733.     jsr do_next_weapon
  734. ******************************************************************************
  735. * Check for 2nd player *
  736. ************************
  737.     tst.b   ply2mode
  738.     beq.s   .1player_only
  739.     jsr do_next_weapon_2
  740.     jsr player_2_control
  741.     jsr player_2_weapons
  742.     bra.s   .2player_done
  743. .1player_only:
  744.     jsr power_transfer_1p
  745.     cmp #2,vehicle
  746.     bne.s   .not_walker1
  747.     jsr do_1p_walker_targetting
  748.  
  749.     tst poptarg
  750.     beq.s   .no_poptarg
  751.     subq    #1,poptarg
  752.     move.l  mtarget,d0
  753.     beq.s   .no_poptarg
  754.     move.l  d0,a6
  755.     move    mob_x(a6),d0
  756.     move    mob_y(a6),d1
  757.     moveq   #0,d2
  758.     moveq   #0,d6
  759.     lea node_msight,a6
  760.     movem   d0/d1/d2/d6/d7,node_data(a6)
  761.     move    #ot_msight,mob_type(a6)
  762.     jsr insert_sprite
  763. .no_poptarg:
  764.  
  765.     bra.s   .2player_done
  766. .not_walker1:
  767.     lea weapon_tab,a0
  768.     add weapon,a0
  769.     cmp.b   #pw_bomblet,(a0)
  770.     bne.s   .2player_done
  771.     jsr handle_missile_sight
  772. .2player_done:
  773. ******************************************************************************
  774.     jsr plot_rams
  775.     jsr plot_player
  776.     tst charge_cnt
  777.     beq.s   .not_charging
  778.     jsr insert_charge_spr
  779. .not_charging:
  780. ***************************************
  781.  
  782.     bsr draw_sprites
  783.     jsr draw_panel
  784.  
  785.     com flip_screen
  786.     jsr wait_com
  787.  
  788.     btst    #button_pause,joy1
  789.     bne.s   .no_pause
  790. .paused
  791.     jsr wait_vbl
  792.     btst    #button_pause,joy1
  793.     beq.s   .paused
  794.  
  795. .paused1
  796.     jsr wait_vbl
  797.     btst    #button_pause,joy1
  798.     bne.s   .paused1
  799. .paused2
  800.     jsr wait_vbl
  801.     btst    #button_pause,joy1
  802.     beq.s   .paused2
  803. .no_pause
  804.  
  805.     MOVE.B  #16,shield
  806.    
  807.     bra mloop
  808.  
  809. ******************************************************************************
  810. * CPIC backgrounds *
  811. ********************
  812.  
  813. back_00a    incbin  backs\space1.cpi
  814.         even
  815. back_00b    incbin  backs\space2.cpi
  816.         even
  817.  
  818. back_03     incbin  backs\warpship.cpi
  819.         even
  820.  
  821. ******************************************************************************
  822. * 360 object data *
  823. *******************
  824.  
  825. zone_03_dat incbin  stages\zone03.dat
  826.         even
  827. zone_05_dat incbin  stages\zone05.dat
  828.         even
  829. zone_08_dat incbin  stages\zone08.dat
  830.         even
  831. zone_11_dat incbin  stages\zone11.dat
  832.         even
  833. zone_17_dat incbin  stages\zone17.dat
  834.         even
  835. zone_24_dat incbin  stages\zone24.dat
  836.         even
  837. zone_26_dat incbin  stages\zone26.dat
  838.         even
  839.  
  840. ******************************************************************************
  841. * Decompress background (2 playfields) *
  842. ****************************************
  843.  
  844. * A0 = playfield #1
  845. * A1 = playfield #2
  846.  
  847. decomp_68k_backgr
  848.     push.l  a1
  849.  
  850.     lea scratch_ram,a1
  851.     jsr unpack
  852.  
  853.     lea scratch_ram,a0
  854.     move    #$e000,d0
  855.     move    #64*2,d1
  856.     jsr decomp_cpic
  857.  
  858.     pop.l   a0
  859.     move.l  a0,d0       ;if -I've, only decomp 1st screen
  860.     bmi.s   .skip       ;skip unpack
  861.    
  862.     lea scratch_ram,a1
  863.     jsr unpack
  864. .skip
  865.     lea scratch_ram,a0
  866.     move    #$c000,d0
  867.     move    #64*2,d1
  868. ***************
  869. * decomp CPIC *
  870. ***************
  871. * A0 = ptr to CPIC file
  872. * D0 = dest. adr
  873. * D1 = dest CMAP width*2
  874.  
  875. decomp_cpic
  876.     lea vdp_c,a6
  877.  
  878.     vreg    15,2
  879.     bsr dc_palette
  880.     movem   d0/d1,-(sp)
  881.     bsr dc_chars
  882.     movem   (sp)+,d0/d1
  883. dc_cmap
  884.     move    d0,d4
  885.     move    d1,dest_xsize
  886.  
  887.     moveq   #0,d2
  888.     move    cpic_map(a0),d2
  889.     beq.s   .map_done
  890.     lea (a0,d2.l),a2
  891.     moveq   #0,d5
  892.     move.b  cpic_x(a0),d5
  893.     moveq   #0,d6
  894.     move.b  cpic_y(a0),d6
  895.     subq    #1,d6
  896. .yloop
  897.     move    d4,d2
  898.     move.l  a2,d1
  899.     move    d5,d0
  900.     add d5,a2
  901.     add d5,a2
  902.     bsr dma_trans_wr
  903.     add dest_xsize,d4
  904.     dbf d6,.yloop
  905. .map_done
  906.     rts
  907. dc_chars
  908.     move    cpic_dchar(a0),d2
  909.     move    cpic_char(a0),d3
  910.     lea (a0,d3),a1
  911.     move.l  a1,d1
  912.     move    cpic_nchar(a0),d0
  913.     bra dma_trans_wr
  914.  
  915. dc_palette
  916.     move.l  a4,-(sp)
  917.     lea palette_store,a4
  918.  
  919.     move    cpic_opal(a0),d3
  920.     beq.s   .no_palette
  921.     lea 2(a0,d3),a1
  922.     move    cpic_cpal(a0),d2
  923.     add d2,a4
  924.     or  #$c000,d2           ;CRAM write
  925.     move    d2,(a6)
  926.     move    #0,(a6)
  927.     lea -4(a6),a5
  928.     move.l  (a1),(a4)+
  929.     move.l  (a1)+,(a5)
  930.     move.l  (a1),(a4)+
  931.     move.l  (a1)+,(a5)
  932.     move.l  (a1),(a4)+
  933.     move.l  (a1)+,(a5)
  934.     move.l  (a1),(a4)+
  935.     move.l  (a1)+,(a5)
  936.     move.l  (a1),(a4)+
  937.     move.l  (a1)+,(a5)
  938.     move.l  (a1),(a4)+
  939.     move.l  (a1)+,(a5)
  940.     move.l  (a1),(a4)+
  941.     move.l  (a1)+,(a5)
  942.     move.l  (a1),(a4)+
  943.     move.l  (a1)+,(a5)
  944. .no_palette
  945.     move.l  (sp)+,a4
  946.     rts
  947.  
  948. dma_trans_wr
  949.     push.l  a0
  950.  
  951.     lea vdp_c,a6
  952.     vreg    15,2
  953.  
  954.     addq    #1,d0
  955.     lsr #1,d0
  956.     move.l  d1,a0
  957.  
  958.     move    d2,d1
  959.     and #$3fff,d2
  960.     or  #$4000,d2
  961.     and #$c000,d1
  962.     rol #2,d1
  963.     swap    d2
  964.     move    d1,d2
  965.     move.l  d2,(a6)
  966.     lea -4(a6),a5
  967. .loop
  968.     move.l  (a0)+,(a5)
  969.     dbf d0,.loop
  970.  
  971.     pop.l   a0
  972.     rts
  973.  
  974. *******************
  975. * Disable Screen. *
  976. *******************
  977.  
  978. screen_off
  979.     and #~$0040,reg1_shadow ;disable screen output.
  980.     move    reg1_shadow,vdp_c   ;write reg1 (screen enable).
  981.     rts
  982.  
  983. ******************
  984. * Enable Screen. *
  985. ******************
  986.  
  987. screen_on
  988.     or  #$0040,reg1_shadow  ;enable screen output.
  989.     move    reg1_shadow,vdp_c   ;write reg1 (screen enable).
  990.     rts
  991.  
  992. ***********************
  993. * Read PAL/NTSC Flag. *
  994. ***********************
  995.  
  996. get_tv
  997.     lea vdp_c,a6        ;
  998.     moveq   #1,d0           ;read PAL/NTSC flag.
  999.     and (a6),d0         ;
  1000.  
  1001.     lea cp_a,a6         ;write result to smooth-scroll A.
  1002.     move    d0,(a6)         ;
  1003.  
  1004.     rts
  1005.  
  1006. ***************
  1007. * Clear VRAM. *
  1008. ***************
  1009.  
  1010. clear_vram
  1011.     lea vdp_c,a6
  1012.     vreg    15,2            ;
  1013.     ivramw  0           ;clear VRAM.
  1014.     move    #(65536/4)-1,d7     ;
  1015. .cvl    move.l  #0,-4(a6)
  1016.     dbf d7,.cvl
  1017.  
  1018.     rts
  1019.  
  1020. ******************************************************************************
  1021. reset_specials
  1022.     move.l  #$08090aff,weapon_tab+4
  1023.     tst.b   ply2mode
  1024.     beq.s   .1p
  1025.     move.l  #$08090a00,weapon_tab+4
  1026. .1p
  1027.     rts
  1028. ******************************************************************************
  1029. restart_life_lost
  1030.     lea vars_start,a0
  1031.     move    #((vars_end-vars_start)/2)-1,d7
  1032. .cvars  clr (a0)+
  1033.     dbf d7,.cvars
  1034.  
  1035.     lea STRUCT_START,a0
  1036.     move    #((STRUCT_END-STRUCT_START)/4)-1,d0
  1037. .c2loop clr.l   (a0)+
  1038.     dbf d0,.c2loop
  1039.  
  1040.     move    #128,msight_x
  1041.     move    #88,msight_y
  1042.  
  1043.     moveq   #4,d1
  1044.     tst.b   ply2mode
  1045.     beq.s   .n_2mw
  1046.     move.l  #$00070003,d1
  1047. .n_2mw  move.l  d1,weapon
  1048.     lea weapon_tab,a0
  1049.     move.l  #$00ffff04,(a0)+
  1050.     move.l  #$08090aff,(a0)+
  1051.     tst.b   ply2mode
  1052.     beq.s   .1p
  1053.     move.l  #$ffffff04,-8(a0)
  1054.     move.l  #$08090a00,-4(a0)
  1055. .1p
  1056.     st  oweapon
  1057.     st  oweapon2
  1058.     st  opower
  1059.     sf  ram_weapon
  1060.     clr ram_count
  1061.     clr torpedo_count
  1062.  
  1063.     move.b  #maxshield/2,shield
  1064.     move    #(maxacc-1)/3,acc
  1065.     clr bombs_rem
  1066.     clr rockets_rem
  1067.     move    #40,missiles_rem
  1068.  
  1069.     clr player_x
  1070.     move    #$48,player_y
  1071.  
  1072.     move    #sclip,yclip
  1073.     rts
  1074. ******************************************************************************
  1075. set_hp_a0
  1076.     move    d0,mob_hp(a0)
  1077.     rts
  1078. ******************************************************************************
  1079. scroff
  1080.     jmp screen_off
  1081. set_scron_delay
  1082.     move    #3,scron_delay
  1083.     rts
  1084. ******************************************************************************
  1085. getrand
  1086.     move.b  rand_num,d0
  1087.     move.b  rand_num+1,rand_num
  1088.     move.b  d0,rand_num+1
  1089. ;   move    $ff800c,d0
  1090.     add rand_num,d0
  1091.     ror rand_num
  1092.     rts
  1093. ******************************************************************************
  1094. play_music
  1095. add_qsound
  1096. remove_qsound_a5
  1097. do_pl_startup
  1098.     rts
  1099.  
  1100. rotate_player_sprite
  1101.     move    node_player+mob_x,d1
  1102.     move    node_player+mob_y,d2
  1103.  
  1104.     move    pbank,d3
  1105.     asr #3,d3
  1106.     and #$7ff,d3
  1107.  
  1108.     move    node_player+mob_def,d4
  1109.  
  1110.     jcom4   rotate_player
  1111. ******************************************************************************
  1112.  
  1113.     include planet.s
  1114.     include surface.s
  1115.     include sprite.s
  1116.     include levels.s
  1117.     include elogic.s
  1118.  
  1119.     include mapping.s
  1120.  
  1121.     include bulkan.s
  1122.     include guha.s
  1123.     include twingha.s
  1124.     include metafus.s
  1125.     include gigun.s
  1126.     include krast.s
  1127.  
  1128.     include map360.s
  1129.     include weapons.s
  1130.     include weapons2.s  ;2nd player
  1131.  
  1132.     include music.s
  1133.  
  1134.     include control2.s
  1135.  
  1136.     include title.s
  1137.     include options.s
  1138.  
  1139.     include panel.s
  1140.  
  1141.     include cosin.s
  1142.  
  1143. odb_table
  1144.     odb -001,$000,-$000,$000,-$000,0,h_null,h_null,h_null,h_null,0,0
  1145.  
  1146.     rept    127
  1147.     odb $400,$200,-$200,$200,-$200,hit_enemy,do_path_anim,0,plot_spr,init_path_alien,0,0
  1148.     endr
  1149.  
  1150. * player weapons (20)
  1151.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1152.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_hunter_spr,hnull,0,0
  1153.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1154.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_pl_laser,hnull,0,0
  1155.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1156.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1157.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_pl_rocket,hnull,0,0
  1158.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_chargeable_spr,hnull,0,0
  1159.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_pl_laser,hnull,0,0
  1160.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1161.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1162.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1163.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1164.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1165.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1166.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1167.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1168.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1169.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1170.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1171.  
  1172.     rept    107
  1173.     odb -001,$000,-$000,$000,-$000,0,do_path_anim,0,plot_spr,hnull,0,0
  1174.     endr
  1175.  
  1176.     odb -001,$000,-$000,$000,-$000,0,h_null2,0,plot_spr,hnull,0,0
  1177.  
  1178. * explosions
  1179.     odb -001,$000,-$000,$000,-$000,0,h_g_exp,h_g_exp_360,plot_spr,hnull,0,0
  1180.     odb -001,$000,-$000,$000,-$000,0,h_a_exp,h_a_exp_360,plot_spr,hnull,0,0
  1181.     odb -001,$000,-$000,$000,-$000,0,h_g_exp,h_g_exp_360,plot_spr,hnull,0,0
  1182.     odb -001,$000,-$000,$000,-$000,0,h_a_exp,h_a_exp_360,plot_spr,hnull,0,0
  1183.     odb -001,$000,-$000,$000,-$000,0,h_g_exp,h_g_exp_360,plot_spr,hnull,0,0
  1184.     odb -001,$000,-$000,$000,-$000,0,h_a_exp,h_a_exp_360,plot_spr,hnull,0,0
  1185.     odb -001,$000,-$000,$000,-$000,0,h_a_exp,h_a_exp_360,plot_spr,hnull,0,0
  1186. * sm exp (or/bl)
  1187.     odb -001,$000,-$000,$000,-$000,0,h_sm_exp_or,h_sm_exp_or_360,plot_spr,hnull,0,0
  1188.     odb -001,$000,-$000,$000,-$000,0,h_sm_exp_bl,h_sm_exp_bl_360,plot_spr,hnull,0,0
  1189. * small tank smoke
  1190.     odb -001,$000,-$000,$000,-$000,0,h_st_smoke,h_st_smoke_360,plot_spr,hnull,0,0
  1191. * small exp (stage #09 BOSS)
  1192.     odb -001,$000,-$000,$000,-$000,0,h_smexp09,0,plot_spr,h_null,0,0
  1193. * small smoke (GIGUN)
  1194.     odb -001,$000,-$000,$000,-$000,0,h_sm_exp_bl2,0,plot_spr,h_null,0,0
  1195.  
  1196. * player explosions
  1197.     odb -001,$000,-$000,$000,-$000,0,h_a_exp,h_a_exp_360,plot_spr,hnull,0,0
  1198.  
  1199. * enemy weaps (32)
  1200.     odb -001,$000,-$000,$000,-$000,0,h_eweap00,0,plot_spr,hnull,0,0
  1201.     odb -001,$000,-$000,$000,-$000,0,h_eweap01,0,plot_spr,hnull,0,0
  1202.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1203.     odb -001,$000,-$000,$000,-$000,0,h_grzap_laser,0,plot_spr,hnull,0,0
  1204.     odb -001,$000,-$000,$000,-$000,0,h_eweap04,0,plot_tlaser_16,hnull,0,0
  1205.     odb $400,$200,-$200,$200,-$200,hit_enemy_missile,h_eweap_missile05,0,plot_spr,hnull,0,0
  1206.     odb $400,$300,-$300,$200,-$200,hit_enemy,h_eweap06,0,plot_spr,init_3hp,0,0
  1207.     odb -001,$000,-$000,$000,-$000,0,h_eweap07,0,plot_spr,hnull,0,0
  1208.     odb $400,$200,-$200,$200,-$200,hit_enemy_missile,h_eweap08,0,plot_spr,hnull,0,0
  1209.     odb $c00,$080,-$000,$080,-$080,hit_enemy_missile,h_eweap09,h_eweap09_360,plot_spr,hnull,1,$4
  1210.     odb -001,$000,-$000,$000,-$000,0,h_eweap0B,h_eweap0A_360,plot_spr,hnull,0,0
  1211.     odb $c00,$080,-$000,$080,-$080,hit_28_shot,h_eweap0B,h_eweap0B_360,plot_spr,hnull,0,$f
  1212.     odb -001,$000,-$000,$000,-$000,0,h_eweap0E,h_eweap0C_360,plot_tlaser_360,hnull,0,0
  1213.     odb -001,$000,-$000,$000,-$000,0,h_eweap0E,h_eweap0D_360,plot_spr,hnull,0,0
  1214.     odb -001,$000,-$000,$000,-$000,0,h_eweap0E,h_eweap0E_360,plot_spr,hnull,0,0
  1215.     odb -001,$000,-$000,$000,-$000,0,h_eweap0F,h_eweap0F_360,plot_tlaser_360,hnull,0,0
  1216.  
  1217.     odb $400,$200,-$200,$200,-$200,hit_enemy_missile,h_eweap10,0,plot_spr,hnull,0,0
  1218.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1219.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1220.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1221.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1222.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1223.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1224.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1225.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1226.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1227.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1228.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1229.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1230.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1231.     odb -001,$000,-$000,$000,-$000,0,h_eweap02,0,plot_spr,hnull,0,0
  1232.  
  1233. * player ship
  1234.     odb -001,$000,-$000,$000,-$000,0,h_null,0,rotate_player_sprite,h_null,0,0
  1235. * player walker
  1236.     odb -001,$000,-$000,$000,-$000,0,hnull,0,plot_player_walker,hnull,0,0
  1237. * missile sight
  1238.     odb -001,$000,-$000,$000,-$000,0,hnull,0,plot_msight,hnull,0,0
  1239. * stage 08 warping orb
  1240.     odb -001,$000,-$000,$000,-$000,0,h_worb08,0,plot_spr,h_null,0,0
  1241. * stage 05 laser sight
  1242.     odb -001,$000,-$000,$000,-$000,0,h_null,hl_05_lsight,plot_05_lsight,h_null,0,0
  1243. * stage 05 laser beam
  1244.     odb -001,$000,-$000,$000,-$000,0,h_null,hl_05_lbeam,plot_05_lbeam,h_null,0,0
  1245.  
  1246. * asteroid
  1247.     odb -001,$000,-$000,$000,-$000,0,h_asteroid00,0,plot_star,h_null,0,0
  1248. * building fragments
  1249.     odb -001,$000,-$000,$000,-$000,0,h_leira_bf1,h_leira_bf_360,plot_frag_spr,h_null,0,0
  1250.     odb -001,$000,-$000,$000,-$000,0,h_leira_bf2,h_leira_bf_360,plot_frag_spr,h_null,0,0
  1251.     odb -001,$000,-$000,$000,-$000,0,h_leira_bf3,h_leira_bf_360,plot_frag_spr,h_null,0,0
  1252.     odb -001,$000,-$000,$000,-$000,0,h_leira_bf4,h_leira_bf_360,plot_frag_spr,h_null,0,0
  1253. * panel palette fragments
  1254.     odb -001,$000,-$000,$000,-$000,0,h_pfrag1,h_leira_bf_360,plot_spr,h_null,0,0
  1255.     odb -001,$000,-$000,$000,-$000,0,h_pfrag2,h_leira_bf_360,plot_spr,h_null,0,0
  1256.     odb -001,$000,-$000,$000,-$000,0,h_pfrag3,h_leira_bf_360,plot_spr,h_null,0,0
  1257.     odb -001,$000,-$000,$000,-$000,0,h_pfrag4,h_leira_bf_360,plot_spr,h_null,0,0
  1258.  
  1259.     odb -001,$000,-$000,$000,-$000,0,h_pfrag1s,h_leira_bf_360,plot_spr,h_null,0,0
  1260.     odb -001,$000,-$000,$000,-$000,0,h_pfrag2s,h_leira_bf_360,plot_spr,h_null,0,0
  1261.     odb -001,$000,-$000,$000,-$000,0,h_pfrag3s,h_leira_bf_360,plot_spr,h_null,0,0
  1262.     odb -001,$000,-$000,$000,-$000,0,h_pfrag4s,h_leira_bf_360,plot_spr,h_null,0,0
  1263. * player hit
  1264.     odb -001,$000,-$000,$000,-$000,0,h_plyhit,0,plot_spr,hnull,0,0
  1265. * player RAM unit
  1266.     odb -001,$000,-$000,$000,-$000,0,h_null,0,plot_spr,hnull,0,0
  1267.  
  1268. * enemy 2 - down
  1269.     odb -001,$000,-$000,$000,-$000,0,h_enemy2_down,0,plot_spr,hnull,0,0
  1270. * leira lander down
  1271.     odb $400,$200,-$200,$200,-$200,0,h_leira_lander_down,0,plot_spr,hnull,0,0
  1272. * falling mine
  1273.     odb -001,$000,-$000,$000,-$000,0,h_falling_mine,0,plot_mine_spr,hnull,0,0
  1274. * sand spray
  1275.     odb -001,$000,-$000,$000,-$000,0,h_sand_spray,hl_sand_spray_360,plot_spr,hnull,0,0
  1276. * sand spray (small)
  1277.     odb -001,$000,-$000,$000,-$000,0,h_sand_spray2,hl_sand_spray2_360,plot_spr,hnull,0,0
  1278. * snakey sand spray
  1279.     odb -001,$000,-$000,$000,-$000,0,h_sand_spray_s,0,plot_spr,hnull,0,0
  1280. * guha crater
  1281.     odb -001,$000,-$000,$000,-$000,0,h_guha_crater,hl_guha_crater_360,plot_spr,hnull,0,0
  1282. * guha boss shield hit!
  1283.     odb -001,$000,-$000,$000,-$000,0,h_guha_bhit,hl_guha_bhit,plot_spr,hnull,0,0
  1284.  
  1285. * twingha water splashes (vlarge/large/small)
  1286.     odb -001,$000,-$000,$000,-$000,0,h_vl_splash10,0,plot_spr,hnull,0,0
  1287.     odb -001,$000,-$000,$000,-$000,0,h_l_splash10,0,plot_spr,hnull,0,0
  1288.     odb -001,$000,-$000,$000,-$000,0,h_s_splash10,0,plot_spr,hnull,0,0
  1289.  
  1290. ;   rept    384-ot_fxlast
  1291. ;   odb -001,$000,-$000,$000,-$000,0,0,0,0,hnull,0,0
  1292. ;   endr
  1293.  
  1294. * bonus 1a-c
  1295. ci_bonus1
  1296.     odb $400,$300,-$300,$300,-$300,hit_bonus1abc,h_bonus1a,0,plot_bonus,hnull,0,0
  1297.     odb $400,$300,-$300,$300,-$300,hit_bonus1abc,h_bonus1b,0,plot_bonus,hnull,0,0
  1298.     odb $400,$300,-$300,$300,-$300,hit_bonus1abc,h_bonus1c,0,plot_bonus,hnull,0,0
  1299. * leira rocks
  1300.     odb $400,$100,-$100,$100,-$c00,hit_indestructible,h_leira_trock,0,plot_spr,hnull,0,0
  1301.     odb $400,$100,-$100,$100,-$800,hit_indestructible,h_leira_mrock,0,plot_spr,hnull,0,0
  1302.     odb $400,$100,-$100,$100,-$400,hit_indestructible,h_leira_srock,0,plot_spr,hnull,0,0
  1303. * warpship boss
  1304.     odb $c00,$100,-$000,$100,-$000,hit_indestructible_360,h_boss03,0,plot_spr,hnull,0,$a
  1305. * warpship pilon
  1306.     odb $c00,$0c0,-$000,$180,-$000,hit_indestructible_360,h_wpilon03,0,plot_spr,hnull,0,$a
  1307. * warpship shield
  1308.     odb $c00,$0c0,-$000,$070,-$070,hit_indestructible_360,h_shields03,0,plot_spr,hnull,0,$a
  1309. * warpship warpgate
  1310.     odb -001,$000,-$000,$000,-$000,0,h_warpgate03,0,plot_spr,hnull,0,$f
  1311. * cpu malfunction
  1312.     odb -000,$000,-$000,$000,-$000,0,h_malf03,0,plot_spr,hnull,0,0
  1313. * warpship pylon
  1314.     odb -001,$000,-$000,$000,-$000,0,h_wp_pilon,0,plot_spr,hnull,0,$a
  1315. * warpship small pylon
  1316.     odb $c00,$080,-$000,$100,-$000,0,h_sm_pilon03,0,plot_spr,hnull,0,$a
  1317. * warpship fragment W,A,B
  1318.     odb -001,$000,-$000,$000,-$000,0,h_fragment03w,0,h_null,h_null,0,0
  1319.     odb $c00,$0e0,-$000,$120,-$000,hit_indestructible_360,h_fragment03a,h_fragment_03_360,plot_spr,hnull,0,0
  1320.     odb $c00,$0e0,-$000,$120,-$000,hit_indestructible_360,h_fragment03b,0,plot_spr,hnull,0,$3
  1321.  
  1322. * guha rocks
  1323.     odb $c00,$0c0,-$000,$100,-$000,hit_indestructible_360,h_guha_rock1,0,plot_spr,h_null,0,0
  1324.     odb $c00,$080,-$000,$080,-$000,hit_indestructible_360,h_guha_rock2,0,plot_spr,h_null,0,0
  1325. * guha dome
  1326.     odb $c00,$100,-$000,$0c0,-$000,hit_guha_dome360,h_guha_dome1,0,plot_spr,init_guha_dome,1,$2
  1327.     odb $c00,$100,-$000,$0c0,-$000,hit_guha_dome360,h_guha_dome2,0,plot_spr,h_null,1,$2
  1328.     odb $c00,$100,-$000,$050,-$000,hit_indestructible_360,h_guha_dome3,0,plot_spr,h_null,0,0
  1329. * guha small tower
  1330.     odb $c00,$080,-$000,$0c0,-$000,hit_guha_smtower360,h_guha_smtower1,0,plot_spr,h_null,1,$3
  1331.     odb $c00,$080,-$000,$080,-$000,hit_indestructible_360,h_guha_smtower2,0,plot_spr,h_null,0,0
  1332. * guha pilon
  1333.     odb $c00,$080,-$000,$180,-$000,hit_guha_pilon360,h_guha_pilon,0,plot_guha_pilon,h_null,0,$3
  1334.  
  1335. ********************************************************************
  1336. * twingha rocks *
  1337. *****************
  1338. * flat rock
  1339.     odb $400,$180,-$180,$100,-$100,hit_indestructible,h_fl_rock10,0,plot_spr,hnull,0,0
  1340. * small rock
  1341.     odb $400,$180,-$180,$100,-$400,hit_indestructible,h_s_rock10,0,plot_spr,hnull,0,0
  1342. * tall rock
  1343.     odb $400,$180,-$180,$100,-$d00,hit_indestructible,h_t_rock10,0,plot_spr,hnull,0,0
  1344. * tall umbrella rock
  1345.     odb $400,$180,-$180,$100,-$d00,hit_indestructible,h_tu_rock10,0,plot_spr,hnull,0,0
  1346.  
  1347. ********************************************************************
  1348.  
  1349. ;   rept    512-ot_htlast
  1350. ;   odb -001,$000,-$000,$000,-$000,0,0,0,0,hnull,0,0
  1351. ;   endr
  1352.  
  1353. * bonus 1
  1354. ci_bonus2
  1355.     odb $400,$200,-$200,$200,-$200,hit_bonus1,h_bonus1,0,plot_spr,init_bonus1,$1,0
  1356. *************
  1357. * STAGE #00 *
  1358. *************
  1359. * small starbase
  1360.     odb -001,$000,-$000,$000,-$000,0,h_enemy4,0,plot_spr,init_en4,$0,0
  1361. *************
  1362. * STAGE #01 *
  1363. *************
  1364. * leira buildings
  1365.     odb $400,$300,-$300,$100,-$800,hit_ground_obj_f,h_leira_od,0,plot_spr,init_1hp,$1,0
  1366.     odb -001,$300,-$300,$100,-$400,hit_indestructible,h_leira_od_d,0,plot_spr,hnull,0,0
  1367.     odb $400,$200,-$200,$100,-$b00,hit_ground_obj_f,h_leira_b1,0,plot_spr,init_3hp,$1,0
  1368.     odb -001,$200,-$200,$100,-$200,hit_indestructible,h_leira_b1_d,0,plot_spr,hnull,0,0
  1369.     odb $400,$300,-$400,$100,-$1000,hit_ground_obj_f,h_leira_rb2,0,plot_spr,init_6hp,$1,0
  1370.     odb -001,$300,-$400,$100,-$600,hit_indestructible,h_leira_rb2_d,0,plot_spr,hnull,0,0
  1371.     odb $400,$300,-$400,$100,-$1000,hit_ground_obj_f,h_leira_lb2,0,plot_spr,init_6hp,$1,0
  1372.     odb -001,$300,-$400****************
  1373. * Control file *
  1374. ****************
  1375. do_v_control
  1376.     tst dying_cnt
  1377.     beq.s   .not_dying
  1378.     rts
  1379. .not_dying
  1380.     move.b  joy0,d1
  1381.  
  1382.     tst.b   in_lava
  1383.     beq.s   .not_lava1
  1384.     or.b    #$0c,d1
  1385. .not_lava1
  1386.  
  1387.     move    vehicle,d0
  1388.     subq    #1,d0
  1389.     bmi striker_ctrl
  1390.     beq copter_ctrl
  1391. walker_ctl
  1392.     cmp #2+4,walker_count
  1393.     beq.s   .t2
  1394.     cmp #2,walker_count
  1395.     bne.s   .t1
  1396. .t2
  1397.     move    walker_count,d3
  1398.     cmp l_walker_count,d3
  1399.     beq.s   .t2a
  1400.     tst warp_count
  1401.     bne.s   .t2a
  1402.     jsr do_walker_foot_sfx
  1403. .t2a
  1404.     clr scr_spd
  1405.     clr walker_dir
  1406.     sf  walker_turn
  1407. .t1
  1408.     tst warp_count
  1409.     bne .we_are_warping
  1410.  
  1411.     move    pbank,d3
  1412.  
  1413.     btst    #2,d1
  1414.     bne.s   .nl
  1415.  
  1416.     st  walker_turn
  1417.     move    #-1,walker_dir
  1418.  
  1419.     add #$080,d3
  1420.     cmp #$200,d3
  1421.     blt.s   .pbd
  1422.     move    #$200,d3
  1423.     bra.s   .pbd
  1424. .nl
  1425.     btst    #3,d1
  1426.     bne.s   .nr
  1427.  
  1428.     st  walker_turn
  1429.     move    #-1,walker_dir
  1430.  
  1431.     sub #$080,d3
  1432.     cmp #-$200,d3
  1433.     bgt.s   .pbd
  1434.     move    #-$200,d3
  1435.     bra.s   .pbd
  1436. .nr
  1437.     tst.b   walker_turn
  1438.     bne.s   .pbd
  1439.    
  1440.     tst d3
  1441.     beq.s   .pbd
  1442.     bmi.s   .pbadd
  1443. .pbsub  sub #$80,d3
  1444.     bra.s   .pbd
  1445. .pbadd  add #$80,d3
  1446. .pbd    move    d3,pbank
  1447.  
  1448.     move    walker_count,l_walker_count
  1449.  
  1450.     tst slide_count
  1451.     beq .no_slide
  1452.  
  1453.     btst    #0,d1
  1454.     beq.s   .up_ok
  1455.     cmp #6,slide_count
  1456.     ble.s   .fuel_ok_97
  1457.     move    #6,slide_count
  1458. ;   bra.s   .fuel_ok_97
  1459. .up_ok
  1460. ;   moveq   #7,d0
  1461. ;   and game_del,d0
  1462. ;   bne.s   .fuel_ok_97
  1463. ;   subq    #1,acc
  1464. .fuel_ok_97
  1465.  
  1466.     sf  walker_turn
  1467.     move    slide_count,d0
  1468.     cmp #(20*3)-6,d0
  1469.     ble.s   .slide2
  1470.     moveq   #(20*3)-1,d0
  1471.     sub slide_count,d0
  1472.     lsl #4,d0
  1473.     bra.s   .slide1
  1474. .slide2
  1475. ;   tst acc
  1476. ;   bne.s   .fuel_ok_98
  1477. ;   subq    #2,scr_spd
  1478. ;   bpl .all_done
  1479. ;   clr scr_spd
  1480. ;   clr slide_count
  1481. ;.fuel_ok_98
  1482.     subq    #1,d0
  1483.     add d0,d0
  1484.     add d0,d0
  1485.     cmp #$60,d0
  1486.     ble.s   .slide1
  1487.     moveq   #$60,d0
  1488. .slide1
  1489.     move    d0,scr_spd
  1490.     bra .all_done
  1491.  
  1492. .no_slide
  1493.     tst jump_mode
  1494.     beq .no_jump
  1495.  
  1496.     cmp #1,jump_mode
  1497.     bne.s   .not_jm1
  1498.     subq    #1,jump_count2
  1499.     bpl .all_done
  1500.     move.b  joy_spc1,d0
  1501.     btst    d0,joy1
  1502.     beq.s   .jmp1_ok
  1503.     clr jump_mode
  1504.     bsr find_next_target
  1505.     jsr do_ntarg_sfx
  1506.     bra .no_jump
  1507. .jmp1_ok
  1508.     addq    #1,jump_mode
  1509. .not_jm1
  1510.     cmp #2,jump_mode
  1511.     bne.s   .not_jm2
  1512.     addq    #1,jump_count
  1513.     cmp #(20+(20/2))/2,jump_count
  1514.     bne .update_jmp
  1515.     addq    #1,jump_mode
  1516.     move    #20*3,jump_count2
  1517.     bra .update_jmp
  1518. .not_jm2
  1519.     cmp #3,jump_mode
  1520.     bne.s   .not_jm3
  1521.     cmp #$58,jump_thrust
  1522.     beq.s   .jmp_th_ok
  1523.     add #$0b,jump_thrust
  1524. .jmp_th_ok
  1525.     move.b  joy_spc1,d0
  1526.     btst    d0,joy1
  1527.     bne.s   .jump_x
  1528. ;   tst acc
  1529. ;   beq.s   .jump_x
  1530. ;   moveq   #7,d0
  1531. ;   and game_del,d0
  1532. ;   bne.s   .fuel_ok_99
  1533. ;   subq    #1,acc
  1534. ;.fuel_ok_99
  1535.  
  1536.     subq    #1,jump_count2
  1537.     bpl .update_jmp
  1538. .jump_x
  1539.     addq    #1,jump_mode
  1540.     clr jump_count2
  1541.     bra.s   .update_jmp
  1542. .not_jm3
  1543.     tst jump_thrust
  1544.     beq.s   .jmp_th_ok2
  1545.     subq    #4,jump_thrust
  1546.     bpl.s   .jmp_th_ok2
  1547.     clr jump_thrust
  1548. .jmp_th_ok2
  1549.     addq    #1,jump_count
  1550.     cmp #20,jump_count
  1551.     bne.s   .update_jmp
  1552.  
  1553.     subq    #1,jump_count
  1554.  
  1555.     move    jump_thrust,d0
  1556.     asr #1,d0
  1557.     move    d0,scr_spd
  1558.  
  1559.     clr player_y
  1560.  
  1561.     cmp #20/2,jump_count2
  1562.     beq.s   .th_ok3
  1563.     addq    #1,jump_count2
  1564. .th_ok3
  1565.     tst jump_thrust
  1566.     bne .all_done
  1567.     cmp #20/2,jump_count2
  1568.     bne .all_done
  1569.  
  1570.     clr jump_mode
  1571.     clr player_y
  1572.     rts
  1573.  
  1574. .update_jmp
  1575.     lea sintab,a0
  1576.     move    jump_count,d0
  1577.     muls    #1024/20,d0
  1578.     add d0,d0
  1579.     move.b  (a0,d0),d0
  1580.     ext d0
  1581.     push    d0
  1582.     asr #2,d0
  1583.     move    d0,player_y
  1584.     asr #1,d0
  1585.     add d0,player_y
  1586.  
  1587.     pop d0
  1588.     asr #1,d0
  1589.     add jump_thrust,d0
  1590.     asr #1,d0
  1591.     move    d0,scr_spd
  1592.     bra .all_done
  1593. .no_jump
  1594.     btst    #0,d1
  1595.     bne.s   .no_act_slide
  1596.     cmp #20/4,bb_down
  1597.     ble.s   .no_act_slide
  1598. ;   tst acc
  1599. ;   beq.s   .no_act_slide
  1600.     move    #20*3,slide_count
  1601.     move    #2,walker_count
  1602.     clr walker_dir
  1603.     sf  walker_turn
  1604.     bra .all_done
  1605. .no_act_slide
  1606.  
  1607.     move.b  joy_spc1,d0
  1608.     btst    d0,joy1
  1609.     bne.s   .no_act_jump
  1610.     move    #1,jump_mode
  1611.     clr jump_count
  1612.     move    #20/5,jump_count2
  1613.     move    #2,walker_count
  1614.     clr scr_spd
  1615.     clr walker_dir
  1616.     sf  walker_turn
  1617.     bra .all_done
  1618. .no_act_jump
  1619.  
  1620.     tst.b   in_lava
  1621.     bne.s   .not_down
  1622.     btst    #0,d1
  1623.     bne.s   .not_up
  1624.     move    #1,walker_dir
  1625.     move    #$12,scr_spd
  1626. .not_up
  1627.     btst    #1,d1
  1628.     bne.s   .not_down
  1629.     move    #-1,walker_dir
  1630.     move    #-$12,scr_spd
  1631. .not_down
  1632.  
  1633. .we_are_warping
  1634.     move    walker_dir,d3
  1635.     btst    #0,game_del+1
  1636.     beq.s   .walk2
  1637.     moveq   #0,d3
  1638. .walk2  add d3,walker_count
  1639.     and #7,walker_count
  1640.  
  1641. .all_done
  1642.     rts
  1643.  
  1644. ******************************************************************************
  1645. copter_ctrl
  1646.     tst.b   ctl_off
  1647.     beq.s   .ctl1
  1648.     move.b  ctl_off2,d1
  1649.     bra.s   .ctl2
  1650. .ctl1
  1651.     move.b  joy_spc1,d0
  1652.     btst    d0,joy1     ;*
  1653.     beq .okay
  1654. .ctl2
  1655.     btst    #0,d1
  1656.     bne.s   .not_up
  1657.     cmp #6,pitch_ang        ;6
  1658.     bge.s   .okay
  1659.     addq    #2,pitch_ang
  1660.     bra.s   .okay
  1661. .not_up
  1662.     btst    #1,d1
  1663.     bne.s   .not_down
  1664.     cmp #-6,pitch_ang       ;-6
  1665.     ble.s   .okay
  1666.     subq    #2,pitch_ang
  1667.     bra.s   .okay
  1668. .not_down
  1669.     tst pitch_ang
  1670.     beq.s   .okay
  1671.     bmi.s   .add
  1672. .sub
  1673.     subq    #1,pitch_ang
  1674.     bra.s   .okay
  1675. .add
  1676.     addq    #1,pitch_ang
  1677. .okay
  1678.     move    pitch_ang,d2
  1679.     move    d2,d0
  1680.     asr #1,d0
  1681.     neg d0
  1682.     move    d0,pitch_ang2
  1683.  
  1684.     tst warp_count      ;WARPSHIP
  1685.     bne.s   .sp_okay
  1686.  
  1687.     moveq   #8,d3
  1688.     move    d1,ccr
  1689.     bcc.s   .is_8
  1690.     bvc.s   .is_8
  1691.     moveq   #4,d3
  1692. .is_8
  1693.     add d2,d2
  1694.     add d2,d2
  1695.     add d2,d2
  1696.     tst cpu_rspd
  1697.     bne.s   .boss03act
  1698.     add d2,d2
  1699. .boss03act
  1700.     move    scr_spd,d0
  1701.     cmp d2,d0
  1702.     beq.s   .sp_okay
  1703.     bge.s   .sp_sub
  1704. .sp_add
  1705.     add d3,scr_spd
  1706.     bra.s   .sp_okay
  1707. .sp_sub
  1708.     sub d3,scr_spd
  1709. .sp_okay
  1710.     tst xspeed
  1711.     beq.s   .xpbd
  1712.     bmi.s   .xpbadd
  1713. .xpbsub sub #$80,xspeed
  1714.     bra.s   .xpbd
  1715. .xpbadd add #$80,xspeed
  1716. .xpbd
  1717.     move.b  joy_spc1,d0
  1718.     btst    d0,joy1
  1719.     bne.s   .no_xmove
  1720.  
  1721.     btst    #2,d1
  1722.     bne.s   .xnl
  1723.     cmp #$400,xspeed
  1724.     bge.s   .xnr
  1725.     add #$100,xspeed
  1726.     bra.s   .xnr
  1727. .xnl
  1728.     btst    #3,d1
  1729.     bne.s   .xnr
  1730.     cmp #-$400,xspeed
  1731.     ble.s   .xnr
  1732.     sub #$100,xspeed
  1733. .xnr
  1734.     bra .nr
  1735. .no_xmove
  1736.  
  1737.     btst    #2,d1
  1738.     bne.s   .nl
  1739.  
  1740.     cmp #$400,pbank
  1741.     bge.s   .pbd
  1742.     add #$100,pbank
  1743.     bra.s   .pbd
  1744. .nl
  1745.     btst    #3,d1
  1746.     bne.s   .nr
  1747.  
  1748.     cmp #-$400,pbank
  1749.     ble.s   .pbd
  1750.     sub #$100,pbank
  1751.     bra.s   .pbd
  1752. .nr
  1753.     tst pbank
  1754.     beq.s   .pbd
  1755.     bmi.s   .pbadd
  1756. .pbsub  sub #$80,pbank
  1757.     bra.s   .pbd
  1758. .pbadd  add #$80,pbank
  1759. .pbd
  1760.     tst.b   ctl_off
  1761.     bne.s   .not_cd
  1762.     move.b  joy_spc1,d0
  1763.     btst    d0,joy1
  1764.     bne .not_cd
  1765.     btst    #0,d1
  1766.     bne .not_cu
  1767.  
  1768.     cmp #6,yspd
  1769.     bge.s   .cud_okay
  1770.     addq    #2,yspd
  1771.     bra.s   .cud_okay
  1772. .not_cu
  1773.     btst    #1,d1
  1774.     bne .not_cd
  1775.     cmp #-6,yspd
  1776.     ble.s   .cud_okay
  1777.     subq    #2,yspd
  1778.     bra.s   .cud_okay
  1779. .not_cd
  1780.     tst yspd
  1781.     beq.s   .cud_okay
  1782.     bmi.s   .cud_add
  1783. .cud_sub
  1784.     subq    #1,yspd
  1785.     bra.s   .cud_okay
  1786. .cud_add
  1787.     addq    #1,yspd
  1788. .cud_okay
  1789.     move    yspd,d0
  1790.     add player_y,d0
  1791.     cmp min_player_y,d0
  1792.     bge.s   .cud_1
  1793.     move    min_player_y,d0
  1794. .cud_1  cmp #112-2,d0
  1795.     ble.s   .cud_2
  1796.     move    #112-2,d0
  1797. .cud_2  move    d0,player_y
  1798.     rts
  1799. ******************************************************************************
  1800. striker_ctrl
  1801.     tst.b   ctl_off
  1802.     beq.s   .ctl1
  1803.     move.b  ctl_off2,d1
  1804. .ctl1
  1805.     move    pbank,d0
  1806.  
  1807.     btst    #2,d1
  1808.     bne.s   .nl
  1809.  
  1810.     add #$180,d0    ;$100
  1811.     cmp #$400,d0
  1812.     ble.s   .pbd
  1813.     move    #$400,d0
  1814.     bra.s   .pbd
  1815. .nl
  1816.     btst    #3,d1
  1817.     bne.s   .nr
  1818.  
  1819.     sub #$180,d0    ;$100
  1820.     cmp #-$400,d0
  1821.     bge.s   .pbd
  1822.     move    #-$400,d0
  1823.     bra.s   .pbd
  1824. .nr
  1825.     tst d0
  1826.     beq.s   .pbd
  1827.     bmi.s   .pbadd
  1828. .pbsub  sub #$c0,d0     ;$80
  1829.     bpl.s   .pbd
  1830.     moveq   #0,d0
  1831.     bra.s   .pbd
  1832. .pbadd  add #$c0,d0     ;$80
  1833.     bmi.s   .pbd
  1834.     moveq   #0,d0
  1835. .pbd    move    d0,pbank
  1836.  
  1837.     ASR #4+3+1,D0       ;4+3
  1838.  
  1839.     move    d0,d2   ;
  1840.     asr #1,d2   ;
  1841.     add d2,d0   ;
  1842.  
  1843.     NEG D0
  1844. **********************************************
  1845.     ADD d0,player_x
  1846. **********************************************
  1847.     cmp #-$65,player_x
  1848.     bge.s   .xd1
  1849.     move    #-$65,player_x
  1850. .xd1    cmp #$5b,player_x
  1851.     ble.s   .xd2
  1852.     move    #$5b,player_x
  1853. .xd2
  1854.     moveq   #8,d2
  1855.     moveq   #-8,d3
  1856.  
  1857.     moveq   #0,d5       ;
  1858.  
  1859.     move    yspd,d0
  1860.     move.b  joy_do1,d4
  1861.     btst    d4,d1
  1862.     bne.s   .nd
  1863.     cmp d3,d0
  1864.     beq.s   .ydone
  1865.     subq    #4,d0       ;4
  1866.     bra.s   .ydone
  1867. .nd
  1868.     move.b  joy_up
  1869.     include coms_equ.s
  1870.     include obj_equ.s
  1871.  
  1872. dcmp    macros
  1873.     dc.w    (\1)*4,\2
  1874.  
  1875. dup macros
  1876.     dc.w    -((\1)*4),\2
  1877.  
  1878. dupf    macros
  1879.     dc.w    -(((\1)*4)+1),\2
  1880.  
  1881. divs    MACRO
  1882. **  move    #divider_unit,r14   ;use R14 as ptr to divide unit
  1883.     move    \1,(_d_jr,r14)
  1884.     move    \2,(_d_hrl32,r14)
  1885.     move    (_d_rsr,r14),\2
  1886.     ENDM
  1887.  
  1888. *************************
  1889. * SLAVE Wait-Task Loop. *
  1890. *************************
  1891.  
  1892. game_slave_start:
  1893.     nop
  1894. .game_slave_loop:
  1895.     move    #comport7,r1        ;
  1896.     move    #0,r0           ;clear SLAVE control comport.
  1897.     move.w  r0,(r1)         ;
  1898.  
  1899. .wait_task_loop:
  1900.     POLHOST
  1901.  
  1902.     move.w  (r1),r0         ;
  1903.     cmpeq   #0,r0           ;wait for task.
  1904.     bt  .wait_task_loop     ;
  1905.  
  1906.     move    #task_address+th,r0
  1907.     move    (15*4,r0),r1
  1908.     move    r1,gbr
  1909.     move    (1*4,r0),r1
  1910.     move    (2*4,r0),r2
  1911.     move    (3*4,r0),r3
  1912.     move    (4*4,r0),r4
  1913.     move    (5*4,r0),r5
  1914.     move    (6*4,r0),r6         ;
  1915.     move    (7*4,r0),r7     ;setup SLAVE r1-r14 & GBR.
  1916.     move    (8*4,r0),r8     ;
  1917.     move    (9*4,r0),r9
  1918.     move    (10*4,r0),r10
  1919.     move    (11*4,r0),r11
  1920.     move    (12*4,r0),r12
  1921.     move    (13*4,r0),r13
  1922.     move    (14*4,r0),r14
  1923.     move    (r0),r0
  1924.  
  1925.     nop             ;
  1926.     jsr (r0)            ;call task address.
  1927.     nop             ;
  1928.  
  1929.     bra .game_slave_loop    ;return to task loop.
  1930.     nop
  1931.  
  1932.     cnop    0,4         ;align to longword boundry.
  1933.  
  1934. task_address:
  1935.     dc.l    0           ;slave task address.
  1936. task_registers:
  1937.     dc.l    0,0,0,0,0,0,0       ;r1-r7.
  1938.     dc.l    0,0,0,0,0,0,0       ;r8-r14.
  1939.     dc.l    0           ;GBR.
  1940.  
  1941.     lits
  1942.  
  1943. **************************
  1944. * MASTER Wait-Task Loop. *
  1945. **************************
  1946.  
  1947. game_master_start:
  1948. ;   mcom    $000c
  1949. ;   move    #comport5,r1        ;
  1950. ;   move.w  (r1),r0         ;read Megadrive PAL/NTSC flag.
  1951. ;   move    #pal_ntsc,r1        ;
  1952. ;   move.w  r0,(r1)
  1953.  
  1954.     move    #_sysreg,r1     ;allow SH2 to access VDP +
  1955.     move.w  #$8008+PWMIRQ_ON,r0     ;enable VBL interrupts.
  1956.     move.w  r0,(r1)         ;
  1957.  
  1958.     move.w  r0,(vintclr,r1)     ;clear VINT ACK register.
  1959.     move.w  r0,(vintclr,r1)     ;
  1960.  
  1961.     move    #_frt,r1
  1962.     move    #0,r0
  1963.     move.b  r0,(_tier,r1)
  1964.     move    #$c2,r0
  1965.     move.b  r0,(_tocr,r1)
  1966.     move    #0,r0
  1967.     move.b  r0,(_ocr_h,r1)      ;
  1968.     move    #1,r0           ;set free run timer.
  1969.     move.b  r0,(_ocr_l,r1)      ;
  1970.     move    #0,r0
  1971.     move.b  r0,(_tcr,r1)
  1972.     move    #1,r0
  1973.     move.b  r0,(_tcsr,r1)
  1974.     move    #0,r0
  1975.     move.b  r0,(_frc_l,r1)
  1976.     move.b  r0,(_frc_h,r1)
  1977.  
  1978.     move    #initPWM,r0
  1979.     jsr (r0)
  1980.     nop
  1981.  
  1982.     move    #$20,r0         ;SH interrupt enable.
  1983.     move    r0,sr           ;
  1984.  
  1985.     bsr setup_screen        ;clear both screens
  1986.     nop
  1987.  
  1988.     MOVE    #COMPORT6,R0        ;
  1989.     MOVE    #$8000,R1       ;ENABLE FADE.
  1990.     MOVE.W  R1,(R0)         ;
  1991. .loop
  1992.     move    #comport0,r1        ;get command
  1993.     move.w  (r1),r0
  1994.     cmpeq   #0,r0
  1995.     bt  .loop
  1996.  
  1997.     move.w  (r1),r3         ;allow port to settle
  1998.     cmpeq   r3,r0
  1999.     bf  .loop
  2000.  
  2001.     move    #com_last,r3
  2002.     cmphi   r3,r0
  2003.     bt  .loop
  2004.  
  2005.     move    #.jump_tab-4,r2
  2006.     add r0,r2
  2007.     move    (r2),r0
  2008.  
  2009.     jsr (r0)            ;...and call it
  2010.     nop
  2011.  
  2012.     move    #comport0,r1        ;get command
  2013.     move    #0,r3           ;clear command port
  2014.     move.w  r3,(r1)
  2015.  
  2016.     bra .loop
  2017.     nop
  2018.  
  2019.     cnop    0,4
  2020.  
  2021.     dc.l    0
  2022. .jump_tab
  2023.     dc.l    wait_vbl
  2024.     dc.l    flip_screen
  2025.     dc.l    clear_screen
  2026.     dc.l    plot_sc_sprite
  2027.     dc.l    plot_pixel
  2028.     dc.l    plot_sprite
  2029.     dc.l    decompress_level
  2030.     dc.l    decompress_360_level
  2031.     dc.l    draw_360_floor
  2032.     dc.l    alloc_reset
  2033.     dc.l    PlayPWM
  2034.     dc.l    rotate_player
  2035.  
  2036.     lits
  2037.  
  2038. pal_ntsc    dc.w    0           ;PAL/NTSC flag from Megadrive.
  2039.  
  2040. ************************
  2041. * Plot point to screen *
  2042. ************************
  2043.  
  2044.     cnop    0,4
  2045.  
  2046. plot_pixel
  2047.     move    #comport1,r0
  2048.     move.w  (r0)+,r1        ;get x
  2049.     move.w  (r0)+,r2        ;get y
  2050.     move.w  (r0)+,r3        ;get colour
  2051.  
  2052.     move.w  #224,r4
  2053.     cmphs   r4,r2
  2054.     bt  .exit
  2055.  
  2056.     move.w  #320,r4
  2057.     muls    r4,r2
  2058.     cmphs   r4,r1
  2059.     bt  .exit
  2060.  
  2061.     move    #screen,r0
  2062.     move    macl,r2
  2063.     add r1,r0
  2064.     add r2,r0
  2065.     move.b  r3,(r0)
  2066. .exit
  2067.     rts
  2068.     nop
  2069.  
  2070.     lits
  2071.  
  2072. *************************
  2073. * Draw sprite to screen *
  2074. *************************
  2075.  
  2076.     cnop    0,4
  2077.  
  2078. plot_sprite
  2079.     move    #comport1,r0
  2080.     move.w  (r0)+,r2        ;get x
  2081.     move.w  (r0)+,r3        ;get y
  2082.     move.w  (r0),r8         ;get def
  2083.  
  2084.     shll2   r8
  2085.     move    #frame_table,r0
  2086.     add r8,r0
  2087.     move    (r0),r0
  2088.  
  2089.     cmpeq   #0,r0       ;frame unused?
  2090.     bf  .skip
  2091.     move    #sp_ringcannon,r0
  2092. ;.exit
  2093. ;   rts
  2094. ;   nop
  2095. .skip
  2096.     move.w  (r0)+,r4        ;get xsize
  2097.     move.w  (r0)+,r5        ;get ysize
  2098.     add #4,r0
  2099.  
  2100.     bra draw_sprite
  2101.     move    r0,r1           ;R1 = source data
  2102.  
  2103. *************************
  2104. * Draw sprite to screen *
  2105. *************************
  2106.  
  2107.     cnop    0,4
  2108.  
  2109. plot_sc_sprite
  2110.     move    #comport1,r0
  2111.     move.w  (r0)+,r2        ;get x
  2112.     move.w  (r0)+,r3        ;get y
  2113.     move.w  (r0)+,r6        ;get scale
  2114.     move.w  (r0),r8         ;get def
  2115.  
  2116.     shll2   r8
  2117.     move    #frame_table,r0
  2118.     add r8,r0
  2119.     move    (r0),r0
  2120.  
  2121.     cmpeq   #0,r0       ;frame unused?
  2122.     bf  .skip
  2123.     move    #sp_ringcannon,r0
  2124. ;.exit
  2125. ;   rts
  2126. ;   nop
  2127. .skip
  2128.     move    #1,r11  ;flip flag into R11 (0 = unflipped , 1 = flipped)
  2129.     and r0,r11  ;
  2130.     sub r11,r0  ;
  2131.    
  2132.     move.w  (r0)+,r4        ;get xsize
  2133.     move.w  (r0)+,r5        ;get ysize
  2134.     move.w  (r0)+,r8        ;get x-off
  2135.     move.w  (r0)+,r9        ;get y-off
  2136.  
  2137.     shll8   r8
  2138.     shll8   r9
  2139.     shll2   r8
  2140.     shll2   r9
  2141.     shll    r8
  2142.     shll    r9
  2143.  
  2144.     move    r0,r1           ;R1 = source data
  2145.     move    r11,r0
  2146.  
  2147.     move    #divider_unit,r10
  2148.  
  2149.     move    r6,(_d_jr,r10)
  2150.     move    r8,(_d_hrl32,r10)
  2151.     move    (_d_rsr,r10),r8
  2152.     cmpeq   #0,r0
  2153.     bt  .2
  2154.     neg r8,r8
  2155. .2
  2156.     sub r8,r2
  2157.  
  2158.     move    r6,(_d_jr,r10)      ;is this trashed??
  2159.     move    r9,(_d_hrl32,r10)
  2160.     move    (_d_rsr,r10),r9
  2161.     sub r9,r3
  2162.    
  2163.     shll2   r6
  2164.     shll2   r6
  2165.     shll    r6
  2166.  
  2167.     cmpeq   #0,r0
  2168.     bf/s    .1
  2169.     move    r6,r7           ;yscale = xscale
  2170.  
  2171.     bra scale_sprite
  2172.     nop
  2173. .1
  2174.     bra scale_flip_sprite
  2175.     nop
  2176.  
  2177.     lits
  2178.  
  2179. *********************
  2180. * DMAC clear screen *
  2181. *********************
  2182.  
  2183.     cnop    0,4
  2184.  
  2185. dmac_clear
  2186.     move    #_dmasource1,r8 ;point to DMAC.
  2187.  
  2188.     move    #0,r3
  2189.     move.w  r3,(r1)
  2190.  
  2191.     move    (12,r8),r0  ;read (clear TE flag)
  2192.  
  2193.     move    #0,r0       ;stop DMA.
  2194.     move    r0,(12,r8)  ;
  2195.  
  2196.     move    #01,r0  ;enable DMA.
  2197.     move    r0,(32,r8)  ;
  2198.  
  2199.     move    r1,(r8)     ;store DMA source address.
  2200.        
  2201.     move    r1,(4,r8)   ;store DMA destination address.
  2202.        
  2203.     move    r2,r0       ;store DMA size.
  2204.     move    r0,(8,r8)   ;
  2205.  
  2206.     move    #%0100011000000001,r0   ;start DMA.
  2207.     move    r0,(12,r8)      ;
  2208.  
  2209.     rts
  2210.     nop
  2211.  
  2212.     lits
  2213.  
  2214. ****************************
  2215. * Clear Screen - 360 stage *
  2216. ****************************
  2217.  
  2218. clear_screen_360
  2219.     stack
  2220.  
  2221.     swait
  2222.  
  2223.     move    #task_address+th,r5 ;point to SLAVE task setup.
  2224.  
  2225.     move    #screen+(136*160),r1
  2226.     move    r1,(1*4,r5)
  2227.  
  2228.     move    #.clear,r0
  2229.     move    r0,(r5)
  2230.     move    #comport7,r14
  2231.     move    #1,r0
  2232.     move.w  r0,(r14)
  2233.  
  2234.     bsr .clear
  2235.     move    #screen,r1
  2236.  
  2237.     unstack
  2238.     rts
  2239.     nop
  2240.  
  2241.     cnop    0,4
  2242.  
  2243. .clear
  2244.     move    #(136*320)/4,r0
  2245.     move    #0,r2
  2246. .clr_loop:
  2247.     move.w  r2,(r1)
  2248.     dt  r0
  2249.     bf/s    .clr_loop
  2250.     add #2,r1
  2251.  
  2252.     rts
  2253.     nop
  2254.  
  2255.     cnop    0,4
  2256.  
  2257. ****************
  2258. * Clear Screen *
  2259. ****************
  2260.  
  2261. clear_screen
  2262.     stack
  2263.  
  2264.     swait
  2265.  
  2266.     move    #task_address+th,r5 ;point to SLAVE task setup.
  2267.  
  2268.     move    #screen+(224*160),r1
  2269.     move    r1,(1*4,r5)
  2270.  
  2271.     move    #.clear,r0
  2272.     move    r0,(r5)
  2273.     move    #comport7,r14
  2274.     move    #1,r0
  2275.     move.w  r0,(r14)
  2276.  
  2277.     bsr .clear
  2278.     move    #screen,r1
  2279.  
  2280.     swait
  2281.  
  2282.     unstack
  2283.     rts
  2284.     nop
  2285.  
  2286.     cnop    0,4
  2287.  
  2288. .clear
  2289.     move    #(224*320)/4,r0
  2290.     move    #0,r2
  2291. .clr_loop:
  2292.     move.w  r2,(r1)
  2293.     dt  r0
  2294.     bf/s    .clr_loop
  2295.     add #2,r1
  2296.  
  2297.     rts
  2298.     nop
  2299.  
  2300.     lits
  2301.  
  2302. wait_slave
  2303.     push    r1
  2304.  
  2305.     move    #comport7,r1    ;point to slave control comport.
  2306. .wait_slave
  2307.     move.w  (r1),r0     ;
  2308.     cmpeq   #0,r0       ;wait slave.
  2309.     bf  .wait_slave ;
  2310.     rts
  2311.     pop r1
  2312.  
  2313. start_slave
  2314.     push    r1
  2315.     move    r0,(r5)
  2316.     move    #comport7,r1
  2317.     move    #1,r0
  2318.     move.w  r0,(r1)
  2319.     rts
  2320.     pop r1
  2321.  
  2322. *************************************
  2323. * Clear Screen + Setup Line-Tables. *
  2324. *************************************
  2325.  
  2326. setup_screen:
  2327.     stack
  2328.  
  2329.     move    #fb_cont_reg,r14
  2330.  
  2331.     move    #bm_mode_reg+1,r0   ;
  2332.     move.w  #%10000001,r1       ;byte per pixel mode.
  2333.     move.b  r1,(r0)         ;
  2334.  
  2335.     move    #$8000,r1
  2336.     move    #palette,r0
  2337.     move.w  r1,(r0)
  2338.  
  2339.     move    #1,r13
  2340.     bsr .clear_flip     ;
  2341.     nop             ;clear both flipscreens.
  2342.     move    #0,r13          ;
  2343.     bsr .clear_flip
  2344.     nop
  2345.  
  2346.     unstack
  2347.  
  2348.     rts
  2349.     nop
  2350.  
  2351. .clear_flip
  2352.     stack
  2353.  
  2354.     move.w  r13,(r14)       ;
  2355.     bsr wait_vbl        ;select frame buffer.
  2356.     nop             ;
  2357.  
  2358.     move    #screen,r0      ;
  2359.     move    #(240*320)/2,r1     ;setup screen clear loop.
  2360.     move    #0,r2           ;
  2361. .clr_loop:
  2362.     move.w  r2,(r0)         ;
  2363.     add #2,r0           ;clear screen buffer.
  2364.     dt  r1          ;
  2365.     bf  .clr_loop
  2366.  
  2367.     move    #line_table,r0      ;
  2368.     move.w  #$1e0/2,r1      ;setup linestart setup loop.
  2369.     move.w  #160,r2         ;
  2370.     move.w  #240,r3
  2371. .set_line_loop:
  2372.     move.w  r1,(r0)         ;write linestart.
  2373.  
  2374.     add r2,r1           ;
  2375.     add #2,r0           ;setup all linestarts.
  2376.     dt  r3          ;
  2377.     bf  .set_line_loop
  2378.  
  2379.     unstack
  2380.  
  2381.     rts
  2382.     nop
  2383.  
  2384.     lits
  2385.  
  2386. ****************
  2387. * Flip Screen. *
  2388. ****************
  2389.  
  2390. flip_screen:
  2391.     move    #flip_enable+th,r1  ;point to flip flag.
  2392. .wait:
  2393.     move.w  (r1),r0         ;
  2394.     cmpeq   #0,r0           ;buffer flips.
  2395.     bf  .wait           ;
  2396.  
  2397.     move    #1,r0           ;flag flip.
  2398.     move.w  r0,(r1)         ;
  2399.  
  2400.     rts
  2401.     nop
  2402.  
  2403.     lits
  2404.  
  2405. *******************
  2406. * Wait for A VBL. *
  2407. *******************
  2408.  
  2409. wait_vbl:
  2410.     move    #vbl_count+th,r1    ;setup VBL wait loop.
  2411.     move.w  (r1),r0         ;
  2412. .loop:
  2413.     move.w  (r1),r2         ;
  2414.     cmpeq   r0,r2           ;wait for VBL_COUNT to change.
  2415.     bt  .loop           ;
  2416.  
  2417.     rts
  2418.     nop
  2419.  
  2420.     lits
  2421.  
  2422. ************************************
  2423. * Enable,Disable & Set Fade Level. *
  2424. ************************************
  2425.  
  2426. set_fade:
  2427.     push    r0
  2428.  
  2429.     move    #comport6,r0        ;write fade value to comport.
  2430.     move.w  r4,(r0)         ;
  2431.  
  2432.     pop r0
  2433.  
  2434.     rts
  2435.     nop
  2436.  
  2437. *****************************
  2438. * Setup Pointer to Palette. *
  2439. *****************************
  2440.  
  2441. set_palette:
  2442.     move    #pal_ptr,r0     ;setup pointer for VBL.
  2443.     move    r4,(r0)         ;
  2444.  
  2445.     rts
  2446.     nop
  2447.  
  2448. *************************
  2449. * Master VBL Interrupt. *
  2450. *************************
  2451.  
  2452. vblank:
  2453.     move    #vbl_count+th,r1    ;
  2454.     move.w  (r1),r0         ;update VBL count.
  2455.     add #1,r0           ;
  2456.     move.w  r0,(r1)
  2457.  
  2458.     move    #flip_enable+th,r1  ;
  2459.     move.w  (r1),r0         ;flip screen?
  2460.     cmpeq   #0,r0           ;
  2461.     bt  .no_flip
  2462.  
  2463.     move    #0,r0           ;flag screen flipped.
  2464.     move.w  r0,(r1)         ;
  2465.  
  2466.     move    #fb_cont_reg+1,r1   ;
  2467.     move.b  (r1),r0         ;flip VDP bank.
  2468.     not r0,r0           ;
  2469.     move.b  r0,(r1)
  2470. .no_flip:
  2471.     move    #comport6,r0        ;
  2472.     move.w  (r0),r0         ;fade screen?
  2473.     cmppz   r0          ;
  2474.     bt  .no_fade
  2475.  
  2476.     push    r2
  2477.     push    r3
  2478.     push    r4
  2479.     push    r5
  2480.     push    r6
  2481.     push    r7
  2482.     push    r8
  2483.     push    r9
  2484.     push    r10
  2485.     push    r11
  2486.  
  2487.     move    r0,r6           ;copy fade value.
  2488.  
  2489.     move    #game_pal+2,r0      ;
  2490.     move    #palette+2,r1       ;setup palette fade loop.
  2491.     move    #256-1,r2       ;
  2492.  
  2493.     move    #0000000011111,r3   ;
  2494.     move    #0001111100000,r4   ;setup palette fade masks.
  2495.     move    #%111110000000000,r5    ;
  2496.  
  2497.     and r3,r6           ;mask out fade value (0-31).
  2498.  
  2499.     move    r6,r7
  2500.     shll2   r7
  2501.     shll2   r7          ;
  2502.     shll    r7          ;setup palette subtractors.
  2503.     move    r6,r8           ;
  2504.     shll8   r8
  2505.     shll2   r8
  2506. .fade_pal_loop:
  2507.     move.w  (r0)+,r9        ;
  2508.     move    r9,r10          ;read RGB value.
  2509.     move    r9,r11          ;
  2510.  
  2511.     and r3,r9
  2512.     sub r6,r9           ;
  2513.     cmppz   r9          ;reduce blue componant.
  2514.     bt  .no_blue        ;
  2515.     move    #0,r9
  2516. .no_blue:
  2517.     and r4,r10
  2518.     sub r7,r10          ;
  2519.     cmppz   r10         ;reduce green componant.
  2520.     bt  .no_green       ;
  2521.     move    #0,r10
  2522. .no_green:
  2523.     and r5,r11
  2524.     sub r8,r11          ;
  2525.     cmppz   r11         ;reduce red componant.
  2526.     bt  .no_red         ;
  2527.     move    #0,r11
  2528. .no_red:
  2529.     or  r10,r9          ;
  2530.     or  r11,r9          ;write RGB value.
  2531.     move.w  r9,(r1)         ;
  2532.  
  2533.     dt  r2          ;
  2534.     bf/s    .fade_pal_loop      ;fade whole palette.
  2535.     add #2,r1           ;
  2536.  
  2537.     pop r11
  2538.     pop r10
  2539.     pop r9
  2540.     pop r8
  2541.     pop r7
  2542.     pop r6
  2543.     pop r5
  2544.     pop r4
  2545.     pop r3
  2546.     pop r2
  2547. .no_fade:
  2548.     push    r2
  2549.     move.w  #($0F<<10)+($17<<5),r2
  2550.     move    #vbl_count+th,r1
  2551.     move.w  (r1),r0
  2552.     tst #1,r0
  2553.     bt  .skip
  2554.     move    #0,r2
  2555. .skip   move    #engine_glow,r0
  2556.     move.w  (r0),r1
  2557.     xor r2,r1
  2558.     move.w  r1,(r0)
  2559.     move    #palette+(192*2),r0
  2560.     move.w  r1,(r0)
  2561.     pop r2
  2562.  
  2563.     POLHOST
  2564.  
  2565.     rts
  2566.     nop
  2567.  
  2568.     lits
  2569.  
  2570.     cnop    0,4
  2571.  
  2572. floor_map   dc.l    0
  2573. floor_blocks    dc.l    0
  2574. map_lookup  dc.l    0 ;128*8*2 = 90 blocks,8 rotations,2 longwords each.
  2575. tvb_table   dc.l    0 ;ysize*4
  2576.  
  2577. vcnt        dc.l    $ff00
  2578. scr_ptr     dc.l    screen
  2579. pal_ptr     dc.l    game_pal+2
  2580. alloc_ptr2  dc.l    0
  2581.  
  2582. vbl_count   dc.w    0
  2583. flip_enable dc.w    0
  2584. engine_glow dc.w    ($1F<<10)+($1F<<5)
  2585.  
  2586. ship1_pal   incbin  sprites\ship1\ship.pal
  2587. ship2_pal   incbin  sprites\ship2\ship2.pal
  2588.  
  2589. game_pal
  2590.     incbin  panel.pal
  2591.     incbin  sprites\ship2\ship2.pal
  2592. game2_pal
  2593.     incbin  level02.pal
  2594.     incbin  sprite.pal
  2595.  
  2596. ******************************************************************************
  2597.  
  2598.     include sprite.sh2
  2599.     include floor.sh2
  2600.     include pwm.sh2
  2601.     include rotspr.sh2
  2602.  
  2603.     cnop    0,4
  2604.  
  2605. frame_table
  2606.     dc.l    sp_pl_ship00
  2607.     dc.l    sp_pl_ship01
  2608.     dc.l    sp_pl_ship02
  2609.     dc.l    sp_pl_ship03
  2610.     dc.l    sp_pl_ship04
  2611.     dc.l    sp_pl_ship05
  2612.     dc.l    sp_pl_ship06
  2613.     dc.l    sp_pl_ship07
  2614.     dc.l    sp_pl_ship08
  2615.     dc.l    sp_pl_ship09
  2616.     dc.l    sp_pl_ship10
  2617.     dc.l    sp_pl_ship11
  2618.     dc.l    sp_pl_ship12
  2619.     dc.l    sp_pl_ship13
  2620.     dc.l    sp_pl_ship14
  2621.     dc.l    sp_pl_ship05+1
  2622.     dc.l    sp_pl_ship06+1
  2623.     dc.l    sp_pl_ship07+1
  2624.     dc.l    sp_pl_ship08+1
  2625.     dc.l    sp_pl_ship09+1
  2626.     dc.l    sp_pl_ship00+1
  2627.     dc.l    sp_pl_ship01+1
  2628.     dc.l    sp_pl_ship02+1
  2629.     dc.l    sp_pl_ship03+1
  2630.     dc.l    sp_pl_ship04+1
  2631.  
  2632.     ds.l    25
  2633.  
  2634.     dc.l    sp_tc_ship09
  2635.     dc.l    sp_tc_ship10
  2636.     dc.l    sp_tc_ship11
  2637.     dc.l    sp_tc_ship12
  2638.     dc.l    sp_tc_ship13
  2639.     dc.l    sp_tc_ship14
  2640.     dc.l    sp_tc_ship15
  2641.     dc.l    sp_tc_ship16
  2642.     dc.l    sp_tc_ship17
  2643.     dc.l    sp_tc_ship00
  2644.     dc.l    sp_tc_ship01
  2645.     dc.l    sp_tc_ship02
  2646.     dc.l    sp_tc_ship03
  2647.     dc.l    sp_tc_ship04
  2648.     dc.l    sp_tc_ship05
  2649.     dc.l    sp_tc_ship06
  2650.     dc.l    sp_tc_ship07
  2651.     dc.l    sp_tc_ship08
  2652.     dc.l    sp_tc_ship09+1
  2653.     dc.l    sp_tc_ship10+1
  2654.     dc.l    sp_tc_ship11+1
  2655.     dc.l    sp_tc_ship12+1
  2656.     dc.l    sp_tc_ship13+1
  2657.     dc.l    sp_tc_ship14+1
  2658.     dc.l    sp_tc_ship15+1
  2659.     dc.l    sp_tc_ship16+1
  2660.     dc.l    sp_tc_ship17+1
  2661.  
  2662.     dc.l    sp_plasma_shot  ;o_weap1
  2663.  
  2664.     ds.l    4   ;o_srocks
  2665.     ds.l    42  ;o_enemy1
  2666.  
  2667.     dc.l    sp_gro_exp00    ;o_gro_exp
  2668.     dc.l    sp_gro_exp01
  2669.     dc.l    sp_gro_exp02
  2670.     dc.l    sp_gro_exp03
  2671.     dc.l    sp_gro_exp04
  2672.     dc.l    sp_gro_exp05
  2673.     dc.l    sp_gro_exp06
  2674.     dc.l    sp_gro_exp07
  2675.     dc.l    sp_gro_exp08
  2676.     dc.l    sp_gro_exp09
  2677.     dc.l    sp_gro_exp10
  2678.     dc.l    sp_gro_exp11
  2679.     dc.l    sp_gro_exp12
  2680.     dc.l    sp_gro_exp13
  2681.     dc.l    sp_gro_exp14
  2682.  
  2683.     dc.l    sp_air_exp00    ;o_air_exp
  2684.     dc.l    sp_air_exp01
  2685.     dc.l    sp_air_exp02
  2686.     dc.l    sp_air_exp03
  2687.     dc.l    sp_air_exp04
  2688.     dc.l    sp_air_exp05
  2689.     dc.l    sp_air_exp06
  2690.     dc.l    sp_air_exp07
  2691.     dc.l    sp_air_exp08
  2692.     dc.l    sp_air_exp09
  2693.  
  2694.     dme_del
  2695.     bne.s   .ng_roll
  2696.     or  #$1000,game_del
  2697. .ng_roll:
  2698. ***************************************
  2699.     move    scr_spd,d0
  2700.     IF  l_type=0
  2701.     muls    #$3334,d0
  2702.     swap    d0
  2703.     add scr_spd,d0
  2704.     ENDIF
  2705.     move    d0,scr_spd2
  2706. ***************************************
  2707.     tst sh_hit_num
  2708.     beq.s   .sh_hit_ok
  2709.     tst dying_cnt
  2710.     bne.s   .sh_hit_ok
  2711.     subq    #1,sh_hit_del
  2712.     bpl.s   .sh_hit_ok
  2713.     subq    #1,sh_hit_num
  2714.     jsr do_low_shield_sfx
  2715.     move    #sh_del,sh_hit_del
  2716. .sh_hit_ok:
  2717. ***************************************
  2718.     jsr pickup_system
  2719.     cmp #04,level
  2720.     bne.s   .not_gigun
  2721.     jsr gigun_checks
  2722. .not_gigun:
  2723.     jsr end_fader
  2724. ***************************************
  2725.     sf  hit_sfx_already
  2726.  
  2727.     tst torpedo_count
  2728.     beq.s   .normal_pals
  2729.     subq    #1,torpedo_count
  2730.     moveq   #1,d0
  2731.     and torpedo_count,d0
  2732.     beq.s   .normal_pals
  2733.     move    #$777f,torp_fade
  2734.     bra.s   .p4
  2735. .normal_pals:
  2736.     clr torp_fade
  2737. .p4:
  2738. ***************************************
  2739.     jsr level_flipper
  2740. ***************************************
  2741.     clr tmp_slot
  2742. ***************************************
  2743. * Do all processing here! *
  2744. ***************************
  2745.     subq    #1,gcnt3
  2746.     bpl.s   .gcnt3
  2747.     move    #3-1,gcnt3
  2748. .gcnt3:
  2749.     subq    #1,gcnt5
  2750.     bpl.s   .gcnt5
  2751.     move    #5-1,gcnt5
  2752. .gcnt5:
  2753.     subq    #1,gcnt6
  2754.     bpl.s   .gcnt6
  2755.     move    #6-1,gcnt6
  2756. .gcnt6:
  2757.     subq    #1,gcnt9
  2758.     bpl.s   .gcnt9
  2759.     move    #9-1,gcnt9
  2760. .gcnt9:
  2761.     subq    #1,gcnt10
  2762.     bpl.s   .gcnt10
  2763.     move    #9-1,gcnt10
  2764. .gcnt10:
  2765.     subq    #1,gcnt12
  2766.     bpl.s   .gcnt12
  2767.     move    #12-1,gcnt12
  2768. .gcnt12:
  2769.     subq    #1,gcnt19
  2770.     bpl.s   .gcnt19
  2771.     move    #19-1,gcnt19
  2772. .gcnt19:
  2773.     tst dying_cnt
  2774.     beq.s   .not_dying
  2775.     jsr do_player_dying
  2776.     bra.s   .no_ctl
  2777. .not_dying:
  2778.     tst startup_count
  2779.     bne.s   .no_ctl
  2780.     jsr do_v_control
  2781. .no_ctl:
  2782.     tst.b   is_360
  2783.     beq.s   .no_360
  2784.     jsr set_360_map_pos
  2785. .no_360:
  2786. ***************************************
  2787.     bsr level_control
  2788. ***************************************
  2789.     jsr handle_qsounds
  2790. ***************************************
  2791.     jsr create_enemies
  2792.     jsr get_all_enemies
  2793.     jsr get_all_weapons
  2794.     jsr do_next_weapon
  2795. ******************************************************************************
  2796. * Check for 2nd player *
  2797. ************************
  2798.     tst.b   ply2mode
  2799.     beq.s   .1player_only
  2800.     jsr do_next_weapon_2
  2801.     jsr player_2_control
  2802.     jsr player_2_weapons
  2803.     bra.s   .2player_done
  2804. .1player_only:
  2805.     jsr power_transfer_1p
  2806.     cmp #2,vehicle
  2807.     bne.s   .not_walker1
  2808.     jsr do_1p_walker_targetting
  2809.  
  2810.     tst poptarg
  2811.     beq.s   .no_poptarg
  2812.     subq    #1,poptarg
  2813.     move.l  mtarget,d0
  2814.     beq.s   .no_poptarg
  2815.     move.l  d0,a6
  2816.     move    mob_x(a6),d0
  2817.     move    mob_y(a6),d1
  2818.     moveq   #0,d2
  2819.     moveq   #0,d6
  2820.     lea node_msight,a6
  2821.     movem   d0/d1/d2/d6/d7,node_data(a6)
  2822.     move    #ot_msight,mob_type(a6)
  2823.     jsr insert_sprite
  2824. .no_poptarg:
  2825.  
  2826.     bra.s   .2player_done
  2827. .not_walker1:
  2828.     lea weapon_tab,a0
  2829.     add weapon,a0
  2830.     cmp.b   #pw_bomblet,(a0)
  2831.     bne.s   .2player_done
  2832.     jsr handle_missile_sight
  2833. .2player_done:
  2834. ******************************************************************************
  2835.     jsr plot_rams
  2836.     jsr plot_player
  2837.     tst charge_cnt
  2838.     beq.s   .not_charging
  2839.     jsr insert_charge_spr
  2840. .not_charging:
  2841. ***************************************
  2842.     moveq   #1,d0
  2843.     and torpedo_count,d0
  2844.     bne .no_pause
  2845.     cmp #16,game_del
  2846.     ble .no_pause
  2847.     tst end_fade
  2848.     bne .no_pause
  2849.     tst fade_count
  2850.     bne .no_pause
  2851.  
  2852.     tst.b   ply2mode
  2853.     beq.s   .not_2ply_99
  2854.     btst    #button_pause,joy1_2
  2855.     beq.s   .pausing
  2856. .not_2ply_99:
  2857.     btst    #button_pause,joy1
  2858.     bne .no_pause
  2859. .pausing:
  2860.     move.l  cs_reltime,-(sp)
  2861.     jsr pause_sound
  2862. .pw1:
  2863.     jsr wait_vbl
  2864.     jsr readpad
  2865.  
  2866.     tst.b   ply2mode
  2867.     beq.s   .not_2ply_98
  2868.     btst    #button_pause,joy1_2
  2869.     beq .pw1
  2870. .not_2ply_98:
  2871.     btst    #button_pause,joy1
  2872.     beq .pw1
  2873. .pw2:
  2874.     jsr wait_vbl
  2875.     jsr readpad
  2876.  
  2877.     tst.b   ply2mode
  2878.     beq.s   .not_2ply_97
  2879.     btst    #button_pause,joy1_2
  2880.     beq.s   .pw3
  2881. .not_2ply_97:
  2882.     btst    #button_pause,joy1
  2883.     bne.s   .pw2
  2884. .pw3:
  2885.     jsr wait_vbl
  2886.     jsr readpad
  2887.     btst    #button_pause,joy1
  2888.     beq.s   .pw3
  2889.     tst.b   ply2mode
  2890.     beq.s   .not_2ply_96
  2891.     btst    #button_pause,joy1_2
  2892.     beq.s   .pw3
  2893. .not_2ply_96:
  2894.     jsr unpause_sound
  2895.     move.l  (sp)+,cs_reltime
  2896. .no_pause:
  2897. ******************************************************************************
  2898.     jsr term_list
  2899.  
  2900.     cmp #26,level
  2901.     beq.s   .bodge_26
  2902.     cmp #08,level
  2903.     bne.s   .not_bodge_08
  2904. .bodge_26:
  2905.     jsr draw_underside
  2906. .not_bodge_08:
  2907.  
  2908.     move.l  floorB,d0
  2909.     move.l  floorF,floorB
  2910.     move.l  d0,floorF
  2911.  
  2912.     move.l  scrB,d0
  2913.     move.l  scrF,scrB
  2914.     move.l  d0,scrF
  2915.  
  2916.     move.l  listB,d0
  2917.     move.l  listF,listB
  2918.     move.l  d0,listF
  2919.  
  2920. ;   MOVE.B  #16,shield
  2921.  
  2922. ******************************************************************************
  2923.     cmp.b   #2,reset_flag
  2924.     beq main_start
  2925. ******************************************************************************
  2926.  
  2927.     tst dying_cnt
  2928.     bne.s   .die1
  2929.  
  2930.     cmp.b   #-2,shield
  2931.     bge mloop
  2932.     tst timer_val
  2933.     beq.s   .no_stop_music
  2934.     jsr stop_music
  2935. .no_stop_music:
  2936.     st  deact_weaps
  2937.     jsr do_exp2_sfx
  2938. .die1:
  2939.     cmp #20*2,dying_cnt
  2940.     bne.s   .die2
  2941.     clr last_plyhit
  2942. .die2:
  2943.     jsr dying_fader
  2944.     addq    #1,dying_cnt
  2945.     cmp #20*4,dying_cnt
  2946.     bne mloop
  2947.  
  2948.     sf  in_game
  2949.     jsr scroff
  2950.     jsr set_scron_delay
  2951.  
  2952.     lea stack,sp
  2953.     subq    #1,lives
  2954.     bne continue_game
  2955.  
  2956. * All lives gone!
  2957.  
  2958. ;   lea the_end_seq_file,a1
  2959. ;   jsr play_anim
  2960. ;   jsr fade_out_anim
  2961.  
  2962.     clr dying_fade_val
  2963.     moveq   #TITLE_FILE,d0
  2964.     jsr load_files
  2965.     jsr hiscore_game_over
  2966.  
  2967.     jmp main_start2
  2968.  
  2969. continue_game:
  2970.     bsr restart_life_lost
  2971.     bsr level_setup
  2972. *************************************************
  2973.     lea node_head,a0
  2974.     lea node_tail,a1
  2975.     move.l  a1,node_next(a0)
  2976.     move.l  a0,node_prev(a1)
  2977.     clr game_del
  2978. *************************************************
  2979.     bra mloop
  2980. ******************************************************************************
  2981. init_startup:
  2982.     move    #63+20,startup_count
  2983.     jmp do_thrusting_sfx
  2984.  
  2985. do_pl_startup:
  2986.     moveq   #$00000037,d0
  2987.     move.l  d0,player_x
  2988.     moveq   #0,d6
  2989.     cmp #62,d1
  2990.     bge.s   .1
  2991.     add d1,d1
  2992.     move    pl_st_table-2(pc,d1),d6
  2993.     move    #256/2,d0
  2994.     moveq   #88,d1
  2995. .1:
  2996.     subq    #1,startup_count
  2997.     move    vehicle,d7
  2998.     move.b  .table2(pc,d7),d7
  2999.     cmp #32,startup_count
  3000.     ble.s   .2
  3001.     move    #510,d7
  3002. .2:
  3003.     rts
  3004. .table2:
  3005.     dc.b    11,13
  3006.     even
  3007. pl_st_table:
  3008.     dc  $801,$802,$804,$808,$810,$820,$830,$840
  3009.     dc  $860,$880,$8a0,$8c0,$8e0,$900,$940,$980
  3010.     dc  $9b0,$9e0,$a10,$a40,$a70,$aa0,$ac0,$ae0
  3011.     dc  $ae8,$af0,$af8,$afc,$afe,$afd,$afc,$afa
  3012.     dc  $af8,$af4,$af0,$ae8,$ae0,$ad8,$ad0,$ac0
  3013.     dc  $ab0,$aa0,$a80,$a60,$a40,$a00,$9c0,$980
  3014.     dc  $940,$900,$880,$800,$780,$700,$680,$600
  3015.     dc  $580,$500,$480,$400,$380
  3016.  
  3017. dump_gpu_floor:
  3018.     lea lin_gpu,a0
  3019.     lea overlays,a1
  3020.     move    #lin_gpuL/4,d7
  3021. .loop:  move.l  (a0)+,(a1)+
  3022.     dbf d7,.loop
  3023.     rts
  3024.  
  3025. dump_gpu_360:
  3026.     lea l360_gpu,a0
  3027.     lea overlays,a1
  3028.     move    #l360_gpuL/4,d7
  3029. .loop:  move.l  (a0)+,(a1)+
  3030.     dbf d7,.loop
  3031.     rts
  3032. ******************************************************************************
  3033. draw_360_gpu:
  3034.     lea vars,a0
  3035.     move.l  floorF,(a0)+
  3036.     move.l  map,(a0)+
  3037.     move.l  blocks,(a0)+
  3038.     move.l  #sintab,(a0)+
  3039.     move.l  #costab,(a0)+
  3040.     move    oax,d0
  3041.     ext.l   d0
  3042.     move.l  d0,(a0)+
  3043.     move    alt,d0
  3044.     ext.l   d0
  3045.     move.l  d0,(a0)+
  3046.     movem   v360_off_ox,d0
  3047.     movem   v360_off_oy,d1
  3048.     move.l  d0,(a0)+
  3049.     move.l  d1,(a0)+
  3050.     move.l  #$54,(a0)+
  3051.  
  3052.     move.l  #calc_floor_360,semaphore_adr
  3053.     moveq   #1,d0
  3054.     move.l  d0,semaphore
  3055.     rts
  3056.  
  3057. draw_360_08_gpu:
  3058.     lea vars,a0
  3059.     move.l  floorF,d0
  3060.     add.l   #104*256,d0
  3061.     move.l  d0,(a0)+
  3062.     move.l  map,(a0)+
  3063.     move.l  blocks,(a0)+
  3064.     move.l  #sintab,(a0)+
  3065.     move.l  #costab,(a0)+
  3066.     move    oax,d0
  3067.     ext.l   d0
  3068.     move.l  d0,(a0)+
  3069.     move    alt,d0
  3070.     ext.l   d0
  3071.     move.l  d0,(a0)+
  3072.     movem   v360_off_ox,d0
  3073.     movem   v360_off_oy,d1
  3074.     move.l  d0,(a0)+
  3075.     move.l  d1,(a0)+
  3076.     move.l  #100-4,(a0)+
  3077.  
  3078.     move.l  #calc_floor_360,semaphore_adr
  3079.     moveq   #1,d0
  3080.     move.l  d0,semaphore
  3081.     rts
  3082.  
  3083. draw_linear_10_gpu:
  3084.     sub #$2000,map_xpos     ;KLUDGE
  3085.     move.l  #draw_linear_floor_10,d1
  3086.     bsr.s   draw_linear_gpu2
  3087.     add #$2000,map_xpos     ;KLUDGE
  3088.     rts
  3089.  
  3090. draw_linear_city_gpu:
  3091.     move.l  #draw_linear_floor_city,d1
  3092.     bra.s   draw_linear_gpu2
  3093.  
  3094. draw_linear_gpu:
  3095.     move.l  #draw_linear_floor,semaphore_adr
  3096.     moveq   #1,d0
  3097.     move.l  d0,semaphore
  3098.     jmp waitgpu
  3099.  
  3100. draw_linear_gpu2:
  3101.     moveq   #0,d2
  3102.  
  3103.     lea vars,a0
  3104.     move.l  floorB,(a0)+
  3105.     move.l  d2,(a0)+
  3106.     move.l  fbuff_ptr,(a0)+
  3107.     move.l  d2,(a0)+
  3108.     move.l  d2,(a0)+
  3109.     move.l  d2,(a0)+
  3110.     move    alt,d0
  3111.     ext.l   d0
  3112.     move.l  d0,(a0)+
  3113.  
  3114.     movem   map_xpos,d0
  3115.     move.l  d0,(a0)+
  3116.     movem   map_zpos,d0
  3117.     move.l  d0,(a0)+
  3118.  
  3119.     move.l  d1,semaphore_adr
  3120.     moveq   #1,d0
  3121.     move.l  d0,semaphore
  3122.  
  3123.     bra waitgpu
  3124.  
  3125. run_gpu_linear1:
  3126.     bsr waitgpu
  3127.     move.l  #calc_linear_floor,semaphore_adr
  3128.     moveq   #1,d0
  3129.     move.l  d0,semaphore
  3130.     rts
  3131.  
  3132. waitgpu:
  3133.     lea semaphore,a0
  3134. .wait:
  3135.     moveq   #1,d0
  3136.     divs    d0,d0
  3137.     divs    d0,d0
  3138.     tst.l   (a0)
  3139.     bne.s   .wait
  3140.     rts
  3141.  
  3142. waitgpu3:
  3143.     push.l  a0
  3144.     push.l  d0
  3145.  
  3146.     lea G_FLAGS,a0
  3147. .loop:
  3148.     moveq   #1,d0
  3149.     divu    d0,d0
  3150.  
  3151.     move.l  (a0),d0
  3152.     btst    #6,d0
  3153.     bne.s   .loop
  3154.  
  3155.     pop.l   d0
  3156.     pop.l   a0
  3157.     rts
  3158.  
  3159. ******************************************************************************
  3160. rotate_player_sprite:
  3161.     tst vehicle
  3162.     bne rotate_player_sprite_copter
  3163.  
  3164. rotate_player_sprite_striker:
  3165. ;   lea player_ptr,a0
  3166. ;   move    node_player+mob_def,a5
  3167. ;   cmp #25,a5
  3168. ;   blt.s   .1
  3169. ;   move    #12,a5
  3170. ;.1:
  3171. ;   add a5,a5
  3172. ;   add a5,a5
  3173. ;   move.l  (a0,a5),a0
  3174.  
  3175.     move    last_frame,a5
  3176.     add a5,a5
  3177.     add a5,a5
  3178.     lea player_ship,a0
  3179.  
  3180.     tst startup_count
  3181.     beq.s   .3
  3182.  
  3183.     move.l  a0,a1
  3184.     jmp blit_sprite
  3185. .3:
  3186.     lea 8(a0),a2
  3187.  
  3188.     sub.l   a3,a3
  3189.     move    node_player+mob_x,d4
  3190.     sub #(96/2),d4
  3191.     bpl.s   .no_x1_clip
  3192.     neg d4
  3193.     move    d4,a3
  3194. .no_x1_clip:
  3195.     move    node_player+mob_x,d4
  3196.     add #(96/2),d4
  3197.     sub #256,d4
  3198.     bmi.s   .no_x2_clip
  3199.     move    d4,a3
  3200. .no_x2_clip:
  3201.  
  3202.     bsr waitblit
  3203.  
  3204. ;set source...
  3205.    
  3206.     move.l  a2,A1_BASE
  3207.  
  3208.     move.l  #PITCH1|PIXEL16|WID96|XADDINC,A1_FLAGS      ;a1 = source
  3209.  
  3210.     move.l  (a0),d4
  3211.     swap    d4
  3212.     move.l  d4,A1_CLIP
  3213.  
  3214.     move    6(a0),d3
  3215.     move    d3,pyoff
  3216.  
  3217.     move    2(a0),d3
  3218.  
  3219.     move.l  #(72<<16)+96,d0
  3220.     sub a3,d0
  3221.     move.l  d0,B_COUNT
  3222.  
  3223. ******************************************
  3224. * outer loop line increment *
  3225. *****************************
  3226.  
  3227.     move    xspeed,d0
  3228.     add pbank,d0
  3229.  
  3230.     cmp #$400,d0
  3231.     ble.s   .zb1
  3232.     move    #$400,d0
  3233. .zb1:
  3234.     cmp #-$400,d0
  3235.     bge.s   .zb2
  3236.     move    #-$400,d0
  3237. .zb2:
  3238.     cmp #15*4,a5
  3239.     bge.s   .2
  3240.     neg d0
  3241. .2:
  3242.     asr #2,d0
  3243.     and #$ffe,d0
  3244.  
  3245.     lea costab,a2
  3246.     move    (a2,d0),d5
  3247.     move    d5,sp_cos
  3248.  
  3249.     lea sintab,a2
  3250.     move    (a2,d0),d5
  3251.     move    d5,sp_sin
  3252.  
  3253.     move    4(a0),d4        ;get Offx
  3254.     neg d4
  3255.     lsl #3,d4
  3256.     move    d4,sp_midx
  3257.  
  3258.     move    6(a0),d1        ;get Offy
  3259.     add #12,d1
  3260.     lsl #3,d1
  3261.     move    d1,sp_mid
  3262.     neg d1
  3263.  
  3264.     move    sp_midx,d4
  3265.     move    sp_cos,d0
  3266.     move    d0,d2
  3267.     move    sp_sin,d7
  3268.     move    d7,d6
  3269.     muls    d4,d0
  3270.     muls    d1,d7
  3271.     sub.l   d0,d7
  3272.     add.l   d7,d7
  3273.     swap    d7
  3274.     neg d7
  3275.     muls    d1,d2
  3276.     muls    d4,d6
  3277.     add.l   d2,d6
  3278.     add.l   d6,d6
  3279.     swap    d6
  3280.  
  3281.     sub sp_midx,d7
  3282.  
  3283.     add sp_mid,d6
  3284.     add #(-12*8),d6
  3285.  
  3286.     ext.l   d6
  3287.     ext.l   d7
  3288.     moveq   #16-3,d2
  3289.     lsl.l   d2,d6
  3290.     lsl.l   d2,d7
  3291.     move    d6,d2
  3292.     swap    d2
  3293.     move    d7,d2
  3294.     move.l  d2,A1_FPIXEL
  3295.     swap    d7
  3296.     move    d7,d6
  3297.     move.l  d6,A1_PIXEL
  3298.  
  3299. ;set inner loop
  3300.  
  3301.     move    sp_cos,d0
  3302.     ext.l   d0
  3303.     add.l   d0,d0
  3304.  
  3305.     move    sp_sin,d1
  3306.     ext.l   d1
  3307.     add.l   d1,d1
  3308.  
  3309.     move    d1,d2
  3310.     swap    d2
  3311.     move    d0,d2
  3312.     move.l  d2,A1_FINC
  3313.     swap    d0
  3314.     move    d0,d1
  3315.     move.l  d1,A1_INC
  3316. ***
  3317.     moveq   #-96,d4
  3318.     add a3,d4
  3319.     moveq   #1,d1
  3320.  
  3321.     move    sp_cos,d3
  3322.     move    d3,d2
  3323.     move    sp_sin,d7
  3324.     move    d7,d6
  3325.     muls    d4,d3
  3326.     muls    d1,d7
  3327.     sub.l   d3,d7
  3328.     add.l   d7,d7
  3329.  
  3330.     muls    d1,d2
  3331.     muls    d4,d6
  3332.     add.l   d2,d6
  3333.     add.l   d6,d6
  3334. ***
  3335.     neg.l   d7
  3336.  
  3337.     move    d6,d2
  3338.     swap    d2
  3339.     move    d7,d2
  3340.     move.l  d2,A1_FSTEP
  3341.     swap    d7
  3342.     move    d7,d6
  3343.     move.l  d6,A1_STEP
  3344.  
  3345. ******************************************
  3346. * set dest *
  3347. ************
  3348.  
  3349.     move.l  scrB,A2_BASE
  3350.  
  3351.     move    node_player+mob_y,d1
  3352.     sub pyoff,d1
  3353.     sub #24,d1
  3354.  
  3355.     swap    d1
  3356.     add node_player+mob_x,d1
  3357.     sub #(96/2),d1
  3358.  
  3359.     move.l  #(1<<16)+(-96&$ffff),d2
  3360.     add a3,d2
  3361.     move.l  #PITCH1|PIXEL16|WID256|XADDPIX,d3   ;a2 = dest (screen)
  3362.  
  3363.     cmp #15*4,a5
  3364.     bge.s   .99
  3365.     add #96,d1
  3366.     neg d2
  3367.     bset    #19,d3
  3368. .99:    move.l  d1,A2_PIXEL
  3369.     move.l  d2,A2_STEP
  3370.     move.l  d3,A2_FLAGS
  3371.  
  3372.     move    striker_fade,d0
  3373.     swap    d0
  3374.     clr d0
  3375.     move.l  d0,B_IINC
  3376.     move.l  d0,B_PATD
  3377.  
  3378.     move.l  #CLIP_A1|SRCSHADE|GOURZ|SRCEN|LFU_S|UPDA1F|UPDA2|DSTA2|DCOMPEN,B_CMD    ;Start the BLTTER
  3379. .exit:
  3380.     bsr waitblit
  3381.  
  3382.     rts
  3383.  
  3384. rotate_player_sprite_copter:
  3385.     lea player_ptr,a0
  3386.     move    node_player+mob_def,a5
  3387.     sub #50,a5
  3388.     add a5,a5
  3389.     add a5,a5
  3390.     move.l  (a0,a5),a0
  3391.  
  3392.     lea 8(a0),a2
  3393.  
  3394.     bsr waitblit
  3395.  
  3396. ;set source...
  3397.    
  3398.     move.l  a2,A1_BASE
  3399.  
  3400.     move.l  #PITCH1|PIXEL16|WID80|XADDINC,A1_FLAGS      ;a1 = source
  3401.  
  3402.     move.l  (a0),d4
  3403.     swap    d4
  3404.     move.l  d4,A1_CLIP
  3405.  
  3406.     move    6(a0),d3
  3407.     move    d3,pyoff
  3408.  
  3409.     move    2(a0),d3
  3410.  
  3411.     move.l  #(72<<16)+80,B_COUNT
  3412.  
  3413. ******************************************
  3414. * outer loop line increment *
  3415. *****************************
  3416.  
  3417.     move    xspeed,d0
  3418.     add pbank,d0
  3419.  
  3420.     cmp #$400,d0
  3421.     ble.s   .zb1
  3422.     move    #$400,d0
  3423. .zb1:
  3424.     cmp #-$400,d0
  3425.     bge.s   .zb2
  3426.     move    #-$400,d0
  3427. .zb2:
  3428.     cmp #15*4,a5
  3429.     blt.s   .2
  3430.     neg d0
  3431. .2:
  3432.     asr #2,d0
  3433.     and #$ffe,d0
  3434.  
  3435.     lea costab,a2
  3436.     move    (a2,d0),d5
  3437.     move    d5,sp_cos
  3438.  
  3439.     lea sintab,a2
  3440.     move    (a2,d0),d5
  3441.     move    d5,sp_sin
  3442.  
  3443.     move    4(a0),d4        ;get Offx
  3444.     neg d4
  3445.     lsl #3,d4
  3446.     move    d4,sp_midx
  3447.  
  3448.     move    6(a0),d1        ;get Offy
  3449.     add #12,d1
  3450.     lsl #3,d1
  3451.     move    d1,sp_mid
  3452.     neg d1
  3453.  
  3454.     move    sp_midx,d4
  3455.     move    sp_cos,d0
  3456.     move    d0,d2
  3457.     move    sp_sin,d7
  3458.     move    d7,d6
  3459.     muls    d4,d0
  3460.     muls    d1,d7
  3461.     sub.l   d0,d7
  3462.     add.l   d7,d7
  3463.     swap    d7
  3464.     neg d7
  3465.     muls    d1,d2
  3466.     muls    d4,d6
  3467.     add.l   d2,d6
  3468.     add.l   d6,d6
  3469.     swap    d6
  3470.  
  3471.     sub sp_midx,d7
  3472.     add sp_mid,d6
  3473.     add #(-12*8),d6
  3474.  
  3475.     ext.l   d6
  3476.     ext.l   d7
  3477.     moveq   #16-3,d2
  3478.     lsl.l   d2,d6
  3479.     lsl.l   d2,d7
  3480.     move    d6,d2
  3481.     swap    d2
  3482.     move    d7,d2
  3483.     move.l  d2,A1_FPIXEL
  3484.     swap    d7
  3485.     move    d7,d6
  3486.     move.l  d6,A1_PIXEL
  3487.  
  3488. ;set inner loop
  3489.  
  3490.     move    sp_cos,d0
  3491.     ext.l   d0
  3492.     add.l   d0,d0
  3493.  
  3494.     move    sp_sin,d1
  3495.     ext.l   d1
  3496.     add.l   d1,d1
  3497.  
  3498.     move    d1,d2
  3499.     swap    d2
  3500.     move    d0,d2
  3501.     move.l  d2,A1_FINC
  3502.     swap    d0
  3503.     move    d0,d1
  3504.     move.l  d1,A1_INC
  3505. ***
  3506.     moveq   #-80,d4
  3507.     moveq   #1,d1
  3508.  
  3509.     move    sp_cos,d3
  3510.     move    d3,d2
  3511.     move    sp_sin,d7
  3512.     move    d7,d6
  3513.     muls    d4,d3
  3514.     muls    d1,d7
  3515.     sub.l   d3,d7
  3516.     add.l   d7,d7
  3517.  
  3518.     muls    d1,d2
  3519.     muls    d4,d6
  3520.     add.l   d2,d6
  3521.     add.l   d6,d6
  3522. ***
  3523.     neg.l   d7
  3524.  
  3525.     move    d6,d2
  3526.     swap    d2
  3527.     move    d7,d2
  3528.     move.l  d2,A1_FSTEP
  3529.     swap    d7
  3530.     move    d7,d6
  3531.     move.l  d6,A1_STEP
  3532.  
  3533. ******************************************
  3534. * set dest *
  3535. ************
  3536.  
  3537.     move.l  scrB,A2_BASE
  3538.  
  3539.     move    node_player+mob_y,d1
  3540.     sub pyoff,d1
  3541.     sub #40,d1
  3542.  
  3543.     swap    d1
  3544.     add node_player+mob_x,d1
  3545.     sub #(80/2),d1
  3546.  
  3547.     cmp #18*4,a5
  3548.     blt.s   .98
  3549.     subq    #8,d1
  3550.     bra.s   .97
  3551. .98:    cmp #9*4,a5
  3552.     bge.s   .97
  3553.     addq    #8,d1  
  3554. .97:
  3555.     move.l  #(1<<16)+(-80&$ffff),d2
  3556.     move.l  #PITCH1|PIXEL16|WID256|XADDPIX,d3   ;a2 = dest (screen)
  3557.  
  3558.     cmp #15*4,a5
  3559.     blt.s   .99
  3560.     add #80,d1
  3561.     neg d2
  3562.     bset    #19,d3
  3563. .99:    move.l  d1,A2_PIXEL
  3564.     move.l  d2,A2_STEP
  3565.     move.l  d3,A2_FLAGS
  3566.  
  3567.     move    striker_fade,d0
  3568.     bne.s   .96
  3569.  
  3570.     move    copter_flare,d0
  3571.     lsl #4,d0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement