home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / games / alienbreed3d2 / source_4000 / backhires.s < prev    next >
Text File  |  1997-01-31  |  219KB  |  14,584 lines

  1.  
  2.  
  3.  
  4. CHEESEY equ 0
  5.  
  6. *************************************************
  7. * Stuff to do to get a C2P version:
  8. * Change copperlist
  9. * Change wall drawing
  10. * change floor drawing
  11. * change object drawing
  12. * change polygon drawing (ugh)
  13. * Write a palette generator program in AMOS
  14. * to provide a good 256 colour palette and
  15. * convert all graphics files specified
  16. * (possibly included in the game linker
  17. * program).
  18. * Possibly change the wall/floor/object
  19. * palettes to look nicer with more shades.
  20. * RE-implement stippling (if not present)
  21. * as it will look gorgeous now.
  22. *************************************************
  23.  
  24. ;MIDDLEX set 96
  25. ;RIGHTX set 191
  26. ;BOTTOMY set 160 
  27.  
  28. ;MIDDLEX set 96
  29. ;RIGHTX set 191
  30. ;BOTTOMY set 160
  31.  
  32. _break    macro
  33. ;    bkpt    \1
  34.     endm
  35.  
  36.  
  37. FILTER    macro
  38. ;    move.l    d0,-(sp)
  39. ;    move.l    #65000,d0
  40. ;.loop\@
  41. ;    bchg    #1,$bfe001
  42. ;    dbra    d0,.loop\@
  43. ;    move.l    (sp)+,d0
  44.     endm
  45.  
  46. BLACK    macro
  47.     move.w    #0,$dff180
  48.     endm
  49.  
  50. RED    macro
  51.     move.w    #$f00,$dff180
  52.     endm
  53.  
  54. FLASHER macro
  55. ;    movem.l    d1,-(sp)
  56. ;    move.w    #-1,d1
  57. ;
  58. ;loop3\@
  59. ;;    move.w    #\1,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    move.w    #\2,$dff180
  63. ;    nop
  64. ;    nop
  65. ;    dbra    d1,loop3\@
  66.  
  67. ;    movem.l    (sp)+,d1
  68.  
  69.     endm
  70.  
  71. GREEN    macro
  72.     move.w    #$0f0,$dff180
  73.     endm
  74.  
  75. BLUE    macro
  76.     move.w    #$f,$dff180
  77.     endm
  78.  
  79. DataCacheOff macro
  80.     movem.l    a0-a6/d0-d7,-(sp)
  81.     move.l    4.w,a6
  82.     moveq    #0,d0
  83.     move.l    #%0000000100000000,d1
  84.     jsr    _LVOCacheControl(a6)
  85.     movem.l    (sp)+,a0-a6/d0-d7
  86.     endm
  87.  
  88. DataCacheOn macro
  89.     movem.l    a0-a6/d0-d7,-(sp)
  90.     move.l    4.w,a6
  91.     moveq    #-1,d0
  92.     move.l    #%0000000100000000,d1
  93.     jsr    _LVOCacheControl(a6)
  94.     movem.l    (sp)+,a0-a6/d0-d7
  95.     endm
  96.  
  97.     opt    P=68020
  98.  
  99.     include utils:sysinc/hardware/intbits.i
  100.  
  101. CD32VER equ 0
  102.  
  103. maxscrdiv EQU 8
  104. max3ddiv EQU 5
  105. playerheight EQU 12*1024
  106. playercrouched EQU 8*1024
  107. scrheight EQU 80
  108.  
  109. ; k/j/m
  110.  
  111. ; 4/8
  112. ; s/x
  113. ; b/n
  114.  
  115. midoffset EQU 104*4*40
  116.  
  117.  
  118.  SECTION Scrn,CODE
  119. OpenLib       equ -552
  120. CloseLib      equ -414
  121.  
  122. INTREQ        equ    $09C
  123. INTENA        equ    $09A
  124. INTENAR    equ    $01C
  125. DMACON        equ    $096
  126.  
  127. SERPER        equ    $032
  128. SERDATR    equ    $018
  129. SERDAT        equ    $030
  130. vhposr        equ $006    
  131. vhposrl    equ $007 
  132.  
  133. bltcon0    equ $40 
  134. bltcon1    equ $42
  135. bltcpt        equ $48
  136. bltbpt        equ $4c
  137. bltapt        equ $50
  138. spr0ctl    equ $142
  139. spr1ctl    equ $14a
  140. spr2ctl    equ $152
  141. spr3ctl    equ $15a
  142. spr4ctl    equ $162
  143. spr5ctl    equ $16a
  144. spr6ctl    equ $172
  145. spr7ctl    equ $17a
  146. spr0pos    equ $140
  147. spr1pos    equ $148
  148. spr2pos    equ $150
  149. spr3pos    equ $158
  150. spr4pos    equ $160
  151. spr5pos    equ $168
  152. spr6pos    equ $170
  153. spr7pos    equ $178
  154. bltdpt         equ $54
  155. bltafwm    equ $44
  156. bltalwm    equ $46
  157. bltsize         equ $58
  158. bltcmod         equ $60
  159. bltbmod         equ $62
  160. bltamod         equ $64
  161. bltdmod         equ $66
  162. diwstart        equ $8e         ; Screen hardware registers.
  163. diwstop         equ $90
  164. ddfstart        equ $92
  165. ddfstop         equ $94
  166. bplcon0         equ $100
  167. bplcon1         equ $102
  168. col0            equ $180
  169. col1            equ $182
  170. col2        equ $184
  171. col3        equ $186
  172. col4        equ $188
  173. col5        equ $18a
  174. col6        equ $18c
  175. col7        equ $18e
  176. col8            equ $190
  177. col9            equ $192
  178. col10           equ $194
  179. col11           equ $196
  180. col12           equ $198
  181. col13           equ $19a
  182. dmacon        equ $96
  183. dmaconr        equ $002
  184. intenar        equ $01c
  185. intena        equ $09a
  186. intreq        equ $09c
  187. intreqr        equ $01e
  188. intreqrl    equ $01f
  189. bpl1pth         equ $e0
  190. bpl1ptl         equ $e2
  191. bpl2pth        equ $e4
  192. bpl2ptl        equ $e6
  193. bpl3pth        equ $e8
  194. bpl3ptl        equ $ea
  195. bpl4pth        equ $ec
  196. bpl4ptl        equ $ee
  197. bpl5pth        equ $f0
  198. bpl5ptl        equ $f2
  199. bpl6pth        equ $f4
  200. bpl6ptl        equ $f6
  201. bpl7pth        equ $f8
  202. bpl7ptl        equ $fa
  203. bpl8pth        equ $fc
  204. bpl8ptl        equ $fe
  205. spr0pth        equ $120
  206. spr0ptl        equ $122
  207. spr1pth        equ $124
  208. spr1ptl        equ $126
  209. spr2pth        equ $128
  210. spr2ptl        equ $12a
  211. spr3pth        equ $12c
  212. spr3ptl        equ $12e
  213. spr4pth        equ $130
  214. spr4ptl        equ $132
  215. spr5pth        equ $134
  216. spr5ptl        equ $136
  217. spr6pth        equ $138
  218. spr6ptl        equ $13a
  219. spr7pth        equ $13c
  220. spr7ptl        equ $13e
  221. adkcon        equ   $09E
  222.  
  223.  
  224. ; move.l #length,d0
  225. ; moveq.l #2,d1    ; chipmem
  226. ; move.l 4.w,a6
  227. ; jsr allocmem(a6) = -198
  228.  
  229. ; tst.l d0
  230. ; beq.s ohbugger
  231. ; move.l d0,memaddr
  232.  
  233.  
  234. ; move.l 4.w,a6
  235. ; move.l memaddr,a1
  236. ; move.l #size,d0
  237. ; jsr freemem(a6) =-210
  238.  
  239.  
  240. ** This waits for the blitter to finish before allowing program
  241. ** execution to continue.
  242.  
  243.  
  244.  include "ab3:source_4000/protsetupdecode"
  245.  
  246.  
  247. SAVEREGS MACRO
  248.  movem.l d0-d7/a0-a6,-(a7)
  249.  ENDM
  250.  
  251. GETREGS MACRO
  252.  movem.l (a7)+,d0-d7/a0-a6
  253.  ENDM
  254.  
  255.  
  256. WB MACRO
  257. \@bf:
  258.  btst #6,dmaconr(a6)
  259.  bne.s \@bf
  260.  ENDM
  261.  
  262. WBa MACRO
  263. \@bf:
  264.  move.w #\2,$dff180
  265.  
  266.  btst #6,$bfe001
  267.  bne.s \@bf
  268. \@bz:
  269.  
  270.  move.w #$f0f,$dff180
  271.  
  272.  btst #6,$bfe001
  273.  beq.s \@bz
  274.  
  275.  ENDM
  276.  
  277. *Another version for when a6 <> dff000
  278.  
  279. WBSLOW MACRO
  280. \@bf:
  281.  btst #6,$dff000+dmaconr
  282.  bne.s \@bf
  283.  ENDM
  284.  
  285. WT MACRO
  286. \@bf:
  287.  btst #6,(a3)
  288.  bne.s \@bd
  289.  rts
  290. \@bd: 
  291.  btst #4,(a0)
  292.  beq.s \@bf
  293.  ENDM
  294.  
  295. WTNOT MACRO
  296. \@bf:
  297.  btst #6,(a3)
  298.  bne.s \@bd
  299.  rts
  300. \@bd: 
  301.  btst #4,(a0)
  302.  bne.s \@bf
  303.  ENDM
  304.  
  305. **
  306.  
  307.  include "ab3:source_4000/ProtectionProtection"
  308.  include "macros.i"
  309.  include "ab3:source_4000/defs.i"
  310.  
  311. ;wtclickk:
  312. ; btst #6,$bfe001
  313. ; bne.s wtclickk
  314.  
  315.  move.w (a0)+,LEVTOPLAY
  316.  
  317.  
  318.  jsr MakePatch
  319.  
  320. ;    FLASHER $0f0,$fff
  321.  
  322. ; PROTFCALC
  323. ; PROTGCALC
  324. ; PROTHCALC
  325. ; PROTICALC
  326. ; PROTKCALC
  327. ; PROTLCALC
  328. ; PROTMCALC
  329.  
  330.  
  331.  
  332.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  333.  move.w intenar(a6),_storeint
  334.  and.w #$c000,_storeint
  335.  
  336.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  337.  
  338.  
  339.  st GOURSEL
  340.  
  341.  move.l 4.w,a6
  342.  lea VBLANKInt(pc),a1
  343.  moveq #INTB_COPER,d0
  344.  jsr _LVOAddIntServer(a6)
  345.  
  346.     IFEQ CD32VER
  347.  move.l 4.w,a6
  348.  lea KEYInt(pc),a1
  349.  moveq #INTB_PORTS,d0
  350.  jsr _LVOAddIntServer(a6)
  351.     ENDC
  352.  
  353.  IFNE CD32VER
  354.  clr.b PLR1KEYS
  355.  clr.b PLR1PATH
  356.  clr.b PLR1MOUSE
  357.  st PLR1JOY
  358.  clr.b PLR2KEYS
  359.  clr.b PLR2PATH
  360.  clr.b PLR2MOUSE
  361.  st PLR2JOY
  362.  ELSE
  363.  st PLR1KEYS
  364.  clr.b PLR1PATH
  365.  clr.b PLR1MOUSE
  366.  clr.b PLR1JOY
  367.  st PLR2KEYS
  368.  clr.b PLR2PATH
  369.  clr.b PLR2MOUSE
  370.  clr.b PLR2JOY
  371.  ENDC
  372.  
  373.  PRSDO
  374.  
  375.  move.l #2,d1    
  376.  move.l #10280*2,d0
  377.  move.l 4.w,a6
  378.  jsr -198(a6)
  379.  move.l d0,TEXTSCRN
  380.  move.w d0,TSPTl
  381.  swap d0
  382.  move.w d0,TSPTh
  383.  swap d0
  384.  add.w #80,d0
  385.  move.w d0,TSPTl2
  386.  swap d0
  387.  move.w d0,TSPTh2
  388.  
  389.  move.l #nullspr,d0
  390.  move.w d0,txs0l
  391.  move.w d0,txs1l
  392.  move.w d0,txs2l
  393.  move.w d0,txs3l
  394.  move.w d0,txs4l
  395.  move.w d0,txs5l
  396.  move.w d0,txs6l
  397.  move.w d0,txs7l
  398.  swap d0
  399.  move.w d0,txs0h
  400.  move.w d0,txs1h
  401.  move.w d0,txs2h
  402.  move.w d0,txs3h
  403.  move.w d0,txs4h
  404.  move.w d0,txs5h
  405.  move.w d0,txs6h
  406.  move.w d0,txs7h 
  407.  
  408.  move.l #0,d1    
  409.  move.l #140000,d0
  410.  move.l 4.w,a6
  411.  jsr -198(a6)
  412.  move.l d0,LEVELDATA
  413.  
  414.  move.l #0,d1
  415.  
  416.  ifeq CHEESEY    
  417.  move.l #320*256,d0
  418.  endc
  419.  
  420.  ifne CHEESEY
  421.  move.l #320*160,d0
  422.  endc
  423.  
  424.  move.l 4.w,a6
  425.  jsr -198(a6)
  426.  move.l d0,FASTBUFFER
  427.  
  428.  
  429.  move.l #consttab,a0
  430.  moveq #1,d0
  431.  move.w #8191,d1
  432. fillconst:
  433.  
  434.  move.l #16384*64,d2
  435.  divs.l d0,d2
  436. ; ext.l d2    ;c#
  437.  move.l #64*64*65536,d3
  438.  divs.l d2,d3
  439. ; move.l d3,d4
  440. ; asr.l #6,d4
  441.  move.l d3,(a0)+    ;e#
  442.   
  443.  asr.l #1,d2    ; c#/2.0
  444.  sub.l #40*64,d2    ; d#
  445.  muls.l d3,d2    ; d#*e#
  446.  
  447.  asr.l #6,d2
  448.  move.l d2,(a0)+
  449.  
  450.  addq #1,d0
  451.  
  452.  dbra d1,fillconst
  453.  
  454.  jsr START
  455.  
  456.  rts
  457.  
  458. FASTBUFFER: dc.l 0
  459.  
  460. _storeint
  461.     dc.w 0
  462.  
  463. * Load level into buffers.
  464.  clr.b doanything
  465.  clr.b dosounds
  466.  
  467. ; DRAW TEXT SCREEN
  468.  
  469. TWEENTEXT:
  470.  
  471.  move.l #LEVELTEXT,a0
  472.  move.w PLOPT,d0
  473.  muls #82*16,d0
  474.  add.l d0,a0
  475.  
  476.  move.w #15,d7
  477.  move.w #0,d0
  478. DOWNTEXT:
  479.  move.l TEXTSCRN,a1
  480.  jsr DRAWLINEOFTEXT
  481.  addq #1,d0
  482.  add.w #82,a0
  483.  dbra d7,DOWNTEXT
  484.  rts
  485.  
  486. FONTADDRS:
  487.  dc.l ENDFONT0,CHARWIDTHS0
  488.  dc.l ENDFONT1,CHARWIDTHS1
  489.  dc.l ENDFONT2,CHARWIDTHS2
  490.  
  491. ENDFONT0:
  492.  incbin "endfont0"
  493. CHARWIDTHS0:
  494.  incbin "charwidths0"
  495. ENDFONT1:
  496. ; incbin "endfont1"
  497. CHARWIDTHS1:
  498. ; incbin "charwidths1"
  499. ENDFONT2:
  500. ; incbin "endfont2"
  501. CHARWIDTHS2:
  502. ; incbin "charwidths2"
  503.  
  504.  even
  505.  
  506. DRAWLINEOFTEXT:
  507.  movem.l d0/a0/d7,-(a7)
  508.  
  509.  muls #80*16,d0
  510.  add.l d0,a1    ; screen pointer
  511.  
  512.  move.l #FONTADDRS,a3
  513.  moveq #0,d0
  514.  move.b (a0)+,d0
  515.  move.l (a3,d0.w*8),a2
  516.  move.l 4(a3,d0.w*8),a3
  517.  
  518.  moveq #0,d4
  519.  
  520.  moveq #0,d1    ; width counter:
  521.  move.w #79,d6
  522.  tst.b (a0)+
  523.  beq.s NOTCENTRED
  524.  moveq #-1,d5
  525.  move.l a0,a4
  526.  moveq #0,d2
  527.  moveq #0,d3
  528.  move.w #79,d0    ; number of chars
  529. .addup:
  530.  addq #1,d5
  531.  move.b (a4)+,d2
  532.  move.b -32(a3,d2.w),d4
  533.  add.w d4,d3
  534.  cmp.b #32,d2
  535.  beq.s .DONTPUTIN
  536.  move.w d5,d6
  537.  move.w d3,d1
  538. .DONTPUTIN:
  539.  dbra d0,.addup
  540.  asr.w #1,d1
  541.  neg.w d1
  542.  add.w #320,d1    ; horiz pos of start x
  543.  
  544. NOTCENTRED:
  545.  
  546.  move.w d6,d7
  547. DOACHAR:
  548.  moveq #0,d2
  549.  move.b (a0)+,d2
  550.  sub.w #32,d2
  551.  moveq #0,d6
  552.  move.b (a3,d2.w),d6
  553.  asl.w #5,d2
  554.  lea (a2,d2.w),a4    ; char font
  555. val SET 0
  556.  REPT 16
  557.  move.w (a4)+,d0
  558.  bfins d0,val(a1){d1:d6}
  559. val SET val+80
  560.  ENDR
  561.  add.w d6,d1
  562.  dbra d7,DOACHAR
  563.  movem.l (a7)+,d0/a0/d7
  564.  rts 
  565.  
  566.  
  567. CLRTWEENSCRN:
  568.  move.l TEXTSCRN,a0
  569.  move.w #(10240/16)-1,d0
  570.  move.l #$0,d1
  571. .lll
  572.  move.l d1,(a0)+
  573.  move.l d1,(a0)+
  574.  move.l d1,(a0)+
  575.  move.l d1,(a0)+
  576.  move.l d1,(a0)+
  577.  move.l d1,(a0)+
  578.  move.l d1,(a0)+
  579.  move.l d1,(a0)+
  580.  dbra d0,.lll
  581.  rts
  582.  
  583. LEVTOPLAY: dc.w 0
  584.  
  585. COPYLINK: dc.l 0
  586.  
  587. PLAYTHEGAME:
  588.  
  589.  move.w #0,TXTCOLL
  590.  move.w #0,MIXCOLL
  591.  move.w #0,TOPCOLL
  592.  
  593.  bsr CLRTWEENSCRN
  594.  
  595.  cmp.b #'n',mors
  596.  bne.s .notext
  597.  bsr TWEENTEXT
  598. .notext
  599.  
  600. ;charlie 
  601.  move.l #TEXTCOP,$dff080
  602.  
  603.  move.w #$10,d0
  604.  move.w #7,d1
  605.  
  606. .fdup
  607.  move.w d0,TXTCOLL
  608.  move.w d0,MIXCOLL
  609.  add.w #$121,d0
  610. .wtframe:
  611.  btst #5,$dff000+intreqrl
  612.  beq.s .wtframe
  613.  move.w #$0020,$dff000+intreq
  614.  dbra d1,.fdup
  615.  
  616.  jsr INITCOPPERSCRN
  617.  
  618.  move.l #$dff000,a6
  619.  jsr SETPLAYERS
  620.  
  621.  move.l #0,TYPEOFMEM
  622.  move.l #LLname,a0
  623.  jsr LOADAFILE
  624.  move.l d0,LINKS
  625.  
  626.  move.l #0,TYPEOFMEM
  627.  move.l #LLFname,a0
  628.  jsr LOADAFILE
  629.  move.l d0,FLYLINKS
  630.  
  631. ; Get level memory.
  632.  
  633.  move.l #1,d1
  634.  move.l #40000,d0
  635.  move.l 4.w,a6
  636.  jsr -198(a6)
  637.  move.l d0,LEVELGRAPHICS
  638.  
  639.  move.l #1,d1
  640.  move.l #40000,d0
  641.  move.l 4.w,a6
  642.  jsr -198(a6)
  643.  move.l d0,LEVELCLIPS
  644.  
  645.  move.l #2,d1
  646.  move.l #70000,d0
  647.  move.l 4.w,a6
  648.  jsr -198(a6)
  649.  move.l d0,LEVELMUSIC
  650.  
  651.  move.l #$dff000,a6
  652.  
  653. ; move.b LEVTOPLAY,d0
  654. ; move.b d0,LEVA
  655. ; move.b d0,LEVB
  656. ; move.b d0,LEVC
  657. ; move.b d0,LEVD
  658. ; move.b d0,LEVE
  659.  
  660.  
  661. ; move.l #LEVELDATAD,LEVELDATA
  662. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  663. ; move.l #LEVELCLIPSD,LEVELCLIPS
  664.  
  665. ; bra noload
  666.  
  667. *********************************
  668.  
  669. ; move.l doslib,a6
  670. ; move.l #LLname,d1
  671. ; move.l #1005,d2
  672. ; jsr -30(a6)
  673. ; move.l d0,LLhandle
  674. ;
  675. ; move.l doslib,a6
  676. ; move.l d0,d1
  677. ; move.l #LINKS,d2
  678. ; move.l #10000,d3
  679. ; jsr -42(a6)
  680. ;
  681. ; move.l doslib,a6
  682. ; move.l LLhandle,d1
  683. ; jsr -36(a6)
  684.  
  685.  ********************************
  686.  
  687. ; move.l doslib,a6
  688. ; move.l #LLFname,d1
  689. ; move.l #1005,d2
  690. ; jsr -30(a6)
  691. ; move.l d0,LLhandle
  692.  
  693. ; move.l doslib,a6
  694. ; move.l d0,d1
  695. ; move.l #FLYLINKS,d2
  696. ; move.l #10000,d3
  697. ; jsr -42(a6)
  698.  
  699. ; move.l doslib,a6
  700. ; move.l LLhandle,d1
  701. ; jsr -36(a6)
  702.  
  703.  ************************
  704.  ********
  705.  
  706.  moveq #0,d1
  707.  move.b LEVA,d1
  708.  sub.b #'a',d1
  709.  lsl.w #6,d1
  710.  move.l LINKFILE,a6
  711.  add.l #LevelMusic,a6
  712.  add.l d1,a6
  713.  move.l a6,d1
  714.  
  715.  move.l doslib,a6
  716.  
  717.  move.l #1005,d2
  718.  jsr -30(a6)
  719.  move.l d0,LDhandle
  720.  
  721.  move.l doslib,a6
  722.  move.l d0,d1
  723.  move.l LEVELCLIPS,d2
  724.  move.l #40000,d3
  725.  jsr -42(a6)
  726.  
  727.  move.l doslib,a6
  728.  move.l LDhandle,d1
  729.  jsr -36(a6)
  730.  
  731. *************************************
  732.     move.l    LEVELCLIPS,d0
  733.     moveq    #0,d1
  734.     move.l LEVELMUSIC,a0
  735.     lea    WorkSpace,a1
  736.     lea    $0,a2
  737.     jsr    unLHA
  738. *************************************
  739.  
  740.  
  741.  move.l doslib,a6
  742.  move.l #LDname,d1
  743.  move.l #1005,d2
  744.  jsr -30(a6)
  745.  move.l d0,LDhandle
  746.  
  747.  move.l doslib,a6
  748.  move.l d0,d1
  749.  move.l LEVELCLIPS,d2
  750.  move.l #40000,d3
  751.  jsr -42(a6)
  752.  
  753.  move.l doslib,a6
  754.  move.l LDhandle,d1
  755.  jsr -36(a6)
  756.  
  757. *************************************
  758.     move.l    LEVELCLIPS,d0
  759.     moveq    #0,d1
  760.     move.l LEVELDATA,a0
  761.     lea    WorkSpace,a1
  762.     lea    $0,a2
  763.     jsr    unLHA
  764. *************************************
  765.  
  766. ********
  767.  
  768.  move.l doslib,a6
  769.  move.l #LGname,d1
  770.  move.l #1005,d2
  771.  jsr -30(a6)
  772.  move.l d0,LGhandle
  773.  
  774.  move.l doslib,a6
  775.  move.l d0,d1
  776.  move.l LEVELCLIPS,d2
  777.  move.l #40000,d3
  778.  jsr -42(a6)
  779.  
  780.  move.l doslib,a6
  781.  move.l LGhandle,d1
  782.  jsr -36(a6)
  783.  
  784. *************************************
  785.     move.l    LEVELCLIPS,d0
  786.     moveq    #0,d1
  787.     move.l LEVELGRAPHICS,a0
  788.     lea    WorkSpace,a1
  789.     lea    $0,a2
  790.     jsr    unLHA
  791. *************************************
  792.  
  793. ********
  794.  
  795.  move.l doslib,a6
  796.  move.l #LCname,d1
  797.  move.l #1005,d2
  798.  jsr -30(a6)
  799.  move.l d0,LChandle
  800.  
  801.  move.l doslib,a6
  802.  move.l d0,d1
  803.  move.l #WorkSpace+16384,d2
  804.  move.l #16000,d3
  805.  jsr -42(a6)
  806.  
  807.  move.l doslib,a6
  808.  move.l LChandle,d1
  809.  jsr -36(a6)
  810.  
  811. *************************************
  812.     move.l    #WorkSpace+16384,d0
  813.     moveq    #0,d1
  814.     move.l LEVELCLIPS,a0
  815.     lea    WorkSpace,a1
  816.     lea    $0,a2
  817.     jsr    unLHA
  818. *************************************
  819.  
  820.  
  821. *******
  822.  
  823. noload:
  824.  
  825. ********
  826.  
  827. ; move.l doslib,a6
  828. ; move.l #Prefsname,d1
  829. ; move.l #1005,d2
  830. ; jsr -30(a6)
  831. ; move.l d0,Prefshandle
  832.  
  833. ; move.l doslib,a6
  834. ; move.l d0,d1
  835. ; move.l #Prefsfile,d2
  836. ; move.l #50,d3
  837. ; jsr -42(a6)
  838.  
  839. ; move.l doslib,a6
  840. ; move.l Prefshandle,d1
  841. ; jsr -36(a6)
  842.  
  843. *******
  844.  
  845.  IFNE CD32VER
  846.  move.l doslib,a6
  847.  move.l #115,d1
  848.  jsr -198(a6)
  849.  ENDC
  850.  
  851.  
  852. ; move.l doslib,d0
  853. ; move.l d0,a1
  854. ; move.l 4.w,a6
  855. ; jsr CloseLib(a6)
  856.  
  857.  move.l #$dff000,a6
  858.  
  859. charlie:
  860. ; jmp  ENDGAMESCROLL
  861.  
  862.     move.w #$87c0,dmacon(a6)
  863.  
  864.     move.w    #%1000000000100000,dmacon(a6)
  865.  
  866. ; move.w intenar(a6),saveinters
  867.     
  868.     move.w #%00101111,intena(a6)
  869.  
  870.     move.w #255,adkcon(a6)
  871.  
  872.  
  873. *** Put myself in supervisor mode
  874.  
  875.  bra blag
  876. ; move.l $6c,d0
  877. ; move.l #blag,$6c
  878. ; move.w #$8010,intreq(a6)
  879.  
  880.  rts
  881.  
  882. saveit: ds.l 10
  883. doslibname: dc.b 'dos.library',0
  884.  even
  885. doslib: dc.l 0
  886.  
  887. mors: dc.w 0
  888.  
  889. LDname: dc.b 'tkg2:levels/level_'
  890. LEVA:
  891.  dc.b 'a/twolev.bin',0
  892.  even
  893. LDhandle: dc.l 0
  894. LGname: dc.b 'tkg2:levels/level_'
  895. LEVB:
  896.  dc.b 'a/twolev.graph.bin',0
  897.  even
  898. LGhandle: dc.l 0
  899. LCname: dc.b 'tkg2:levels/level_'
  900. LEVC:
  901.  dc.b 'a/twolev.clips',0
  902.  even
  903. LChandle: dc.l 0
  904. LLname: dc.b 'tkg2:levels/level_'
  905. LEVD:
  906.  dc.b 'a/twolev.map',0
  907.  even
  908. LLFname: dc.b 'tkg2:levels/level_'
  909. LEVE:
  910.  dc.b 'a/twolev.flymap',0
  911.  even
  912. LLhandle: dc.l 0
  913.  
  914.     cnop    0,4
  915.  
  916. Prefsname: dc.b 'ram:prefs',0
  917.  even
  918. Prefshandle: dc.l 0
  919.  
  920.  
  921.  even
  922.  
  923.  cnop 0,4
  924.  
  925. VBLANKInt
  926.  dc.l 0,0
  927.  dc.b NT_INTERRUPT,9
  928.  dc.l Prefsname
  929.  dc.l 0
  930.  dc.l Chan0inter
  931.  
  932.  
  933. KEYInt
  934.  dc.l 0,0
  935.  dc.b NT_INTERRUPT,127
  936.  dc.l Prefsname
  937.  dc.l 0
  938.  dc.l key_interrupt
  939.  
  940.  
  941. blag:
  942. ; move.w #$10,intreq(a6)
  943. ; move.l d0,$6c
  944. ; move.w #$7fff,intena(a6)
  945.  
  946. ; move.w #$20,$dff1dc
  947.  
  948. ; move.l 4.w,a6
  949. ; lea VBLANKInt(pc),a1
  950. ; moveq #INTB_COPER,d0
  951. ; jsr _LVOAddIntServer(a6)
  952.  
  953. ****************************
  954. * Initialize level
  955. ****************************
  956. * Poke all clip offsets into
  957. * correct bit of level data.
  958. ****************************
  959.  move.l LEVELGRAPHICS,a0
  960.  move.l 12(a0),a1
  961.  add.l a0,a1
  962.  move.l a1,ZoneGraphAdds
  963.  move.l (a0),a1
  964.  add.l a0,a1
  965.  move.l a1,DoorData
  966.  move.l 4(a0),a1
  967.  add.l a0,a1
  968.  move.l a1,LiftData
  969.  move.l 8(a0),a1
  970.  add.l a0,a1
  971.  move.l a1,SwitchData
  972.  adda.w #16,a0
  973.  move.l a0,ZoneAdds
  974.  
  975.  move.l LEVELDATA,a4
  976.  lea 160*10(a4),a1
  977.  
  978.  lea 54(a1),a2
  979.  move.l a2,CPtPos
  980.  move.w 12(a1),NumCPts
  981.  move.w 14(a1),NumLevPts
  982.  
  983.  move.l 16+6(a1),a2
  984.  add.l a4,a2
  985.  move.l a2,Points
  986.  move.w 8+6(a1),d0
  987.  lea 4(a2,d0.w*4),a2
  988.  move.l a2,PointBrights
  989.  move.w 16(a1),d0
  990.  addq #1,d0
  991.  muls #80,d0
  992.  add.l d0,a2
  993.  move.l a2,ZoneBorderPts
  994.  
  995.  move.l 20+6(a1),a2
  996.  add.l a4,a2
  997.  move.l a2,FloorLines
  998.  move.w -2(a2),ENDZONE
  999.  move.l 24+6(a1),a2
  1000.  add.l a4,a2
  1001.  move.l a2,ObjectData
  1002. *****************************************
  1003. * Just for charles
  1004.  
  1005. ; move.w #$6060,6(a2)
  1006. ; move.l #$d0000,8(a2)
  1007. ; sub.w #40,4(a2)
  1008. ; move.w #45*256+45,14(a2)
  1009. ****************************************
  1010.  move.l 28+6(a1),a2
  1011.  add.l a4,a2
  1012.  move.l a2,PlayerShotData
  1013.  move.l 32+6(a1),a2
  1014.  add.l a4,a2
  1015.  move.l a2,NastyShotData
  1016.  
  1017.  add.l #64*20,a2
  1018.  move.l a2,OtherNastyData
  1019.  
  1020.  move.l 36+6(a1),a2
  1021.  add.l a4,a2
  1022.  move.l a2,ObjectPoints  
  1023.  move.l 40+6(a1),a2
  1024.  add.l a4,a2
  1025.  move.l a2,PLR1_Obj
  1026.  move.l 44+6(a1),a2
  1027.  add.l a4,a2
  1028.  move.l a2,PLR2_Obj
  1029.  move.w 14+6(a1),NumObjectPoints
  1030.  
  1031. ; bra noclips
  1032.   
  1033.  move.l LEVELCLIPS,a2
  1034.  moveq #0,d0
  1035.  move.w 10+6(a1),d7    ;numzones
  1036.  move.w d7,NUMZONES
  1037. assignclips:
  1038.  move.l (a0)+,a3
  1039.  add.l a4,a3    ; pointer to a zone
  1040.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  1041. dowholezone:
  1042.  tst.w (a3)
  1043.  blt.s nomorethiszone
  1044.  tst.w 2(a3)
  1045.  blt.s thisonenull
  1046.  
  1047.  move.l d0,d1
  1048.  asr.l #1,d1
  1049.  move.w d1,2(a3)
  1050.  
  1051. findnextclip:
  1052.  cmp.w #-2,(a2,d0.l)
  1053.  beq.s foundnextclip
  1054.  addq.l #2,d0
  1055.  bra.s findnextclip
  1056. foundnextclip
  1057.  addq.l #2,d0
  1058.  
  1059. thisonenull:
  1060.  addq #8,a3 
  1061.  bra.s dowholezone
  1062. nomorethiszone:
  1063.  dbra d7,assignclips
  1064.  
  1065.  lea (a2,d0.l),a2
  1066.  move.l a2,CONNECT_TABLE
  1067.  
  1068. noclips:
  1069.  
  1070. * Put in addresses of glowything
  1071.  
  1072.  
  1073. ************************************
  1074.  
  1075. ; cmp.b #'k',Prefsfile
  1076. ; bne.s nkb
  1077.  
  1078. ;nkb:
  1079. ; cmp.b #'m',Prefsfile
  1080. ; bne.s nmc
  1081. ; clr.b PLR1KEYS
  1082. ; clr.b PLR1PATH
  1083. ; st PLR1MOUSE
  1084. ; clr.b PLR1JOY
  1085. ;nmc:
  1086. ; cmp.b #'j',Prefsfile
  1087. ; bne.s njc
  1088. ; clr.b PLR1KEYS
  1089. ; clr.b PLR1PATH
  1090. ; clr.b PLR1MOUSE
  1091. ; st PLR1JOY
  1092. ;njc:
  1093.  
  1094.  clr.b PLR1_StoodInTop
  1095.  move.l #playerheight,PLR1s_height
  1096.  
  1097.  move.l #empty,pos1LEFT
  1098.  move.l #empty,pos2LEFT
  1099.  move.l #empty,pos1RIGHT
  1100.  move.l #empty,pos2RIGHT
  1101.  move.l #empty,pos0LEFT
  1102.  move.l #empty,pos3LEFT
  1103.  move.l #empty,pos0RIGHT
  1104.  move.l #empty,pos3RIGHT
  1105.  move.l #emptyend,Samp0endLEFT
  1106.  move.l #emptyend,Samp1endLEFT
  1107.  move.l #emptyend,Samp0endRIGHT
  1108.  move.l #emptyend,Samp1endRIGHT
  1109.  move.l #emptyend,Samp2endLEFT
  1110.  move.l #emptyend,Samp3endLEFT
  1111.  move.l #emptyend,Samp2endRIGHT
  1112.  move.l #emptyend,Samp3endRIGHT
  1113.  
  1114.  
  1115.  move.l #nullline,d0
  1116.  move.w d0,n1l
  1117.  swap d0
  1118.  move.w d0,n1h
  1119.  
  1120.  move.l Panel,d0
  1121.  move.w d0,p1l
  1122.  swap d0
  1123.  move.w d0,p1h
  1124.  swap d0
  1125.  add.l #40,d0
  1126.  move.w d0,p2l
  1127.  swap d0
  1128.  move.w d0,p2h
  1129.  swap d0
  1130.  add.l #40,d0
  1131.  move.w d0,p3l
  1132.  swap d0
  1133.  move.w d0,p3h
  1134.  swap d0
  1135.  add.l #40,d0
  1136.  move.w d0,p4l
  1137.  swap d0
  1138.  move.w d0,p4h
  1139.  swap d0
  1140.  add.l #40,d0
  1141.  move.w d0,p5l
  1142.  swap d0
  1143.  move.w d0,p5h
  1144.  swap d0
  1145.  add.l #40,d0
  1146.  move.w d0,p6l
  1147.  swap d0
  1148.  move.w d0,p6h
  1149.  swap d0
  1150.  add.l #40,d0
  1151.  move.w d0,p7l
  1152.  swap d0
  1153.  move.w d0,p7h
  1154.  swap d0
  1155.  add.l #40,d0
  1156.  move.w d0,p8l
  1157.  swap d0
  1158.  move.w d0,p8h
  1159.  
  1160. *******************************
  1161. * TIMER SCREEN SETUP
  1162. ; move.l #TimerScr,d0
  1163. ; move.w d0,p1l
  1164. ; swap d0
  1165. ; move.w d0,p1h
  1166. ; move.w #$1201,Panelcon
  1167.  
  1168. ; move.l #borders,d0
  1169. ; move.w d0,s0l
  1170. ; swap d0
  1171. ; move.w d0,s0h
  1172. ; move.l #borders+2592,d0
  1173. ; move.w d0,s1l
  1174. ; swap d0
  1175. ; move.w d0,s1h
  1176. ; move.l #borders+2592*2,d0
  1177. ; move.w d0,s2l
  1178. ; swap d0
  1179. ; move.w d0,s2h
  1180. ; move.l #borders+2592*3,d0
  1181. ; move.w d0,s3l
  1182. ; swap d0
  1183. ; move.w d0,s3h
  1184.  
  1185.  move.l #nullspr,d0
  1186.  move.w d0,s0l
  1187.  move.w d0,s1l
  1188.  move.w d0,s2l
  1189.  move.w d0,s3l
  1190.  
  1191.  move.w d0,s4l
  1192.  move.w d0,s5l
  1193.  move.w d0,s6l
  1194.  move.w d0,s7l
  1195.  swap d0
  1196.  
  1197.  move.w d0,s0h
  1198.  move.w d0,s1h
  1199.  move.w d0,s2h
  1200.  move.w d0,s3h
  1201.  
  1202.  move.w d0,s4h
  1203.  move.w d0,s5h
  1204.  move.w d0,s6h
  1205.  move.w d0,s7h 
  1206.  
  1207.  
  1208. ; move.w #52*256+64,borders
  1209. ; move.w #212*256+0,borders+8
  1210. ; move.w #52*256+64,borders+2592
  1211. ; move.w #212*256+128,borders+8+2592
  1212. ; move.w #52*256+192,borders+2592*2
  1213. ; move.w #212*256+0,borders+8+2592*2
  1214. ; move.w #52*256+192,borders+2592*3
  1215. ; move.w #212*256+128,borders+8+2592*3
  1216.  
  1217.  move.l #FacePlace,d0
  1218.  move.w d0,f1l
  1219.  swap d0
  1220.  move.w d0,f1h
  1221.  move.l #FacePlace+32*24,d0
  1222.  move.w d0,f2l
  1223.  swap d0
  1224.  move.w d0,f2h
  1225.  move.l #FacePlace+32*24*2,d0
  1226.  move.w d0,f3l
  1227.  swap d0
  1228.  move.w d0,f3h
  1229.  move.l #FacePlace+32*24*3,d0
  1230.  move.w d0,f4l
  1231.  swap d0
  1232.  move.w d0,f4h
  1233.  move.l #FacePlace+32*24*4,d0
  1234.  move.w d0,f5l
  1235.  swap d0
  1236.  move.w d0,f5h
  1237.   
  1238.  
  1239.  move.l #bigfield,d0
  1240.  move.w d0,ocl
  1241.  swap d0
  1242.  move.w d0,och
  1243.  
  1244.  bset.b #1,$bfe001
  1245.  
  1246. ; jmp stuff
  1247. ;endstuff:
  1248.  
  1249.  move.w #$00ff,$dff09e
  1250.  
  1251. ; move.l #Blurbfield,$dff080
  1252.  
  1253.  move.w #0,d0
  1254.  
  1255.  move.l scrn,d0
  1256.  move.w d0,pl1l
  1257.  swap d0
  1258.  move.w d0,pl1h
  1259.  
  1260.  swap d0
  1261.  add.l #10240,d0
  1262.  move.w d0,pl2l
  1263.  swap d0
  1264.  move.w d0,pl2h
  1265.  
  1266.  swap d0
  1267.  add.l #10240,d0
  1268.  move.w d0,pl3l
  1269.  swap d0
  1270.  move.w d0,pl3h
  1271.  
  1272.  swap d0
  1273.  add.l #10240,d0
  1274.  move.w d0,pl4l
  1275.  swap d0
  1276.  move.w d0,pl4h
  1277.  
  1278.  swap d0
  1279.  add.l #10240,d0
  1280.  move.w d0,pl5l
  1281.  swap d0
  1282.  move.w d0,pl5h
  1283.  
  1284.  swap d0
  1285.  add.l #10240,d0
  1286.  move.w d0,pl6l
  1287.  swap d0
  1288.  move.w d0,pl6h
  1289.  
  1290.  swap d0
  1291.  add.l #10240,d0
  1292.  move.w d0,pl7l
  1293.  swap d0
  1294.  move.w d0,pl7h
  1295.  
  1296.  swap d0
  1297.  add.l #10240,d0
  1298.  move.w d0,pl8l
  1299.  swap d0
  1300.  move.w d0,pl8h
  1301.  
  1302.  
  1303. ****************************
  1304.  jsr INITPLAYER
  1305. ; bsr initobjpos
  1306. ****************************
  1307.  
  1308.  
  1309.  move.l #$dff000,a6
  1310.  
  1311.  move.l #null,$dff0a0
  1312.  move.w #100,$dff0a4
  1313.  move.w #443,$dff0a6
  1314.  move.w #63,$dff0a8
  1315.  
  1316.  move.l #null2,$dff0b0
  1317.  move.w #100,$dff0b4
  1318.  move.w #443,$dff0b6
  1319.  move.w #63,$dff0b8
  1320.  
  1321.  move.l #null4,$dff0c0
  1322.  move.w #100,$dff0c4
  1323.  move.w #443,$dff0c6
  1324.  move.w #63,$dff0c8
  1325.  
  1326.  move.l #null3,$dff0d0
  1327.  move.w #100,$dff0d4
  1328.  move.w #443,$dff0d6
  1329.  move.w #63,$dff0d8
  1330.  
  1331.  ifeq CHEESEY
  1332.  
  1333.  move.l #tab,a1
  1334.  move.w #64,d7
  1335.  move.w #0,d6
  1336. outerlop
  1337.  move.l #pretab,a0
  1338.  move.w #255,d5
  1339. scaledownlop:
  1340.  move.b (a0)+,d0
  1341.  ext.w d0
  1342.  ext.l d0
  1343.  muls d6,d0
  1344.  asr.l #6,d0
  1345.  move.b d0,(a1)+
  1346.  dbra d5,scaledownlop
  1347.  addq #1,d6
  1348.  dbra d7,outerlop
  1349.  
  1350.  endc
  1351.  
  1352.  move.l #$dff000,a6
  1353.  
  1354.  move.w #$c008,intena(a6)
  1355.  
  1356.  move.w #$f,dmacon(a6)
  1357.  move.w #$820f,dmacon(a6)
  1358.  
  1359. ; bsr protinit
  1360.  
  1361.  
  1362. ; move.w #$20,$1dc(a6)
  1363.  
  1364.  move.w #$0,$dff034
  1365.  move.w #0,Conditions
  1366.  
  1367.  cmp.b #'n',mors
  1368.  beq.s .nokeys
  1369.  move.w #%111111111111,Conditions
  1370. .nokeys:
  1371.  
  1372.  move.l #KeyMap,a5
  1373.  clr.b $45(a5)
  1374.  
  1375.  move.l LEVELMUSIC,mt_data
  1376.  clr.b UseAllChannels
  1377.  
  1378. ; cmp.b #'b',Prefsfile+3
  1379. ; bne.s .noback
  1380.  
  1381. *********************************
  1382.  
  1383.  st CHANNELDATA
  1384.  jsr mt_init
  1385.  
  1386. *********************************
  1387.  
  1388.  
  1389. ;.noback:
  1390.  
  1391.  
  1392. ;
  1393. ; clr.b CHANNELDATA
  1394. ; clr.b CHANNELDATA+8
  1395. ; clr.b CHANNELDATA+16
  1396. ; clr.b CHANNELDATA+24
  1397. ;
  1398. ; cmp.b #'b',Prefsfile+3
  1399. ; bne.s noreserve
  1400. ;
  1401.  st CHANNELDATA
  1402.  st CHANNELDATA+8
  1403. ; st CHANNELDATA+16
  1404. ; st CHANNELDATA+24
  1405. ;noreserve: 
  1406.  
  1407. ; st CHANNELDATA
  1408. ; st CHANNELDATA+8
  1409.  
  1410.  move.l SampleList+6*8,pos0LEFT
  1411.  move.l SampleList+6*8+4,Samp0endLEFT
  1412.  move.l #playerheight,PLR1s_targheight
  1413.  move.l #playerheight,PLR1s_height
  1414.  move.l #playerheight,PLR2s_targheight
  1415.  move.l #playerheight,PLR2s_height
  1416.  
  1417. ; cmp.b #'n',mors
  1418. ; beq.s nohandshake
  1419. ;
  1420. ; move.b #%11011000,$bfd200
  1421. ; move.b #%00010000,$bfd000
  1422. ;waitloop:
  1423. ; btst.b #4,$bfd000
  1424. ; bne.s waitloop
  1425. ; move.b #%11000000,$bfd200
  1426.  
  1427. ;wtmouse:
  1428. ; btst #6,$bfe001
  1429. ; bne.s wtmouse
  1430.  
  1431. ;nohandshake:
  1432.  
  1433. ; jmp end
  1434.  
  1435. ; move.l COPSCRN1,drawpt
  1436. ; move.l COPSCRN2,olddrawpt
  1437.  
  1438.  jsr CLEARKEYBOARD
  1439. ; jsr MAKEBACKROUT
  1440.  
  1441.  clr.b MASTERQUITTING
  1442.  
  1443.  cmp.b #'n',mors
  1444.  seq SLAVEQUITTING
  1445.  
  1446. ; move.w #200,PLAYERTWOHEALTH
  1447. ; move.w #200,PLAYERONEHEALTH
  1448.  
  1449. ; move.l #ANOTHERSUP,$80
  1450. ; trap #0
  1451. ; rts
  1452. ;
  1453. ;ANOTHERSUP:
  1454.  
  1455.  move.l $4.w,a6
  1456.  jsr _LVOSuperState(a6)
  1457.  move.l d0,SSTACK
  1458.  
  1459.  CACHE_FREEZE_OFF d2
  1460.  
  1461. ; charlie
  1462. ; DATA_CACHE_ON d2
  1463.  
  1464.  DataCacheOn
  1465.  
  1466.  move.l $4.w,a6
  1467.  move.l SSTACK,d0
  1468.  jsr _LVOUserState(a6)
  1469.  
  1470.  move.l #0,hitcol
  1471.  
  1472.  cmp.b #'n',mors
  1473.  bne.s NOCLTXT
  1474.  
  1475.  move.b #0,lastpressed
  1476. .wtpress
  1477.  btst #6,$bfe001
  1478.  beq.s CLOSETXT
  1479.  btst #7,$bfe001
  1480.  beq.s CLOSETXT
  1481.  tst.b lastpressed
  1482.  beq.s .wtpress
  1483.  
  1484. CLOSETXT:
  1485.  
  1486.  move.w #$8f8,d0
  1487.  move.w #7,d1
  1488.  
  1489. .fdup
  1490.  move.w d0,TXTCOLL
  1491.  move.w d0,MIXCOLL
  1492.  sub.w #$121,d0
  1493. .wtframe:
  1494.  btst #5,$dff000+intreqrl
  1495.  beq.s .wtframe
  1496.  move.w #$0020,$dff000+intreq
  1497.  dbra d1,.fdup
  1498.  
  1499.  move.w #0,TXTCOLL
  1500.  move.w #0,MIXCOLL
  1501.  
  1502. NOCLTXT:
  1503.  
  1504.  
  1505.  
  1506.     move.l    4.w,a6
  1507.     jsr    _LVOForbid(a6)
  1508. ;    jsr    _LVODisable(a6)
  1509.  
  1510.  
  1511. ;    move.w    #%0111111111111111,intena+$dff000
  1512. ;    move.w    #%1000000011111111,intena+$dff000
  1513.  
  1514.  
  1515. ;charlie 
  1516.  move.l #PALETTEBIT,$dff084
  1517.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1518.  
  1519.  
  1520.  clr.b PLR1_Ducked
  1521.  clr.b PLR2_Ducked
  1522.  clr.b p1_ducked
  1523.  clr.b p2_ducked
  1524.  
  1525. ********************************************
  1526.  
  1527. ;    jmp docredits
  1528.  
  1529. ********************************************
  1530.  
  1531.  
  1532.  st doanything
  1533.  st dosounds
  1534.  
  1535.  jsr CLRNASTYMEM
  1536.  
  1537.  move.l #COMPACTMAP,a0
  1538.  move.l a0,LASTZONE
  1539.  move.w #255,d0
  1540. .clrmap
  1541.  move.l #0,(a0)+
  1542.  dbra d0,.clrmap
  1543.  
  1544.  move.l #COMPACTMAP,a0
  1545.  move.l #BIGMAP,a1
  1546.  
  1547.  bra NOALLWALLS
  1548.  
  1549.  move.l ZoneGraphAdds,a2
  1550. DOALLWALLS:
  1551.  move.l (a2),d0
  1552.  beq.s nomorezones
  1553.  move.l d0,a3
  1554.  
  1555.  addq #8,a2
  1556.  
  1557.  add.l LEVELGRAPHICS,a3
  1558.  addq #2,a3
  1559.  move.l a1,a4
  1560.  
  1561. ; DOLOWERROOM
  1562.  
  1563. innerwalls:
  1564.  move.b (a3),d1
  1565.  move.b 1(a3),d0
  1566.  bne doneinner
  1567.  
  1568.  tst.b d1
  1569.  blt noid
  1570.  
  1571.  move.b d1,d3
  1572.  and.w #15,d1
  1573.  
  1574.  moveq #0,d0
  1575.  move.w d1,d2
  1576.  add.w d1,d1
  1577.  add.w d2,d1
  1578.  addq #1,d1
  1579.  bset d1,d0
  1580.  btst #4,d3
  1581.  beq.s .nodoor
  1582.  addq #1,d1
  1583.  bset d1,d0
  1584. .nodoor
  1585.  
  1586.  or.l d0,(a0)
  1587.  
  1588.  move.w 2(a3),(a4)
  1589.  move.w 4(a3),2(a4)
  1590.  
  1591. noid:
  1592.  
  1593.  add.w #30,a3
  1594.  addq #4,a4
  1595.  
  1596.  bra innerwalls
  1597.  
  1598. doneinner:
  1599.  
  1600.  add.w #40,a1
  1601.  addq #4,a0
  1602.  
  1603.  bra DOALLWALLS
  1604. nomorezones:
  1605.  
  1606. NOALLWALLS
  1607.  
  1608.  move.w #96,MIDDLEX
  1609.  move.w #192,RIGHTX
  1610.  move.w #160,BOTTOMY
  1611.  move.w #80,TOTHEMIDDLE
  1612.  clr.b FULLSCR
  1613.  move.l scrn,a0
  1614.  jsr WIPEDISPLAY
  1615.  move.l scrn2,a0
  1616.  jsr WIPEDISPLAY
  1617.  
  1618.  st PLAYERONEGUNS+1
  1619.  st PLAYERTWOGUNS+1
  1620.  
  1621.  move.w #100,timetodamage
  1622.  
  1623.  move.w #299,d0
  1624.  move.l #DAMAGED,a0
  1625. CLRDAM:
  1626.  move.w #0,(a0)+
  1627.  dbra d0,CLRDAM
  1628.  
  1629.  moveq #0,d0
  1630.  move.w d0,STOPOFFSET
  1631.  neg.w d0
  1632.  add.w TOTHEMIDDLE,d0
  1633.  move.w d0,SMIDDLEY
  1634.  muls #320,d0
  1635.  move.l d0,SBIGMIDDLEY
  1636.  
  1637.  move.w #0,PLR1_AIMSPD
  1638.  move.w #0,PLR2_AIMSPD
  1639.  
  1640.  move.l scrn,SCRNSHOWPT
  1641.  
  1642.  move.l scrn2,SCRNDRAWPT
  1643.  
  1644.  
  1645.  
  1646.  move.l #MESSAGEBUFFER,a0
  1647.  move.w #19,d0
  1648. clrmessbuff:
  1649.  move.l #0,(a0)+
  1650.  dbra d0,clrmessbuff
  1651.  
  1652.  move.l #nullmessage,d0
  1653.  jsr SENDMESSAGE
  1654.  
  1655. lop:
  1656.  
  1657. ****************************
  1658. ; move.w #400,PLAYERONEHEALTH
  1659. ****************************
  1660.  
  1661.  move.w #%110000000000,$dff034
  1662.  
  1663. ; move.w COUNTER,d0
  1664. ; ext.l d0
  1665. ; divs #10,d0
  1666. ; swap d0
  1667. ; add.b #'0',d0
  1668. ; move.b d0,COUNTSPACE+2
  1669. ; swap d0
  1670. ; ext.l d0
  1671. ; divs #10,d0
  1672. ; swap d0
  1673. ; add.b #'0',d0
  1674. ; move.b d0,COUNTSPACE+1
  1675. ; swap d0
  1676. ; add.b #'0',d0
  1677. ; move.b d0,COUNTSPACE
  1678. ;
  1679. ; move.w COUNTER2,d0
  1680. ; ext.l d0
  1681. ; divs #10,d0
  1682. ; swap d0
  1683. ; add.b #'0',d0
  1684. ; move.b d0,COUNTSPACE+5
  1685. ; swap d0
  1686. ; ext.l d0
  1687. ; divs #10,d0
  1688. ; swap d0
  1689. ; add.b #'0',d0
  1690. ; move.b d0,COUNTSPACE+4
  1691. ; swap d0
  1692. ; add.b #'0',d0
  1693. ; move.b d0,COUNTSPACE+3
  1694.  
  1695. ;
  1696. ; move.l #COUNTSPACE,d0
  1697. ; jsr SENDMESSAGE
  1698. ;
  1699. ; move.w #0,COUNTER
  1700. ; move.w #0,COUNTER2
  1701.  
  1702.  move.b MAPON,REALMAPON
  1703.  
  1704.  move.b FULLSCRTEMP,d0
  1705.  move.b FULLSCR,d1
  1706.  eor.b d1,d0
  1707.  beq .notswapscr2
  1708.  
  1709.  move.b FULLSCRTEMP,FULLSCR
  1710.  beq.s .notswapscr3
  1711.  
  1712.  cmp.w #100,WIDESCRN
  1713.  blt.s .okwidee
  1714.  move.w #100,WIDESCRN
  1715. .okwidee:
  1716.  
  1717.  move.w #144,MIDDLEX
  1718.  move.w #288,RIGHTX
  1719.  move.w #232,BOTTOMY
  1720.  move.w #120,TOTHEMIDDLE
  1721.  move.l SCRNSHOWPT,a0
  1722.  jsr WIPEDISPLAY
  1723.  move.l SCRNDRAWPT,a0
  1724.  jsr WIPEDISPLAY
  1725.  
  1726.  bra.s .notswapscr2
  1727.  
  1728. .notswapscr3:
  1729.  cmp.w #60,WIDESCRN
  1730.  blt.s .okwide
  1731.  move.w #60,WIDESCRN
  1732. .okwide:
  1733.  
  1734.  
  1735.  move.w #96,MIDDLEX
  1736.  move.w #192,RIGHTX
  1737.  move.w #160,BOTTOMY
  1738.  move.w #80,TOTHEMIDDLE
  1739.  move.l SCRNSHOWPT,a0
  1740.  jsr WIPEDISPLAY
  1741.  move.l SCRNDRAWPT,a0
  1742.  jsr WIPEDISPLAY
  1743. .notswapscr2:
  1744.  
  1745.  
  1746.  btst #6,$bfe001
  1747. ;charlie bne.b .nocop
  1748.  
  1749. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1750.  
  1751. .nocop
  1752.  
  1753.  move.l #KeyMap,a5
  1754.  
  1755.  cmp.b #'n',mors
  1756.  bne .nopause
  1757.  tst.b $19(a5)
  1758.  beq.s .nopause
  1759.  clr.b doanything
  1760.  
  1761. .waitrel:
  1762.  
  1763.  tst.b PLR1JOY
  1764.  beq.s .NOJOY
  1765.  jsr _ReadJoy1
  1766. .NOJOY
  1767.  
  1768.  tst.b $19(a5)
  1769.  bne.s .waitrel
  1770.  
  1771.  bsr PAUSEOPTS
  1772.  
  1773.  st doanything
  1774. .nopause: 
  1775.  
  1776.  move.l hitcol,d0
  1777.  move.l d0,d1
  1778.  
  1779. ********************************************
  1780. * Remove after colour testing 
  1781. ; moveq #0,d1
  1782. ********************************************
  1783.  
  1784.  add.l #PALETTEBIT,d1
  1785.  tst.l d0
  1786.  beq.s nofadedownhc
  1787.  sub.l #2116,d0
  1788.  move.l d0,hitcol
  1789. nofadedownhc:
  1790.  
  1791.  move.l d1,a0
  1792.  move.l #PALETTESPACE,a1
  1793.  move.l #(2116/4)-2,d0
  1794. putinpal:
  1795.  move.l (a0)+,(a1)+
  1796.  dbra d0,putinpal
  1797.  
  1798.  st READCONTROLS
  1799.  move.l #$dff000,a6
  1800.  
  1801.  
  1802.  cmp.b #'n',mors
  1803.  beq .nopause
  1804.  
  1805.  move.b SLAVEPAUSE,d0
  1806.  or.b MASTERPAUSE,d0
  1807.  beq.s .nopause
  1808.  clr.b doanything
  1809.  
  1810.  move.l #KeyMap,a5
  1811. .waitrel:
  1812.  
  1813.  cmp.b #'s',mors
  1814.  beq.s .RE2
  1815.  tst.b PLR1JOY
  1816.  beq.s .NOJOY
  1817.  jsr _ReadJoy1
  1818.  bra .RE1
  1819. .RE2:
  1820.  tst.b PLR2JOY
  1821.  beq.s .NOJOY
  1822.  jsr _ReadJoy2
  1823. .RE1
  1824. .NOJOY:
  1825.  tst.b $19(a5)
  1826.  bne.s .waitrel
  1827.  
  1828.  bsr PAUSEOPTS
  1829.  
  1830.  cmp.b #'m',mors
  1831.  bne.s .slavelast
  1832.  Jsr SENDFIRST
  1833.  bra .masfirst
  1834. .slavelast
  1835.  Jsr RECFIRST
  1836. .masfirst:
  1837.  clr.b SLAVEPAUSE
  1838.  clr.b MASTERPAUSE
  1839.  st doanything
  1840.  
  1841. .nopause: 
  1842.  
  1843.  
  1844.  move.l drawpt,d0
  1845.  move.l olddrawpt,drawpt
  1846.  move.l d0,olddrawpt
  1847.  
  1848.  move.l SCRNDRAWPT,d0
  1849.  move.l SCRNSHOWPT,SCRNDRAWPT
  1850.  move.l d0,SCRNSHOWPT
  1851.  
  1852. ; move.l d0,$dff084    
  1853.  move.l drawpt,a3
  1854. ; move.l COPSCRNBUFF,a3
  1855.  adda.w #10,a3
  1856.  move.l a3,frompt
  1857.  add.l #104*4*40,a3
  1858.  move.l a3,midpt
  1859.  
  1860.  cmp.b #'s',mors
  1861.  beq.s nowaitslave
  1862.  
  1863. waitfortop:
  1864.  
  1865.  btst.b #0,intreqrl(a6)
  1866.  beq.b waitfortop
  1867.  
  1868.  move.w #$1,intreq(a6)
  1869. ; move.l #PLR1_GunData,GunData
  1870.  move.b PLR1_GunSelected,GunSelected
  1871.  bra waitmaster
  1872.  
  1873. nowaitslave:
  1874. ; move.l #PLR2_GunData,GunData
  1875.  move.b PLR2_GunSelected,GunSelected
  1876. waitmaster:
  1877.  
  1878.  move.l d0,d1
  1879.  move.l d1,d0
  1880.  move.w d0,pl1l
  1881.  swap d0
  1882.  move.w d0,pl1h
  1883.  
  1884.  add.l #10240,d1
  1885.  move.l d1,d0
  1886.  move.w d0,pl2l
  1887.  swap d0
  1888.  move.w d0,pl2h
  1889.  
  1890.  add.l #10240,d1
  1891.  move.l d1,d0
  1892.  move.w d0,pl3l
  1893.  swap d0
  1894.  move.w d0,pl3h
  1895.  
  1896.  add.l #10240,d1
  1897.  move.l d1,d0
  1898.  move.w d0,pl4l
  1899.  swap d0
  1900.  move.w d0,pl4h
  1901.  
  1902.  add.l #10240,d1
  1903.  move.l d1,d0
  1904.  move.w d0,pl5l
  1905.  swap d0
  1906.  move.w d0,pl5h
  1907.  
  1908.  add.l #10240,d1
  1909.  move.l d1,d0
  1910.  move.w d0,pl6l
  1911.  swap d0
  1912.  move.w d0,pl6h
  1913.  
  1914.  add.l #10240,d1
  1915.  move.l d1,d0
  1916.  move.w d0,pl7l
  1917.  swap d0
  1918.  move.w d0,pl7h
  1919.  
  1920.  add.l #10240,d1
  1921.  move.l d1,d0
  1922.  move.w d0,pl8l
  1923.  swap d0
  1924.  move.w d0,pl8h 
  1925.  
  1926.  move.l #SMIDDLEY,a0
  1927.  movem.l (a0)+,d0/d1
  1928.  move.l d0,MIDDLEY
  1929.  move.l d1,MIDDLEY+4
  1930.  
  1931.  move.l waterpt,a0
  1932.  move.l (a0)+,watertouse
  1933.  cmp.l #endwaterlist,a0
  1934.  blt.s okwat
  1935.  move.l #waterlist,a0
  1936. okwat:
  1937.  move.l a0,waterpt
  1938.  
  1939.  add.w #640,wtan
  1940.  and.w #8191,wtan
  1941.  add.l #1,wateroff
  1942.  and.l #$3fff3fff,wateroff
  1943.  
  1944.  move.l PLR1_xoff,OLDX1
  1945.  move.l PLR1_zoff,OLDZ1
  1946.  move.l PLR2_xoff,OLDX2
  1947.  move.l PLR2_zoff,OLDZ2
  1948.  
  1949.  move.l #$dff000,a6
  1950.  
  1951.  cmp.b #'s',mors
  1952.  beq ASlaveShouldWaitOnHisMaster
  1953.  
  1954.  cmp.b #'n',mors
  1955.  bne NotOnePlayer
  1956.  
  1957.  movem.l d0-d7/a0-a6,-(a7)
  1958.  
  1959.  moveq #0,d0
  1960.  move.b GunSelected,d0
  1961.  move.l LINKFILE,a6
  1962.  add.l #GunBulletTypes,a6
  1963.  move.w (a6,d0.w*8),d0
  1964.  
  1965.  move.l #PLAYERONEAMMO,a6
  1966.  move.w (a6,d0.w*2),d0
  1967.  move.w d0,Ammo
  1968.  movem.l (a7)+,d0-d7/a0-a6
  1969.  
  1970.  move.w PLAYERONEHEALTH,Energy
  1971.  
  1972.  move.w FramesToDraw,TempFrames
  1973.  cmp.w #15,TempFrames
  1974.  blt.s .okframe
  1975.  move.w #15,TempFrames
  1976. .okframe:
  1977.  move.w #0,FramesToDraw
  1978.  
  1979. *********************************************
  1980. *********** TAKE THIS OUT *******************
  1981. *********************************************
  1982.  
  1983.  move.l CHEATPTR,a4
  1984.  add.l #200000,a4
  1985.  moveq #0,d0
  1986.  move.b (a4),d0
  1987.  
  1988.  move.l #KeyMap,a5
  1989.  tst.b (a5,d0.w)
  1990.  beq.s .nocheat
  1991.  
  1992.  addq #1,a4
  1993.  cmp.l #ENDCHEAT,a4
  1994.  blt.s .nocheat
  1995.  cmp.w #0,CHEATNUM
  1996.  beq.s .nocheat
  1997.  sub.w #1,CHEATNUM
  1998.  move.l #CHEATFRAME,a4
  1999.  move.w #127,PLR1_energy
  2000.  jsr EnergyBar
  2001. .nocheat
  2002.  
  2003.  sub.l #200000,a4
  2004.  move.l a4,CHEATPTR
  2005.  
  2006. **********************************************
  2007. **********************************************
  2008. **********************************************
  2009.  
  2010.  move.l PLR1s_xoff,p1_xoff
  2011.  move.l PLR1s_zoff,p1_zoff
  2012.  move.l PLR1s_yoff,p1_yoff
  2013.  move.l PLR1s_height,p1_height
  2014.  move.w PLR1s_angpos,p1_angpos
  2015.  move.w PLR1_bobble,p1_bobble
  2016.  move.b PLR1_clicked,p1_clicked
  2017.  move.b PLR1_fire,p1_fire
  2018.  clr.b PLR1_clicked
  2019.  move.b PLR1_SPCTAP,p1_spctap
  2020.  clr.b PLR1_SPCTAP
  2021.  move.b PLR1_Ducked,p1_ducked
  2022.  move.b PLR1_GunSelected,p1_gunselected
  2023.  
  2024.  bsr PLR1_Control
  2025.  
  2026.  move.l PLR1_Roompt,a0
  2027.  move.l ToZoneRoof(a0),SplitHeight
  2028.  move.w p1_xoff,THISPLRxoff
  2029.  move.w p1_zoff,THISPLRzoff
  2030.  
  2031.  
  2032.  move.l #$60000,p2_yoff
  2033.  move.l PLR2_Obj,a0
  2034.  move.w #-1,GraphicRoom(a0)
  2035.  move.w #-1,12(a0)
  2036.  move.b #0,17(a0)
  2037.  move.l #BollocksRoom,PLR2_Roompt
  2038.  
  2039.  bra donetalking
  2040.  
  2041. NotOnePlayer:
  2042.  move.l #KeyMap,a5
  2043.  tst.b $19(a5)
  2044.  sne MASTERPAUSE
  2045.  
  2046. *********************************
  2047.  move.w PLAYERONEHEALTH,Energy
  2048. ; change this back
  2049. *********************************
  2050.  movem.l d0-d7/a0-a6,-(a7)
  2051.  
  2052.  moveq #0,d0
  2053.  move.b GunSelected,d0
  2054.  move.l LINKFILE,a6
  2055.  add.l #GunBulletTypes,a6
  2056.  move.w (a6,d0.w*8),d0
  2057.  
  2058.  move.l #PLAYERONEAMMO,a6
  2059.  move.w (a6,d0.w*2),d0
  2060.  move.w d0,Ammo
  2061.  movem.l (a7)+,d0-d7/a0-a6
  2062.  
  2063.  jsr SENDFIRST
  2064.  
  2065.  move.w FramesToDraw,TempFrames
  2066.  cmp.w #15,TempFrames
  2067.  blt.s .okframe
  2068.  move.w #15,TempFrames
  2069. .okframe:
  2070.  move.w #0,FramesToDraw
  2071.  
  2072.  move.l PLR1s_xoff,p1_xoff
  2073.  move.l PLR1s_zoff,p1_zoff
  2074.  move.l PLR1s_yoff,p1_yoff
  2075.  move.l PLR1s_height,p1_height
  2076.  move.w PLR1s_angpos,p1_angpos
  2077.  move.w PLR1_bobble,p1_bobble
  2078.  move.b PLR1_clicked,p1_clicked
  2079.  clr.b PLR1_clicked
  2080.  move.b PLR1_fire,p1_fire
  2081.  move.b PLR1_SPCTAP,p1_spctap
  2082.  clr.b PLR1_SPCTAP
  2083.  move.b PLR1_Ducked,p1_ducked
  2084.  move.b PLR1_GunSelected,p1_gunselected
  2085.  
  2086.  move.l PLR1_AIMSPD,d0
  2087.  jsr SENDFIRST
  2088.  move.l d0,PLR2_AIMSPD
  2089.  
  2090.  move.l p1_xoff,d0
  2091.  jsr SENDFIRST
  2092.  move.l d0,p2_xoff
  2093.  
  2094.  move.l p1_zoff,d0
  2095.  jsr SENDFIRST
  2096.  move.l d0,p2_zoff 
  2097.  
  2098.  move.l p1_yoff,d0
  2099.  jsr SENDFIRST
  2100.  move.l d0,p2_yoff
  2101.   
  2102.  move.l p1_height,d0
  2103.  jsr SENDFIRST
  2104.  move.l d0,p2_height
  2105.  
  2106.  move.w p1_angpos,d0
  2107.  swap d0
  2108.  move.w p1_bobble,d0
  2109.  jsr SENDFIRST
  2110.  move.w d0,p2_bobble
  2111.  swap d0
  2112.  move.w d0,p2_angpos
  2113.  
  2114.  
  2115.  move.w TempFrames,d0
  2116.  swap d0
  2117.  move.b p1_spctap,d0
  2118.  lsl.w #8,d0
  2119.  move.b p1_clicked,d0
  2120.  jsr SENDFIRST
  2121.  move.b d0,p2_clicked
  2122.  lsr.w #8,d0
  2123.  move.b d0,p2_spctap
  2124.  
  2125.  
  2126.  move.w Rand1,d0
  2127.  swap d0
  2128.  move.b p1_ducked,d0
  2129.  lsl.w #8,d0
  2130.  move.b p1_gunselected,d0
  2131.  jsr SENDFIRST
  2132.  move.b d0,p2_gunselected
  2133.  lsr.w #8,d0
  2134.  move.b d0,p2_ducked
  2135.  
  2136.  move.b p1_fire,d0
  2137.  lsl.w #8,d0
  2138.  move.b MASTERQUITTING,d0
  2139.  or.b d0,SLAVEQUITTING
  2140.  swap d0
  2141.  move.b MASTERPAUSE,d0
  2142.  or.b d0,SLAVEPAUSE
  2143.  jsr SENDFIRST
  2144.  or.b d0,MASTERPAUSE
  2145.  or.b d0,SLAVEPAUSE
  2146.  swap d0
  2147.  or.b d0,SLAVEQUITTING
  2148.  or.b d0,MASTERQUITTING
  2149.  lsr.w #8,d0
  2150.  move.b d0,p2_fire
  2151.  
  2152.  bsr PLR1_Control
  2153.  bsr PLR2_Control
  2154.  move.l PLR1_Roompt,a0
  2155.  move.l ToZoneRoof(a0),SplitHeight
  2156.  move.w p1_xoff,THISPLRxoff
  2157.  move.w p1_zoff,THISPLRzoff
  2158.  
  2159.  bra donetalking
  2160.  
  2161. ASlaveShouldWaitOnHisMaster:
  2162.  
  2163.  move.l #KeyMap,a5
  2164.  tst.b $19(a5)
  2165.  sne SLAVEPAUSE
  2166.  
  2167.  movem.l d0-d7/a0-a6,-(a7)
  2168.  
  2169.  moveq #0,d0
  2170.  move.b GunSelected,d0
  2171.  move.l LINKFILE,a6
  2172.  add.l #GunBulletTypes,a6
  2173.  move.w (a6,d0.w*8),d0
  2174.  
  2175.  move.l #PLAYERTWOAMMO,a6
  2176.  move.w (a6,d0.w*2),d0
  2177.  move.w d0,Ammo
  2178.  movem.l (a7)+,d0-d7/a0-a6
  2179.  
  2180.  move.w PLAYERTWOHEALTH,Energy
  2181.  
  2182.  jsr RECFIRST
  2183.  
  2184.  move.l PLR2s_xoff,p2_xoff
  2185.  move.l PLR2s_zoff,p2_zoff
  2186.  move.l PLR2s_yoff,p2_yoff
  2187.  move.l PLR2s_height,p2_height
  2188.  move.w PLR2s_angpos,p2_angpos
  2189.  move.w PLR2_bobble,p2_bobble
  2190.  move.b PLR2_clicked,p2_clicked
  2191.  clr.b PLR2_clicked
  2192.  move.b PLR2_fire,p2_fire
  2193.  move.b PLR2_SPCTAP,p2_spctap
  2194.  clr.b PLR2_SPCTAP
  2195.  move.b PLR2_Ducked,p2_ducked
  2196.  move.b PLR2_GunSelected,p2_gunselected
  2197.  
  2198.  move.l PLR2_AIMSPD,d0
  2199.  jsr RECFIRST
  2200.  move.l d0,PLR1_AIMSPD
  2201.  
  2202.  move.l p2_xoff,d0
  2203.  jsr RECFIRST
  2204.  move.l d0,p1_xoff
  2205.  
  2206.  move.l p2_zoff,d0
  2207.  jsr RECFIRST
  2208.  move.l d0,p1_zoff
  2209.  
  2210.  move.l p2_yoff,d0
  2211.  jsr RECFIRST
  2212.  move.l d0,p1_yoff
  2213.  
  2214.  move.l p2_height,d0
  2215.  jsr RECFIRST
  2216.  move.l d0,p1_height
  2217.  
  2218.  move.w p2_angpos,d0
  2219.  swap d0
  2220.  move.w p2_bobble,d0
  2221.  jsr RECFIRST
  2222.  move.w d0,p1_bobble
  2223.  swap d0
  2224.  move.w d0,p1_angpos
  2225.  
  2226.  
  2227.  move.b p2_spctap,d0
  2228.  lsl.w #8,d0
  2229.  move.b p2_clicked,d0
  2230.  jsr RECFIRST
  2231.  move.b d0,p1_clicked
  2232.  lsr.w #8,d0
  2233.  move.b d0,p1_spctap
  2234.  swap d0
  2235.  move.w d0,TempFrames
  2236.  
  2237.  move.b p2_ducked,d0
  2238.  lsl.w #8,d0
  2239.  move.b p2_gunselected,d0
  2240.  jsr RECFIRST
  2241.  move.b d0,p1_gunselected
  2242.  lsr.w #8,d0
  2243.  move.b d0,p1_ducked
  2244.  swap d0
  2245.  move.w d0,Rand1
  2246.  
  2247.  move.b p2_fire,d0
  2248.  lsl.w #8,d0
  2249.  move.b SLAVEQUITTING,d0
  2250.  or.b d0,MASTERQUITTING
  2251.  swap d0
  2252.  move.b SLAVEPAUSE,d0
  2253.  or.b d0,MASTERPAUSE
  2254.  jsr RECFIRST
  2255.  or.b d0,MASTERPAUSE
  2256.  or.b d0,SLAVEPAUSE
  2257.  swap d0
  2258.  or.b d0,SLAVEQUITTING
  2259.  or.b d0,MASTERQUITTING
  2260.  lsr.w #8,d0
  2261.  move.b d0,p1_fire
  2262.  
  2263.  
  2264.  bsr PLR1_Control
  2265.  bsr PLR2_Control
  2266.  move.w p2_xoff,THISPLRxoff
  2267.  move.w p2_zoff,THISPLRzoff
  2268.  move.l PLR2_Roompt,a0
  2269.  move.l ToZoneRoof(a0),SplitHeight
  2270.  
  2271. donetalking:
  2272.  
  2273.  
  2274.  move.l #ZoneBrightTable,a1
  2275.  move.l ZoneAdds,a2
  2276.  move.l PLR2_ListOfGraphRooms,a0
  2277. ; move.l PLR2_PointsToRotatePtr,a5
  2278.  move.l a0,a5
  2279.  cmp.b #'s',mors
  2280.  beq.s doallz
  2281.  move.l PLR1_ListOfGraphRooms,a0
  2282. ; move.l PLR1_PointsToRotatePtr,a5
  2283.  move.l a0,a5 
  2284. doallz
  2285.  move.w (a0),d0
  2286.  blt.s doneallz
  2287.  add.w #8,a0
  2288.  
  2289.  move.l (a2,d0.w*4),a3
  2290.  add.l LEVELDATA,a3
  2291.  move.w ToZoneBrightness(a3),d2
  2292.  
  2293.  blt.s justbright
  2294.  move.w d2,d3
  2295.  lsr.w #8,d3
  2296.  tst.b d3
  2297.  beq.s justbright
  2298.  
  2299.  move.l #BrightAnimTable,a4
  2300.  move.w -2(a4,d3.w*2),d2
  2301.  
  2302. justbright:
  2303.  muls #32,d2
  2304.  divs #20,d2
  2305.  move.w d2,(a1,d0.w*4)
  2306.  
  2307.  move.w ToUpperBrightness(a3),d2
  2308.  
  2309.  blt.s justbright2
  2310.  move.w d2,d3
  2311.  lsr.w #8,d3
  2312.  tst.b d3
  2313.  beq.s justbright2
  2314.  
  2315.  move.l #BrightAnimTable,a4
  2316.  move.w -2(a4,d3.w*2),d2
  2317.  
  2318. justbright2:
  2319.  
  2320.  muls #32,d2
  2321.  divs #20,d2
  2322.  move.w d2,2(a1,d0.w*4)
  2323.  
  2324.  bra doallz
  2325.  
  2326. doneallz:
  2327.  
  2328.  move.l PointBrights,a2
  2329.  move.l #CurrentPointBrights,a3
  2330. justtheone:
  2331.  move.w (a5),d0
  2332.  blt whythehell
  2333.  addq #8,a5
  2334.  
  2335.  muls #40,d0
  2336.  
  2337.  move.w #39,d7
  2338.  
  2339. allinzone:
  2340.  move.w (a2,d0.w*2),d2
  2341.  
  2342.  tst.b d2
  2343.  blt.s .justbright
  2344.  move.w d2,d3
  2345.  lsr.w #8,d3
  2346.  tst.b d3
  2347.  beq.s .justbright
  2348.  
  2349.  move.w d3,d4
  2350.  and.w #$f,d3
  2351.  lsr.w #4,d4
  2352.  add.w #1,d4
  2353.  move.l #BrightAnimTable,a0
  2354.  move.w -2(a0,d3.w*2),d3
  2355.  ext.w d2
  2356.  sub.w d2,d3
  2357.  muls d4,d3
  2358.  asr.w #4,d3
  2359.  add.w d3,d2
  2360.  
  2361. .justbright:
  2362.  ext.w d2
  2363.  
  2364.  muls #31,d2
  2365.  divs #20,d2
  2366.  bge.s .itspos
  2367.  sub.w #600,d2
  2368. .itspos:
  2369.  add.w #300,d2
  2370.  
  2371.  move.w d2,(a3,d0.w*2)
  2372.  addq #1,d0
  2373.  dbra d7,allinzone
  2374.  
  2375.  bra justtheone
  2376.  
  2377. whythehell:
  2378.  
  2379.  move.l PLR1_Roompt,a0
  2380.  move.l #CurrentPointBrights,a1
  2381.  move.l ZoneBorderPts,a2
  2382.  move.w (a0),d0
  2383.  muls #10,d0
  2384.  lea (a2,d0.w*2),a2
  2385.  lea (a1,d0.w*8),a1
  2386.  
  2387.  moveq #9,d7
  2388.  moveq #0,d0
  2389.  moveq #0,d1
  2390. findaverage:
  2391.  tst.w (a2)+
  2392.  blt.s .foundaverage
  2393.  addq #1,d0
  2394.  move.w (a1)+,d2
  2395.  bge.s .okpos
  2396.  neg.w d2
  2397. .okpos:
  2398.  add.w d2,d1
  2399.  
  2400.  dbra d7,findaverage
  2401.  
  2402. .foundaverage:
  2403.  
  2404.  ext.l d1
  2405.  divs d0,d1
  2406.  sub.w #300,d1
  2407.  move.w d1,PLR1_RoomBright
  2408.  
  2409.  cmp.b #'n',mors
  2410.  beq nosee
  2411.  
  2412.  move.l PLR1_Roompt,FromRoom
  2413.  move.l PLR2_Roompt,ToRoom
  2414.  move.w p1_xoff,Viewerx
  2415.  move.w p1_zoff,Viewerz
  2416.  move.l p1_yoff,d0
  2417.  asr.l #7,d0
  2418.  move.w d0,Viewery
  2419.  move.w p2_xoff,Targetx
  2420.  move.w p2_zoff,Targetz
  2421.  move.l p2_yoff,d0
  2422.  asr.l #7,d0
  2423.  move.w d0,Targety
  2424.  move.b PLR1_StoodInTop,ViewerTop
  2425.  move.b PLR2_StoodInTop,TargetTop
  2426.  jsr CanItBeSeen
  2427.  
  2428.  move.l PLR1_Obj,a0
  2429.  move.b CanSee,d0
  2430.  and.b #2,d0
  2431.  move.b d0,17(a0)
  2432.  move.l PLR2_Obj,a0
  2433.  move.b CanSee,d0
  2434.  and.b #1,d0
  2435.  move.b d0,17(a0)
  2436.  
  2437. nosee:
  2438.  
  2439.  
  2440.  move.w TempFrames,d0
  2441.  add.w d0,p1_holddown
  2442.  cmp.w #30,p1_holddown
  2443.  blt.s oklength
  2444.  move.w #30,p1_holddown
  2445. oklength:
  2446.  
  2447.  tst.b p1_fire
  2448.  bne.s okstillheld
  2449.  sub.w d0,p1_holddown
  2450.  bge.s okstillheld
  2451.  move.w #0,p1_holddown
  2452.  
  2453. okstillheld:
  2454.  
  2455.  move.w TempFrames,d0
  2456.  add.w d0,p2_holddown
  2457.  
  2458.  cmp.w #30,p2_holddown
  2459.  blt.s oklength2
  2460.  move.w #30,p2_holddown
  2461. oklength2:
  2462.  
  2463.  
  2464.  tst.b p2_fire
  2465.  bne.s okstillheld2
  2466.  sub.w d0,p2_holddown
  2467.  bge.s okstillheld2
  2468.  move.w #0,p2_holddown
  2469. okstillheld2:
  2470.  
  2471. ***** CHECKING LIGHT *********
  2472.  
  2473. ; move.w #-20,d0
  2474. ; move.w PLR1_xoff,d1
  2475. ; move.w PLR1_zoff,d2
  2476. ; move.l PLR1_Roompt,a0
  2477. ; move.w (a0),d3
  2478. ; move.w PLR1_angpos,d4
  2479. ;
  2480. ; jsr BRIGHTENPOINTSANGLE
  2481.  
  2482. ******************************
  2483.  
  2484. ; move.l #PLR1_GunData,a1
  2485. ; move.w p1_holddown,d0
  2486. ; move.w #50,10+32*3(a1)
  2487. ; move.l #PLR2_GunData,a1
  2488. ; move.w p2_holddown,d0
  2489. ; move.w #50,10+32*3(a1)
  2490.  
  2491. ******************************************
  2492. ******************************************
  2493.  
  2494.  move.w TempFrames,d1
  2495.  bgt.s noze
  2496.  moveq #1,d1
  2497. noze:
  2498.  
  2499.  move.w PLR1_xoff,d0
  2500.  sub.w OLDX1,d0
  2501.  asl.w #4,d0
  2502.  ext.l d0
  2503.  divs d1,d0
  2504.  move.w d0,XDIFF1
  2505.  move.w PLR2_xoff,d0
  2506.  sub.w OLDX2,d0
  2507.  asl.w #4,d0
  2508.  ext.l d0
  2509.  divs d1,d0
  2510.  move.w d0,XDIFF2
  2511.  move.w PLR1_zoff,d0
  2512.  sub.w OLDZ1,d0
  2513.  asl.w #4,d0
  2514.  ext.l d0
  2515.  divs d1,d0
  2516.  move.w d0,ZDIFF1
  2517.  move.w PLR2_zoff,d0
  2518.  sub.w OLDZ2,d0
  2519.  asl.w #4,d0
  2520.  ext.l d0
  2521.  divs d1,d0
  2522.  move.w d0,ZDIFF2
  2523.  
  2524.  cmp.b #'s',mors
  2525.  beq.s ImPlayer2OhYesIAm
  2526.  bsr USEPLR1
  2527.  bra IWasPlayer1
  2528.  
  2529. ImPlayer2OhYesIAm:
  2530.  bsr USEPLR2
  2531. IWasPlayer1:
  2532.  
  2533.  
  2534.  cmp.b #'s',mors
  2535.  beq drawplayer2
  2536.  
  2537.  move.w #0,scaleval
  2538.  
  2539.  move.l PLR1_xoff,xoff
  2540.  move.l PLR1_yoff,yoff
  2541.  move.l PLR1_zoff,zoff
  2542.  move.w PLR1_angpos,angpos
  2543.  move.w PLR1_cosval,cosval
  2544.  move.w PLR1_sinval,sinval
  2545.  
  2546.  
  2547.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2548.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2549.  move.b PLR1_Echo,Echo
  2550.  move.l PLR1_Roompt,Roompt
  2551.  
  2552.  move.l #KeyMap,a5
  2553.  moveq #0,d5
  2554.  move.b look_behind_key,d5
  2555.  tst.b (a5,d5.w)
  2556.  beq.s .nolookback
  2557.  
  2558.  move.l PLR1_Obj,a0
  2559.  move.w #-1,12+128(a0)
  2560.  
  2561.  eor.w #4096,angpos 
  2562.  neg.w cosval
  2563.  neg.w sinval
  2564. .nolookback:
  2565.  
  2566.  bsr OrderZones
  2567.  jsr objmoveanim
  2568.  jsr EnergyBar
  2569.  jsr AmmoBar
  2570.  
  2571. ;********************************************
  2572. ;************* Do reflection ****************
  2573. ;
  2574. ; move.l ListOfGraphRooms,a0
  2575. ; move.l ZoneAdds,a1
  2576. ;checkwaterheights
  2577. ; move.w (a0),d0
  2578. ; blt allzonesdone
  2579. ; addq #8,a0
  2580. ; move.l (a1,d0.w*4),a2
  2581. ; add.l LEVELDATA,a2
  2582. ; move.l ToZoneWater(a2),d0
  2583. ; cmp.l ToZoneFloor(a2),d0
  2584. ; blt.s WEHAVEAHEIGHT
  2585. ; bra.s checkwaterheights
  2586. ;
  2587. ;WEHAVEAHEIGHT:
  2588. ;
  2589. ; sub.l yoff,d0
  2590. ; blt.s underwater
  2591. ; add.l d0,d0
  2592. ; add.l d0,yoff
  2593. ; move.l FASTBUFFER2,FASTBUFFER
  2594. ; move.w #0,leftclip
  2595. ; move.w RIGHTX,rightclip
  2596. ; move.w #0,deftopclip
  2597. ; move.w #BOTTOMY/2,defbotclip
  2598. ; move.w #0,topclip
  2599. ; move.w #BOTTOMY/2,botclip
  2600. ;
  2601. ; clr.b DOANYWATER 
  2602. ; bsr DrawDisplay
  2603. ;allzonesdone:
  2604. ;underwater:
  2605.  
  2606. ********************************************
  2607.  
  2608.  st DOANYWATER
  2609.  
  2610.  move.l PLR1_yoff,yoff
  2611.  
  2612.  move.w #0,leftclip
  2613.  move.w RIGHTX,rightclip
  2614.  move.w #0,deftopclip
  2615.  move.w WIDESCRN,d0
  2616.  add.w d0,deftopclip
  2617.  
  2618.  move.w BOTTOMY,defbotclip
  2619.  sub.w d0,defbotclip
  2620.  move.w #0,topclip
  2621.  add.w d0,topclip
  2622.  move.w BOTTOMY,botclip
  2623.  sub.w d0,botclip
  2624. ; sub.l #10*104*4,frompt
  2625. ; sub.l #10*104*4,midpt
  2626.  
  2627. * Subroom loop
  2628.  
  2629.  bsr DrawDisplay 
  2630.  
  2631.  bra nodrawp2
  2632.  
  2633. drawplayer2
  2634.  
  2635.  move.w #0,scaleval
  2636.  move.l PLR2_xoff,xoff
  2637.  move.l PLR2_yoff,yoff
  2638.  move.l PLR2_zoff,zoff
  2639.  move.w PLR2_angpos,angpos
  2640.  move.w PLR2_cosval,cosval
  2641.  move.w PLR2_sinval,sinval 
  2642.  
  2643.  
  2644.  
  2645.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2646.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2647.  move.b PLR2_Echo,Echo
  2648.  move.l PLR2_Roompt,Roompt
  2649.  
  2650.  move.l #KeyMap,a5
  2651.  moveq #0,d5
  2652.  move.b look_behind_key,d5
  2653.  tst.b (a5,d5.w)
  2654.  beq.s .nolookback
  2655.  
  2656.  move.l PLR1_Obj,a0
  2657.  move.w #-1,12+128(a0)
  2658.  eor.w #4096,angpos 
  2659.  
  2660.  neg.w cosval
  2661.  neg.w sinval
  2662. .nolookback:
  2663.  
  2664.  bsr OrderZones
  2665.  jsr objmoveanim
  2666.  jsr EnergyBar
  2667.  jsr AmmoBar
  2668.  
  2669.  move.w WIDESCRN,d0
  2670.  
  2671.  move.w #0,leftclip
  2672.  move.w RIGHTX,rightclip
  2673.  move.w #0,deftopclip
  2674.  add.w d0,deftopclip
  2675.  move.w BOTTOMY,defbotclip
  2676.  sub.w d0,defbotclip
  2677.  move.w #0,topclip
  2678.  add.w d0,topclip
  2679.  move.w BOTTOMY,botclip
  2680.  sub.w d0,botclip
  2681.  
  2682.  bsr DrawDisplay
  2683.  
  2684. nodrawp2:
  2685.  
  2686. ***************************************** 
  2687. * Copy from copbuff to chip ram
  2688.  
  2689.  
  2690. ; move.l drawpt,a3
  2691. ; adda.w #10,a3
  2692. ; move.l COPSCRNBUFF,a2
  2693. ; move.w #2,d6
  2694. ; adda.w #10,a2
  2695. ;COPYOUT
  2696. ; move.w #31,d0
  2697. ;COPYDOWN1:
  2698. ; move.w #3,d1
  2699. ; move.l a2,a4
  2700. ; move.l a3,a5
  2701. ;.inlop1:
  2702. ;val SET 0
  2703. ; REPT 20
  2704. ; move.w val(a4),val(a5)
  2705. ;val SET val+104*4
  2706. ; ENDR
  2707. ; adda.l #104*4*20,a4
  2708. ; adda.l #104*4*20,a5
  2709. ; dbra d1,.inlop1
  2710. ; addq #4,a2
  2711. ; addq #4,a3
  2712. ; dbra d0,COPYDOWN1
  2713. ; addq #4,a2
  2714. ; addq #4,a3
  2715. ; dbra d6,COPYOUT 
  2716.  
  2717.  tst.b REALMAPON
  2718.  beq.s .nomap
  2719.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2720. .nomap
  2721.  
  2722.  move.w WIDESCRN,d7
  2723.  
  2724.  tst.b FULLSCR
  2725.  beq nobigconv
  2726.  
  2727.  move.l FASTBUFFER,a0
  2728. ; add.l #320*2*20,a0
  2729.  move.w d7,d6
  2730.  muls #320,d6
  2731.  add.l d6,a0
  2732.  move.l SCRNDRAWPT,a1
  2733.  move.w d7,d6
  2734.  muls #40,d6
  2735.  add.l d6,a1
  2736.  add.l #2,a1
  2737.  move.l #(288/8)-1,d0
  2738.  move.l #231,d1
  2739.  sub.w d7,d1
  2740.  sub.w d7,d1
  2741.  blt nochunk
  2742.  move.w #(320-288),d2
  2743.  move.w #4,d3
  2744.  
  2745.  bra donebigconv
  2746.  
  2747. nobigconv:
  2748.  
  2749.  move.l FASTBUFFER,a0
  2750.  move.w d7,d6
  2751.  muls #320,d6
  2752.  add.l d6,a0
  2753.  move.l SCRNDRAWPT,a1
  2754.  add.l #8+40*20,a1
  2755.  move.w d7,d6
  2756.  muls #40,d6
  2757.  add.l d6,a1
  2758.  move.l #(192/8)-1,d0
  2759.  move.l #159,d1
  2760.  sub.w d7,d1
  2761.  sub.w d7,d1
  2762.  blt nochunk
  2763.  move.w #(320-192),d2
  2764.  move.w #16,d3
  2765. donebigconv
  2766.  
  2767.  tst.b DOUBLEHEIGHT
  2768.  beq.s .nodoub
  2769.  asr.w #1,d1
  2770.  blt nochunk
  2771.  add.w #320,d2
  2772.  add.w #40,d3
  2773. .nodoub:
  2774.  
  2775.  move.b DOUBLEWIDTH,d4
  2776.  
  2777.  move.b PLR1_TELEPORTED,d5
  2778.  clr.b PLR1_TELEPORTED
  2779.  cmp.b #'s',mors
  2780.  bne.s .notplr2
  2781.  move.b PLR2_TELEPORTED,d5
  2782.  clr.b PLR2_TELEPORTED
  2783. .notplr2
  2784.  jsr CHUNKYTOPLANAR 
  2785.  
  2786. nochunk:
  2787.  
  2788.  
  2789.  move.l #KeyMap,a5
  2790.  tst.b $4a(a5)
  2791.  beq .nosmallscr
  2792.  
  2793.  move.w #100,d2
  2794.  move.l #0,d7
  2795.  move.l #0,d6
  2796.  tst.b FULLSCR
  2797.  bne.s .attop
  2798.  move.l #40*20,d7
  2799.  move.l #40*52,d6
  2800.  move.w #60,d2
  2801. .attop:
  2802.  
  2803.  move.w WIDESCRN,d0
  2804.  move.l SCRNDRAWPT,a0
  2805.  add.l d7,a0
  2806.  muls #40,d0
  2807.  add.l d0,a0
  2808.  bsr CLRTWOLINES
  2809.  move.w WIDESCRN,d0
  2810.  move.l SCRNSHOWPT,a0
  2811.  add.l d7,a0
  2812.  muls #40,d0
  2813.  add.l d0,a0
  2814.  bsr CLRTWOLINES
  2815.  
  2816.  
  2817.  add.w #2,WIDESCRN
  2818.  
  2819.  cmp.w WIDESCRN,d2
  2820.  bgt.s .okwide
  2821.  move.w d2,WIDESCRN
  2822. .okwide:
  2823.  
  2824.  move.l SCRNDRAWPT,a0
  2825.  add.l #232*40,a0
  2826.  sub.l d6,a0
  2827.  move.w WIDESCRN,d0
  2828.  muls #40,d0
  2829.  sub.l d0,a0
  2830.  bsr CLRTWOLINES
  2831.  move.l SCRNSHOWPT,a0
  2832.  sub.l d6,a0
  2833.  add.l #232*40,a0
  2834.  move.w WIDESCRN,d0
  2835.  muls #40,d0
  2836.  sub.l d0,a0
  2837.  bsr CLRTWOLINES
  2838.  
  2839. .nosmallscr
  2840.  
  2841.  tst.b $5e(a5)
  2842.  beq.s .nobigscr
  2843.  tst.w WIDESCRN
  2844.  ble.s .nobigscr
  2845.  
  2846.  sub.w #2,WIDESCRN
  2847.  
  2848. .nobigscr
  2849.  
  2850.  
  2851.  tst.b (a5)
  2852.  beq.s .nosavescrn
  2853.  
  2854.  not.b USEDOUG
  2855.  
  2856.  jsr SAVETHESCREEN
  2857.  
  2858. .nosavescrn:
  2859.  
  2860.  tst.b $5b(a5)
  2861.  beq notdoubheight
  2862.  tst.b LASTDH
  2863.  bne notdoubheight2
  2864.  move.l SCRNSHOWPT,a0
  2865.  jsr WIPEDISPLAY
  2866.  move.l SCRNDRAWPT,a0
  2867.  jsr WIPEDISPLAY
  2868.  st LASTDH 
  2869.  
  2870.  move.w #0,d0
  2871.  move.w #0,d1
  2872.  
  2873.  not.b DOUBLEHEIGHT
  2874.  beq.s singlepixheight
  2875.  move.w #-40,d0
  2876.  move.w #40,d1
  2877.  
  2878. singlepixheight:
  2879.  
  2880.  move.l #SCRMODULOS,a0
  2881.  move.w #115,d2
  2882. putinmode:
  2883.  move.w d0,6(a0)
  2884.  move.w d0,6+4(a0)
  2885.  move.w d1,6+16(a0)
  2886.  move.w d1,6+16+4(a0)
  2887.  add.w #32,a0
  2888.  dbra d2,putinmode
  2889.  
  2890.  bra notdoubheight2
  2891.  
  2892. notdoubheight:
  2893.  clr.b LASTDH
  2894. notdoubheight2
  2895.  
  2896.  tst.b $5a(a5)
  2897.  beq.s notdoubwidth
  2898.  tst.b LASTDW
  2899.  bne notdoubwidth2
  2900.  move.l SCRNSHOWPT,a0
  2901.  jsr WIPEDISPLAY
  2902.  move.l SCRNDRAWPT,a0
  2903.  jsr WIPEDISPLAY
  2904.  st LASTDW
  2905.  not.b DOUBLEWIDTH
  2906.  bra.s notdoubwidth2
  2907.  
  2908. notdoubwidth:
  2909.  clr.b LASTDW
  2910. notdoubwidth2:
  2911.  
  2912. ***************************************** 
  2913.  move.l PLR2_Roompt,a0
  2914.  move.l #WorkSpace,a1
  2915.  clr.l (a1)
  2916.  clr.l 4(a1)
  2917.  clr.l 8(a1)
  2918.  clr.l 12(a1)
  2919.  clr.l 16(a1)
  2920.  clr.l 20(a1)
  2921.  clr.l 24(a1)
  2922.  clr.l 28(a1)
  2923.  
  2924.  cmp.b #'n',mors
  2925.  beq.s plr1only
  2926.  
  2927.  lea ToListOfGraph(a0),a0
  2928. .doallrooms:
  2929.  move.w (a0),d0
  2930.  blt.s .allroomsdone
  2931.  addq #8,a0
  2932.  move.w d0,d1
  2933.  asr.w #3,d0
  2934.  bset d1,(a1,d0.w)
  2935.  bra .doallrooms
  2936. .allroomsdone:
  2937.  
  2938. plr1only:
  2939.  
  2940.  move.l PLR1_Roompt,a0
  2941.  lea ToListOfGraph(a0),a0
  2942. .doallrooms2:
  2943.  move.w (a0),d0
  2944.  blt.s .allroomsdone2
  2945.  addq #8,a0
  2946.  move.w d0,d1
  2947.  asr.w #3,d0
  2948.  bset d1,(a1,d0.w)
  2949.  bra .doallrooms2
  2950. .allroomsdone2:
  2951.  
  2952.  move.l #%000001,d7
  2953.  lea TEAMWORK,a2
  2954.  move.l ObjectData,a0
  2955.  sub.w #64,a0
  2956. .doallobs:
  2957.  add.w #64,a0
  2958.  move.w (a0),d0
  2959.  blt.s .allobsdone
  2960.  move.w 12(a0),d0
  2961.  blt.s .doallobs
  2962.  move.w d0,d1
  2963.  asr.w #3,d0
  2964.  btst d1,(a1,d0.w)
  2965.  bne.s .worryobj
  2966.  move.b 16(a0),d0
  2967.  btst d0,d7
  2968.  beq.s .doallobs
  2969.  moveq #0,d0
  2970.  move.b teamnumber(a0),d0
  2971.  blt.s .doallobs
  2972.  asl.w #4,d0
  2973.  tst.w SEENBY(a2,d0.w)
  2974.  blt.s .doallobs
  2975. .worryobj:
  2976.  or.b #127,worry(a0)
  2977.  bra.s .doallobs
  2978. .allobsdone:
  2979.  
  2980.  
  2981.  
  2982. ; move.l #brightentab,a0
  2983. ; move.l frompt,a3
  2984. ; adda.w #(4*33)+(104*4*20),a3
  2985. ; move.w #20,d7
  2986. ; move.w #20,d6
  2987. ;horl:
  2988. ; move.w d6,d5
  2989. ; move.l a3,a1
  2990. ;vertl
  2991. ; move.w (a1),d0
  2992. ; move.w (a0,d0.w*2),(a1)
  2993. ; addq #4,a1
  2994. ; dbra d5,vertl
  2995. ; adda.w #104*4,a3
  2996. ; dbra d7,horl
  2997.  
  2998.  move.l #$dff000,a6
  2999.  
  3000. ; move.w #$300,col0(a6)
  3001.  
  3002.  move.l #KeyMap,a5
  3003.  tst.b $45(a5)
  3004.  beq.s noend
  3005.  
  3006.  cmp.b #'s',mors
  3007.  beq plr2quit 
  3008.  
  3009.  st MASTERQUITTING
  3010.  bra noend
  3011.  
  3012. plr2quit:
  3013.  st SLAVEQUITTING
  3014. noend:
  3015.  
  3016.  tst.b MASTERQUITTING
  3017.  beq.s .noquit
  3018.  tst.b SLAVEQUITTING
  3019.  beq.s .noquit
  3020.  jmp endnomusic
  3021. .noquit
  3022.  
  3023.  cmp.b #'n',mors
  3024.  bne.s noexit
  3025.  move.l PLR1_Roompt,a0
  3026.  move.w (a0),d0
  3027. ; move.w PLOPT,d1
  3028. ; move.l #ENDZONES,a0
  3029. ; cmp.w (a0,d1.w*2),d0
  3030.  
  3031.  cmp.w ENDZONE,d0
  3032.  
  3033. ; change this for quick exit, charlie
  3034. zzzz:
  3035. ; bra end
  3036.  
  3037.  bne.s noexit
  3038.  add.w #2,TELVAL
  3039.  cmp.w #9,TELVAL
  3040.  blt noexit
  3041.  
  3042.  jmp end
  3043. noexit:
  3044.  
  3045. ; tst.w PLAYERONEHEALTH
  3046. ; bgt nnoend1
  3047. ; jmp end
  3048. ;nnoend1:
  3049. ; tst.w PLAYERTWOHEALTH
  3050. ; bgt nnoend2
  3051. ; jmp end
  3052. ;nnoend2:
  3053.  
  3054. ; move.l SwitchData,a0
  3055. ; tst.b 24+8(a0)
  3056. ; bne end
  3057.   
  3058. ; JSR STOPTIMER
  3059.  
  3060.  
  3061.  bra lop
  3062.  
  3063.  
  3064.  
  3065.  include "ab3:source_4000/ab3diipatchidr.s"
  3066.  
  3067. CLRTWOLINES:
  3068.  
  3069.  moveq #0,d1
  3070.  move.w #7,d2
  3071. .ccc
  3072.  move.l d1,2(a0)
  3073.  move.l d1,6(a0)
  3074.  move.l d1,10(a0)
  3075.  move.l d1,14(a0)
  3076.  move.l d1,18(a0)
  3077.  move.l d1,22(a0)
  3078.  move.l d1,26(a0)
  3079.  move.l d1,30(a0)
  3080.  move.l d1,34(a0)
  3081.  move.l d1,2+40(a0)
  3082.  move.l d1,6+40(a0)
  3083.  move.l d1,10+40(a0)
  3084.  move.l d1,14+40(a0)
  3085.  move.l d1,18+40(a0)
  3086.  move.l d1,22+40(a0)
  3087.  move.l d1,26+40(a0)
  3088.  move.l d1,30+40(a0)
  3089.  move.l d1,34+40(a0)
  3090.  add.l #10240,a0
  3091.  dbra d2,.ccc
  3092.  rts
  3093.  
  3094.  
  3095. LASTDH: dc.b 0
  3096. LASTDW: dc.b 0
  3097. WIDESCRN: dc.w 0
  3098. TRRANS: dc.w 0
  3099. DOANYWATER: dc.w 0
  3100.  
  3101. DoTheMapWotNastyCharlesIsForcingMeToDo:
  3102.  
  3103.  move.l TexturePal,a4
  3104.  add.l #256*32,a4
  3105. ; add.w MAPBRIGHT,a4
  3106.  
  3107.  move.l #KeyMap,a5
  3108.  tst.b $50(a5)
  3109.  beq.s .nobrighter
  3110.  tst.w MAPBRIGHT
  3111.  beq.s .nobrighter
  3112.  
  3113.  sub.w #1,MAPBRIGHT
  3114.  
  3115. .nobrighter:
  3116.  
  3117.  tst.b $51(a5)
  3118.  beq.s .nodimmer
  3119.  cmp.w #7,MAPBRIGHT
  3120.  bge.s .nodimmer
  3121.  
  3122.  add.w #1,MAPBRIGHT
  3123.  
  3124. .nodimmer:
  3125.  
  3126.  move.l #Rotated,a1
  3127.  move.l #COMPACTMAP,a2
  3128.  move.l #BIGMAP-40,a3
  3129.  
  3130. preshow:
  3131.  add.w #40,a3
  3132.  
  3133. SHOWMAP:
  3134.  move.l (a2)+,d5
  3135.  move.l a2,d7
  3136.  cmp.l LASTZONE,d7
  3137.  bgt shownmap
  3138.  
  3139.  tst.l d5
  3140.  beq.s preshow
  3141.  
  3142.  move.w #9,d7
  3143. wallsofzone
  3144.  
  3145.  asr.l #1,d5
  3146.  bcs.s WALLSEEN
  3147.  
  3148.  asr.l #1,d5
  3149.  bcs.s WALLMAPPED
  3150.  
  3151.  asr.l #1,d5
  3152.  addq #4,a3
  3153.  bra.s DECIDEDWALL
  3154.  
  3155. WALLMAPPED:
  3156.  move.w #$b00,d4
  3157.  asr.l #1,d5
  3158.  bcc.s .notadoor
  3159.  move.w #$e00,d4
  3160. .notadoor
  3161.  
  3162.  st TRRANS
  3163.  
  3164.  bra.s DECIDEDCOLOUR
  3165.  
  3166. WALLSEEN:
  3167.  
  3168.  clr.b TRRANS
  3169.  
  3170.  move.w #255,d4
  3171.  asr.l #2,d5
  3172.  bcc.s .notadoor
  3173.  move.w #254,d4
  3174. .notadoor
  3175. DECIDEDCOLOUR:
  3176.  move.w (a3)+,d6
  3177.  move.l (a1,d6.w*8),d0
  3178.  asr.l #7,d0
  3179.  add.w mapxoff,d0
  3180.  move.w 6(a1,d6.w*8),d1
  3181.  add.w mapzoff,d1
  3182.  move.w (a3)+,d6
  3183.  move.l (a1,d6.w*8),d2
  3184.  asr.l #7,d2
  3185.  add.w mapxoff,d2
  3186.  move.w 6(a1,d6.w*8),d3
  3187.  add.w mapzoff,d3
  3188.  
  3189.  neg.w d1
  3190.  neg.w d3
  3191.  
  3192.  movem.l d7/d5,-(a7)
  3193.  bsr CLIPANDDRAW
  3194.  movem.l (a7)+,d7/d5
  3195.  
  3196. DECIDEDWALL:
  3197.  
  3198.  dbra d7,wallsofzone
  3199.  bra SHOWMAP
  3200.  
  3201. shownmap:
  3202.  
  3203.  clr.b TRRANS
  3204.  
  3205.  move.w mapxoff,d0
  3206.  move.w mapzoff,d1
  3207.  neg.w d1
  3208.  move.w d0,d2
  3209.  move.w d1,d3
  3210.  sub.w #128,d1
  3211.  add.w #128,d3
  3212.  move.w #250,d4
  3213.  bsr CLIPANDDRAW
  3214.  
  3215.  move.w mapxoff,d0
  3216.  move.w mapzoff,d1
  3217.  neg.w d1
  3218.  move.w d0,d2
  3219.  move.w d1,d3
  3220.  sub.w #128,d1
  3221.  sub.w #32,d3
  3222.  sub.w #64,d2
  3223.  move.w #250,d4
  3224.  bsr CLIPANDDRAW
  3225.  
  3226.  move.w mapxoff,d0
  3227.  move.w mapzoff,d1
  3228.  neg.w d1
  3229.  move.w d0,d2
  3230.  move.w d1,d3
  3231.  sub.w #128,d1
  3232.  sub.w #32,d3
  3233.  add.w #64,d2
  3234.  move.w #250,d4
  3235.  bsr CLIPANDDRAW
  3236.  rts
  3237.  
  3238.  
  3239. CLIPANDDRAW:
  3240.  
  3241.  tst.b FULLSCR
  3242.  beq.s .nodov
  3243.  
  3244.  add.w d0,d0
  3245.  add.w d2,d2
  3246.  ext.l d0
  3247.  ext.l d2
  3248.  divs #3,d0
  3249.  divs #3,d2
  3250.  
  3251. .nodov:
  3252.  
  3253.  move.w MAPBRIGHT,d5
  3254.  asr.w d5,d0
  3255.  asr.w d5,d1
  3256.  asr.w d5,d2
  3257.  asr.w d5,d3
  3258.  
  3259. NOSCALING:
  3260.  add.w #96,d0
  3261.  bge p1xpos
  3262.  
  3263.  add.w #96,d2
  3264.  blt OFFSCREEN
  3265.  
  3266. x1nx2p:
  3267.  
  3268.  move.w d3,d5
  3269.  sub.w d1,d5
  3270.  move.w d2,d6
  3271.  sub.w d0,d6
  3272.  beq OFFSCREEN
  3273.  
  3274.  muls d0,d5
  3275.  divs d6,d5
  3276.  sub.w d5,d1
  3277.  move.w #0,d0
  3278.  
  3279.  bra doneleftclip
  3280.  
  3281. p1xpos:
  3282.  
  3283.  add.w #96,d2
  3284.  bge doneleftclip
  3285.  
  3286.  move.w d1,d5
  3287.  sub.w d3,d5
  3288.  move.w d0,d6
  3289.  sub.w d2,d6
  3290.  beq OFFSCREEN
  3291.  
  3292.  muls d2,d5
  3293.  divs d6,d5
  3294.  sub.w d5,d3
  3295.  move.w #0,d2
  3296.  
  3297. doneleftclip:
  3298.  
  3299.  cmp.w #191,d0
  3300.  ble p1xneg
  3301.  
  3302.  cmp.w #191,d2
  3303.  bgt OFFSCREEN
  3304.  
  3305.  move.w d0,d6
  3306.  sub.w d2,d6
  3307.  beq OFFSCREEN
  3308.  sub.w #191,d0
  3309.  move.w d3,d5
  3310.  sub.w d1,d5
  3311.  
  3312.  muls d5,d0
  3313.  divs d6,d0
  3314.  add.w d0,d1
  3315.  move.w #191,d0
  3316.  
  3317.  bra donerightclip
  3318.  
  3319. p1xneg:
  3320.  
  3321.  cmp.w #191,d2
  3322.  ble donerightclip
  3323.  
  3324.  move.w d2,d6
  3325.  sub.w d0,d6
  3326.  beq OFFSCREEN
  3327.  sub.w #191,d2
  3328.  move.w d1,d5
  3329.  sub.w d3,d5
  3330.  
  3331.  muls d5,d2
  3332.  divs d6,d2
  3333.  add.w d2,d3
  3334.  move.w #191,d2
  3335.  
  3336. donerightclip:
  3337.  
  3338. *********************************
  3339.  
  3340.  add.w #80,d1
  3341.  bge p1ypos
  3342.  
  3343.  add.w #80,d3
  3344.  blt OFFSCREEN
  3345.  
  3346.  move.w d2,d5
  3347.  sub.w d0,d5
  3348.  move.w d3,d6
  3349.  sub.w d1,d6
  3350.  beq OFFSCREEN
  3351.  
  3352.  muls d1,d5
  3353.  divs d6,d5
  3354.  sub.w d5,d0
  3355.  move.w #0,d1
  3356.  
  3357.  bra donetopclip
  3358.  
  3359. p1ypos:
  3360.  
  3361.  add.w #80,d3
  3362.  bge donetopclip
  3363.  
  3364.  move.w d0,d5
  3365.  sub.w d2,d5
  3366.  move.w d1,d6
  3367.  sub.w d3,d6
  3368.  beq OFFSCREEN
  3369.  
  3370.  muls d3,d5
  3371.  divs d6,d5
  3372.  sub.w d5,d2
  3373.  move.w #0,d3
  3374.  
  3375. donetopclip:
  3376.  
  3377.  cmp.w #159,d1
  3378.  ble p1yneg
  3379.  
  3380.  cmp.w #159,d3
  3381.  bgt OFFSCREEN
  3382.  
  3383.  move.w d1,d6
  3384.  sub.w d3,d6
  3385.  beq OFFSCREEN
  3386.  sub.w #159,d1
  3387.  move.w d2,d5
  3388.  sub.w d0,d5
  3389.  
  3390.  muls d5,d1
  3391.  divs d6,d1
  3392.  add.w d1,d0
  3393.  move.w #159,d1
  3394.  
  3395.  bra donebotclip
  3396.  
  3397. p1yneg:
  3398.  
  3399.  cmp.w #159,d3
  3400.  ble donebotclip
  3401.  
  3402.  move.w d3,d6
  3403.  sub.w d1,d6
  3404.  beq OFFSCREEN
  3405.  sub.w #159,d3
  3406.  move.w d0,d5
  3407.  sub.w d2,d5
  3408.  
  3409.  muls d5,d3
  3410.  divs d6,d3
  3411.  add.w d3,d2
  3412.  move.w #159,d3
  3413.  
  3414. donebotclip:
  3415.  
  3416.  tst.b TRRANS
  3417.  bne DRAWAtransLINE
  3418.  bra DRAWAMAPLINE
  3419.  
  3420. OFFSCREEN:
  3421. NOLINEtrans:
  3422.  rts
  3423.  
  3424. MAPBRIGHT:
  3425.  dc.w 3
  3426. mapxoff: dc.w 0
  3427. mapzoff: dc.w 0
  3428.  
  3429. DRAWAtransLINE:
  3430.  
  3431.  move.l FASTBUFFER,a0    ; screen to render to.
  3432.  
  3433.  tst.b FULLSCR
  3434.  beq.s .nooffset
  3435.   
  3436.  add.l #(320*40)+(48*2),a0
  3437.   
  3438. .nooffset:
  3439.  
  3440.  cmp.w d1,d3
  3441.  bgt.s .okdown
  3442.  bne.s .aline
  3443.  cmp.w d0,d2
  3444.  beq.s NOLINEtrans 
  3445. .aline
  3446.  exg d0,d2
  3447.  exg d1,d3
  3448. .okdown
  3449.  
  3450.  move.w d1,d5
  3451.  muls #320,d5
  3452.  add.l d5,a0
  3453.  lea (a0,d0.w*2),a0
  3454.  
  3455.  sub.w d1,d3
  3456.  
  3457.  sub.w d0,d2
  3458.  bge.s downrighttrans
  3459.  
  3460. downlefttrans:
  3461.  neg.w d2
  3462.  cmp.w d2,d3
  3463.  bgt.s downmorelefttrans
  3464.  
  3465. downleftmoretrans:
  3466.  move.w #320,d6
  3467.  move.w d2,d0
  3468.  move.w d2,d7
  3469.  
  3470. .linelop:
  3471.  move.b (a0),d4
  3472.  move.b (a4,d4.w*2),(a0)
  3473.  subq #1,a0
  3474.  sub.w d3,d0
  3475.  bgt.s .noextra
  3476.  add.w d2,d0
  3477.  add.w d6,a0
  3478. .noextra:
  3479.  dbra d7,.linelop
  3480.  rts
  3481.  
  3482. downmorelefttrans:
  3483.  move.w #320,d6
  3484.  move.w d3,d0
  3485.  move.w d3,d7
  3486.  
  3487. .linelop:
  3488.  move.b (a0),d4
  3489.  move.b (a4,d4.w*2),(a0)
  3490.  add.w d6,a0
  3491.  sub.w d2,d0
  3492.  bgt.s .noextra
  3493.  add.w d3,d0
  3494.  subq #1,a0
  3495. .noextra:
  3496.  dbra d7,.linelop
  3497.  
  3498.  rts
  3499.  
  3500. downrighttrans:
  3501.  
  3502.  cmp.w d2,d3
  3503.  bgt.s downmorerighttrans
  3504.  
  3505. downrightmoretrans:
  3506.  move.w #320,d6
  3507.  move.w d2,d0
  3508.  move.w d2,d7
  3509.  
  3510. .linelop:
  3511.  move.b (a0),d4
  3512.  move.b (a4,d4.w*2),(a0)+
  3513.  sub.w d3,d0
  3514.  bgt.s .noextra
  3515.  add.w d2,d0
  3516.  add.w d6,a0
  3517. .noextra:
  3518.  dbra d7,.linelop
  3519.  
  3520.  rts
  3521.  
  3522. downmorerighttrans:
  3523.  move.w #320,d6
  3524.  move.w d3,d0
  3525.  move.w d3,d7
  3526.  
  3527. .linelop:
  3528.  move.b (a0),d4
  3529.  move.b (a4,d4.w*2),(a0)
  3530.  add.w d6,a0
  3531.  sub.w d2,d0
  3532.  bgt.s .noextra
  3533.  add.w d3,d0
  3534.  addq #1,a0
  3535. .noextra:
  3536.  dbra d7,.linelop
  3537.  
  3538.  rts
  3539.  
  3540. NOLINE:
  3541.  rts
  3542.  
  3543. DRAWAMAPLINE:
  3544.  
  3545.  
  3546.  move.l FASTBUFFER,a0    ; screen to render to.
  3547.  cmp.w d1,d3
  3548.  bgt.s .okdown
  3549.  bne.s .aline
  3550.  cmp.w d0,d2
  3551.  beq.s NOLINE 
  3552. .aline
  3553.  exg d0,d2
  3554.  exg d1,d3
  3555. .okdown
  3556.  
  3557.  move.w d1,d5
  3558.  muls #320,d5
  3559.  add.l d5,a0
  3560.  lea (a0,d0.w),a0
  3561.  
  3562.  sub.w d1,d3
  3563.  
  3564.  sub.w d0,d2
  3565.  bge.s downright
  3566.  
  3567. downleft:
  3568.  neg.w d2
  3569.  cmp.w d2,d3
  3570.  bgt.s downmoreleft
  3571.  
  3572. downleftmore:
  3573.  move.w #320,d6
  3574.  move.w d2,d0
  3575.  move.w d2,d7
  3576.  addq #1,a0
  3577.  
  3578. .linelop:
  3579.  move.b d4,-(a0)
  3580.  sub.w d3,d0
  3581.  bgt.s .noextra
  3582.  add.w d2,d0
  3583.  add.w d6,a0
  3584. .noextra:
  3585.  dbra d7,.linelop
  3586.  rts
  3587.  
  3588. downmoreleft:
  3589.  move.w #320,d6
  3590.  move.w d3,d0
  3591.  move.w d3,d7
  3592.  
  3593. .linelop:
  3594.  move.b d4,(a0)
  3595.  add.w d6,a0
  3596.  sub.w d2,d0
  3597.  bgt.s .noextra
  3598.  add.w d3,d0
  3599.  subq #1,a0
  3600. .noextra:
  3601.  dbra d7,.linelop
  3602.  
  3603.  rts
  3604.  
  3605. downright:
  3606.  
  3607.  cmp.w d2,d3
  3608.  bgt.s downmoreright
  3609.  
  3610. downrightmore:
  3611.  move.w #320,d6
  3612.  move.w d2,d0
  3613.  move.w d2,d7
  3614.  
  3615. .linelop:
  3616.  move.b d4,(a0)+
  3617.  sub.w d3,d0
  3618.  bgt.s .noextra
  3619.  add.w d2,d0
  3620.  add.w d6,a0
  3621. .noextra:
  3622.  dbra d7,.linelop
  3623.  
  3624.  rts
  3625.  
  3626. downmoreright:
  3627.  move.w #320,d6
  3628.  move.w d3,d0
  3629.  move.w d3,d7
  3630.  
  3631. .linelop:
  3632.  move.b d4,(a0)
  3633.  add.w d6,a0
  3634.  sub.w d2,d0
  3635.  bgt.s .noextra
  3636.  add.w d3,d0
  3637.  addq #1,a0
  3638. .noextra:
  3639.  dbra d7,.linelop
  3640.  
  3641.  rts
  3642.  
  3643. SAVETHESCREEN:
  3644.  
  3645.  move.l old,$dff080
  3646.  move.w #$8020,$dff000+intena
  3647.  
  3648.  move.l _IntuitionBase,a6
  3649.  jsr _LVORethinkDisplay(a6)
  3650.  
  3651.  move.l doslib,a6
  3652.  move.l #SAVENAME,d1
  3653.  move.l #1006,d2
  3654.  jsr -30(a6)
  3655.  move.l d0,handle
  3656.  
  3657.  move.l doslib,a6
  3658.  move.l SCRNDRAWPT,d2
  3659.  move.l handle,d1
  3660.  move.l #10240*8,d3
  3661.  jsr _LVOWrite(a6)
  3662.  
  3663.  move.l doslib,a6
  3664.  move.l handle,d1
  3665.  jsr -36(a6)
  3666.  
  3667.  move.l doslib,a6
  3668.  move.l #200,d1
  3669.  jsr -198(a6) 
  3670.  
  3671.  move.w #$0020,$dff000+intena
  3672.  move.l #bigfield,$dff080
  3673.  
  3674.  add.b #1,SAVELETTER
  3675.  
  3676.  rts
  3677.  
  3678. SAVENAME: dc.b 'work:rawscrn'
  3679. SAVELETTER: dc.b 'd',0
  3680.  
  3681.  even
  3682.  
  3683.  include "ab3:source_4000/CHUNKY.s"
  3684.  
  3685.  
  3686. MASTERQUITTING: dc.b 0
  3687. SLAVEQUITTING: dc.b 0
  3688. MASTERPAUSE: dc.b 0
  3689. SLAVEPAUSE: dc.b 0
  3690.  
  3691. PAUSEOPTS:
  3692.  include "ab3:source_4000/pauseopts"
  3693.  
  3694. ENDZONE: dc.w 0
  3695.  
  3696. ENDZONES:
  3697. ; LEVEL 1
  3698.  dc.w -1
  3699. ; dc.w 55
  3700. ; LEVEL 2
  3701.  dc.w 149
  3702. ; LEVEL 3
  3703.  dc.w 155
  3704. ; LEVEL 4
  3705.  dc.w 107
  3706. ; LEVEL 5
  3707.  dc.w 67
  3708. ; LEVEL 6
  3709.  dc.w 132
  3710. ; LEVEL 7
  3711.  dc.w 203
  3712. ; LEVEL 8
  3713.  dc.w 166
  3714. ; LEVEL 9
  3715.  dc.w 118
  3716. ; LEVEL 10
  3717.  dc.w 102
  3718. ; LEVEL 11
  3719.  dc.w 103
  3720. ; LEVEL 12
  3721.  dc.w 2
  3722. ; LEVEL 13
  3723.  dc.w 98
  3724. ; LEVEL 14
  3725.  dc.w 0
  3726. ; LEVEL 15
  3727.  dc.w 148
  3728. ; LEVEL 16
  3729.  dc.w 103
  3730.  
  3731. ***************************************************************************
  3732. ***************************************************************************
  3733. ****************** End of Main Loop here ********************************** 
  3734. ***************************************************************************
  3735. ***************************************************************************
  3736.  
  3737. putinsmallscr:
  3738.  
  3739.  rts
  3740.  
  3741.  move.l #$1fe0000,statskip
  3742.  move.l #$1fe0000,statskip+4
  3743.  
  3744.  move.l #healthpal,a5
  3745. ; move.l COPSCRN1,a0
  3746. ; move.l COPSCRN2,a2
  3747.  move.w #scrheight-1,d0
  3748.  move.l #0,d6
  3749.  move.w #0,d3
  3750.  move.w #$2bdf,startwait
  3751.  move.w #$2d01,endwait
  3752. .fillcop
  3753.  move.w #$180,d1
  3754.  
  3755.  move.l a0,a1
  3756.  move.l a2,a3
  3757.  move.w #$10c,(a1)+
  3758.  move.w #$10c,(a3)+
  3759.  move.w d3,(a1)+
  3760.  move.w d3,(a3)+
  3761.  eor.w #$8000,d3
  3762.  
  3763.  move.w #$106,(a1)+
  3764.  move.w #$106,(a3)+
  3765.  move.w #$2c42,d5
  3766.  or.w d3,d5
  3767.  and.w #$fffe,d5
  3768.  move.w d5,(a1)+
  3769.  move.w d5,(a3)+
  3770.  bsr do32
  3771.  
  3772.  move.w #$106,(a1)+
  3773.  move.w #$106,(a3)+
  3774.  move.w #$4c42,d5
  3775.  or.w d3,d5
  3776.  and.w #$fffe,d5
  3777.  move.w d5,(a1)+
  3778.  move.w d5,(a3)+
  3779.  bsr do32
  3780.  
  3781.  move.w #$106,(a1)+
  3782.  move.w #$106,(a3)+
  3783.  move.w #$6c42,d5
  3784.  or.w d3,d5
  3785.  and.w #$fffe,d5
  3786.  move.w d5,(a1)+
  3787.  move.w d5,(a3)+
  3788.  bsr do32
  3789.  
  3790.  
  3791.  move.l #$1060c42,(a1)+
  3792.  move.l #$1060c42,(a3)+
  3793.  move.w #$19e,(a1)+
  3794.  move.w (a5),(a1)+
  3795.  move.w #$19e,(a3)+
  3796.  move.w (a5)+,(a3)+
  3797.  
  3798. **********************************
  3799.  
  3800.  adda.w #104*4,a0
  3801.  adda.w #104*4,a2
  3802.  dbra d0,.fillcop
  3803.  
  3804.  move.w #$48,fetchstart
  3805.  move.w #$88,fetchstop
  3806.  move.w #$2cb1,winstart
  3807.  move.w #$2c91,winstop
  3808.  move.w #-24,modulo
  3809.  move.w #-24,modulo+4
  3810.  
  3811.  move.l #nullspr,d0
  3812.  move.w d0,s4l
  3813.  move.w d0,s5l
  3814.  move.w d0,s6l
  3815.  move.w d0,s7l
  3816.  swap d0
  3817.  move.w d0,s4h
  3818.  move.w d0,s5h
  3819.  move.w d0,s6h
  3820.  move.w d0,s7h 
  3821.  
  3822. ; move.l #borders,d0
  3823. ; move.w d0,s0l
  3824. ; swap d0
  3825. ; move.w d0,s0h
  3826. ; move.l #borders+2592,d0
  3827. ; move.w d0,s1l
  3828. ; swap d0
  3829. ; move.w d0,s1h
  3830. ; move.l #borders+2592*2,d0
  3831. ; move.w d0,s2l
  3832. ; swap d0
  3833. ; move.w d0,s2h
  3834. ; move.l #borders+2592*3,d0
  3835. ; move.w d0,s3l
  3836. ; swap d0
  3837. ; move.w d0,s3h
  3838.  
  3839.  
  3840.  move.l scrn,a0
  3841.  add.l #40,a0
  3842.  move.l scrn,a1
  3843.  add.l #160,a1
  3844.  move.l scrn,a2
  3845.  add.l #280,a2
  3846.  move.l #smallscrntab,a3
  3847.  move.w #191,d7    ; counter
  3848.  move.w #0,d1    ; xpos
  3849. .plotscrnloop:
  3850.  move.b (a3)+,d0
  3851.  move.w d1,d2
  3852.  asr.w #3,d2
  3853.  move.b d1,d3
  3854.  not.b d3
  3855.  bclr.b d3,-40(a0,d2.w)
  3856.  bclr.b d3,(a0,d2.w)
  3857.  bclr.b d3,40(a0,d2.w)
  3858.  bclr.b d3,-40(a1,d2.w)
  3859.  bclr.b d3,(a1,d2.w)
  3860.  bclr.b d3,40(a1,d2.w)
  3861.  bclr.b d3,-40(a2,d2.w)
  3862.  btst #0,d0
  3863.  beq.s .nobp1
  3864.  bset.b d3,-40(a0,d2.w)
  3865. .nobp1:
  3866.  btst #1,d0
  3867.  beq.s .nobp2
  3868.  bset.b d3,(a0,d2.w)
  3869. .nobp2:
  3870.  btst #2,d0
  3871.  beq.s .nobp3
  3872.  bset.b d3,40(a0,d2.w)
  3873. .nobp3:
  3874.  btst #3,d0
  3875.  beq.s .nobp4
  3876.  bset.b d3,-40(a1,d2.w)
  3877. .nobp4:
  3878.  btst #4,d0
  3879.  beq.s .nobp5
  3880.  bset.b d3,(a1,d2.w)
  3881. .nobp5:
  3882.  btst #5,d0
  3883.  beq.s .nobp6
  3884.  bset.b d3,40(a1,d2.w)
  3885. .nobp6:
  3886.  btst #6,d0
  3887.  beq.s .nobp7
  3888.  bset.b d3,-40(a2,d2.w)
  3889. .nobp7:
  3890.  
  3891.  addq #1,d1
  3892.  
  3893.  dbra d7,.plotscrnloop
  3894.  
  3895.  
  3896.  rts
  3897.  
  3898. putinlargescr:
  3899.  
  3900.  move.l #$1000000,statskip
  3901.  move.l #$fffffffe,statskip+4
  3902.  
  3903.  move.l #healthpal,a5
  3904. ; move.l COPSCRN1,a0
  3905. ; move.l COPSCRN2,a2
  3906.  move.w #scrheight-1,d0
  3907.  move.l #0,d6
  3908.  move.w #0,d3
  3909.  move.w #$29df,startwait
  3910.  move.w #$2b01,endwait
  3911. .fillcop
  3912.  move.w #$180,d1
  3913.  
  3914.  move.l a0,a1
  3915.  move.l a2,a3
  3916.  move.w #$10c,(a1)+
  3917.  move.w #$10c,(a3)+
  3918.  move.w d3,(a1)+
  3919.  move.w d3,(a3)+
  3920.  eor.w #$8000,d3
  3921.  
  3922.  move.w #$106,(a1)+
  3923.  move.w #$106,(a3)+
  3924.  move.w #$2c42,d5
  3925.  or.w d3,d5
  3926.  and.w #$fffe,d5
  3927.  move.w d5,(a1)+
  3928.  move.w d5,(a3)+
  3929.  bsr do32
  3930.  
  3931.  move.w #$106,(a1)+
  3932.  move.w #$106,(a3)+
  3933.  move.w #$4c42,d5
  3934.  or.w d3,d5
  3935.  and.w #$fffe,d5
  3936.  move.w d5,(a1)+
  3937.  move.w d5,(a3)+
  3938.  bsr do32
  3939.  
  3940.  move.w #$106,(a1)+
  3941.  move.w #$106,(a3)+
  3942.  move.w #$6c42,d5
  3943.  or.w d3,d5
  3944.  and.w #$fffe,d5
  3945.  move.w d5,(a1)+
  3946.  move.w d5,(a3)+
  3947.  bsr do32
  3948.  
  3949.  move.w startwait,(a1)+
  3950.  move.w #$fffe,(a1)+
  3951.  move.w endwait,(a1)+
  3952.  move.w #$ff00,(a1)+
  3953.  move.w startwait,(a3)+
  3954.  move.w #$fffe,(a3)+
  3955.  move.w endwait,(a3)+
  3956.  move.w #$ff00,(a3)+
  3957.  
  3958. ; move.l $1fe0000,(a1)+
  3959. ; move.l $1fe0000,(a3)+
  3960. ; move.l $1fe0000,(a1)+
  3961. ; move.l $1fe0000,(a3)+
  3962.  
  3963.  
  3964.  add.w #$300,startwait
  3965.  add.w #$300,endwait
  3966.  
  3967. ; move.l #$1060c42,(a1)+
  3968. ; move.l #$1060c42,(a3)+
  3969. ; move.w #$19e,(a1)+
  3970. ; move.w (a5),(a1)+
  3971. ; move.w #$19e,(a3)+
  3972. ; move.w (a5)+,(a3)+
  3973.  
  3974. **********************************
  3975.  
  3976.  adda.w #104*4,a0
  3977.  adda.w #104*4,a2
  3978.  dbra d0,.fillcop
  3979.  
  3980.  move.w #$38,fetchstart
  3981.  move.w #$b8,fetchstop
  3982.  move.w #$2c81,winstart
  3983.  move.w #$2cc1,winstop
  3984.  move.w #-40,modulo
  3985.  move.w #-40,modulo+4
  3986.  
  3987.  move.l #nullspr,d0
  3988.  move.w d0,s0l
  3989.  move.w d0,s1l
  3990.  move.w d0,s2l
  3991.  move.w d0,s3l
  3992.  move.w d0,s4l
  3993.  move.w d0,s5l
  3994.  move.w d0,s6l
  3995.  move.w d0,s7l
  3996.  swap d0
  3997.  move.w d0,s0h
  3998.  move.w d0,s1h
  3999.  move.w d0,s2h
  4000.  move.w d0,s3h
  4001.  move.w d0,s4h
  4002.  move.w d0,s5h
  4003.  move.w d0,s6h
  4004.  move.w d0,s7h 
  4005.  
  4006.  move.l scrn,a0
  4007.  move.l a0,a1
  4008.  move.l a0,a2
  4009.  add.l #40,a0
  4010.  add.l #160,a1
  4011.  add.l #280,a2
  4012.  move.l #scrntab,a3
  4013.  move.w #319,d7    ; counter
  4014.  move.w #0,d1    ; xpos
  4015. .plotscrnloop:
  4016.  move.b (a3)+,d0
  4017.  move.w d1,d2
  4018.  asr.w #3,d2
  4019.  move.b d1,d3
  4020.  not.b d3
  4021.  bclr.b d3,-40(a0,d2.w)
  4022.  bclr.b d3,(a0,d2.w)
  4023.  bclr.b d3,40(a0,d2.w)
  4024.  bclr.b d3,-40(a1,d2.w)
  4025.  bclr.b d3,(a1,d2.w)
  4026.  bclr.b d3,40(a1,d2.w)
  4027.  bclr.b d3,-40(a2,d2.w)
  4028.  btst #0,d0
  4029.  beq.s .nobp1
  4030.  bset.b d3,-40(a0,d2.w)
  4031. .nobp1:
  4032.  btst #1,d0
  4033.  beq.s .nobp2
  4034.  bset.b d3,(a0,d2.w)
  4035. .nobp2:
  4036.  btst #2,d0
  4037.  beq.s .nobp3
  4038.  bset.b d3,40(a0,d2.w)
  4039. .nobp3:
  4040.  btst #3,d0
  4041.  beq.s .nobp4
  4042.  bset.b d3,-40(a1,d2.w)
  4043. .nobp4:
  4044.  btst #4,d0
  4045.  beq.s .nobp5
  4046.  bset.b d3,(a1,d2.w)
  4047. .nobp5:
  4048.  btst #5,d0
  4049.  beq.s .nobp6
  4050.  bset.b d3,40(a1,d2.w)
  4051. .nobp6:
  4052.  btst #6,d0
  4053.  beq.s .nobp7
  4054.  bset.b d3,-40(a2,d2.w)
  4055. .nobp7:
  4056.  
  4057.  addq #1,d1
  4058.  
  4059.  dbra d7,.plotscrnloop
  4060.  
  4061.  rts
  4062.  
  4063. CLEARKEYBOARD:
  4064.  move.l #KeyMap,a5
  4065.  moveq #0,d0
  4066.  move.w #15,d1
  4067. clrloo:
  4068.  move.l d0,(a5)+
  4069.  move.l d0,(a5)+
  4070.  move.l d0,(a5)+
  4071.  move.l d0,(a5)+
  4072.  dbra d1,clrloo
  4073.  rts
  4074.  
  4075. READCONTROLS: dc.w 0
  4076.  
  4077. tstststst: dc.w 0
  4078.  
  4079. BollocksRoom:
  4080.  dc.w -1
  4081.  ds.l 50
  4082.  
  4083. GUNYOFFS:
  4084.  dc.w 20
  4085.  dc.w 20
  4086.  dc.w 0
  4087.  dc.w 20
  4088.  dc.w 20
  4089.  dc.w 0
  4090.  dc.w 0
  4091.  dc.w 20
  4092.  
  4093. PLR1_BOBBLEY: dc.l 0
  4094. PLR2_BOBBLEY: dc.l 0
  4095.  
  4096. USEPLR1:
  4097.  
  4098. ***********************************
  4099.  
  4100.  move.l PLR1_Obj,a0 
  4101.  move.b #4,16(a0)
  4102.  move.l ObjectPoints,a1
  4103.  move.l #ObjRotated,a2
  4104.  move.w (a0),d0
  4105.  move.l PLR1_xoff,(a1,d0.w*8)
  4106.  move.l PLR1_zoff,4(a1,d0.w*8)
  4107.  move.l PLR1_Roompt,a1
  4108.  
  4109.  moveq #0,d2
  4110.  move.b damagetaken(a0),d2
  4111.  beq .notbeenshot
  4112.  
  4113.  moveq #0,d4
  4114.  move.w ImpactX(a0),d3
  4115.  beq.s .notwist
  4116.  move.w d2,d4
  4117. .notwist:
  4118.  add.w d3,PLR1s_xspdval
  4119.  move.w ImpactZ(a0),d3
  4120.  beq.s .notwist2
  4121.  move.w d2,d4
  4122. .notwist2:
  4123.  add.w d3,PLR1s_zspdval
  4124.  move.w ImpactY(a0),d3
  4125.  ext.l d3
  4126.  asl.l #8,d3
  4127.  add.l d3,PLR1s_yvel
  4128.  
  4129.  move.w #0,ImpactX(a0)
  4130.  move.w #0,ImpactY(a0)
  4131.  move.w #0,ImpactZ(a0)
  4132.  
  4133.  jsr GetRand
  4134.  muls d4,d0
  4135.  asr.l #8,d0
  4136.  asr.l #4,d0
  4137.  add.w d0,PLR1s_angspd
  4138.  
  4139.  move.l #7*2116,hitcol
  4140.  sub.w d2,PLAYERONEHEALTH
  4141.  movem.l d0-d7/a0-a6,-(a7)
  4142.  move.b #$fb,IDNUM
  4143.  move.w #19,Samplenum
  4144.  clr.b notifplaying
  4145.  move.w #0,Noisex
  4146.  move.w #0,Noisez
  4147.  move.w #100,Noisevol
  4148.  jsr MakeSomeNoise
  4149.  
  4150.  movem.l (a7)+,d0-d7/a0-a6
  4151.  
  4152. .notbeenshot
  4153.  move.b #0,damagetaken(a0)
  4154.  move.b #10,numlives(a0)
  4155.  
  4156.  move.w p1_angpos,Facing(a0)
  4157.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4158.  
  4159.  move.w (a1),12(a0)
  4160.  move.w (a1),d2
  4161.  move.l #ZoneBrightTable,a1
  4162.  move.l (a1,d2.w*4),d2
  4163.  tst.b PLR1_StoodInTop
  4164.  bne.s .okinbott
  4165.  swap d2
  4166. .okinbott:
  4167.  
  4168.  move.w d2,2(a0)
  4169.  
  4170.  
  4171.  move.l p1_yoff,d0
  4172.  move.l p1_height,d1
  4173.  asr.l #1,d1
  4174.  add.l d1,d0
  4175.  asr.l #7,d0
  4176.  move.w d0,4(a0)
  4177.  
  4178. ***********************************
  4179.  
  4180.  move.l PLR2_Obj,a0 
  4181.  move.b #5,16(a0)
  4182.  
  4183.  move.w p2_angpos,d0
  4184.  and.w #8190,d0
  4185.  move.w d0,Facing(a0)
  4186. ; jsr ViewpointToDraw
  4187. ; asl.w #2,d0
  4188. ; moveq #0,d1
  4189. ; move.b p2_bobble,d1
  4190. ; not.b d1
  4191. ; lsr.b #3,d1
  4192. ; and.b #$3,d1
  4193. ; add.w d1,d0
  4194. ; move.w d0,10(a0)
  4195. ; move.w #10,8(a0)
  4196.  
  4197.  move.l ObjectPoints,a1
  4198.  move.l #ObjRotated,a2
  4199.  move.w (a0),d0
  4200.  move.l PLR2_xoff,(a1,d0.w*8)
  4201.  move.l PLR2_zoff,4(a1,d0.w*8)
  4202.  move.l PLR2_Roompt,a1
  4203.  
  4204.  moveq #0,d2
  4205.  move.b damagetaken(a0),d2
  4206.  beq .notbeenshot2
  4207.  move.w ImpactX(a0),d3
  4208.  add.w d3,PLR2s_xspdval
  4209.  move.w ImpactZ(a0),d3
  4210.  add.w d3,PLR2s_zspdval
  4211.  move.w ImpactY(a0),d3
  4212.  ext.l d3
  4213.  asl.l #8,d3
  4214.  add.l d3,PLR2s_yvel
  4215.  
  4216.  move.w #0,ImpactX(a0)
  4217.  move.w #0,ImpactY(a0)
  4218.  move.w #0,ImpactZ(a0)
  4219.  
  4220.  sub.w d2,PLAYERTWOHEALTH
  4221. .notbeenshot2
  4222.  move.b #0,damagetaken(a0)
  4223.  move.b #10,numlives(a0)
  4224.  
  4225.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4226.  
  4227.  move.w (a1),12(a0)
  4228.  move.w (a1),d2
  4229.  move.l #ZoneBrightTable,a1
  4230.  move.l (a1,d2.w*4),d2
  4231.  tst.b PLR2_StoodInTop
  4232.  bne.s .okinbott2
  4233.  swap d2
  4234. .okinbott2:
  4235.  
  4236.  move.w d2,2(a0)
  4237.  
  4238.  move.l p2_yoff,d0
  4239.  move.l p2_height,d1
  4240.  asr.l #1,d1
  4241.  add.l d1,d0
  4242.  asr.l #7,d0
  4243.  move.w d0,4(a0)
  4244.  
  4245.  jsr ViewpointToDraw
  4246.  add.l d0,d0
  4247.  
  4248.  move.l LINKFILE,a6
  4249.  add.l #PLR2ALIEN,a6
  4250.  move.w (a6),d7
  4251.  move.w d7,d1
  4252.  
  4253.  move.l LINKFILE,a6
  4254.  add.l #AlienStats,a6
  4255.  muls #AlienStatLen,d1
  4256.  add.l d1,a6
  4257.  move.b A_GFXType+1(a6),VECOBJ
  4258.  cmp.w #1,A_GFXType(a6)
  4259.  bne.s .NOSIDES2
  4260.  
  4261.  moveq #0,d0
  4262.  
  4263. .NOSIDES2:
  4264.  
  4265.  move.l LINKFILE,a6
  4266.  
  4267.  add.l #AlienAnimData,a6
  4268.  
  4269.  move.w d7,d1
  4270.  muls #A_AnimLen,d1
  4271.  add.l d1,a6
  4272.  
  4273. ; move.l ANIMPOINTER,a6
  4274.  
  4275.  muls #A_OptLen,d0
  4276.  add.w d0,a6
  4277.  
  4278.  move.w SecTimer(a0),d1
  4279.  move.w d1,d2
  4280.  muls #A_FrameLen,d1
  4281.  
  4282.  addq #1,d2
  4283.  
  4284.  move.w d2,d3
  4285.  muls #A_FrameLen,d3
  4286.  tst.b (a6,d3.w)
  4287.  bge.s .noendanim
  4288.  move.w #0,d2
  4289. .noendanim
  4290.  move.w d2,SecTimer(a0)
  4291.  
  4292.  move.w d2,d1
  4293.  
  4294.  muls #A_FrameLen,d1
  4295.  
  4296.  move.l #0,8(a0)
  4297.  move.b (a6,d1.w),9(a0)
  4298.  move.b 1(a6,d1.w),d0
  4299.  ext.w d0
  4300.  bgt.s .noflip
  4301.  move.b #128,10(a0)
  4302.  neg.w d0
  4303. .noflip:
  4304.  sub.w #1,d0
  4305.  move.b d0,11(a0)
  4306.  
  4307.  move.w #-1,6(a0)
  4308.  cmp.b #1,VECOBJ
  4309.  beq.s .nosize
  4310.  bgt.s .setlight
  4311.  move.w 2(a6,d1.w),6(a0)
  4312.  bra.s .ddone
  4313.  
  4314. .nosize
  4315.  
  4316. ; move.l #$00090001,8(a0)
  4317.  
  4318.  bra.s .ddone
  4319.  
  4320. .setlight:
  4321.  move.w 2(a6,d1.w),6(a0)
  4322.  
  4323.  move.b VECOBJ,d1
  4324.  or.b d1,10(a0)
  4325.  
  4326. .ddone:
  4327.  
  4328.  
  4329. **********************************
  4330.  
  4331.  move.l PLR1_Obj,a0
  4332.  
  4333.  ifeq CHEESEY
  4334.  
  4335.  tst.w PLAYERONEHEALTH
  4336.  bgt.s .notdead
  4337.  
  4338.  move.w #-1,12+128(a0)
  4339.  rts
  4340.  
  4341. .notdead: 
  4342.  
  4343.  move.l PLR1_Roompt,a1
  4344.  
  4345.  move.w Facing(a0),d0
  4346.  add.w #4096,d0
  4347.  and.w #8190,d0
  4348.  move.w d0,Facing+128(a0)
  4349.  
  4350.  move.w (a1),12+128(a0)
  4351.  move.w (a1),GraphicRoom+128(a0)
  4352.  
  4353.  moveq #0,d0
  4354.  move.b p1_gunselected,d0
  4355.  
  4356.  move.l LINKFILE,a1
  4357.  add.l #GunObjects,a1
  4358.  move.w (a1,d0.w*2),d0
  4359.  
  4360.  move.b d0,TypeOfThing+128(a0)
  4361.  move.b #1,128+16(a0)
  4362.  
  4363.  move.w (a0),d0
  4364.  move.w 128(a0),d1
  4365.  move.l ObjectPoints,a1
  4366.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4367.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4368.  
  4369.  st WhichAnim+128(a0)
  4370.  
  4371.  move.l p1_yoff,d0
  4372.  move.l p1_height,d1
  4373.  asr.l #2,d1
  4374.  add.l #10*128,d1
  4375.  add.l d1,d0
  4376.  asr.l #7,d0
  4377.  move.w d0,4+128(a0)
  4378.  move.l PLR1_BOBBLEY,d1
  4379.  asr.l #8,d1
  4380.  move.l d1,d0
  4381.  asr.l #1,d0
  4382.  add.l d0,d1
  4383.  add.w d1,4+128(a0)
  4384.  
  4385.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4386.  
  4387.  endc
  4388.  
  4389.  ifne CHEESEY
  4390.  move.w #-1,12+128(a0)
  4391.  endc
  4392.  
  4393.  rts
  4394.  
  4395. ***************************************************
  4396. **************************************************
  4397.  
  4398. USEPLR2:
  4399.  
  4400. ***********************************
  4401.  
  4402.  move.l PLR2_Obj,a0 
  4403.  move.b #5,16(a0)
  4404.  move.l ObjectPoints,a1
  4405.  move.l #ObjRotated,a2
  4406.  move.w (a0),d0
  4407.  move.l PLR2_xoff,(a1,d0.w*8)
  4408.  move.l PLR2_zoff,4(a1,d0.w*8)
  4409.  move.l PLR2_Roompt,a1
  4410.  
  4411.  moveq #0,d2
  4412.  move.b damagetaken(a0),d2
  4413.  beq .notbeenshot
  4414.  
  4415.  moveq #0,d4
  4416.  move.w ImpactX(a0),d3
  4417.  beq.s .notwist
  4418.  move.w d2,d4
  4419. .notwist:
  4420.  add.w d3,PLR2s_xspdval
  4421.  move.w ImpactZ(a0),d3
  4422.  beq.s .notwist2
  4423.  move.w d2,d4
  4424. .notwist2:
  4425.  add.w d3,PLR2s_zspdval
  4426.  
  4427.  jsr GetRand
  4428.  muls d4,d0
  4429.  asr.l #8,d0
  4430.  asr.l #4,d0
  4431.  add.w d0,PLR2s_angspd
  4432.  
  4433.  move.l #7*2116,hitcol
  4434.  sub.w d2,PLAYERTWOHEALTH
  4435.  movem.l d0-d7/a0-a6,-(a7)
  4436.  move.w #19,Samplenum
  4437.  clr.b notifplaying
  4438.  move.b #$fb,IDNUM
  4439.  move.w #0,Noisex
  4440.  move.w #0,Noisez
  4441.  move.w #100,Noisevol
  4442.  jsr MakeSomeNoise
  4443.  
  4444.  movem.l (a7)+,d0-d7/a0-a6
  4445.  
  4446. .notbeenshot
  4447.  move.b #0,damagetaken(a0)
  4448.  move.b #10,numlives(a0)
  4449.  
  4450.  move.w p2_angpos,Facing(a0)
  4451.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4452.  
  4453.  move.w (a1),12(a0)
  4454.  move.w (a1),d2
  4455.  move.l #ZoneBrightTable,a1
  4456.  move.l (a1,d2.w*4),d2
  4457.  tst.b PLR2_StoodInTop
  4458.  bne.s .okinbott
  4459.  swap d2
  4460. .okinbott:
  4461.  
  4462.  move.w d2,2(a0)
  4463.  
  4464.  move.l PLR2_yoff,d0
  4465.  move.l p2_height,d1
  4466.  asr.l #1,d1
  4467.  add.l d1,d0
  4468.  asr.l #7,d0
  4469.  move.w d0,4(a0)
  4470.  
  4471. ***********************************
  4472.  
  4473.  move.l PLR1_Obj,a0 
  4474.  move.b #4,16(a0)
  4475.  
  4476.  move.w PLR1_angpos,d0
  4477.  and.w #8190,d0
  4478.  move.w d0,Facing(a0)
  4479. ; jsr ViewpointToDraw
  4480. ; asl.w #2,d0
  4481. ; moveq #0,d1
  4482. ; move.b p2_bobble,d1
  4483. ; not.b d1
  4484. ; lsr.b #3,d1
  4485. ; and.b #$3,d1
  4486. ; add.w d1,d0
  4487. ; move.w d0,10(a0)
  4488. ; move.w #10,8(a0)
  4489.  
  4490.  move.l ObjectPoints,a1
  4491.  move.l #ObjRotated,a2
  4492.  move.w (a0),d0
  4493.  move.l PLR1_xoff,(a1,d0.w*8)
  4494.  move.l PLR1_zoff,4(a1,d0.w*8)
  4495.  move.l PLR1_Roompt,a1
  4496.  
  4497.  moveq #0,d2
  4498.  move.b damagetaken(a0),d2
  4499.  beq .notbeenshot2
  4500.  
  4501.  move.w ImpactX(a0),d3
  4502.  add.w d3,PLR1s_xspdval
  4503.  move.w ImpactZ(a0),d3
  4504.  add.w d3,PLR1s_zspdval
  4505.  
  4506.  sub.w d2,PLAYERONEHEALTH
  4507. .notbeenshot2
  4508.  move.b #0,damagetaken(a0)
  4509.  move.b #10,numlives(a0)
  4510.  
  4511.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4512.  
  4513.  move.w (a1),12(a0)
  4514.  move.w (a1),d2
  4515.  move.l #ZoneBrightTable,a1
  4516.  move.l (a1,d2.w*4),d2
  4517.  tst.b PLR1_StoodInTop
  4518.  bne.s .okinbott2
  4519.  swap d2
  4520. .okinbott2:
  4521.  
  4522.  move.w d2,2(a0)
  4523.  
  4524.  move.l p1_yoff,d0
  4525.  move.l p1_height,d1
  4526.  asr.l #1,d1
  4527.  add.l d1,d0
  4528.  asr.l #7,d0
  4529.  move.w d0,4(a0)
  4530.  
  4531.  jsr ViewpointToDraw
  4532.  add.l d0,d0
  4533.  
  4534.  move.l LINKFILE,a6
  4535.  add.l #PLR1ALIEN,a6
  4536.  move.w (a6),d7
  4537.  move.w d7,d1
  4538.  
  4539.  move.l LINKFILE,a6
  4540.  add.l #AlienStats,a6
  4541.  muls #AlienStatLen,d1
  4542.  add.l d1,a6
  4543.  move.b A_GFXType+1(a6),VECOBJ
  4544.  cmp.w #1,A_GFXType(a6)
  4545.  bne.s .NOSIDES2
  4546.  
  4547.  moveq #0,d0
  4548.  
  4549. .NOSIDES2:
  4550.  
  4551.  move.l LINKFILE,a6
  4552.  
  4553.  add.l #AlienAnimData,a6
  4554.  
  4555.  move.w d7,d1
  4556.  muls #A_AnimLen,d1
  4557.  add.l d1,a6
  4558.  
  4559. ; move.l ANIMPOINTER,a6
  4560.  
  4561.  muls #A_OptLen,d0
  4562.  add.w d0,a6
  4563.  
  4564.  move.w SecTimer(a0),d1
  4565.  move.w d1,d2
  4566.  muls #A_FrameLen,d1
  4567.  
  4568.  addq #1,d2
  4569.  
  4570.  move.w d2,d3
  4571.  muls #A_FrameLen,d3
  4572.  tst.b (a6,d3.w)
  4573.  bge.s .noendanim
  4574.  move.w #0,d2
  4575. .noendanim
  4576.  move.w d2,SecTimer(a0)
  4577.  
  4578.  move.w d2,d1
  4579.  
  4580.  muls #A_FrameLen,d1
  4581.  
  4582.  move.l #0,8(a0)
  4583.  move.b (a6,d1.w),9(a0)
  4584.  move.b 1(a6,d1.w),d0
  4585.  ext.w d0
  4586.  bgt.s .noflip
  4587.  move.b #128,10(a0)
  4588.  neg.w d0
  4589. .noflip:
  4590.  sub.w #1,d0
  4591.  move.b d0,11(a0)
  4592.  
  4593.  move.w #-1,6(a0)
  4594.  cmp.b #1,VECOBJ
  4595.  beq.s .nosize
  4596.  bgt.s .setlight
  4597.  move.w 2(a6,d1.w),6(a0)
  4598.  bra.s .ddone
  4599.  
  4600. .nosize
  4601.  
  4602. ; move.l #$00090001,8(a0)
  4603.  
  4604.  bra.s .ddone
  4605.  
  4606. .setlight:
  4607.  move.w 2(a6,d1.w),6(a0)
  4608.  
  4609.  move.b VECOBJ,d1
  4610.  or.b d1,10(a0)
  4611.  
  4612. .ddone:
  4613.  
  4614. **********************************
  4615.  
  4616.  move.l PLR2_Obj,a0
  4617.  
  4618.  ifeq CHEESEY
  4619.  
  4620.  tst.w PLAYERTWOHEALTH
  4621.  bgt.s .notdead
  4622.  
  4623.  move.w #-1,12+64(a0)
  4624.  rts
  4625.  
  4626. .notdead: 
  4627.  move.l PLR2_Roompt,a1
  4628.  
  4629.  move.w Facing(a0),d0
  4630.  add.w #4096,d0
  4631.  and.w #8190,d0
  4632.  move.w d0,Facing+64(a0)
  4633.  
  4634.  move.w (a1),12+64(a0)
  4635.  move.w (a1),GraphicRoom+64(a0)
  4636.  
  4637.  moveq #0,d0
  4638.  move.b p2_gunselected,d0
  4639.  
  4640.  move.l LINKFILE,a1
  4641.  add.l #GunObjects,a1
  4642.  move.w (a1,d0.w*2),d0
  4643.  
  4644.  move.b d0,TypeOfThing+64(a0)
  4645.  move.b #1,64+16(a0)
  4646.  
  4647.  move.w (a0),d0
  4648.  move.w 64(a0),d1
  4649.  move.l ObjectPoints,a1
  4650.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4651.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4652.  
  4653.  st WhichAnim+64(a0)
  4654.  
  4655.  move.l p2_yoff,d0
  4656.  move.l p2_height,d1
  4657.  asr.l #2,d1
  4658.  add.l #10*128,d1
  4659.  add.l d1,d0
  4660.  asr.l #7,d0
  4661.  move.w d0,4+64(a0)
  4662.  move.l PLR2_BOBBLEY,d1
  4663.  asr.l #8,d1
  4664.  move.l d1,d0
  4665.  asr.l #1,d0
  4666.  add.l d0,d1
  4667.  add.w d1,4+64(a0)
  4668.  
  4669.  move.b ObjInTop(a0),ObjInTop+64(a0)
  4670.  
  4671.  endc
  4672.  
  4673.  ifne CHEESEY
  4674.  
  4675.  move.w #-1,12+64(a0)
  4676.  endc
  4677.  
  4678.  rts
  4679.  
  4680.  
  4681.  
  4682. GunSelected: dc.b 0
  4683.  even
  4684.  
  4685.  
  4686. GunData: dc.l 0
  4687.  
  4688.  
  4689. protA: dc.w 0
  4690.  
  4691. Path:
  4692. ; incbin "testpath"
  4693. endpath:
  4694. pathpt: dc.l Path
  4695.  
  4696.  
  4697. PLR1KEYS: dc.b 0
  4698. PLR1PATH: dc.b 0
  4699. PLR1MOUSE: dc.b -1
  4700. PLR1JOY: dc.b 0
  4701. PLR2KEYS: dc.b 0
  4702. PLR2PATH: dc.b 0
  4703. PLR2MOUSE: dc.b -1
  4704. PLR2JOY: dc.b 0
  4705.  
  4706.  even
  4707.  
  4708. PLR1_bobble: dc.w 0
  4709. PLR2_bobble: dc.w 0
  4710. xwobble: dc.l 0
  4711. xwobxoff: dc.w 0
  4712.  
  4713. xwobzoff: dc.w 0
  4714.  
  4715. PLR1_Control:
  4716.  
  4717. ; Take a snapshot of everything.
  4718.  
  4719.  move.l PLR1_xoff,d2
  4720.  move.l d2,PLR1_oldxoff
  4721.  move.l d2,oldx
  4722.  move.l PLR1_zoff,d3
  4723.  move.l d3,PLR1_oldzoff
  4724.  move.l d3,oldz
  4725.  move.l p1_xoff,d0
  4726.  move.l d0,PLR1_xoff
  4727.  move.l d0,newx
  4728.  move.l p1_zoff,d1
  4729.  move.l d1,newz
  4730.  move.l d1,PLR1_zoff
  4731.  
  4732.  move.l p1_height,PLR1_height
  4733.  
  4734.  sub.l d2,d0
  4735.  sub.l d3,d1
  4736.  move.l d0,xdiff
  4737.  move.l d1,zdiff
  4738.  move.w p1_angpos,d0
  4739.  move.w d0,PLR1_angpos
  4740.  
  4741.  move.l #SineTable,a1
  4742.  move.w (a1,d0.w),PLR1_sinval
  4743.  add.w #2048,d0
  4744.  and.w #8190,d0
  4745.  move.w (a1,d0.w),PLR1_cosval
  4746.  
  4747.  move.l p1_yoff,d0
  4748.  move.w p1_bobble,d1
  4749.  move.w (a1,d1.w),d1
  4750.  move.w d1,d3
  4751.  ble.s .notnegative
  4752.  neg.w d1
  4753. .notnegative:
  4754.  add.w #16384,d1
  4755.  asr.w #4,d1
  4756.  
  4757.  tst.b PLR1_Ducked
  4758.  bne.s .notdouble
  4759.  add.w d1,d1
  4760. .notdouble
  4761.  ext.l d1
  4762.  
  4763.  move.l d1,PLR1_BOBBLEY
  4764.  
  4765.  move.l PLR1_height,d4
  4766.  sub.l d1,d4
  4767.  add.l d1,d0
  4768.  
  4769.  cmp.b #'s',mors
  4770.  beq.s .otherwob
  4771.  asr.w #6,d3
  4772.  ext.l d3
  4773.  move.l d3,xwobble
  4774.  move.w PLR1_sinval,d1
  4775.  muls d3,d1
  4776.  move.w PLR1_cosval,d2
  4777.  muls d3,d2
  4778.  swap d1
  4779.  swap d2
  4780.  asr.w #7,d1
  4781.  move.w d1,xwobxoff
  4782.  asr.w #7,d2
  4783.  neg.w d2
  4784.  move.w d2,xwobzoff
  4785. .otherwob
  4786.  
  4787.  move.l d0,PLR1_yoff
  4788.  move.l d0,newy
  4789.  move.l d0,oldy
  4790.  
  4791.  move.l d4,thingheight
  4792.  move.l #40*256,StepUpVal
  4793.  tst.b PLR1_Ducked
  4794.  beq.s .okbigstep
  4795.  move.l #10*256,StepUpVal
  4796. .okbigstep:
  4797.  
  4798.  move.l #$1000000,StepDownVal
  4799.  
  4800.  move.l PLR1_Roompt,a0
  4801.  move.w ToTelZone(a0),d0
  4802.  blt .noteleport
  4803.  
  4804.  move.w ToTelX(a0),newx
  4805.  move.w ToTelZ(a0),newz
  4806.  move.w #-1,CollId
  4807.  move.l #%111111111111111111,CollideFlags
  4808.  jsr Collision
  4809.  tst.b hitwall
  4810.  beq.s .teleport
  4811.  
  4812.  move.w PLR1_xoff,newx
  4813.  move.w PLR1_zoff,newz
  4814.  bra .noteleport
  4815.  
  4816. .teleport:
  4817.  
  4818.  st PLR1_TELEPORTED
  4819.  
  4820.  move.l PLR1_Roompt,a0
  4821.  move.w ToTelZone(a0),d0
  4822.  move.w ToTelX(a0),PLR1_xoff
  4823.  move.w ToTelZ(a0),PLR1_zoff
  4824.  move.l PLR1_yoff,d1
  4825.  sub.l ToZoneFloor(a0),d1
  4826.  move.l ZoneAdds,a0
  4827.  move.l (a0,d0.w*4),a0
  4828.  add.l LEVELDATA,a0
  4829.  move.l a0,PLR1_Roompt
  4830.  add.l ToZoneFloor(a0),d1
  4831.  move.l d1,PLR1s_yoff
  4832.  move.l d1,PLR1_yoff
  4833.  move.l d1,PLR1s_tyoff
  4834.  move.l PLR1_xoff,PLR1s_xoff
  4835.  move.l PLR1_zoff,PLR1s_zoff
  4836.  
  4837.  SAVEREGS
  4838.  move.w #0,Noisex
  4839.  move.w #0,Noisez
  4840.  move.w #26,Samplenum
  4841.  move.w #100,Noisevol
  4842.  move.b #$fa,IDNUM
  4843.  jsr MakeSomeNoise
  4844.  GETREGS
  4845.  
  4846.  bra .cantmove
  4847.  
  4848. .noteleport:
  4849.  
  4850.  move.l PLR1_Roompt,objroom
  4851.  move.w #%100000000,wallflags
  4852.  move.b PLR1_StoodInTop,StoodInTop
  4853.  
  4854.  move.l #%1011111110111000011,CollideFlags
  4855.  move.w #-1,CollId
  4856.  
  4857.  jsr Collision
  4858.  tst.b hitwall
  4859.  beq.s .nothitanything
  4860.  move.w oldx,PLR1_xoff
  4861.  move.w oldz,PLR1_zoff
  4862.  move.l PLR1_xoff,PLR1s_xoff
  4863.  move.l PLR1_zoff,PLR1s_zoff
  4864.  bra .cantmove
  4865. .nothitanything:
  4866.  
  4867.  move.w #40,extlen
  4868.  move.b #0,awayfromwall
  4869.  
  4870.  clr.b exitfirst
  4871.  clr.b wallbounce
  4872.  bsr MoveObject
  4873.  move.b StoodInTop,PLR1_StoodInTop
  4874.  move.l objroom,PLR1_Roompt
  4875.  move.w newx,PLR1_xoff
  4876.  move.w newz,PLR1_zoff
  4877.  move.l PLR1_xoff,PLR1s_xoff
  4878.  move.l PLR1_zoff,PLR1s_zoff
  4879.  
  4880. .cantmove:
  4881.  
  4882.  move.l PLR1_Roompt,a0
  4883.  
  4884.  move.l ToZoneFloor(a0),d0
  4885.  tst.b PLR1_StoodInTop
  4886.  beq.s notintop
  4887.  move.l ToUpperFloor(a0),d0
  4888. notintop:
  4889.  
  4890.  adda.w #ToZonePts,a0
  4891.  sub.l PLR1_height,d0
  4892.  move.l d0,PLR1s_tyoff
  4893.  move.w p1_angpos,tmpangpos
  4894.  
  4895. ; move.l (a0),a0        ; jump to viewpoint list
  4896.  * A0 is pointing at a pointer to list of points to rotate
  4897.  move.w (a0)+,d1
  4898.  ext.l d1
  4899.  add.l PLR1_Roompt,d1
  4900.  move.l d1,PLR1_PointsToRotatePtr
  4901.  tst.b (a0)+
  4902.  sne.s DRAWNGRAPHTOP
  4903.  beq.s nobackgraphics
  4904.  cmp.b #'s',mors
  4905.  beq.s nobackgraphics
  4906.  move.l a0,-(a7)
  4907.  jsr putinbackdrop 
  4908.  move.l (a7)+,a0
  4909. nobackgraphics:
  4910.  
  4911.  move.b (a0)+,PLR1_Echo
  4912.  
  4913.  adda.w #10,a0
  4914.  move.l a0,PLR1_ListOfGraphRooms
  4915.  
  4916. *************************************************
  4917.  rts
  4918.  
  4919. DRAWNGRAPHTOP
  4920.  dc.w 0 
  4921. tstzone: dc.l 0
  4922. CollId: dc.w 0
  4923.  
  4924. PLR2_Control:
  4925.  
  4926. ; Take a snapshot of everything.
  4927.  
  4928.  move.l PLR2_xoff,d2
  4929.  move.l d2,PLR2_oldxoff
  4930.  move.l d2,oldx
  4931.  move.l PLR2_zoff,d3
  4932.  move.l d3,PLR2_oldzoff
  4933.  move.l d3,oldz
  4934.  move.l p2_xoff,d0
  4935.  move.l d0,PLR2_xoff
  4936.  move.l d0,newx
  4937.  move.l p2_zoff,d1
  4938.  move.l d1,newz
  4939.  move.l d1,PLR2_zoff
  4940.  
  4941.  move.l p2_height,PLR2_height
  4942.  
  4943.  sub.l d2,d0
  4944.  sub.l d3,d1
  4945.  move.l d0,xdiff
  4946.  move.l d1,zdiff
  4947.  move.w p2_angpos,d0
  4948.  move.w d0,PLR2_angpos
  4949.  
  4950.  move.l #SineTable,a1
  4951.  move.w (a1,d0.w),PLR2_sinval
  4952.  add.w #2048,d0
  4953.  and.w #8190,d0
  4954.  move.w (a1,d0.w),PLR2_cosval
  4955.  
  4956.  move.l p2_yoff,d0
  4957.  move.w p2_bobble,d1
  4958.  move.w (a1,d1.w),d1
  4959.  move.w d1,d3
  4960.  ble.s .notnegative
  4961.  neg.w d1
  4962. .notnegative:
  4963.  add.w #16384,d1
  4964.  asr.w #4,d1
  4965.  
  4966.  tst.b PLR2_Ducked
  4967.  bne.s .notdouble
  4968.  add.w d1,d1
  4969. .notdouble
  4970.  ext.l d1
  4971.  
  4972.  move.l d1,PLR2_BOBBLEY
  4973.  
  4974.  move.l PLR2_height,d4
  4975.  sub.l d1,d4
  4976.  add.l d1,d0
  4977.  
  4978.  cmp.b #'s',mors
  4979.  bne.s .otherwob
  4980.  asr.w #6,d3
  4981.  ext.l d3
  4982.  move.l d3,xwobble
  4983.  move.w PLR2_sinval,d1
  4984.  muls d3,d1
  4985.  move.w PLR2_cosval,d2
  4986.  muls d3,d2
  4987.  swap d1
  4988.  swap d2
  4989.  asr.w #7,d1
  4990.  move.w d1,xwobxoff
  4991.  asr.w #7,d2
  4992.  neg.w d2
  4993.  move.w d2,xwobzoff
  4994. .otherwob
  4995.  
  4996.  move.l d0,PLR2_yoff
  4997.  move.l d0,newy
  4998.  move.l d0,oldy
  4999.  
  5000.  move.l d4,thingheight
  5001.  move.l #40*256,StepUpVal
  5002.  tst.b PLR2_Ducked
  5003.  beq.s .okbigstep
  5004.  move.l #10*256,StepUpVal
  5005. .okbigstep:
  5006.  
  5007.  move.l #$1000000,StepDownVal
  5008.  
  5009.  move.l PLR2_Roompt,a0
  5010.  move.w ToTelZone(a0),d0
  5011.  blt .noteleport
  5012.  
  5013.  move.w ToTelX(a0),newx
  5014.  move.w ToTelZ(a0),newz
  5015.  move.w #-1,CollId
  5016.  move.l #%111111111111111111,CollideFlags
  5017.  jsr Collision
  5018.  tst.b hitwall
  5019.  beq.s .teleport
  5020.  
  5021.  move.w PLR2_xoff,newx
  5022.  move.w PLR2_zoff,newz
  5023.  bra .noteleport
  5024.  
  5025. .teleport:
  5026.  
  5027.  st PLR2_TELEPORTED
  5028.  
  5029.  move.l PLR2_Roompt,a0
  5030.  move.w ToTelZone(a0),d0
  5031.  move.w ToTelX(a0),PLR2_xoff
  5032.  move.w ToTelZ(a0),PLR2_zoff
  5033.  move.l PLR2_yoff,d1
  5034.  sub.l ToZoneFloor(a0),d1
  5035.  move.l ZoneAdds,a0
  5036.  move.l (a0,d0.w*4),a0
  5037.  add.l LEVELDATA,a0
  5038.  move.l a0,PLR2_Roompt
  5039.  add.l ToZoneFloor(a0),d1
  5040.  move.l d1,PLR2s_yoff
  5041.  move.l d1,PLR2_yoff
  5042.  move.l d1,PLR2s_tyoff
  5043.  move.l PLR2_xoff,PLR2s_xoff
  5044.  move.l PLR2_zoff,PLR2s_zoff
  5045.  
  5046.  SAVEREGS
  5047.  move.w #0,Noisex
  5048.  move.w #0,Noisez
  5049.  move.w #26,Samplenum
  5050.  move.w #100,Noisevol
  5051.  move.b #$fa,IDNUM
  5052.  jsr MakeSomeNoise
  5053.  GETREGS
  5054.  
  5055.  bra .cantmove
  5056.  
  5057. .noteleport:
  5058.  
  5059.  move.l PLR2_Roompt,objroom
  5060.  move.w #%100000000000,wallflags
  5061.  move.b PLR2_StoodInTop,StoodInTop
  5062.  
  5063.  move.l #%1011111010111100011,CollideFlags
  5064.  move.w #-1,CollId
  5065.  
  5066.  jsr Collision
  5067.  tst.b hitwall
  5068.  beq.s .nothitanything
  5069.  move.w oldx,PLR2_xoff
  5070.  move.w oldz,PLR2_zoff
  5071.  move.l PLR2_xoff,PLR2s_xoff
  5072.  move.l PLR2_zoff,PLR2s_zoff
  5073.  bra .cantmove
  5074. .nothitanything:
  5075.  
  5076.  move.w #40,extlen
  5077.  move.b #0,awayfromwall
  5078.  
  5079.  clr.b exitfirst
  5080.  clr.b wallbounce
  5081.  bsr MoveObject
  5082.  move.b StoodInTop,PLR2_StoodInTop
  5083.  move.l objroom,PLR2_Roompt
  5084.  move.w newx,PLR2_xoff
  5085.  move.w newz,PLR2_zoff
  5086.  move.l PLR2_xoff,PLR2s_xoff
  5087.  move.l PLR2_zoff,PLR2s_zoff
  5088.  
  5089. .cantmove
  5090.  
  5091.  move.l PLR2_Roompt,a0
  5092.  
  5093.  move.l ToZoneFloor(a0),d0
  5094.  tst.b PLR2_StoodInTop
  5095.  beq.s .notintop
  5096.  move.l ToUpperFloor(a0),d0
  5097. .notintop:
  5098.  
  5099.  adda.w #ToZonePts,a0
  5100.  sub.l PLR2_height,d0
  5101.  move.l d0,PLR2s_tyoff
  5102.  move.w p2_angpos,tmpangpos
  5103.  
  5104. ; move.l (a0),a0        ; jump to viewpoint list
  5105.  * A0 is pointing at a pointer to list of points to rotate
  5106.  move.w (a0)+,d1
  5107.  ext.l d1
  5108.  add.l PLR2_Roompt,d1
  5109.  move.l d1,PLR2_PointsToRotatePtr
  5110.  tst.b (a0)+
  5111.  sne.s DRAWNGRAPHTOP
  5112.  beq.s .nobackgraphics
  5113.  cmp.b #'s',mors
  5114.  bne.s .nobackgraphics
  5115.  move.l a0,-(a7)
  5116.  jsr putinbackdrop 
  5117.  move.l (a7)+,a0
  5118. .nobackgraphics:
  5119.  
  5120.  move.b (a0)+,PLR2_Echo
  5121.  
  5122.  adda.w #10,a0
  5123.  move.l a0,PLR2_ListOfGraphRooms
  5124.  
  5125. *****************************************************
  5126.  rts
  5127.  
  5128.  
  5129. KeyMap: ds.b 256
  5130.  
  5131. fillscrnwater:
  5132.  dc.w 0
  5133. DONTDOGUN:
  5134.  dc.w 0
  5135.  
  5136. ;temptemp: ds.l 200
  5137. ;temptempptr: dc.l 0
  5138.  
  5139. DrawDisplay:
  5140.  
  5141. ; move.l #temptemp,temptempptr
  5142.  
  5143.  clr.b fillscrnwater
  5144.  
  5145.  move.l #SineTable,a0
  5146.  move.w angpos,d0
  5147.  move.w (a0,d0.w),d6
  5148.  adda.w #2048,a0
  5149.  move.w (a0,d0.w),d7
  5150.  move.w d6,sinval
  5151.  move.w d7,cosval
  5152.  
  5153.  move.l yoff,d0
  5154.  asr.l #8,d0
  5155.  move.w d0,d1
  5156.  add.w #256-32,d1
  5157.  and.w #255,d1
  5158.  move.w d1,wallyoff
  5159.  move.l yoff,d0
  5160.  asr.l #6,d0
  5161.  move.w d0,flooryoff
  5162.  
  5163.  move.w xoff,d6
  5164.  move.w d6,d3
  5165.  asr.w #1,d3
  5166.  add.w d3,d6
  5167.  asr.w #1,d6
  5168.  move.w d6,xoff34
  5169.  
  5170.  move.w zoff,d6
  5171.  move.w d6,d3
  5172.  asr.w #1,d3
  5173.  add.w d3,d6
  5174.  asr.w #1,d6
  5175.  move.w d6,zoff34
  5176.  
  5177.  bsr RotateLevelPts
  5178.  bsr RotateObjectPts
  5179.  bsr CalcPLR1InLine
  5180.  
  5181.  cmp.b #'n',mors
  5182.  bne.s doplr2too
  5183.  move.l PLR2_Obj,a0
  5184.  move.w #-1,12(a0)
  5185.  move.w #-1,GraphicRoom(a0)
  5186.  bra noplr2either
  5187.  
  5188. doplr2too:
  5189.  bsr CalcPLR2InLine
  5190. noplr2either:
  5191.  
  5192.  move.l endoflist,a0
  5193. ; move.w #-1,(a0)
  5194.  
  5195. ; move.l #FinalOrder,a0
  5196.  
  5197.  
  5198. subroomloop:
  5199. ; move.w (a0)+,d7
  5200.  move.w -(a0),d7
  5201.  blt jumpoutofrooms
  5202.  
  5203. ; bsr setlrclip
  5204. ; move.w leftclip,d0
  5205. ; cmp.w rightclip,d0
  5206. ; bge subroomloop
  5207.  move.l a0,-(a7)
  5208.  
  5209.  move.l ZoneAdds,a0
  5210.  move.l (a0,d7.w*4),a0
  5211.  add.l LEVELDATA,a0
  5212.  move.l ToZoneRoof(a0),SplitHeight
  5213.  move.l a0,ROOMBACK
  5214.  
  5215.  move.l ZoneGraphAdds,a0
  5216.  move.l 4(a0,d7.w*8),a2
  5217.  move.l (a0,d7.w*8),a0
  5218.  
  5219.  add.l LEVELGRAPHICS,a0
  5220.  add.l LEVELGRAPHICS,a2
  5221.  move.l a2,ThisRoomToDraw+4
  5222.  move.l a0,ThisRoomToDraw
  5223.  
  5224.  move.l ListOfGraphRooms,a1
  5225.  
  5226.  
  5227.  
  5228. finditit:
  5229.  tst.w (a1)
  5230.  blt nomoretodoatall
  5231.  cmp.w (a1),d7
  5232.  beq outoffind
  5233.  adda.w #8,a1
  5234.  bra finditit
  5235.  
  5236. outoffind:
  5237.  
  5238.  move.l a1,-(a7)
  5239.  
  5240.  
  5241.  move.w #0,leftclip
  5242.  move.w RIGHTX,rightclip
  5243.  moveq #0,d7
  5244.  move.w 2(a1),d7
  5245.  blt.s outofrcliplop
  5246.  move.l LEVELCLIPS,a0
  5247.  lea (a0,d7.l*2),a0
  5248.  
  5249.  tst.w (a0)
  5250.  blt outoflcliplop
  5251.  
  5252.  bsr NEWsetlclip
  5253.  
  5254. intolcliplop:        ; clips
  5255.  tst.w (a0)
  5256.  blt outoflcliplop
  5257.  
  5258.  bsr NEWsetlclip 
  5259.  bra intolcliplop
  5260.  
  5261. outoflcliplop:
  5262.  
  5263.  addq #2,a0
  5264.  
  5265.  tst.w (a0)
  5266.  blt outofrcliplop
  5267.  
  5268.  bsr NEWsetrclip
  5269.  
  5270. intorcliplop:        ; clips
  5271.  tst.w (a0)
  5272.  blt outofrcliplop
  5273.  
  5274.  bsr NEWsetrclip 
  5275.  bra intorcliplop
  5276.  
  5277. outofrcliplop:
  5278.  
  5279.  
  5280.  move.w leftclip,d0
  5281.  ext.l d0
  5282.  move.l d0,leftclip-2
  5283.  
  5284.  cmp.w RIGHTX,d0
  5285.  bge dontbothercantseeit
  5286.  move.w rightclip,d1
  5287.  ext.l d1
  5288.  move.l d1,rightclip-2
  5289.  blt dontbothercantseeit
  5290.  cmp.w d1,d0
  5291.  bge dontbothercantseeit
  5292.  
  5293.  move.l yoff,d0
  5294.  cmp.l SplitHeight,d0
  5295.  blt botfirst
  5296.  
  5297.  move.l ThisRoomToDraw+4,a0
  5298.  cmp.l LEVELGRAPHICS,a0
  5299.  beq.s noupperroom
  5300.  st DOUPPER
  5301.  
  5302.  move.l ROOMBACK,a1
  5303.  move.l ToUpperRoof(a1),TOPOFROOM
  5304.  move.l ToUpperFloor(a1),BOTOFROOM
  5305.  
  5306.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5307.  bsr dothisroom
  5308. noupperroom:
  5309.  move.l ThisRoomToDraw,a0
  5310.  clr.b DOUPPER
  5311.  move.l #CurrentPointBrights,PointBrightsPtr
  5312.  
  5313.  move.l ROOMBACK,a1
  5314.  move.l ToZoneRoof(a1),d0
  5315.  move.l d0,TOPOFROOM
  5316.  move.l ToZoneFloor(a1),d1
  5317.  move.l d1,BOTOFROOM
  5318.  
  5319.  move.l ToZoneWater(a1),d2
  5320.  cmp.l yoff,d2
  5321.  blt.s .abovefirst
  5322.  move.l d2,BEFOREWATTOP
  5323.  move.l d1,BEFOREWATBOT
  5324.  move.l d2,AFTERWATBOT
  5325.  move.l d0,AFTERWATTOP
  5326.  bra.s .belowfirst
  5327. .abovefirst:
  5328.  move.l d0,BEFOREWATTOP
  5329.  move.l d2,BEFOREWATBOT
  5330.  move.l d1,AFTERWATBOT
  5331.  move.l d2,AFTERWATTOP
  5332. .belowfirst:
  5333.  
  5334.  bsr dothisroom
  5335.  
  5336.  bra dontbothercantseeit
  5337. botfirst:
  5338.  
  5339.  move.l ThisRoomToDraw,a0
  5340.  clr.b DOUPPER
  5341.  move.l #CurrentPointBrights,PointBrightsPtr
  5342.  
  5343.  move.l ROOMBACK,a1
  5344.  move.l ToZoneRoof(a1),d0
  5345.  move.l d0,TOPOFROOM
  5346.  move.l ToZoneFloor(a1),d1
  5347.  move.l d1,BOTOFROOM
  5348.  
  5349.  move.l ToZoneWater(a1),d2
  5350.  cmp.l yoff,d2
  5351.  blt.s .abovefirst
  5352.  move.l d2,BEFOREWATTOP
  5353.  move.l d1,BEFOREWATBOT
  5354.  move.l d2,AFTERWATBOT
  5355.  move.l d0,AFTERWATTOP
  5356.  bra.s .belowfirst
  5357. .abovefirst:
  5358.  move.l d0,BEFOREWATTOP
  5359.  move.l d2,BEFOREWATBOT
  5360.  move.l d1,AFTERWATBOT
  5361.  move.l d2,AFTERWATTOP
  5362. .belowfirst:
  5363.  
  5364.  
  5365.  bsr dothisroom
  5366.  move.l ThisRoomToDraw+4,a0
  5367.  cmp.l LEVELGRAPHICS,a0
  5368.  beq.s noupperroom2
  5369.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5370.  
  5371.  move.l ROOMBACK,a1
  5372.  move.l ToUpperRoof(a1),TOPOFROOM
  5373.  move.l ToUpperFloor(a1),BOTOFROOM
  5374.  
  5375.  st DOUPPER
  5376.  bsr dothisroom
  5377. noupperroom2:
  5378.  
  5379. dontbothercantseeit:
  5380. pastemp:
  5381.  
  5382.  move.l (a7)+,a1
  5383.  move.l ThisRoomToDraw,a0
  5384.  move.w (a0),d7
  5385.  
  5386.  adda.w #8,a1
  5387.  bra finditit
  5388.  
  5389. nomoretodoatall:
  5390.  
  5391.  move.l (a7)+,a0
  5392.  
  5393.  bra subroomloop
  5394.  
  5395. jumpoutofrooms:
  5396.  
  5397.  
  5398.  tst.b DONTDOGUN
  5399.  bne NOGUNLOOK
  5400.  
  5401.  cmp.b #'s',mors
  5402.  beq.s drawslavegun
  5403.  
  5404.  moveq #0,d0
  5405.  move.b PLR1_GunSelected,d0
  5406.  moveq #0,d1
  5407.  move.b PLR1_GunFrame,d1
  5408. ; bsr DRAWINGUN
  5409.  bra drawngun
  5410.  
  5411. drawslavegun
  5412.  moveq #0,d0
  5413.  move.b PLR2_GunSelected,d0
  5414.  moveq #0,d1
  5415.  move.b PLR2_GunFrame,d1
  5416. ; bsr DRAWINGUN
  5417.  
  5418. drawngun:
  5419.  
  5420. NOGUNLOOK:
  5421.  
  5422.  moveq #0,d1
  5423.  move.b PLR1_GunFrame,d1
  5424.  sub.w TempFrames,d1
  5425.  bgt.s .nn
  5426.  moveq #0,d1
  5427. .nn
  5428.  move.b d1,PLR1_GunFrame
  5429.  
  5430.  ble.s .donefire
  5431.  sub.b #1,PLR1_GunFrame
  5432. .donefire:
  5433.  
  5434.  moveq #0,d1
  5435.  move.b PLR2_GunFrame,d1
  5436.  sub.w TempFrames,d1
  5437.  bgt.s .nn2
  5438.  moveq #0,d1
  5439. .nn2
  5440.  move.b d2,PLR2_GunFrame
  5441.  
  5442.  ble.s .donefire2
  5443.  sub.b #1,PLR2_GunFrame
  5444. .donefire2:
  5445.  
  5446.  tst.b DOANYWATER
  5447.  beq.s nowaterfull
  5448.  
  5449.  move.w #231,d0
  5450.  move.l FASTBUFFER,a0
  5451.  tst.b fillscrnwater
  5452.  beq nowaterfull
  5453.  bgt oknothalf
  5454.  moveq #119,d0
  5455.  add.l #320*120*2,a0
  5456. oknothalf:
  5457.  
  5458.  bclr.b #1,$bfe001
  5459.  
  5460.  move.l TexturePal,a2
  5461.  add.l #256*40,a2
  5462.  moveq #0,d2
  5463.  
  5464.  tst.b FULLSCR
  5465.  bne.s DOALLSCREEN
  5466.  
  5467. DOSOMESCREEN:
  5468.  
  5469.  move.w #159,d0
  5470. .fw:
  5471.  move.w #191,d1
  5472. .fwa:
  5473.  move.b (a0),d2
  5474.  move.b (a2,d2.w),(a0)+
  5475.  dbra d1,.fwa
  5476.  add.w #(320-192),a0
  5477.  dbra d0,.fw
  5478.  rts
  5479.  
  5480. DOALLSCREEN:
  5481.  
  5482. fw:
  5483.  move.w #287,d1
  5484. fwa:
  5485.  move.b (a0),d2
  5486.  move.b (a2,d2.w),(a0)+
  5487.  dbra d1,fwa
  5488.  add.w #32,a0
  5489.  dbra d0,fw
  5490.  
  5491. ; move.l frompt,a0
  5492. ; add.l #104*4*60,a0
  5493. ; move.w #31,d0
  5494. ;fw:
  5495. ; move.w d5,d1
  5496. ; move.l a0,a1
  5497. ;fwd:
  5498. ;val SET 104*4*19
  5499. ; REPT 20
  5500. ; and.w #$ff,val(a1)
  5501. ;val SET val-104*4
  5502. ; ENDR
  5503. ; sub.l #104*4*20,a1
  5504. ; dbra d1,fwd
  5505. ; addq #4,a0
  5506. ; dbra d0,fw
  5507. ;
  5508. ; addq #4,a0
  5509. ;
  5510. ; move.w #31,d0
  5511. ;sw:
  5512. ; move.w d5,d1
  5513. ; move.l a0,a1
  5514. ;swd:
  5515. ;val SET 104*4*19
  5516. ; REPT 20
  5517. ; and.w #$ff,val(a1)
  5518. ;val SET val-104*4
  5519. ; ENDR
  5520. ; sub.l #104*4*20,a1
  5521. ; dbra d1,swd
  5522. ; addq #4,a0
  5523. ; dbra d0,sw
  5524. ;
  5525. ; addq #4,a0
  5526. ;
  5527. ; move.w #31,d0
  5528. ;tw:
  5529. ; move.w d5,d1
  5530. ; move.l a0,a1
  5531. ;twd:
  5532. ;val SET 104*4*19
  5533. ; REPT 20
  5534. ; and.w #$ff,val(a1)
  5535. ;val SET val-104*4
  5536. ; ENDR
  5537. ; sub.l #104*4*20,a1
  5538. ; dbra d1,twd
  5539. ; addq #4,a0
  5540. ; dbra d0,tw
  5541. ;
  5542.  rts
  5543.  
  5544. nowaterfull:
  5545.  bset.b #1,$bfe001
  5546.  rts
  5547.  
  5548. prot9: dc.w 0
  5549.  
  5550. ;TempBuffer: ds.l 100 
  5551.  
  5552. prot8: dc.w 0
  5553.  
  5554. ClipTable: ds.l 30
  5555. EndOfClipPt: dc.l 0
  5556. DOUPPER: dc.w 0
  5557.  
  5558. RealTable:
  5559.  dc.l prot1-78935450
  5560.  dc.l prot2-78935450
  5561.  dc.l prot3-78935450
  5562.  dc.l prot4-78935450
  5563.  dc.l prot5-78935450
  5564.  dc.l prot6-78935450
  5565.  dc.l prot7-78935450
  5566.  dc.l prot8-78935450
  5567.  dc.l prot9-78935450
  5568.  dc.l protA-78935450
  5569.  
  5570. dothisroom
  5571.  
  5572.  move.w (a0)+,d0
  5573.  move.w d0,currzone
  5574.  move.w d0,d1
  5575.  muls #40,d1
  5576.  add.l #BIGMAP,d1
  5577.  move.l d1,BIGPTR
  5578.  move.w d0,d1
  5579.  ext.l d1
  5580.  asl.w #2,d1
  5581.  add.l #COMPACTMAP,d1
  5582.  move.l d1,COMPACTPTR
  5583.  add.l #4,d1
  5584.  cmp.l LASTZONE,d1
  5585.  ble.s .nochange
  5586.  move.l d1,LASTZONE
  5587. .nochange:
  5588.  
  5589.  move.l #ZoneBrightTable,a1
  5590.  move.l (a1,d0.w*4),d1
  5591.  tst.b DOUPPER
  5592.  bne.s .okbot
  5593.  swap d1
  5594. .okbot:
  5595.  move.w d1,ZoneBright
  5596.  
  5597. polyloop:
  5598.  move.w (a0)+,d0
  5599.  move.w d0,WALLIDENT
  5600.  and.w #$ff,d0
  5601.  tst.b d0
  5602.  blt jumpoutofloop
  5603.  beq itsawall
  5604.  cmp.w #3,d0
  5605.  beq itsasetclip
  5606.  blt itsafloor
  5607.  cmp.w #4,d0
  5608.  beq itsanobject
  5609.  cmp.w #5,d0
  5610.  beq itsanarc
  5611.  cmp.w #6,d0
  5612.  beq itsalightbeam
  5613.  cmp.w #7,d0
  5614.  beq.s itswater
  5615.  cmp.w #9,d0
  5616.  ble itsachunkyfloor
  5617.  cmp.w #11,d0
  5618.  ble itsabumpyfloor
  5619.  cmp.w #12,d0
  5620.  beq.s itsbackdrop
  5621.  cmp.w #13,d0
  5622.  beq.s itsaseewall
  5623.  
  5624.  bra polyloop
  5625.  
  5626. itsaseewall:
  5627.  st seethru
  5628.  jsr itsawalldraw
  5629.  bra polyloop
  5630.  
  5631. itsbackdrop:
  5632.  jsr putinbackdrop
  5633.  bra polyloop
  5634.  
  5635. itswater:
  5636.  PROTHCHECK
  5637.  move.w #2,SMALLIT
  5638.  move.w #3,d0
  5639.  clr.b gourfloor
  5640.  move.l #FloorLine,LineToUse
  5641.  st usewater
  5642.  clr.b usebumps
  5643.  jsr itsafloordraw
  5644.  bra polyloop
  5645.  
  5646. itsanarc:
  5647.  jsr CurveDraw
  5648.  bra polyloop
  5649.  
  5650. itsanobject:
  5651.  jsr ObjDraw
  5652.  bra polyloop
  5653.  
  5654. itsalightbeam:
  5655.  jsr LightDraw
  5656.  bra polyloop
  5657.  
  5658. itsabumpyfloor:
  5659.  move.w #1,SMALLIT
  5660.  sub.w #9,d0
  5661.  st usebumps
  5662.  st smoothbumps
  5663.  clr.b usewater
  5664.  move.l #BumpLine,LineToUse
  5665.  jsr itsafloordraw
  5666.  bra polyloop
  5667.  
  5668. itsachunkyfloor:
  5669.  move.w #1,SMALLIT
  5670.  subq.w #7,d0
  5671.  st usebumps
  5672.  sub.w #12,topclip
  5673. ; add.w #10,botclip
  5674.  clr.b smoothbumps
  5675.  clr.b usewater
  5676.  move.l #BumpLine,LineToUse
  5677.  jsr itsafloordraw
  5678.  add.w #12,topclip
  5679. ; sub.w #10,botclip
  5680.  bra polyloop 
  5681.  
  5682. itsafloor:
  5683.  
  5684.  move.l PointBrightsPtr,FloorPtBrights
  5685.  
  5686.  move.w currzone,d1
  5687.  muls #80,d1
  5688.  
  5689.  cmp.w #2,d0
  5690.  bne.s .nfl
  5691.  add.l #2,d1
  5692. .nfl
  5693.  add.l d1,FloorPtBrights
  5694.  
  5695.  move.w #1,SMALLIT
  5696.  
  5697.  movem.l a0/d0,-(a7)
  5698.  move.l $4.w,a6
  5699.  jsr _LVOSuperState(a6)
  5700.  move.l d0,SSTACK
  5701.  movem.l (a7)+,a0/d0
  5702.  
  5703.  move.l #FloorLine,LineToUse
  5704. * 1,2 = floor/roof
  5705.  clr.b usewater
  5706.  clr.b usebumps
  5707.  move.b GOURSEL,gourfloor    
  5708.  jsr itsafloordraw
  5709.  move.l a0,-(a7)
  5710.  move.l $4.w,a6
  5711.  move.l SSTACK,d0
  5712.  jsr _LVOUserState(a6)
  5713.  move.l (a7)+,a0
  5714.  bra polyloop
  5715. itsasetclip:
  5716.  bra polyloop
  5717. itsawall:
  5718.  clr.b seethru
  5719. ; move.l #stripbuffer,a1
  5720.  jsr itsawalldraw
  5721.  bra polyloop
  5722.  
  5723. jumpoutofloop:
  5724.  rts
  5725.  
  5726. LASTZONE: dc.l 0
  5727. COMPACTPTR: dc.l 0
  5728. BIGPTR: dc.l 0
  5729. WALLIDENT: dc.w 0
  5730. SMALLIT: dc.w 0
  5731. GOURSEL: dc.w 0
  5732. ThisRoomToDraw: dc.l 0,0
  5733. SplitHeight: dc.l 0
  5734.  
  5735.  include "ab3:source_4000/OrderZones"
  5736.  
  5737. ReadMouse:
  5738.  move.l #$dff000,a6
  5739.  clr.l d0
  5740.  clr.l d1
  5741.  move.w $a(a6),d0
  5742.  lsr.w #8,d0
  5743.  ext.l d0
  5744.  move.w d0,d3
  5745.  move.w oldmy,d2
  5746.  sub.w d2,d0
  5747.  
  5748.  cmp.w #127,d0
  5749.  blt nonegy
  5750.  move.w #255,d1
  5751.  sub.w d0,d1
  5752.  move.w d1,d0
  5753.  neg.w d0
  5754. nonegy:
  5755.  
  5756.  cmp.w #-127,d0
  5757.  bge nonegy2
  5758.  move.w #255,d1
  5759.  add.w d0,d1
  5760.  move.w d1,d0
  5761. nonegy2:
  5762.  
  5763.  add.b d0,d2
  5764.  add.w d0,oldy2
  5765.  move.w d2,oldmy
  5766.  move.w d2,d0
  5767.  
  5768.  move.w oldy2,d0
  5769.  move.w d0,ymouse
  5770.  
  5771.  clr.l d0
  5772.  clr.l d1
  5773.  move.w $a(a6),d0
  5774.  ext.w d0
  5775.  ext.l d0
  5776.  move.w d0,d3
  5777.  move.w oldmx,d2
  5778.  sub.w d2,d0
  5779.  
  5780.  cmp.w #127,d0
  5781.  blt nonegx
  5782.  move.w #255,d1
  5783.  sub.w d0,d1
  5784.  move.w d1,d0
  5785.  neg.w d0
  5786. nonegx:
  5787.  
  5788.  cmp.w #-127,d0
  5789.  bge nonegx2
  5790.  move.w #255,d1
  5791.  add.w d0,d1
  5792.  move.w d1,d0
  5793. nonegx2:
  5794.  
  5795.  add.b d0,d2
  5796.  move.w d0,d1
  5797.  move.w d2,oldmx
  5798.  
  5799.  move.w #$0,$dff034
  5800.  
  5801.  add.w d0,oldx2
  5802.  move.w oldx2,d0
  5803.  and.w #2047,d0
  5804.  move.w d0,oldx2
  5805.  
  5806.  asl.w #2,d0
  5807.  sub.w prevx,d0
  5808.  add.w d0,prevx
  5809.  add.w d0,angpos
  5810.  move.w #0,lrs
  5811.  rts
  5812.  
  5813. noturn:
  5814.  
  5815. ; got to move lr instead. 
  5816.  
  5817. ; d1 = speed moved l/r
  5818.  
  5819.  move.w d1,lrs
  5820.  
  5821.  rts
  5822.  
  5823. lrs: dc.w 0
  5824. prevx: dc.w 0
  5825.  
  5826. angpos: dc.w 0
  5827. mang: dc.w 0
  5828. oldymouse: dc.w 0
  5829. xmouse: dc.w 0
  5830. ymouse: dc.w 0
  5831. oldx2: dc.w 0
  5832. oldmx: dc.w 0
  5833. oldmy: dc.w 0
  5834. oldy2: dc.w 0
  5835.  
  5836. MAPON: dc.w $0
  5837. REALMAPON: dc.w 0
  5838.  
  5839. RotateLevelPts:
  5840.  
  5841.  tst.b REALMAPON
  5842.  beq ONLYTHELONELY
  5843.  
  5844.  move.w sinval,d6
  5845.  swap d6
  5846.  move.w cosval,d6
  5847.  move.l Points,a3
  5848.  move.l #Rotated,a1
  5849.  move.l #OnScreen,a2
  5850.  move.w xoff,d4
  5851.  move.w zoff,d5
  5852.  
  5853. ; move.w #$c40,$dff106
  5854. ; move.w #$f00,$dff180
  5855.  
  5856.  move.w NumLevPts,d7
  5857.  
  5858.  tst.b FULLSCR
  5859.  bne BIGALL
  5860.  
  5861. pointrotlop2:
  5862.  move.w (a3)+,d0
  5863.  sub.w d4,d0
  5864.  move.w d0,d2
  5865.  move.w (a3)+,d1
  5866.  sub.w d5,d1
  5867.  muls d6,d2
  5868.  swap d6
  5869.  move.w d1,d3
  5870.  muls d6,d3
  5871.  sub.l d3,d2
  5872.  add.l d2,d2
  5873.  swap d2
  5874.  ext.l d2
  5875.  asl.l #7,d2
  5876.  add.l xwobble,d2
  5877.  move.l d2,(a1)+
  5878.  
  5879.  muls d6,d0
  5880.  swap d6
  5881.  muls d6,d1
  5882.  add.l d0,d1
  5883.  asl.l #1,d1
  5884.  swap d1
  5885. ; ext.l d1
  5886. ; divs #3,d1
  5887.  move.l d1,(a1)+
  5888.  
  5889.  tst.w d1
  5890.  bgt.s ptnotbehind
  5891.  tst.w d2
  5892.  bgt.s onrightsomewhere
  5893.  move.w #0,d2
  5894.  bra putin
  5895. onrightsomewhere:
  5896.  move.w RIGHTX,d2
  5897.  bra putin
  5898. ptnotbehind:
  5899.  
  5900.  divs d1,d2
  5901.  add.w MIDDLEX,d2
  5902. putin:
  5903.  move.w d2,(a2)+
  5904.  
  5905.  dbra d7,pointrotlop2
  5906. outofpointrot:
  5907.   rts
  5908.  
  5909.  
  5910. BIGALL:
  5911.  
  5912. pointrotlop2B:
  5913.  move.w (a3)+,d0
  5914.  sub.w d4,d0
  5915.  move.w d0,d2
  5916.  move.w (a3)+,d1
  5917.  sub.w d5,d1
  5918.  muls d6,d2
  5919.  swap d6
  5920.  move.w d1,d3
  5921.  muls d6,d3
  5922.  sub.l d3,d2
  5923.  add.l d2,d2
  5924.  swap d2
  5925.  ext.l d2
  5926.  asl.l #7,d2
  5927.  add.l xwobble,d2
  5928.  move.l d2,(a1)+
  5929.  
  5930.  muls d6,d0
  5931.  swap d6
  5932.  muls d6,d1
  5933.  add.l d0,d1
  5934.  asl.l #2,d1
  5935.  swap d1
  5936.  ext.l d1
  5937.  divs #3,d1
  5938.  move.l d1,(a1)+
  5939.  
  5940.  tst.w d1
  5941.  bgt.s ptnotbehindB
  5942.  tst.w d2
  5943.  bgt.s onrightsomewhereB
  5944.  move.w #0,d2
  5945.  bra putinB
  5946. onrightsomewhereB:
  5947.  move.w RIGHTX,d2
  5948.  bra putinB
  5949. ptnotbehindB:
  5950.  
  5951.  divs d1,d2
  5952.  add.w MIDDLEX,d2
  5953. putinB:
  5954.  move.w d2,(a2)+
  5955.  
  5956.  dbra d7,pointrotlop2B
  5957.   rts
  5958.  
  5959.  
  5960. ONLYTHELONELY:
  5961.  
  5962.  move.w sinval,d6
  5963.  swap d6
  5964.  move.w cosval,d6
  5965.  
  5966.  move.l PointsToRotatePtr,a0
  5967.  move.l Points,a3
  5968.  move.l #Rotated,a1
  5969.  move.l #OnScreen,a2
  5970.  move.w xoff,d4
  5971.  move.w zoff,d5
  5972.  
  5973. ; move.w #$c40,$dff106
  5974. ; move.w #$f00,$dff180
  5975.  
  5976.  tst.b FULLSCR
  5977.  bne BIGLONELY
  5978.  
  5979. pointrotlop:
  5980.  move.w (a0)+,d7
  5981.  blt outofpointrot
  5982.  
  5983.  move.w (a3,d7*4),d0
  5984.  sub.w d4,d0
  5985.  move.w d0,d2
  5986.  move.w 2(a3,d7*4),d1
  5987.  sub.w d5,d1
  5988.  muls d6,d2
  5989.  swap d6
  5990.  move.w d1,d3
  5991.  muls d6,d3
  5992.  sub.l d3,d2
  5993.  add.l d2,d2
  5994.  swap d2
  5995.  ext.l d2
  5996.  asl.l #7,d2
  5997.  add.l xwobble,d2
  5998.  move.l d2,(a1,d7*8)
  5999.  
  6000.  muls d6,d0
  6001.  swap d6
  6002.  muls d6,d1
  6003.  add.l d0,d1
  6004.  asl.l #1,d1
  6005.  swap d1
  6006. ; ext.l d1
  6007. ; divs #3,d1
  6008.  move.l d1,4(a1,d7*8)
  6009.  
  6010.  tst.w d1
  6011.  bgt.s .ptnotbehind
  6012.  tst.w d2
  6013.  bgt.s .onrightsomewhere
  6014.  move.w #0,d2
  6015.  bra .putin
  6016. .onrightsomewhere:
  6017.  move.w RIGHTX,d2
  6018.  bra .putin
  6019. .ptnotbehind:
  6020.  
  6021.  divs d1,d2
  6022.  add.w MIDDLEX,d2
  6023. .putin:
  6024.  move.w d2,(a2,d7*2)
  6025.  
  6026.  bra pointrotlop
  6027.  
  6028. ; move.w #$c40,$dff106
  6029. ; move.w #$ff0,$dff180
  6030.  
  6031.  rts
  6032.  
  6033. BIGLONELY:
  6034.  
  6035. .pointrotlop:
  6036.  move.w (a0)+,d7
  6037.  blt.s .outofpointrot
  6038.  
  6039.  move.w (a3,d7*4),d0
  6040.  sub.w d4,d0
  6041.  move.w d0,d2
  6042.  move.w 2(a3,d7*4),d1
  6043.  sub.w d5,d1
  6044.  muls d6,d2
  6045.  swap d6
  6046.  move.w d1,d3
  6047.  muls d6,d3
  6048.  sub.l d3,d2
  6049.  add.l d2,d2
  6050.  swap d2
  6051.  ext.l d2
  6052.  asl.l #7,d2
  6053.  add.l xwobble,d2
  6054.  move.l d2,(a1,d7*8)
  6055.  
  6056.  muls d6,d0
  6057.  swap d6
  6058.  muls d6,d1
  6059.  add.l d0,d1
  6060.  asl.l #2,d1
  6061.  swap d1
  6062.  ext.l d1
  6063.  divs #3,d1
  6064.  move.l d1,4(a1,d7*8)
  6065.  
  6066.  tst.w d1
  6067.  bgt.s .ptnotbehind
  6068.  tst.w d2
  6069.  bgt.s .onrightsomewhere
  6070.  move.w #0,d2
  6071.  bra .putin
  6072. .onrightsomewhere:
  6073.  move.w RIGHTX,d2
  6074.  bra .putin
  6075. .ptnotbehind:
  6076.  
  6077.  divs d1,d2
  6078.  add.w MIDDLEX,d2
  6079. .putin:
  6080.  move.w d2,(a2,d7*2)
  6081.  
  6082.  bra .pointrotlop
  6083.  
  6084. .outofpointrot:
  6085. ; move.w #$c40,$dff106
  6086. ; move.w #$ff0,$dff180
  6087.  
  6088.  rts
  6089.  
  6090.  
  6091. PLR1_ObjDists
  6092.  ds.w 250
  6093. PLR2_ObjDists
  6094.  ds.w 250
  6095.  
  6096. CalcPLR1InLine:
  6097.  
  6098.  move.w PLR1_sinval,d5
  6099.  move.w PLR1_cosval,d6
  6100.  move.l ObjectData,a4
  6101.  move.l ObjectPoints,a0
  6102.  move.w NumObjectPoints,d7
  6103.  move.l #PLR1_ObsInLine,a2
  6104.  move.l #PLR1_ObjDists,a3
  6105.  
  6106. .objpointrotlop:
  6107.  
  6108.  cmp.b #3,16(a4)
  6109.  beq.s .itaux
  6110.  
  6111.  move.w (a0),d0
  6112.  sub.w PLR1_xoff,d0
  6113.  move.w 4(a0),d1
  6114.  addq #8,a0
  6115.  
  6116.  tst.w 12(a4)
  6117.  blt .noworkout
  6118.  
  6119.  moveq #0,d2
  6120.  move.b 16(a4),d2
  6121.  ;move.l #ColBoxTable,a6
  6122.  ;lea (a6,d2.w*8),a6
  6123.  
  6124.  sub.w PLR1_zoff,d1
  6125.  move.w d0,d2
  6126.  muls d6,d2
  6127.  move.w d1,d3
  6128.  muls d5,d3
  6129.  sub.l d3,d2
  6130.  add.l d2,d2
  6131.  
  6132.  bgt.s .okh
  6133.  neg.l d2
  6134. .okh:
  6135.  swap d2
  6136.  
  6137.  muls d5,d0
  6138.  muls d6,d1
  6139.  add.l d0,d1
  6140.  asl.l #2,d1
  6141.  swap d1
  6142.  moveq #0,d3
  6143.  
  6144.  tst.w d1
  6145.  ble.s .notinline
  6146.  asr.w #1,d2
  6147.  cmp.w #80,d2
  6148.  bgt.s .notinline
  6149.  
  6150.  st d3
  6151. .notinline
  6152.  move.b d3,(a2)+
  6153.  
  6154.  move.w d1,(a3)+
  6155.  
  6156.  add.w #64,a4
  6157.  dbra d7,.objpointrotlop
  6158.  
  6159.  rts
  6160.  
  6161. .itaux:
  6162.  add.w #64,a4
  6163.  bra .objpointrotlop
  6164.  
  6165. .noworkout:
  6166.  move.b #0,(a2)+
  6167.  move.w #0,(a3)+
  6168.  add.w #64,a4
  6169.  dbra d7,.objpointrotlop
  6170.  rts
  6171.  
  6172.  
  6173. CalcPLR2InLine:
  6174.  
  6175.  move.w PLR2_sinval,d5
  6176.  move.w PLR2_cosval,d6
  6177.  move.l ObjectData,a4
  6178.  move.l ObjectPoints,a0
  6179.  move.w NumObjectPoints,d7
  6180.  move.l #PLR2_ObsInLine,a2
  6181.  move.l #PLR2_ObjDists,a3
  6182.  
  6183. .objpointrotlop:
  6184.  
  6185.  cmp.b #3,16(a4)
  6186.  beq.s .itaux
  6187.  
  6188.  move.w (a0),d0
  6189.  sub.w PLR2_xoff,d0
  6190.  move.w 4(a0),d1
  6191.  addq #8,a0
  6192.  
  6193.  tst.w 12(a4)
  6194.  blt .noworkout
  6195.  
  6196.  moveq #0,d2
  6197.  move.b 16(a4),d2
  6198. ; move.l #ColBoxTable,a6
  6199. ; lea (a6,d2.w*8),a6
  6200.  
  6201.  sub.w PLR2_zoff,d1
  6202.  move.w d0,d2
  6203.  muls d6,d2
  6204.  move.w d1,d3
  6205.  muls d5,d3
  6206.  sub.l d3,d2
  6207.  add.l d2,d2
  6208.  
  6209.  bgt.s .okh
  6210.  neg.l d2
  6211. .okh:
  6212.  swap d2
  6213.  
  6214.  muls d5,d0
  6215.  muls d6,d1
  6216.  add.l d0,d1
  6217.  asl.l #2,d1
  6218.  swap d1
  6219.  moveq #0,d3
  6220.  
  6221.  tst.w d1
  6222.  ble.s .notinline
  6223.  asr.w #1,d2
  6224.  cmp.w (a6),d2
  6225.  bgt.s .notinline
  6226.  
  6227.  st d3
  6228. .notinline
  6229.  move.b d3,(a2)+
  6230.  
  6231.  move.w d1,(a3)+
  6232.  
  6233.  add.w #64,a4
  6234.  dbra d7,.objpointrotlop
  6235.  
  6236.  rts
  6237.  
  6238. .itaux:
  6239.  add.w #64,a4
  6240.  bra .objpointrotlop
  6241.  
  6242. .noworkout:
  6243.  move.w #0,(a3)+
  6244.  move.b #0,(a2)+
  6245.  add.w #64,a4
  6246.  dbra d7,.objpointrotlop
  6247.  rts
  6248.  
  6249.  
  6250. RotateObjectPts:
  6251.  
  6252.  move.w sinval,d5
  6253.  move.w cosval,d6
  6254.  
  6255.  move.l ObjectData,a4
  6256.  move.l ObjectPoints,a0
  6257.  move.w NumObjectPoints,d7
  6258.  move.l #ObjRotated,a1
  6259.  
  6260.  tst.b FULLSCR
  6261.  bne BIGOBJPTS
  6262.  
  6263.  
  6264. .objpointrotlop:
  6265.  
  6266.  cmp.b #3,16(a4)
  6267.  beq.s .itaux
  6268.  
  6269.  move.w (a0),d0
  6270.  sub.w xoff,d0
  6271.  move.w 4(a0),d1
  6272.  addq #8,a0
  6273.  
  6274.  tst.w 12(a4)
  6275.  blt .noworkout
  6276.  
  6277.  sub.w zoff,d1
  6278.  
  6279.  move.w d0,d2
  6280.  muls d6,d2
  6281.  move.w d1,d3
  6282.  muls d5,d3
  6283.  sub.l d3,d2
  6284.  
  6285.  
  6286.  add.l d2,d2
  6287.  swap d2
  6288.  move.w d2,(a1)+
  6289.  
  6290.  muls d5,d0
  6291.  muls d6,d1
  6292.  add.l d0,d1
  6293.  asl.l #1,d1
  6294.  swap d1
  6295. ; ext.l d1
  6296. ; divs #3,d1
  6297.  moveq #0,d3
  6298.  
  6299.  move.w d1,(a1)+
  6300.  ext.l d2
  6301.  asl.l #7,d2
  6302.  add.l xwobble,d2
  6303.  move.l d2,(a1)+
  6304.  
  6305.  dbra d7,.objpointrotlop
  6306.  
  6307.  rts
  6308.  
  6309. .itaux:
  6310.  add.w #64,a4
  6311.  bra .objpointrotlop
  6312.  
  6313. .noworkout:
  6314.   move.l #0,(a1)+
  6315.   move.l #0,(a1)+
  6316.   add.w #64,a4
  6317.   dbra d7,.objpointrotlop
  6318.   rts
  6319.   
  6320. BIGOBJPTS:
  6321.  
  6322. .objpointrotlop:
  6323.  
  6324.  cmp.b #3,16(a4)
  6325.  beq.s .itaux
  6326.  
  6327.  move.w (a0),d0
  6328.  sub.w xoff,d0
  6329.  move.w 4(a0),d1
  6330.  addq #8,a0
  6331.  
  6332.  tst.w 12(a4)
  6333.  blt .noworkout
  6334.  
  6335.  sub.w zoff,d1
  6336.  move.w d0,d2
  6337.  muls d6,d2
  6338.  move.w d1,d3
  6339.  muls d5,d3
  6340.  sub.l d3,d2
  6341.  
  6342.  
  6343.  add.l d2,d2
  6344.  swap d2
  6345.  move.w d2,(a1)+
  6346.  
  6347.  muls d5,d0
  6348.  muls d6,d1
  6349.  add.l d0,d1
  6350.  asl.l #2,d1
  6351.  swap d1
  6352.  ext.l d1
  6353.  divs #3,d1
  6354.  moveq #0,d3
  6355.  
  6356.  move.w d1,(a1)+
  6357.  ext.l d2
  6358.  asl.l #7,d2
  6359.  add.l xwobble,d2
  6360.  move.l d2,(a1)+
  6361.  sub.l xwobble,d2
  6362.  
  6363.  add.w #64,a4
  6364.  dbra d7,.objpointrotlop
  6365.  
  6366.  rts
  6367.  
  6368. .itaux:
  6369.  add.w #64,a4
  6370.  bra .objpointrotlop
  6371.  
  6372. .noworkout:
  6373.   move.l #0,(a1)+
  6374.   move.l #0,(a1)+
  6375.   add.w #64,a4
  6376.   dbra d7,.objpointrotlop
  6377.   rts
  6378.  
  6379. LightDraw:
  6380.  
  6381.  move.w (a0)+,d0
  6382.  move.w (a0)+,d1
  6383.  move.l #Rotated,a1
  6384.  move.w 6(a1,d0.w*8),d2
  6385.  ble.s oneendbehind
  6386.  move.w 6(a1,d1.w*8),d3
  6387.  bgt.s bothendsinfront
  6388.  
  6389. oneendbehind:
  6390.  rts
  6391. bothendsinfront:
  6392.  
  6393.  move.l #OnScreen,a2
  6394.  move.w (a2,d0.w*2),d0
  6395.  bge.s okleftend
  6396.  moveq #0,d0
  6397. okleftend:
  6398.  move.w (a2,d1.w*2),d1
  6399.  bgt.s somevis
  6400.  rts
  6401. somevis:
  6402.  cmp.w RIGHTX,d0
  6403.  blt.s somevis2
  6404.  rts
  6405. somevis2:
  6406.  cmp.w RIGHTX,d1
  6407.  blt.s okrightend
  6408.  move.w RIGHTX,d1
  6409.  subq #1,d1
  6410. okrightend:
  6411.  
  6412.  sub.w d0,d1
  6413.  blt.s wrongbloodywayround
  6414.  move.l TexturePal,a4
  6415.  move.l #objintocop,a1
  6416.  lea (a1,d0.w*2),a1
  6417.  
  6418.  move.l frompt,a3
  6419.  move.w #104*4,d6
  6420.  move.w #79,d2
  6421. lacross:
  6422.  move.w d2,d3
  6423.  move.l a3,a2
  6424.  adda.w (a1)+,a2
  6425. ldown:
  6426.  add.w d6,a2
  6427.  move.w (a2),d7
  6428.  move.w (a4,d7.w*2),(a2)
  6429.  dbra d3,ldown
  6430.  dbra d1,lacross
  6431.  
  6432. wrongbloodywayround:
  6433.  
  6434.  rts
  6435.  
  6436. FaceToPlace: dc.w 0
  6437.  
  6438. Cheese:
  6439.  dc.w 4,15
  6440.  
  6441. FacesList:
  6442.  dc.w 0,4*4
  6443.  dc.w 1,2*4
  6444.  dc.w 0,2*4
  6445.  dc.w 2,2*4
  6446.  dc.w 0,2*4
  6447.  dc.w 1,3*4
  6448.  dc.w 0,2*4
  6449.  dc.w 2,3*4
  6450.  dc.w 0,5*4
  6451.  dc.w 1,2*4
  6452.  dc.w 0,2*4
  6453.  dc.w 2,2*4
  6454.  dc.w 0,2*4
  6455.  dc.w 1,2*4
  6456.  dc.w 0,2*4
  6457.  dc.w 2,3*4
  6458.  dc.w 0,1*4
  6459.  dc.w 1,3*4
  6460.  dc.w 0,1*4
  6461.  dc.w 2,3*4
  6462.  dc.w 0,1*4
  6463.  
  6464. EndOfFacesList:
  6465.  
  6466. FacesPtr:
  6467.  dc.l FacesList
  6468. FacesCounter:
  6469.  dc.w 0
  6470. Expression:
  6471.  dc.w 0
  6472.  
  6473.  
  6474. Energy:
  6475.  dc.w 191
  6476. OldEnergy:
  6477.  dc.w 191
  6478. Ammo: dc.w 63
  6479. OldAmmo: dc.w 63
  6480.  
  6481. FullEnergy:
  6482. ; move.w #127,Energy
  6483. ; move.w #127,OldEnergy
  6484. ; move.l #health,a0
  6485. ; move.l #borders,a1
  6486. ; add.l #25*8*2+6,a1
  6487. ; lea 2592(a1),a2
  6488. ; move.w #127,d0
  6489. ;PutInFull:
  6490. ; move.b (a0)+,(a1)
  6491. ; move.b (a0)+,8(a1)
  6492. ; add.w #16,a1
  6493. ; move.b (a0)+,(a2)
  6494. ; move.b (a0)+,8(a2)
  6495. ; add.w #16,a2
  6496. ; dbra d0,PutInFull
  6497.  
  6498.  rts
  6499.  
  6500. ;EnergyBar:
  6501.  
  6502.  move.w Energy,d0
  6503.  bgt.s .noeneg
  6504.  move.w #0,d0
  6505. .noeneg:
  6506.  move.w d0,Energy
  6507.  
  6508.  cmp.w OldEnergy,d0
  6509.  bne.s gottochange
  6510.  
  6511. NoChange
  6512.  rts
  6513.  
  6514. gottochange:
  6515.   
  6516.  blt LessEnergy
  6517.  cmp.w #127,Energy
  6518.  blt.s NotMax
  6519.  move.w #127,Energy
  6520. NotMax:
  6521.  
  6522.  move.w Energy,d0
  6523.  move.w OldEnergy,d2
  6524.  sub.w d0,d2
  6525.  beq.s NoChange    
  6526.  neg.w d2
  6527.  
  6528.  move.w #127,d3
  6529.  sub.w d0,d3
  6530.  
  6531.  move.l #health,a0
  6532.  lea (a0,d3.w*4),a0
  6533. ; move.l #borders+25*16+6,a1
  6534.  lsl.w #4,d3
  6535.  add.w d3,a1
  6536.  lea 2592(a1),a2
  6537.  
  6538. EnergyRise:
  6539.  move.b (a0)+,(a1)
  6540.  move.b (a0)+,8(a1)
  6541.  add.w #16,a1
  6542.  move.b (a0)+,(a2)
  6543.  move.b (a0)+,8(a2)
  6544.  add.w #16,a2
  6545.  subq #1,d2
  6546.  bgt.s EnergyRise
  6547.  
  6548.  move.w Energy,OldEnergy
  6549.  
  6550.  rts 
  6551.  
  6552. LessEnergy: 
  6553.  move.w OldEnergy,d2
  6554.  sub.w d0,d2
  6555.  
  6556.  move.w #127,d3
  6557.  sub.w OldEnergy,d3
  6558.  
  6559. ; move.l #borders+25*16+6,a1
  6560.  asl.w #4,d3
  6561.  add.w d3,a1
  6562.  lea 2592(a1),a2
  6563.  
  6564. EnergyDrain:
  6565.  move.b #0,(a1)
  6566.  move.b #0,8(a1)
  6567.  move.b #0,(a2)
  6568.  move.b #0,8(a2)
  6569.  add.w #16,a1
  6570.  add.w #16,a2
  6571.  subq #1,d2
  6572.  bgt.s EnergyDrain
  6573.  
  6574.  move.w Energy,OldEnergy
  6575.  
  6576.  rts 
  6577.  
  6578. firstdigit: dc.b 0
  6579. secdigit: dc.b 0
  6580. thirddigit: dc.b 0
  6581.  
  6582.  even
  6583.  
  6584. gunny: dc.w 0
  6585.  
  6586. AmmoBar:
  6587.  
  6588. * Do guns first.
  6589.  
  6590.  move.l #borderchars,a4
  6591.  move.b p1_gunselected,d0 
  6592.  move.l #PLAYERONEGUNS,a5
  6593.  cmp.b #'s',mors
  6594.  bne.s .notplr2
  6595.  move.l #PLAYERTWOGUNS,a5
  6596.  move.b p2_gunselected,d0
  6597. .notplr2:
  6598.  
  6599.  move.b d0,gunny
  6600.  
  6601.  move.w #9,d2
  6602.  moveq #0,d0
  6603. putingunnums:
  6604.  move.w #4,d1
  6605.  move.l a4,a0
  6606.  cmp.b gunny,d0
  6607.  bne.s .notsel
  6608.  add.l #5*10*8*2,a0
  6609.  addq #2,a5
  6610.  bra.s .donesel
  6611. .notsel:
  6612.  tst.w (a5)+
  6613.  beq.s .donesel
  6614.  add.l #5*10*8,a0
  6615. .donesel:
  6616.  move.l SCRNDRAWPT,a1
  6617.  add.w d0,a1
  6618.  add.l #3+(240*40),a1
  6619.  bsr DRAWDIGIT
  6620.  addq #1,d0
  6621.  dbra d2,putingunnums
  6622.  
  6623.  move.w Ammo,d0
  6624.  ext.l d0
  6625.  divs #10,d0
  6626.  swap d0
  6627.  move.b d0,thirddigit
  6628.  swap d0
  6629.  ext.l d0
  6630.  divs #10,d0
  6631.  move.b d0,firstdigit
  6632.  swap d0
  6633.  move.b d0,secdigit
  6634.  
  6635.  move.l #borderchars+15*8*10,a0
  6636.  cmp.w #10,Ammo
  6637.  blt.s .notsmallamo
  6638.  add.l #7*8*10,a0
  6639. .notsmallamo:
  6640.  
  6641.  move.l SCRNDRAWPT,a1
  6642.  add.l #20+238*40,a1
  6643.  move.b firstdigit,d0
  6644.  move.w #6,d1
  6645.  bsr DRAWDIGIT
  6646.  
  6647.  move.l SCRNDRAWPT,a1
  6648.  add.l #21+238*40,a1
  6649.  move.b secdigit,d0
  6650.  move.w #6,d1
  6651.  bsr DRAWDIGIT
  6652.  
  6653.  move.l SCRNDRAWPT,a1
  6654.  add.l #22+238*40,a1
  6655.  move.b thirddigit,d0
  6656.  move.w #6,d1
  6657.  bsr DRAWDIGIT
  6658.  
  6659.  rts
  6660.  
  6661. EnergyBar:
  6662.  move.w Energy,d0
  6663.  bge.s .okpo
  6664.  moveq #0,d0 
  6665. .okpo:
  6666.  
  6667.  ext.l d0
  6668.  divs #10,d0
  6669.  swap d0
  6670.  move.b d0,thirddigit
  6671.  swap d0
  6672.  ext.l d0
  6673.  divs #10,d0
  6674.  move.b d0,firstdigit
  6675.  swap d0
  6676.  move.b d0,secdigit
  6677.  
  6678.  move.l #borderchars+15*8*10,a0
  6679.  cmp.w #10,Energy
  6680.  blt.s .notsmallamo
  6681.  add.l #7*8*10,a0
  6682. .notsmallamo:
  6683.  
  6684.  move.l SCRNDRAWPT,a1
  6685.  add.l #34+238*40,a1
  6686.  move.b firstdigit,d0
  6687.  move.w #6,d1
  6688.  bsr DRAWDIGIT
  6689.  
  6690.  move.l SCRNDRAWPT,a1
  6691.  add.l #35+238*40,a1
  6692.  move.b secdigit,d0
  6693.  move.w #6,d1
  6694.  bsr DRAWDIGIT
  6695.  
  6696.  move.l SCRNDRAWPT,a1
  6697.  add.l #36+238*40,a1
  6698.  move.b thirddigit,d0
  6699.  move.w #6,d1
  6700.  bsr DRAWDIGIT
  6701.  
  6702.  move.l SCRNSHOWPT,a1
  6703.  add.l #34+238*40,a1
  6704.  move.b firstdigit,d0
  6705.  move.w #6,d1
  6706.  bsr DRAWDIGIT
  6707.  
  6708.  move.l SCRNSHOWPT,a1
  6709.  add.l #35+238*40,a1
  6710.  move.b secdigit,d0
  6711.  move.w #6,d1
  6712.  bsr DRAWDIGIT
  6713.  
  6714.  move.l SCRNSHOWPT,a1
  6715.  add.l #36+238*40,a1
  6716.  move.b thirddigit,d0
  6717.  move.w #6,d1
  6718.  bsr DRAWDIGIT
  6719.  
  6720.  
  6721.  rts
  6722.  
  6723.  
  6724. DRAWDIGIT:
  6725.  ext.w d0
  6726.  lea (a0,d0.w),a2
  6727. charlines:
  6728.  lea 30720(a1),a3 
  6729.  move.b (a2),(a1)
  6730.  move.b 10(a2),10240(a1)
  6731.  move.b 20(a2),20480(a1)
  6732.  move.b 30(a2),(a3)
  6733.  move.b 40(a2),10240(a3)
  6734.  move.b 50(a2),20480(a3)
  6735.  lea 30720(a3),a3
  6736.  move.b 60(a2),(a3)
  6737.  move.b 70(a2),10240(a3)
  6738.  
  6739.  add.w #10*8,a2
  6740.  add.w #40,a1
  6741.  dbra d1,charlines
  6742.  
  6743.  rts
  6744.  
  6745. borderchars: incbin "ab3:includes/bordercharsRAW"
  6746.  
  6747. NARRATOR:
  6748.  
  6749. ; sub.w #1,NARRTIME
  6750. ; bge .NOCHARYET
  6751. ; move.w #3,NARRTIME
  6752.  
  6753.  move.l #SCROLLSCRN,d1
  6754.  move.w d1,scroll
  6755.  swap d1
  6756.  move.w d1,scrolh
  6757.  
  6758.  move.w SCROLLTIMER,d0
  6759.  subq #1,d0
  6760.  move.w d0,SCROLLTIMER
  6761.  cmp.w #40,d0
  6762.  bge .NOCHARYET
  6763.  tst.w d0
  6764.  bge.s .okcha
  6765.  
  6766.  move.w #150,SCROLLTIMER
  6767.  bra .NOCHARYET
  6768.  
  6769. .okcha:
  6770.  
  6771.  move.l #SCROLLSCRN,a0
  6772.  add.w SCROLLXPOS,a0
  6773.  
  6774.  moveq #1,d7
  6775. .doachar: 
  6776.  
  6777.  move.l SCROLLPOINTER,a1
  6778.  moveq #0,d1
  6779.  move.b (a1)+,d1    ; character
  6780.  move.l a1,d2
  6781.  cmp.l ENDSCROLL,d2
  6782.  blt.s .notrestartscroll
  6783.  move.l #BLANKSCROLL,a1
  6784.  move.l #BLANKSCROLL+80,ENDSCROLL
  6785. .notrestartscroll
  6786.  move.l a1,SCROLLPOINTER
  6787.  
  6788.  move.l #SCROLLCHARS,a1
  6789.  asl.w #3,d1
  6790.  add.w d1,a1
  6791.  
  6792.  move.b (a1)+,(a0)
  6793.  move.b (a1)+,80(a0)
  6794.  move.b (a1)+,80*2(a0)
  6795.  move.b (a1)+,80*3(a0)
  6796.  move.b (a1)+,80*4(a0)
  6797.  move.b (a1)+,80*5(a0)
  6798.  move.b (a1)+,80*6(a0)
  6799.  move.b (a1)+,80*7(a0)
  6800.  
  6801.  addq #1,a0
  6802.  dbra d7,.doachar
  6803.  
  6804.  move.w SCROLLXPOS,d0
  6805.  addq #2,d0
  6806.  move.w d0,SCROLLXPOS
  6807.  cmp.w #80,d0
  6808.  blt .NOCHARYET
  6809.  move.w #0,SCROLLXPOS
  6810.  
  6811. .NOCHARYET:
  6812.  rts
  6813.  
  6814. ; cmp.w OldAmmo,d0
  6815. ; bne.s .gottochange
  6816.  
  6817. NARRTIME: dc.w 5
  6818.  
  6819. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6820.  
  6821. .NoChange
  6822.  rts
  6823.  
  6824. .gottochange:
  6825.   
  6826.  blt LessAmmo
  6827.  cmp.w #63,Ammo
  6828.  blt.s .NotMax
  6829.  move.w #63,Ammo
  6830. .NotMax:
  6831.  
  6832.  move.w Ammo,d0
  6833.  move.w OldAmmo,d2
  6834.  sub.w d0,d2
  6835.  beq.s .NoChange
  6836.  neg.w d2
  6837.  
  6838.  move.w #63,d3
  6839.  sub.w d0,d3
  6840.  
  6841.  move.l #Ammunition,a0
  6842.  lea (a0,d3.w*8),a0
  6843. ; move.l #borders+5184+25*16+1,a1
  6844.  lsl.w #5,d3
  6845.  add.w d3,a1
  6846.  lea 2592(a1),a2
  6847.  
  6848. AmmoRise:
  6849.  move.b (a0)+,(a1)
  6850.  move.b (a0)+,8(a1)
  6851.  add.w #16,a1
  6852.  move.b (a0)+,(a2)
  6853.  move.b (a0)+,8(a2)
  6854.  add.w #16,a2
  6855.  move.b (a0)+,(a1)
  6856.  move.b (a0)+,8(a1)
  6857.  add.w #16,a1
  6858.  move.b (a0)+,(a2)
  6859.  move.b (a0)+,8(a2)
  6860.  add.w #16,a2
  6861.  subq #1,d2
  6862.  bgt.s AmmoRise
  6863.  
  6864.  move.w Ammo,OldAmmo
  6865.  
  6866.  rts 
  6867.  
  6868.  
  6869. LessAmmo: 
  6870.  move.w OldAmmo,d2
  6871.  sub.w d0,d2
  6872.  
  6873.  move.w #63,d3
  6874.  sub.w OldAmmo,d3
  6875.  
  6876. ; move.l #borders++5184+25*16+1,a1
  6877.  asl.w #5,d3
  6878.  add.w d3,a1
  6879.  lea 2592(a1),a2
  6880.  
  6881. AmmoDrain:
  6882.  move.b #0,(a1)
  6883.  move.b #0,8(a1)
  6884.  move.b #0,(a2)
  6885.  move.b #0,8(a2)
  6886.  add.w #16,a1
  6887.  add.w #16,a2
  6888.  move.b #0,(a1)
  6889.  move.b #0,8(a1)
  6890.  move.b #0,(a2)
  6891.  move.b #0,8(a2)
  6892.  add.w #16,a1
  6893.  add.w #16,a2
  6894.  subq #1,d2
  6895.  bgt.s AmmoDrain
  6896.  
  6897.  move.w Ammo,OldAmmo
  6898.  
  6899.  rts 
  6900.  
  6901. nulop:
  6902.  move.w #$0010,$dff000+intreq
  6903.  rte
  6904.  
  6905. doanything: dc.w 0
  6906.  
  6907. end:
  6908. ;     _break #0
  6909.  
  6910.  move.l #$dff000,a6
  6911.  move.w #$f,$dff000+dmacon
  6912. waitfortop22:
  6913.  btst.b #0,intreqrl(a6)
  6914.  beq waitfortop22
  6915. waitfortop222:
  6916.  btst.b #0,intreqrl(a6)
  6917.  beq waitfortop222
  6918.  
  6919.  clr.b dosounds
  6920.  clr.b doanything
  6921.  
  6922.  move.w PLAYERONEHEALTH,Energy
  6923.  cmp.b #'s',mors
  6924.  bne.s .notsl
  6925.  move.w PLAYERTWOHEALTH,Energy
  6926. .notsl:
  6927.  
  6928.  move.l drawpt,d0
  6929.  move.l olddrawpt,drawpt
  6930.  move.l d0,olddrawpt
  6931.  
  6932. ; cmp.b #'b',Prefsfile+3
  6933. ; bne.s .noback
  6934. ; jsr mt_end
  6935. ;.noback
  6936.  
  6937.  tst.w Energy
  6938.  bgt.s wevewon
  6939.  move.w #0,Energy
  6940.  bsr EnergyBar
  6941.  
  6942.  move.l #gameover,mt_data
  6943.  st UseAllChannels
  6944.  clr.b reachedend
  6945.  jsr mt_init
  6946. playgameover:
  6947.  move.l #$dff000,a6
  6948. waitfortop2:
  6949.  
  6950.     
  6951.  btst.b #0,intreqrl(a6)
  6952.  beq waitfortop2
  6953.  move.w #$1,intreq(a6)
  6954.  
  6955.     
  6956.  jsr mt_music
  6957.  
  6958.  
  6959.     
  6960.  tst.b reachedend
  6961.  beq.s playgameover
  6962.  
  6963.  bra wevelost
  6964.  
  6965.  
  6966. wevewon:
  6967.  
  6968.  move.w #$f,$dff000+dmacon
  6969.  
  6970.  bsr EnergyBar
  6971.  
  6972.  cmp.b #'n',mors
  6973.  bne.s .nonextlev
  6974.  add.w #1,MAXLEVEL
  6975.  st FINISHEDLEVEL
  6976.  
  6977.  cmp.w #16,MAXLEVEL
  6978.  bne .nonextlev
  6979.  
  6980.  jmp ENDGAMESCROLL
  6981. .nonextlev:
  6982.  
  6983.  move.l #welldone,mt_data
  6984.  st UseAllChannels
  6985.  clr.b reachedend
  6986.  
  6987.  jsr mt_init
  6988. playwelldone:
  6989.  move.l #$dff000,a6
  6990. waitfortop3:
  6991.  btst.b #0,intreqrl(a6)
  6992.  beq waitfortop3
  6993.  move.w #$1,intreq(a6)
  6994.  
  6995.  jsr mt_music
  6996.  
  6997.  tst.b reachedend
  6998.  beq.s playwelldone
  6999.  
  7000. wevelost:
  7001.  
  7002.  PROTICHECK a0
  7003.  
  7004.  jmp closeeverything 
  7005.  
  7006. endnomusic
  7007.  clr.b doanything
  7008.  
  7009.  
  7010. ; cmp.b #'b',Prefsfile+3
  7011. ; bne.s .noback
  7012. ; jsr mt_end
  7013. ;.noback
  7014. *******************************
  7015. ; cmp.b #'n',mors
  7016. ; bne.s .nonextlev
  7017. ; cmp.w #15,MAXLEVEL
  7018. ; bge.s .nonextlev
  7019. ; add.w #1,MAXLEVEL
  7020. ; st FINISHEDLEVEL
  7021. ;.nonextlev:
  7022. ******************************
  7023.  
  7024.  jmp closeeverything
  7025.  
  7026. do32:
  7027.  move.w #31,d7
  7028.  move.w #$180,d1
  7029. across:
  7030.  move.w d1,(a1)+
  7031.  move.w d1,(a3)+
  7032.  move.w #0,(a1)+ 
  7033.  move.w #0,(a3)+
  7034.  add.w #2,d1
  7035.  dbra d7,across
  7036.  rts
  7037.  
  7038. ;string:
  7039. ;    dc.b    'credits',0
  7040.  
  7041. ENDGAMESCROLL:
  7042.  
  7043.  move.w #$fff,MIXCOLL
  7044.  
  7045.  move.w #$1cc1,BOTOFTXT
  7046.  
  7047.  jsr CLRTWEENSCRN
  7048.  
  7049.  move.l #TEXTCOP,$dff080
  7050.  
  7051.  move.l #ENDGAMETEXTy,a0
  7052.  
  7053.  
  7054. SCROLLUP16LINES:
  7055.  
  7056.  move.w #15,d0
  7057.  
  7058. do16
  7059.  move.l #$dff000,a6
  7060.  
  7061.  move.w #0,d6
  7062.  move.w #7,d7
  7063.  
  7064.  move.l #SCROLLSHADES,a5
  7065.  
  7066. fadeupp:
  7067.  
  7068.  move.w (a5,d6.w*2),TOPCOLL
  7069.  move.w (a5,d7.w*2),TXTCOLL
  7070.  
  7071.  
  7072. .wtup
  7073.  btst #5,intreqrl(a6)
  7074.  beq.s .wtup
  7075.  move.w #$20,intreq(a6)
  7076.  
  7077.  add.w #1,d6
  7078.  sub.w #1,d7
  7079.  bne fadeupp
  7080.  
  7081. .wtup2
  7082.  btst #5,intreqrl(a6)
  7083.  beq.s .wtup2
  7084.  move.w #$20,intreq(a6)
  7085.  
  7086.  move.w #0,TOPCOLL
  7087.  move.w #$fff,TXTCOLL
  7088.  
  7089.  WB
  7090.  
  7091.  move.l TEXTSCRN,d1
  7092.  move.l d1,bltdpt(a6)
  7093.  add.l #80,d1
  7094.  move.l d1,bltapt(a6)
  7095.  move.w #$09f0,bltcon0(a6)
  7096.  move.w #$0,bltcon1(a6)
  7097.  move.w #0,bltdmod(a6)
  7098.  move.w #0,bltamod(a6)
  7099.  move.l #-1,bltafwm(a6)
  7100.  
  7101.  move.w #255*64+40,bltsize(a6)
  7102.  
  7103.  WB
  7104.  
  7105.  dbra d0,do16
  7106.  
  7107.  move.l TEXTSCRN,a1
  7108.  move.w #15,d0
  7109.  jsr DRAWLINEOFTEXT
  7110.  
  7111.  add.l #82,a0
  7112.  cmp.l #ENDENDGAMETEXT,a0
  7113.  blt SCROLLUP16LINES
  7114.  
  7115.  move.l #ENDGAMETEXTy,a0
  7116.  bra SCROLLUP16LINES
  7117.  
  7118. SCROLLSHADES:
  7119.  dc.w 0
  7120.  dc.w $333
  7121.  dc.w $666
  7122.  dc.w $888
  7123.  dc.w $aaa
  7124.  dc.w $ccc
  7125.  dc.w $ddd
  7126.  dc.w $eee
  7127.  
  7128. ENDGAMETEXTy:
  7129. ;          12345678901234567890123456789012345678901234567890123456789012345678901234567890
  7130.  dc.b 0,0,"                                                                                "
  7131.  dc.b 0,1,"As the beast and its four servants die, a breathless silence falls, broken      "
  7132.  dc.b 0,1,"only by the hammering of my own heart in my chest.                              "
  7133.  dc.b 0,1,"I run to the now open exit, and out into the maze of corridors through which I  "
  7134.  dc.b 0,1,"came. I encounter many, many aliens, lying twitching on the ground, or utterly  "
  7135.  dc.b 0,1,"still with glazed eyes and green froth drying on their lips. Many seem to have  "
  7136.  dc.b 0,1,"turned their weapons on themselves, unable to bear either the pain or the       "
  7137.  dc.b 0,1,"sudden silence in their minds.                                                  "
  7138.  dc.b 0,0,"                                                                                "
  7139.  dc.b 0,1,"It takes me several hours to locate a working teleport to take me back aboard   "
  7140.  dc.b 0,1,"the orbiting alien ship. The scene there is the same; hordes of aliens, either  "
  7141.  dc.b 0,1,"dead or catatonic, I cannot tell.                                               "
  7142.  dc.b 0,1,"I walk slowly, exhausted, back to the INDOMITABLE, averting my eyes from the    "
  7143.  dc.b 0,1,"pitiful scenes around me. I know that my work is not finished yet.              "
  7144.  dc.b 0,1,"Once aboard, I make my way to the bridge. I manage to restart the main power    "
  7145.  dc.b 0,1,"generators and get basic navigation back on-line. Working from the memories     "
  7146.  dc.b 0,1,"implanted by the dying marine, I painstakingly program the computer to deal     "
  7147.  dc.b 0,1,"the killing blow to the enemy. At last the task is finished. The ship hums into "
  7148.  dc.b 0,1,"life, accellerating slowly out of orbit, towing the massive alien craft and     "
  7149.  dc.b 0,1,"its mindless cargo behind it.                                                   "
  7150.  dc.b 0,1,"As the image of the alien sun grows in the viewscreen, I think about what I     "
  7151.  dc.b 0,1,"have seen. Fragments of technology, stolen from civilisations - how long ago?   "
  7152.  dc.b 0,1,"How long since they were exterminated by these parasites? And how many more     "
  7153.  dc.b 0,1,"if they are allowed to continue?                                                "
  7154.  dc.b 0,1,"The sun looms hideously large before me, seeming at the last moment to slip to  "
  7155.  dc.b 0,1,"one side as the cruiser slingshots itself through the immense gravity well,     "
  7156.  dc.b 0,1,"its speed doubling and doubling again. The ship shudders and groans as the      "
  7157.  dc.b 0,1,"ponderous mass of the alien ship tries to tear itself free. I feel a distant    "
  7158.  dc.b 0,1,"twinge of curiosity as to whether it will succeed.                              "
  7159.  dc.b 0,1,"The navigation computer chatters quietly to itself as it makes tiny             "
  7160.  dc.b 0,1,"course corrections, bringing the payload to bear on its target. I only sit,     "
  7161.  dc.b 0,1,"watching blankly as we hurtle back towards the planet. The navicom beeps        "
  7162.  dc.b 0,1,"quietly to signal the blowing of the explosive bolts holding the docking ring.  "
  7163.  dc.b 0,1,"So great is our speed that the alien ship does not receed, but simply vanishes  "
  7164.  dc.b 0,1,"from sight, tracked only on the readouts of the computers in front of me.       "
  7165.  dc.b 0,1,"One readout in particular occupies my attention. Red numbers spin towards zero  "
  7166.  dc.b 0,1,"as my invisible agent of destruction spins towards oblivion. Three digits, now  "
  7167.  dc.b 0,1,"two, and now only one. I shift my attention to the image of the alien world,    "
  7168.  dc.b 0,1,"receeding behind my ship.                                                       "
  7169.  dc.b 0,0,"                                                                                "
  7170.  dc.b 0,1,"Three...                                                                        "
  7171.  dc.b 0,0,"                                                                                "
  7172.  dc.b 0,1,"Two...                                                                          "
  7173.  dc.b 0,0,"                                                                                "
  7174.  dc.b 0,1,"One...                                                                          "
  7175.  dc.b 0,0,"                                                                                "
  7176.  dc.b 0,1,"Zero.                                                                           "
  7177.  dc.b 0,0,"                                                                                "
  7178.  dc.b 0,0,"                                                                                "
  7179.  dc.b 0,0,"                                                                                "
  7180.  dc.b 0,0,"                                                                                "
  7181.  dc.b 0,1,"Travelling at nearly a quarter of the speed of light, the alien ship smashed    "
  7182.  dc.b 0,1,"into the planet, flashing past the useless orbital defences which should have   "
  7183.  dc.b 0,1,"neutralized it millions of miles earlier. It passed through the twenty miles    "
  7184.  dc.b 0,1,"of atmosphere in a little more than one ten-thousandth of a second. The air     "
  7185.  dc.b 0,1,"directly beneath had no time to be pushed out of the way, and in another        "
  7186.  dc.b 0,1,"tenth of a second it was a molecule-thick layer a thousand miles below the      "
  7187.  dc.b 0,1,"planet's surface.                                                               "
  7188.  dc.b 0,1,"Such was the heat and pressure caused by the impact, that part of the molten    "
  7189.  dc.b 0,1,"core of the planet underwent nuclear fusion, vapourising thousands of billions  "
  7190.  dc.b 0,1,"of tonnes of surrounding material. This expanding superhot plasma cloud forced  "
  7191.  dc.b 0,1,"its way up through the mantle and crust, fracturing the surface of the planet,  "
  7192.  dc.b 0,1,"blowing continent-sized chunks into space and heating the tortured atmosphere   "
  7193.  dc.b 0,1,"to ignition point. Within two minutes of impact, the doomed planet was a        "
  7194.  dc.b 0,1,"misshapen, incandescent ball, with burning fragments spinning deceptively       "
  7195.  dc.b 0,1,"slowly in their brief orbits before re-impacting with fantastic, majestic       "
  7196.  dc.b 0,1,"force.                                                                          "
  7197.  dc.b 0,0,"                                                                                "
  7198.  dc.b 0,0,"                                                                                "
  7199.  dc.b 0,0,"                                                                                "
  7200.  dc.b 0,0,"                                                                                "
  7201.  dc.b 0,1,"In a matter of weeks, the small amount of matter which had undergone fusion     "
  7202.  dc.b 0,1,"burned itself out, but the planet still glowed sullenly from a million cracks   "
  7203.  dc.b 0,1,"and holes in the crust, as it would continue to do for millions of years to     "
  7204.  dc.b 0,1,"come. The world was barren and dead, and the creatures who once roamed its      "
  7205.  dc.b 0,1,"surface no more than a memory in the mind of one man, sleeping dreamlessly      "
  7206.  dc.b 0,1,"as the invisible speck of his ship sped silently on, towards home.              "
  7207.  dc.b 0,0,"                                                                                "
  7208.  dc.b 0,0,"                                                                                "
  7209.  dc.b 0,0,"                                                                                "
  7210.  dc.b 0,0,"                                                                                "
  7211.  dc.b 0,0,"                                                                                "
  7212.  dc.b 0,0,"                                                                                "
  7213.  dc.b 0,0,"                                                                                "
  7214.  dc.b 0,0,"                                                                                "
  7215.  dc.b 0,0,"                                                                                "
  7216.  dc.b 0,0,"                                                                                "
  7217.  dc.b 0,0,"                                                                                "
  7218.  dc.b 0,0,"                                                                                "
  7219.  dc.b 0,0,"                                                                                "
  7220.  dc.b 0,0,"                                                                                "
  7221.  dc.b 0,0,"                                                                                "
  7222.  dc.b 0,0,"                                                                                "
  7223.  dc.b 0,1,"ALIEN BREED 3D II                                                               "
  7224.  dc.b 0,1,"THE KILLING GROUNDS                                                             "
  7225.  dc.b 0,0,"                                                                                "
  7226.  dc.b 0,0,"                                                                                "
  7227.  dc.b 0,1,"A Team 17 Game                                                                  "
  7228.  dc.b 0,0,"                                                                                "
  7229.  dc.b 0,1,"Produced in association with OCEAN Software                                     "
  7230.  dc.b 0,0,"                                                                                "
  7231.  dc.b 0,0,"                                                                                "
  7232.  dc.b 0,1,"Game Design, Game Code, Editor Code and In-Game Text                            "
  7233.  dc.b 0,0,"                                                                                "
  7234.  dc.b 0,1,"Andrew Clitheroe                                                                "
  7235.  dc.b 0,0,"                                                                                "
  7236.  dc.b 0,0,"                                                                                "
  7237.  dc.b 0,1,"Graphics                                                                        "
  7238.  dc.b 0,0,"                                                                                "
  7239.  dc.b 0,1,"Michael Green                                                                   "
  7240.  dc.b 0,0,"                                                                                "
  7241.  dc.b 0,0,"                                                                                "
  7242.  dc.b 0,1,"3D Object Designs, 3D Editors, Serial and OS code                               "
  7243.  dc.b 0,0,"                                                                                "
  7244.  dc.b 0,1,"Charles Blessing                                                                "
  7245.  dc.b 0,0,"                                                                                "
  7246.  dc.b 0,0,"                                                                                "
  7247.  dc.b 0,1,"Music                                                                           "
  7248.  dc.b 0,0,"                                                                                "
  7249.  dc.b 0,1,"Ben Chanter                                                                     "
  7250.  dc.b 0,0,"                                                                                "
  7251.  dc.b 0,0,"                                                                                "
  7252.  dc.b 0,1,"Project Manager                                                                 "
  7253.  dc.b 0,0,"                                                                                "
  7254.  dc.b 0,1,"Phil Quirke-Webster                                                             "
  7255.  dc.b 0,0,"                                                                                "
  7256.  dc.b 0,0,"                                                                                "
  7257.  dc.b 0,1,"Playtesting                                                                     "
  7258.  dc.b 0,0,"                                                                                "
  7259.  dc.b 0,1,"Phil and the Wolves                                                             "
  7260.  dc.b 0,0,"                                                                                "
  7261.  dc.b 0,0,"                                                                                "
  7262.  dc.b 0,1,"Additional Graphics                                                             "
  7263.  dc.b 0,0,"                                                                                "
  7264.  dc.b 0,1,"Pete Lyons                                                                      "
  7265.  dc.b 0,0,"                                                                                "
  7266.  dc.b 0,0,"                                                                                "
  7267.  
  7268.  
  7269. ENDENDGAMETEXT:
  7270.  
  7271.  
  7272. ;
  7273. ;    move.l    4.w,a6
  7274. ;    move.l    #string,d1
  7275. ;    moveq    #0,d2
  7276. ;    moveq    #0,d3
  7277. ;    jsr    _LVOExecute(a6)
  7278.  
  7279. ; include "endscroll.s"
  7280.  
  7281. ***********************************
  7282.  include "ab3:source_4000/CD32JOY"
  7283.  
  7284.  
  7285.  
  7286. *************************************
  7287. * Set left and right clip values
  7288. *************************************
  7289.  
  7290.  
  7291.  
  7292. NEWsetlclip:
  7293.  move.l #OnScreen,a1
  7294.  move.l #Rotated,a2
  7295.  move.l CONNECT_TABLE,a3
  7296.  move.l Points,a4
  7297.  
  7298.  move.w (a0),d0
  7299.  bge.s .notignoreleft
  7300.  
  7301. ; move.l #0,(a6)
  7302.  
  7303.  bra .leftnotoktoclip
  7304. .notignoreleft:
  7305.  
  7306.  move.w 6(a2,d0*8),d3    ; left z val
  7307.  bgt.s .leftclipinfront
  7308.  addq #2,a0
  7309.  rts
  7310.  
  7311.  tst.w 6(a2,d0*8)
  7312.  bgt.s .leftnotoktoclip
  7313. .ignoreboth:
  7314. ; move.l #0,(a6)
  7315. ; move.l #96*65536,4(a6)
  7316.  move.w #0,leftclip
  7317.  move.w RIGHTX,rightclip
  7318.  addq #8,a6
  7319.  addq #2,a0
  7320.  rts
  7321.  
  7322. .leftclipinfront:
  7323.  move.w (a1,d0*2),d1    ; left x on screen
  7324.  move.w (a0),d2
  7325.  move.w 2(a3,d2.w*4),d2
  7326.  move.w (a1,d2.w*2),d2
  7327.  cmp.w d1,d2
  7328.  bgt.s .leftnotoktoclip
  7329.  
  7330.  
  7331. *************************************
  7332.  
  7333. ; move.w 2(a3,d0.w*4),d6
  7334. ; move.w (a4,d0.w*4),d2
  7335. ; move.w 2(a4,d0.w*4),d3
  7336. ; move.w (a4,d6.w*4),d4
  7337. ; move.w 2(a4,d6.w*4),d5
  7338. ;
  7339. ; sub.w d2,d4    ;dx
  7340. ; sub.w d3,d5    ;dz
  7341. ; move.w xoff,d0
  7342. ; move.w zoff,d6
  7343. ; sub.w d2,d0
  7344. ; sub.w d3,d6
  7345. ; muls d0,d4
  7346. ; muls d6,d5
  7347. ; add.l d4,d5
  7348. ; bge.s .leftnotoktoclip
  7349.  
  7350. *************************************
  7351.  
  7352.  
  7353.  
  7354. ; move.w d1,(a6)
  7355. ; move.w d3,2(a6)
  7356.  cmp.w leftclip,d1
  7357.  ble.s .leftnotoktoclip
  7358.  move.w d1,leftclip
  7359. .leftnotoktoclip:
  7360.  
  7361.  addq #2,a0
  7362.  
  7363.  rts
  7364.  
  7365. NEWsetrclip
  7366.  move.l #OnScreen,a1
  7367.  move.l #Rotated,a2
  7368.  move.l CONNECT_TABLE,a3
  7369.  move.w (a0),d0
  7370.  bge.s .notignoreright
  7371. ; move.w #96,4(a6)
  7372. ; move.w #0,6(a6)
  7373.  move.w #0,d4
  7374.  bra .rightnotoktoclip
  7375. .notignoreright:
  7376.  move.w 6(a2,d0*8),d4    ; right z val
  7377.  bgt.s .rightclipinfront
  7378. ; move.w #96,4(a6)
  7379. ; move.w #0,6(a6)
  7380.  bra.s .rightnotoktoclip
  7381.  
  7382. .rightclipinfront:
  7383.  move.w (a1,d0*2),d1    ; right x on screen
  7384.  move.w (a0),d2
  7385.  move.w (a3,d2.w*4),d2
  7386.  move.w (a1,d2.w*2),d2
  7387.  cmp.w d1,d2
  7388.  blt.s .rightnotoktoclip
  7389. ; move.w d1,4(a6)
  7390. ; move.w d4,6(a6)
  7391.  
  7392.  
  7393. *************************************
  7394.  
  7395. ; move.w (a3,d0.w*4),d6
  7396. ; move.w (a4,d0.w*4),d2
  7397. ; move.w 2(a4,d0.w*4),d3
  7398. ; move.w (a4,d6.w*4),d4
  7399. ; move.w 2(a4,d6.w*4),d5
  7400. ;
  7401. ; sub.w d2,d4    ;dx
  7402. ; sub.w d3,d5    ;dz
  7403. ; move.w xoff,d0
  7404. ; move.w zoff,d6
  7405. ; sub.w d2,d0
  7406. ; sub.w d3,d6
  7407. ; muls d0,d4
  7408. ; muls d6,d5
  7409. ; add.l d4,d5
  7410. ; ble.s .rightnotoktoclip
  7411.  
  7412. *************************************
  7413.  
  7414.  
  7415.  
  7416.  cmp.w rightclip,d1
  7417.  bge.s .rightnotoktoclip
  7418.  addq #1,d1
  7419.  move.w d1,rightclip
  7420. .rightnotoktoclip:
  7421.  addq #8,a6
  7422.  addq #2,a0
  7423.  rts
  7424.  
  7425. FIRSTsetlrclip:
  7426.  move.l #OnScreen,a1
  7427.  move.l #Rotated,a2
  7428.  
  7429.  move.w (a0)+,d0
  7430.  bge.s .notignoreleft
  7431.  bra .leftnotoktoclip
  7432. .notignoreleft:
  7433.  
  7434.  move.w 6(a2,d0*8),d3    ; left z val
  7435.  bgt.s .leftclipinfront
  7436.  
  7437.  move.w (a0),d0
  7438.  blt.s .ignoreboth
  7439.  tst.w 6(a2,d0*8)
  7440.  bgt.s .leftnotoktoclip
  7441. .ignoreboth
  7442.  move.w RIGHTX,rightclip
  7443.  move.w #0,leftclip
  7444.  addq #2,a0
  7445.  rts
  7446.  
  7447. .leftclipinfront:
  7448.  move.w (a1,d0*2),d1    ; left x on screen
  7449.  cmp.w leftclip,d1
  7450.  ble.s .leftnotoktoclip
  7451.  move.w d1,leftclip
  7452. .leftnotoktoclip:
  7453.  
  7454.  move.w (a0)+,d0
  7455.  bge.s .notignoreright
  7456.  move.w #0,d4
  7457.  bra .rightnotoktoclip
  7458. .notignoreright:
  7459.  move.w 6(a2,d0*8),d4    ; right z val
  7460.  ble.s .rightnotoktoclip
  7461.  
  7462. .rightclipinfront:
  7463.  move.w (a1,d0*2),d1    ; right x on screen
  7464.  addq #1,d1
  7465.  cmp.w rightclip,d1
  7466.  bge.s .rightnotoktoclip
  7467.  move.w d1,rightclip
  7468. .rightnotoktoclip:
  7469.  
  7470. ; move.w leftclip,d0
  7471. ; move.w rightclip,d1
  7472. ; cmp.w d0,d1
  7473. ; bge.s .noswap
  7474. ; move.w #192,rightclip
  7475. ; move.w #0,leftclip
  7476. ;.noswap:
  7477.  
  7478.  rts
  7479.  
  7480.  
  7481. leftclip2: dc.w 0
  7482. rightclip2: dc.w 0
  7483. ZoneBright: dc.w 0
  7484.  
  7485. npolys: dc.w 0
  7486.  
  7487. PLR1_fire: dc.b 0
  7488. PLR2_fire: dc.b 0
  7489.  
  7490. *****************************************************
  7491.  
  7492.  
  7493. pastdata:
  7494. ***********************************
  7495. * This routine animates brightnesses.
  7496.  
  7497.  
  7498. liftpt: dc.l liftanimtab
  7499.  
  7500. brightpt:
  7501.  dc.l brightanimtab
  7502.  
  7503.  
  7504. liftanim:
  7505.  rts
  7506.  
  7507. ******************************
  7508.  include "ab3:source_4000/ObjectMove"
  7509.  include "ab3:source_4000/newAnims"
  7510.  include "ab3:source_4000/airoutine.s"
  7511. ******************************
  7512. startpass:
  7513. ; include "ab3:source_4000/password_reloc.s"
  7514. endpass:
  7515.  
  7516. rotanimpt: dc.w 0
  7517. xradd: dc.w 5
  7518. yradd: dc.w 8
  7519. xrpos: dc.w 320
  7520. yrpos: dc.w 320
  7521.  
  7522. rotanim:
  7523.  rts
  7524.  
  7525. option:
  7526.  dc.l 0,0
  7527.  
  7528. ********** WALL STUFF *******************************
  7529.  
  7530.  include "AB3:source_4000/hireswall.s"
  7531.  include "AB3:source_4000/hiresgourwall.s"
  7532.  
  7533. *****************************************************
  7534.  
  7535. ******************************************
  7536. * floor polygon
  7537.  
  7538. numsidestd: dc.w 0
  7539. bottomline: dc.w 0
  7540.  
  7541. checkforwater:
  7542.  tst.b usewater
  7543.  beq.s .notwater
  7544.  
  7545.  move.l Roompt,a1
  7546.  move.w (a1),d7
  7547.  cmp.w currzone,d7
  7548.  bne.s .notwater
  7549.  
  7550.  move.b #$f,fillscrnwater
  7551.  
  7552. .notwater:
  7553.  move.w (a0)+,d6    ; sides-1
  7554.  add.w d6,d6
  7555.  add.w d6,a0
  7556.  add.w #4+6,a0
  7557.  rts
  7558.  
  7559.  rts
  7560.  
  7561. ;NewCornerBuff:
  7562. ; ds.l 100
  7563. CLRNOFLOOR: dc.w 0
  7564.  
  7565. itsafloordraw:
  7566.  
  7567. * If D0 =1 then its a floor otherwise (=2) it's
  7568. * a roof.
  7569.  
  7570.  move.w #0,above
  7571.  move.w (a0)+,d6    ; ypos of poly
  7572.  
  7573.  tst.b usewater
  7574.  beq.s .oknon
  7575.  tst.b DOANYWATER
  7576.  beq dontdrawreturn
  7577. .oknon
  7578.  
  7579.  move.w d6,d7
  7580.  ext.l d7
  7581.  asl.l #6,d7
  7582.  cmp.l TOPOFROOM,d7
  7583.  blt checkforwater
  7584.  cmp.l BOTOFROOM,d7
  7585.  bgt.s dontdrawreturn
  7586.  
  7587.  move.w leftclip,d7
  7588.  cmp.w rightclip,d7
  7589.  bge.s dontdrawreturn
  7590.  
  7591.  sub.w flooryoff,d6
  7592.  bgt.s below
  7593.  blt.s aboveplayer
  7594.  
  7595.  tst.b usewater
  7596.  beq.s .notwater
  7597.  
  7598.  move.l Roompt,a1
  7599.  move.w (a1),d7
  7600.  cmp.w currzone,d7
  7601.  
  7602.  bne.s .notwater
  7603.  
  7604.  st fillscrnwater
  7605.  
  7606. .notwater:
  7607.  
  7608.  
  7609. dontdrawreturn:
  7610.  move.w (a0)+,d6    ; sides-1
  7611.  add.w d6,d6
  7612.  add.w d6,a0
  7613.  add.w #4+6,a0
  7614.  rts
  7615. aboveplayer:
  7616.  
  7617.  tst.b usewater
  7618.  beq.s .notwater
  7619.  
  7620.  move.l Roompt,a1
  7621.  move.w (a1),d7
  7622.  cmp.w currzone,d7
  7623.  bne.s .notwater
  7624.  
  7625.  move.b #$f,fillscrnwater
  7626.  
  7627. .notwater:
  7628.  
  7629.  btst #1,d0
  7630.  beq.s dontdrawreturn
  7631.  move.w MIDDLEY,d7
  7632.  sub.w topclip,d7 
  7633.  ble.s dontdrawreturn
  7634.  move.w #1,d0
  7635.  move.w d0,above
  7636.  neg.w d6
  7637.  bra.s notbelow
  7638. below:
  7639.  move.w botclip,d7
  7640.  sub.w MIDDLEY,d7
  7641.  ble.s dontdrawreturn
  7642. notbelow:
  7643.  btst #0,d0
  7644.  beq.s dontdrawreturn
  7645.  move.w d6,distaddr
  7646.  muls #64,d6
  7647.  move.l d6,ypos
  7648.  ext.l d7
  7649.  divs.l d7,d6        ; zpos of bottom
  7650.             ; visible line
  7651.  
  7652.  beq dontdrawreturn
  7653.  
  7654.  cmp.l #32767,d6
  7655.  bgt dontdrawreturn
  7656.             
  7657.  move.w d6,minz
  7658.  move.w d7,bottomline
  7659.  
  7660. ; Go round each point finding out
  7661. ; if it should be visible or not.
  7662.  
  7663.  move.l a0,-(a7)
  7664.  
  7665.  move.w (a0)+,d7    ; number of sides
  7666.  move.l #Rotated,a1
  7667.  move.l #OnScreen,a2
  7668. ; move.l #NewCornerBuff,a3
  7669.  moveq #0,d4
  7670.  moveq #0,d5
  7671.  moveq #0,d6
  7672.  clr.b anyclipping
  7673.  
  7674. cornerprocessloop:
  7675.  
  7676.  move.w (a0)+,d0
  7677.  and.w #$fff,d0
  7678.  move.w 6(a1,d0.w*8),d1
  7679.  ble  .canttell
  7680.  
  7681.  move.w (a2,d0.w*2),d3
  7682.  cmp.w leftclip,d3
  7683.  bgt.s .nol
  7684.  st d4
  7685.  st anyclipping
  7686.  bra.s .nos
  7687. .nol:
  7688.  cmp.w rightclip,d3
  7689.  blt.s .nor
  7690.  st d6
  7691.  st anyclipping
  7692.  bra.s .nos
  7693. .nor:
  7694.  st d5
  7695. .nos:
  7696.  bra .cantell
  7697.  
  7698. .canttell:
  7699.  st d5
  7700.  st anyclipping
  7701.  
  7702. .cantell:
  7703.  
  7704.  
  7705.  dbra d7,cornerprocessloop
  7706.  
  7707.  
  7708.  move.l (a7)+,a0
  7709.  tst.b d5
  7710.  bne.s somefloortodraw
  7711.  eor.b d4,d6
  7712.  bne dontdrawreturn
  7713.  
  7714. somefloortodraw:
  7715.  
  7716.  tst.b gourfloor
  7717.  bne goursides
  7718.  
  7719.  move.w #300,top
  7720.  move.w #-1,bottom
  7721.  move.w #0,drawit
  7722.  move.l #Rotated,a1
  7723.  move.l #OnScreen,a2
  7724.  move.w (a0)+,d7    ; no of sides
  7725. sideloop:
  7726.  move.w minz,d6
  7727.  move.w (a0)+,d1
  7728.  move.w (a0),d3
  7729.  and.w #$fff,d1
  7730.  and.w #$fff,d3
  7731.  
  7732.  move.w 6(a1,d1*8),d4    ;first z
  7733.  cmp.w d6,d4
  7734.  bgt firstinfront
  7735.  move.w 6(a1,d3*8),d5    ; sec z
  7736.  cmp.w d6,d5
  7737.  ble bothbehind
  7738. ** line must be on left and partially behind.
  7739.  sub.w d5,d4
  7740.  move.l (a1,d1*8),d0
  7741.  sub.l (a1,d3*8),d0
  7742.  asr.l #7,d0
  7743.  sub.w d5,d6
  7744.  muls d6,d0    ; new x coord
  7745.  divs d4,d0
  7746.  ext.l d0
  7747.  asl.l #7,d0
  7748.  
  7749.  add.l (a1,d3*8),d0
  7750.  move.w minz,d4
  7751.  move.w (a2,d3*2),d2
  7752.  divs d4,d0
  7753.  add.w MIDDLEX,d0
  7754.  move.l ypos,d3
  7755.  divs d5,d3
  7756.  move.w bottomline,d1 
  7757.  bra lineclipped
  7758.  
  7759. firstinfront:
  7760.  move.w 6(a1,d3*8),d5    ; sec z
  7761.  cmp.w d6,d5
  7762.  bgt bothinfront
  7763. ** line must be on right and partially behind.
  7764.  sub.w d4,d5    ; dz
  7765.  move.l (a1,d3*8),d2
  7766.  sub.l (a1,d1*8),d2    ; dx
  7767.  sub.w d4,d6
  7768.  asr.l #7,d2
  7769.  muls d6,d2    ; new x coord
  7770.  divs d5,d2
  7771.  ext.l d2
  7772.  asl.l #7,d2
  7773.  add.l (a1,d1*8),d2
  7774.  move.w minz,d5
  7775.  move.w (a2,d1*2),d0
  7776.  divs d5,d2
  7777.  add.w MIDDLEX,d2
  7778.  move.l ypos,d1
  7779.  divs d4,d1
  7780.  move.w bottomline,d3 
  7781.  bra lineclipped
  7782.  
  7783. bothinfront:
  7784.  
  7785. * Also, usefully enough, both are on-screen
  7786. * so no bottom clipping is needed.
  7787.  
  7788.  move.w (a2,d1*2),d0    ; first x
  7789.  move.w (a2,d3*2),d2    ; second x
  7790.  move.l ypos,d1
  7791.  move.l d1,d3
  7792.  divs d4,d1        ; first y
  7793.  divs d5,d3        ; second y
  7794. lineclipped:
  7795.  move.l #rightsidetab,a3
  7796.  cmp.w d1,d3
  7797.  beq lineflat
  7798.  st drawit
  7799.  bgt lineonright
  7800.  move.l #leftsidetab,a3
  7801.  exg d1,d3
  7802.  exg d0,d2
  7803.  
  7804.  lea (a3,d1*2),a3
  7805.  
  7806.  cmp.w top(pc),d1
  7807.  bge.s .nonewtop
  7808.  move.w d1,top
  7809. .nonewtop:
  7810.  cmp.w bottom(pc),d3
  7811.  ble.s .nonewbot
  7812.  move.w d3,bottom
  7813. .nonewbot:
  7814.  
  7815.  sub.w d1,d3    ; dy
  7816.  sub.w d0,d2    ; dx
  7817.  
  7818.  blt .linegoingleft
  7819.  
  7820.  ext.l d2
  7821.  divs d3,d2
  7822.  move.w d2,d6
  7823.  swap d2
  7824.  
  7825. ; moveq #0,d6
  7826. ; sub.w d3,d2
  7827. ; blt.s .noco
  7828. ;.makeco
  7829. ; addq #1,d6
  7830. ; sub.w d3,d2
  7831. ; bge.s .makeco
  7832. ;.noco
  7833. ; add.w d3,d2
  7834.  
  7835.  move.w d3,d4
  7836.  move.w d3,d5
  7837.  subq #1,d5
  7838.  move.w d6,d1
  7839.  addq #1,d1
  7840.  
  7841. .pixlopright:
  7842.  move.w d0,(a3)+
  7843.  sub.w d2,d4
  7844.  bge.s .nobigstep
  7845.  add.w d1,d0
  7846.  add.w d3,d4
  7847.  dbra d5,.pixlopright
  7848.  bra lineflat
  7849. .nobigstep
  7850.  add.w d6,d0
  7851.  dbra d5,.pixlopright
  7852.  bra lineflat
  7853.  
  7854. .linegoingleft:
  7855.  
  7856.  neg.w d2
  7857.  
  7858.  ext.l d2
  7859.  divs d3,d2
  7860.  move.w d2,d6
  7861.  swap d2
  7862.  
  7863.  
  7864. ; moveq #0,d6
  7865. ; sub.w d3,d2
  7866. ; blt.s .nocol
  7867. ;.makecol
  7868. ; addq #1,d6
  7869. ; sub.w d3,d2
  7870. ; bge.s .makecol
  7871. ;.nocol
  7872. ; add.w d3,d2
  7873.  
  7874.  
  7875.  
  7876.  move.w d3,d4
  7877.  move.w d3,d5
  7878.  subq #1,d5
  7879.  
  7880.  move.w d6,d1
  7881.  addq #1,d1
  7882.  
  7883. .pixlopleft:
  7884.  sub.w d2,d4
  7885.  bge.s .nobigstepl
  7886.  sub.w d1,d0
  7887.  add.w d3,d4
  7888.  move.w d0,(a3)+
  7889.  dbra d5,.pixlopleft
  7890.  bra lineflat
  7891.  
  7892. .nobigstepl
  7893.  sub.w d6,d0
  7894.  move.w d0,(a3)+
  7895.  dbra d5,.pixlopleft
  7896.  bra lineflat
  7897.  
  7898. lineonright:
  7899.  
  7900.  lea (a3,d1*2),a3
  7901.  
  7902.  cmp.w top(pc),d1
  7903.  bge.s .nonewtop
  7904.  move.w d1,top
  7905. .nonewtop:
  7906.  cmp.w bottom(pc),d3
  7907.  ble.s .nonewbot
  7908.  move.w d3,bottom
  7909. .nonewbot:
  7910.  
  7911.  sub.w d1,d3    ; dy
  7912.  sub.w d0,d2    ; dx
  7913.  blt .linegoingleft
  7914. ; addq #1,d0
  7915.  ext.l d2
  7916.  divs d3,d2
  7917.  move.w d2,d6
  7918.  swap d2
  7919.  
  7920. ; moveq #0,d6
  7921. ; sub.w d3,d2
  7922. ; blt.s .noco
  7923. ;.makeco
  7924. ; addq #1,d6
  7925. ; sub.w d3,d2
  7926. ; bge.s .makeco
  7927. ;.noco
  7928. ; add.w d3,d2
  7929.  
  7930.  move.w d3,d4
  7931.  move.w d3,d5
  7932.  subq #1,d5
  7933.  move.w d6,d1
  7934.  addq #1,d1
  7935.  
  7936. .pixlopright:
  7937.  sub.w d2,d4
  7938.  bge.s .nobigstep
  7939.  add.w d1,d0
  7940.  add.w d3,d4
  7941.  move.w d0,(a3)+
  7942.  dbra d5,.pixlopright
  7943.  bra lineflat
  7944.  
  7945. .nobigstep
  7946.  add.w d6,d0
  7947.  move.w d0,(a3)+
  7948.  dbra d5,.pixlopright
  7949.  bra lineflat
  7950.  
  7951. .linegoingleft:
  7952. ; addq #1,d0
  7953.  neg.w d2
  7954.  
  7955.  ext.l d2
  7956.  divs d3,d2
  7957.  move.w d2,d6
  7958.  swap d2
  7959.  
  7960.  
  7961. ; moveq #0,d6
  7962. ; sub.w d3,d2
  7963. ; blt.s .nocol
  7964. ;.makecol
  7965. ; addq #1,d6
  7966. ; sub.w d3,d2
  7967. ; bge.s .makecol
  7968. ;.nocol
  7969. ; add.w d3,d2
  7970.  
  7971.  move.w d3,d4
  7972.  move.w d3,d5
  7973.  subq #1,d5
  7974.  move.w d6,d1
  7975.  addq #1,d1
  7976.  
  7977. .pixlopleft:
  7978.  move.w d0,(a3)+
  7979.  sub.w d2,d4
  7980.  bge.s .nobigstepl
  7981.  sub.w d1,d0
  7982.  add.w d3,d4
  7983.  dbra d5,.pixlopleft
  7984.  bra lineflat
  7985.  
  7986. .nobigstepl
  7987.  sub.w d6,d0
  7988.  dbra d5,.pixlopleft
  7989.  
  7990. lineflat:
  7991.  
  7992. bothbehind:
  7993.  dbra d7,sideloop
  7994.  bra pastsides
  7995.  
  7996. fbr: dc.w 0
  7997. sbr: dc.w 0
  7998. FloorPtBrights: dc.l 0
  7999.  
  8000. goursides:
  8001.  
  8002.  move.w #300,top
  8003.  move.w #-1,bottom
  8004.  move.w #0,drawit
  8005.  move.l #Rotated,a1
  8006.  move.l #OnScreen,a2
  8007.  move.w (a0)+,d7    ; no of sides
  8008. sideloopGOUR:
  8009.  move.w minz,d6
  8010.  move.w (a0)+,d1
  8011.  move.w (a0),d3
  8012.  
  8013.  move.w d1,d4
  8014.  move.w d3,d5
  8015.  and.w #$0fff,d1
  8016.  and.w #$0fff,d3
  8017.  
  8018.  rol.w #4,d4
  8019.  rol.w #4,d5
  8020.  and.w #$f,d4
  8021.  and.w #$f,d5
  8022.  
  8023.  move.l FloorPtBrights,a4
  8024.  move.w (a4,d4.w*8),d4
  8025.  bge.s .okpos1
  8026.  neg.w d4
  8027. .okpos1:
  8028.  sub.w #300,d4
  8029.  move.w d4,fbr
  8030.  move.w (a4,d5.w*8),d4
  8031.  bge.s .okpos2
  8032.  neg.w d4
  8033. .okpos2:
  8034.  sub.w #300,d4
  8035.  move.w d4,sbr
  8036.  
  8037.  move.w 6(a1,d1*8),d4    ;first z
  8038.  cmp.w d6,d4
  8039.  bgt firstinfrontGOUR
  8040.  move.w 6(a1,d3*8),d5    ; sec z
  8041.  cmp.w d6,d5
  8042.  ble bothbehindGOUR
  8043. ** line must be on left and partially behind.
  8044.  sub.w d5,d4
  8045.  
  8046.  move.w fbr,d0
  8047.  sub.w sbr,d0
  8048.  sub.w d5,d6
  8049.  muls d6,d0
  8050.  divs d4,d0
  8051.  add.w sbr,d0
  8052.  move.w d0,fbr
  8053.  
  8054.  move.l (a1,d1*8),d0
  8055.  sub.l (a1,d3*8),d0
  8056.  asr.l #7,d0
  8057.  muls d6,d0    ; new x coord
  8058.  divs d4,d0
  8059.  ext.l d0
  8060.  asl.l #7,d0
  8061.  
  8062.  add.l (a1,d3*8),d0
  8063.  move.w minz,d4
  8064.  move.w (a2,d3*2),d2
  8065.  divs d4,d0
  8066.  add.w MIDDLEX,d0
  8067.  move.l ypos,d3
  8068.  divs d5,d3
  8069.  
  8070.  move.w bottomline,d1 
  8071.  bra lineclippedGOUR
  8072.  
  8073. firstinfrontGOUR:
  8074.  move.w 6(a1,d3*8),d5    ; sec z
  8075.  cmp.w d6,d5
  8076.  bgt bothinfrontGOUR
  8077. ** line must be on right and partially behind.
  8078.  sub.w d4,d5    ; dz
  8079.  
  8080.  move.w sbr,d2
  8081.  sub.w fbr,d2
  8082.  sub.w d4,d6
  8083.  muls d6,d2
  8084.  divs d5,d2
  8085.  add.w fbr,d2
  8086.  move.w d2,sbr
  8087.  
  8088.  move.l (a1,d3*8),d2
  8089.  sub.l (a1,d1*8),d2    ; dx
  8090.  asr.l #7,d2
  8091.  muls d6,d2    ; new x coord
  8092.  divs d5,d2
  8093.  ext.l d2
  8094.  asl.l #7,d2
  8095.  add.l (a1,d1*8),d2
  8096.  move.w minz,d5
  8097.  move.w (a2,d1*2),d0
  8098.  divs d5,d2
  8099.  add.w MIDDLEX,d2
  8100.  move.l ypos,d1
  8101.  divs d4,d1
  8102.  move.w bottomline,d3 
  8103.  bra lineclippedGOUR
  8104.  
  8105. bothinfrontGOUR:
  8106.  
  8107. * Also, usefully enough, both are on-screen
  8108. * so no bottom clipping is needed.
  8109.  
  8110.  move.w (a2,d1*2),d0    ; first x
  8111.  move.w (a2,d3*2),d2    ; second x
  8112.  move.l ypos,d1
  8113.  move.l d1,d3
  8114.  divs d4,d1        ; first y
  8115.  divs d5,d3        ; second y
  8116. lineclippedGOUR:
  8117.  move.l #rightsidetab,a3
  8118.  cmp.w d1,d3
  8119.  bne linenotflatGOUR
  8120.  
  8121. ; move.w fbr,d4
  8122. ; move.w sbr,d5
  8123. ; cmp.w d0,d2
  8124. ; bgt.s .nsw
  8125. ; exg d4,d5
  8126. ;.nsw:
  8127.  
  8128. ; move.l #leftbrighttab,a3
  8129. ; move.w d4,(a3,d3.w)
  8130. ; move.l #rightbrighttab,a3
  8131. ; move.w d5,(a3,d3.w) 
  8132.  bra lineflatGOUR
  8133.  
  8134. linenotflatGOUR
  8135.  st drawit
  8136.  bgt lineonrightGOUR
  8137.  move.l #leftsidetab,a3
  8138.  exg d1,d3
  8139.  exg d0,d2
  8140.  
  8141.  lea (a3,d1*2),a3
  8142.  lea leftbrighttab-leftsidetab(a3),a4
  8143.  
  8144.  cmp.w top(pc),d1
  8145.  bge.s .nonewtop
  8146.  move.w d1,top
  8147. .nonewtop:
  8148.  cmp.w bottom(pc),d3
  8149.  ble.s .nonewbot
  8150.  move.w d3,bottom
  8151. .nonewbot:
  8152.  
  8153.  sub.w d1,d3    ; dy
  8154.  sub.w d0,d2    ; dx
  8155.  
  8156.  blt .linegoingleft
  8157.  
  8158.  ext.l d2
  8159.  divs d3,d2
  8160.  move.w d2,d6
  8161.  swap d2
  8162.  move.w d2,a5
  8163.  
  8164. ; moveq #0,d6
  8165. ; sub.w d3,d2
  8166. ; blt.s .noco
  8167. ;.makeco
  8168. ; addq #1,d6
  8169. ; sub.w d3,d2
  8170. ; bge.s .makeco
  8171. ;.noco
  8172. ; add.w d3,d2
  8173.  
  8174.  move.w d3,d4
  8175.  move.w d3,d5
  8176.  subq #1,d5
  8177.  move.w d6,d1
  8178.  addq #1,d1
  8179.  move.w d1,a6
  8180.  
  8181.  moveq #0,d1
  8182.  move.w sbr,d1
  8183.  move.w fbr,d2
  8184.  sub.w d1,d2
  8185.  ext.l d2
  8186.  asl.w #8,d2
  8187.  asl.w #2,d2
  8188.  divs d3,d2 
  8189.  ext.l d2
  8190.  asl.l #6,d2
  8191.  swap d1
  8192.  
  8193. .pixlopright:
  8194.  move.w d0,(a3)+
  8195.  swap d1
  8196.  move.w d1,(a4)+
  8197.  swap d1
  8198.  add.l d2,d1
  8199.  
  8200.  sub.w a5,d4
  8201.  bge.s .nobigstep
  8202.  add.w a6,d0
  8203.  add.w d3,d4
  8204.  dbra d5,.pixlopright
  8205.  bra lineflatGOUR
  8206. .nobigstep
  8207.  
  8208.  add.w d6,d0
  8209.  dbra d5,.pixlopright
  8210.  bra lineflatGOUR
  8211.  
  8212. .linegoingleft:
  8213.  
  8214.  neg.w d2
  8215.  
  8216.  ext.l d2
  8217.  divs d3,d2
  8218.  move.w d2,d6
  8219.  swap d2
  8220.  
  8221.  
  8222. ; moveq #0,d6
  8223. ; sub.w d3,d2
  8224. ; blt.s .nocol
  8225. ;.makecol
  8226. ; addq #1,d6
  8227. ; sub.w d3,d2
  8228. ; bge.s .makecol
  8229. ;.nocol
  8230. ; add.w d3,d2
  8231.  
  8232.  move.w d3,d4
  8233.  move.w d3,d5
  8234.  subq #1,d5
  8235.  
  8236.  move.w d6,d1
  8237.  addq #1,d1
  8238.  move.w d1,a6
  8239.  move.w d2,a5
  8240.  
  8241.  moveq #0,d1
  8242.  move.w sbr,d1
  8243.  move.w fbr,d2
  8244.  sub.w d1,d2
  8245.  ext.l d2
  8246.  asl.w #8,d2
  8247.  asl.w #2,d2
  8248.  divs d3,d2 
  8249.  ext.l d2
  8250.  asl.l #6,d2
  8251.  swap d1
  8252.  
  8253. .pixlopleft:
  8254.  
  8255.  swap d1
  8256.  move.w d1,(a4)+
  8257.  swap d1
  8258.  add.l d2,d1
  8259.  
  8260.  sub.w a5,d4
  8261.  bge.s .nobigstepl
  8262.  sub.w a6,d0
  8263.  add.w d3,d4
  8264.  move.w d0,(a3)+
  8265.  dbra d5,.pixlopleft
  8266.  bra lineflatGOUR
  8267.  
  8268. .nobigstepl
  8269.  sub.w d6,d0
  8270.  move.w d0,(a3)+
  8271.  dbra d5,.pixlopleft
  8272.  bra lineflatGOUR
  8273.  
  8274. lineonrightGOUR:
  8275.  
  8276.  lea (a3,d1*2),a3
  8277.  
  8278.  lea rightbrighttab-rightsidetab(a3),a4
  8279.  
  8280.  cmp.w top(pc),d1
  8281.  bge.s .nonewtop
  8282.  move.w d1,top
  8283. .nonewtop:
  8284.  cmp.w bottom(pc),d3
  8285.  ble.s .nonewbot
  8286.  move.w d3,bottom
  8287. .nonewbot:
  8288.  
  8289.  sub.w d1,d3    ; dy
  8290.  sub.w d0,d2    ; dx
  8291.  blt .linegoingleft
  8292. ; addq #1,d0
  8293.  ext.l d2
  8294.  divs d3,d2
  8295.  move.w d2,d6
  8296.  swap d2
  8297.  
  8298. ; moveq #0,d6
  8299. ; sub.w d3,d2
  8300. ; blt.s .noco
  8301. ;.makeco
  8302. ; addq #1,d6
  8303. ; sub.w d3,d2
  8304. ; bge.s .makeco
  8305. ;.noco
  8306. ; add.w d3,d2
  8307.  
  8308.  move.w d3,d4
  8309.  move.w d3,d5
  8310.  subq #1,d5
  8311.  move.w d6,d1
  8312.  addq #1,d1
  8313.  
  8314.  move.w d1,a6
  8315.  move.w d2,a5
  8316.  
  8317.  moveq #0,d1
  8318.  move.w fbr,d1
  8319.  move.w sbr,d2
  8320.  sub.w d1,d2
  8321.  ext.l d2
  8322.  asl.w #8,d2
  8323.  asl.w #2,d2
  8324.  divs d3,d2 
  8325.  ext.l d2
  8326.  asl.l #6,d2
  8327.  swap d1
  8328.  
  8329. .pixlopright:
  8330.  
  8331.  swap d1
  8332.  move.w d1,(a4)+
  8333.  swap d1
  8334.  add.l d2,d1
  8335.  
  8336.  sub.w a5,d4
  8337.  bge.s .nobigstep
  8338.  add.w a6,d0
  8339.  add.w d3,d4
  8340.  move.w d0,(a3)+
  8341.  dbra d5,.pixlopright
  8342.  bra lineflatGOUR
  8343.  
  8344. .nobigstep
  8345.  add.w d6,d0
  8346.  move.w d0,(a3)+
  8347.  dbra d5,.pixlopright
  8348.  bra lineflatGOUR
  8349.  
  8350. .linegoingleft:
  8351. ; addq #1,d0
  8352.  neg.w d2
  8353.  
  8354.  ext.l d2
  8355.  divs d3,d2
  8356.  move.w d2,d6
  8357.  swap d2
  8358.  
  8359.  
  8360. ; moveq #0,d6
  8361. ; sub.w d3,d2
  8362. ; blt.s .nocol
  8363. ;.makecol
  8364. ; addq #1,d6
  8365. ; sub.w d3,d2
  8366. ; bge.s .makecol
  8367. ;.nocol
  8368. ; add.w d3,d2
  8369.  
  8370.  move.w d3,d4
  8371.  move.w d3,d5
  8372.  subq #1,d5
  8373.  move.w d6,d1
  8374.  addq #1,d1
  8375.  move.w d1,a6
  8376.  move.w d2,a5
  8377.  
  8378.  moveq #0,d1
  8379.  move.w fbr,d1
  8380.  move.w sbr,d2
  8381.  sub.w d1,d2
  8382.  ext.l d2
  8383.  asl.w #8,d2
  8384.  asl.w #2,d2
  8385.  divs d3,d2 
  8386.  ext.l d2
  8387.  asl.l #6,d2
  8388.  swap d1
  8389.  
  8390. .pixlopleft:
  8391.  
  8392.  swap d1
  8393.  move.w d1,(a4)+
  8394.  swap d1
  8395.  add.l d2,d1
  8396.  
  8397.  move.w d0,(a3)+
  8398.  sub.w a5,d4
  8399.  bge.s .nobigstepl
  8400.  sub.w a6,d0
  8401.  add.w d3,d4
  8402.  dbra d5,.pixlopleft
  8403.  bra lineflatGOUR
  8404.  
  8405. .nobigstepl
  8406.  sub.w d6,d0
  8407.  dbra d5,.pixlopleft
  8408.  
  8409. lineflatGOUR:
  8410.  
  8411. bothbehindGOUR:
  8412.  dbra d7,sideloopGOUR
  8413.  
  8414. pastsides:
  8415.  
  8416.  addq #2,a0
  8417.  
  8418.  move.w #320,linedir
  8419.  
  8420. ; move.l FASTBUFFER2,a6
  8421. ; add.l BIGMIDDLEY,a6
  8422. ; move.l a6,REFPTR
  8423.  
  8424.  move.l FASTBUFFER,a6
  8425.  add.l BIGMIDDLEY,a6
  8426.  move.w (a0)+,d6
  8427.  add.w SMALLIT,d6
  8428.  move.w d6,scaleval
  8429.  move.w (a0)+,d6
  8430.  
  8431.  ifne CHEESEY
  8432.  move.w d6,d7    ; 000000XX000000YY
  8433.  lsr.w #6,d6
  8434.  add.w d6,d7    ; 000000XX0000XXYY
  8435.  
  8436.  and.b #%111,d6    ; 000000XX00000XYY
  8437.  add.b d7,d7    ; 000000XX0000XYY0
  8438.  asl.w #4,d7    ; 00XX0000 XYY00000
  8439.  and.w #%0010000011100000,d7
  8440.  move.w d7,d6
  8441.  endc
  8442.  
  8443.  move.w d6,whichtile
  8444.  move.w (a0)+,d6
  8445.  add.w ZoneBright,d6
  8446.  move.w d6,lighttype
  8447.  move.w above(pc),d6
  8448.  beq groundfloor
  8449. * on ceiling:
  8450.  move.w #-320,linedir
  8451.  suba.w #320,a6
  8452. groundfloor:
  8453.  
  8454.  move.w xoff,d6
  8455.  move.w zoff,d7
  8456.  add.w xwobxoff,d7
  8457.  add.w xwobzoff,d6
  8458.  ext.l d6
  8459.  ext.l d7
  8460.  
  8461.  tst.b FULLSCR
  8462.  beq.s .shiftit
  8463.  
  8464.  asl.l #2,d6
  8465.  asl.l #2,d7
  8466.  divs #3,d6
  8467.  divs #3,d7
  8468.  swap d6
  8469.  swap d7
  8470.  clr.w d6
  8471.  clr.w d7
  8472.  asr.l #2,d6
  8473.  asr.l #2,d7
  8474.  bra.s .donsht
  8475.  
  8476. .shiftit
  8477.  
  8478. ; divs #3,d6
  8479. ; divs #3,d7
  8480.  swap d6
  8481.  swap d7
  8482.  clr.w d6
  8483.  clr.w d7
  8484.  asr.l #1,d6
  8485.  asr.l #1,d7
  8486. .donsht:
  8487.  move.w scaleval(pc),d3
  8488.  beq.s .samescale
  8489.  bgt.s .scaledown
  8490.  neg.w d3
  8491.  asr.l d3,d7
  8492.  asr.l d3,d6
  8493.  bra.s .samescale
  8494. .scaledown:
  8495.  asl.l d3,d6
  8496.  asl.l d3,d7
  8497. .samescale
  8498.  
  8499.  ifne CHEESEY
  8500.  asr.l #1,d6
  8501.  asr.l #1,d7
  8502.  endc
  8503.  
  8504.  move.l d6,sxoff
  8505.  move.l d7,szoff
  8506.  bra pastscale 
  8507.  
  8508.  asr.l #3,d1
  8509.  asr.l #3,d2
  8510.  asr.l #2,d1
  8511.  asr.l #2,d2
  8512.  asr.l #1,d1
  8513.  asr.l #1,d2
  8514. scaleprogfrom
  8515.  nop
  8516.  nop
  8517.  asl.l #1,d1
  8518.  asl.l #1,d2
  8519.  asl.l #2,d1
  8520.  asl.l #2,d2
  8521.  asl.l #3,d1
  8522.  asl.l #3,d2
  8523.  
  8524. top: dc.w 0
  8525. bottom: dc.w 0
  8526. ypos: dc.l 0
  8527. nfloors: dc.w 0
  8528. lighttype: dc.w 0
  8529. above: dc.w 0 
  8530. linedir: dc.w 0
  8531. distaddr: dc.w 0
  8532.  
  8533. minz: dc.l 0
  8534.  
  8535. leftsidetab:
  8536.  ds.w 512*2
  8537. rightsidetab:
  8538.  ds.w 512*2
  8539. leftbrighttab:
  8540.  ds.w 512*2
  8541. rightbrighttab:
  8542.  ds.w 512*2
  8543.  
  8544. PointBrights:
  8545.  dc.l 0
  8546. CurrentPointBrights:
  8547.  ds.l 2*256*10
  8548.  
  8549. movespd: dc.w 0
  8550. largespd: dc.l 0
  8551. disttobot: dc.w 0
  8552.  
  8553. pastscale:
  8554.  
  8555.  
  8556.  tst.b drawit(pc)
  8557.  beq dontdrawfloor
  8558.  
  8559.  tst.b DOUBLEHEIGHT
  8560.  beq pix1h
  8561.  
  8562.  move.l a0,-(a7)
  8563.  move.w linedir,d1
  8564.  add.w d1,linedir
  8565.  
  8566.  move.l #leftsidetab,a4
  8567.  move.w top(pc),d1
  8568.  tst.w above
  8569.  beq.s .clipfloor
  8570.  
  8571.  sub.w #320,a6
  8572.  
  8573.  move.w MIDDLEY,d7
  8574.  subq #1,d7
  8575.  sub.w d1,d7
  8576.  move.w d7,disttobot
  8577.  
  8578.  move.w bottom(pc),d7
  8579.  move.w MIDDLEY,d3
  8580.  move.w d3,d4
  8581.  sub.w topclip,d3
  8582.  sub.w botclip,d4
  8583.  cmp.w d3,d1
  8584.  bge predontdrawfloor
  8585.  cmp.w d4,d7
  8586.  blt predontdrawfloor
  8587.  cmp.w d4,d1
  8588.  bge.s .nocliptoproof
  8589.  move.w d4,d1
  8590. .nocliptoproof
  8591.  cmp.w d3,d7
  8592.  blt .doneclip
  8593.  move.w d3,d7
  8594.  bra .doneclip
  8595.  
  8596. .clipfloor:
  8597.  move.w BOTTOMY,d7
  8598.  sub.w MIDDLEY,d7
  8599.  subq #1,d7
  8600.  sub.w d1,d7
  8601.  move.w d7,disttobot
  8602.  
  8603.  move.w bottom(pc),d7
  8604.  move.w botclip,d4
  8605.  sub.w MIDDLEY,d4
  8606.  cmp.w d4,d1
  8607.  bge predontdrawfloor
  8608.  move.w topclip,d3
  8609.  sub.w MIDDLEY,d3
  8610.  cmp.w d3,d1
  8611.  bge.s .nocliptopfloor
  8612.  move.w d3,d1
  8613. .nocliptopfloor 
  8614.  cmp.w d3,d7
  8615.  ble predontdrawfloor
  8616.  cmp.w d4,d7
  8617.  blt.s .noclipbotfloor
  8618.  move.w d4,d7
  8619. .noclipbotfloor:
  8620.  
  8621. .doneclip:
  8622.  
  8623.  lea (a4,d1*2),a4
  8624.  addq #1,d7
  8625.  sub.w d1,d7
  8626.  
  8627. ;moveq #0,d0
  8628.  asr.w #1,d1
  8629. ; addx d0,d1
  8630.  
  8631. ; move.l #dists,a2
  8632.  move.w distaddr,d0
  8633.  muls #64,d0
  8634.  move.l d0,a2
  8635. ; muls #25,d0
  8636. ; adda.w d0,a2
  8637. ; lea (a2,d1*2),a2
  8638.  asr.w #1,d7
  8639.  ble predontdrawfloor 
  8640.  move.w d1,d0
  8641.  bne.s .notzero
  8642.  moveq #1,d0
  8643. .notzero
  8644.  add.w d0,d0
  8645.  muls linedir,d1
  8646.  add.l d1,a6
  8647. ; sub.l d1,REFPTR
  8648.  move.l TexturePal,a1
  8649.  add.l #256*32,a1
  8650.  move.l LineToUse,a5
  8651.  
  8652.  move.w #4,tonextline
  8653.  
  8654.  bra pix2h
  8655.  
  8656. pix1h:
  8657.  
  8658.  move.l a0,-(a7)
  8659.  
  8660.  move.l #leftsidetab,a4
  8661.  move.w top(pc),d1
  8662.   
  8663.  tst.w above
  8664.  beq.s clipfloor
  8665.  
  8666.  move.w MIDDLEY,d7
  8667.  subq #1,d7
  8668.  sub.w d1,d7
  8669.  move.w d7,disttobot
  8670.  
  8671.  move.w bottom(pc),d7
  8672.  move.w MIDDLEY,d3
  8673.  move.w d3,d4
  8674.  sub.w topclip,d3
  8675.  sub.w botclip,d4
  8676.  cmp.w d3,d1
  8677.  bge predontdrawfloor
  8678.  cmp.w d4,d7
  8679.  blt predontdrawfloor
  8680.  cmp.w d4,d1
  8681.  bge.s .nocliptoproof
  8682.  move.w d4,d1
  8683. .nocliptoproof
  8684.  cmp.w d3,d7
  8685.  blt doneclip
  8686.  move.w d3,d7
  8687.  bra doneclip
  8688.  
  8689. clipfloor:
  8690.  move.w BOTTOMY,d7
  8691.  sub.w MIDDLEY,d7
  8692.  subq #1,d7
  8693.  sub.w d1,d7
  8694.  move.w d7,disttobot
  8695.  
  8696.  move.w bottom(pc),d7
  8697.  move.w botclip,d4
  8698.  sub.w MIDDLEY,d4
  8699.  cmp.w d4,d1
  8700.  bge predontdrawfloor
  8701.  move.w topclip,d3
  8702.  sub.w MIDDLEY,d3
  8703.  cmp.w d3,d1
  8704.  bge.s .nocliptopfloor
  8705.  move.w d3,d1
  8706. .nocliptopfloor 
  8707.  cmp.w d3,d7
  8708.  ble predontdrawfloor
  8709.  cmp.w d4,d7
  8710.  blt.s .noclipbotfloor
  8711.  move.w d4,d7
  8712. .noclipbotfloor:
  8713.  
  8714. doneclip:
  8715.  
  8716.  lea (a4,d1*2),a4
  8717. ; move.l #dists,a2
  8718.  move.w distaddr,d0
  8719.  muls #64,d0
  8720.  move.l d0,a2
  8721. ; muls #25,d0
  8722. ; adda.w d0,a2
  8723. ; lea (a2,d1*2),a2
  8724.  sub.w d1,d7
  8725.  ble predontdrawfloor 
  8726.  move.w d1,d0
  8727.  bne.s .notzero
  8728.  moveq #1,d0
  8729. .notzero
  8730.  muls linedir,d1
  8731.  add.l d1,a6
  8732. ; sub.l d1,REFPTR
  8733.  move.l TexturePal,a1
  8734.  add.l #256*32,a1
  8735.  move.l LineToUse,a5
  8736.  
  8737.  move.w #2,tonextline
  8738.  
  8739. pix2h:
  8740.  
  8741.  tst.b gourfloor
  8742.  bne dogourfloor
  8743.  
  8744.  tst.b anyclipping
  8745.  beq dofloornoclip
  8746.  
  8747. dofloor:
  8748. ; move.w (a2)+,d0
  8749.  move.w leftclip,d3
  8750.  move.w rightclip,d4
  8751.  move.w rightsidetab-leftsidetab(a4),d2
  8752.  
  8753.  addq #1,d2
  8754.  cmp.w d3,d2
  8755.  ble.s nodrawline
  8756.  cmp.w d4,d2
  8757.  ble.s noclipright
  8758.  move.w d4,d2
  8759. noclipright:
  8760.  move.w (a4),d1
  8761.  cmp.w d4,d1
  8762.  bge.s nodrawline
  8763.  cmp.w d3,d1
  8764.  bge.s noclipleft
  8765.  move.w d3,d1
  8766. noclipleft:
  8767.  cmp.w d1,d2
  8768.  ble.s nodrawline
  8769.  
  8770.  move.w d1,leftedge
  8771.  move.w d2,rightedge
  8772.  
  8773. ; moveq #0,d1
  8774. ; moveq #0,d3
  8775. ; move.w leftbrighttab-leftsidetab(a4),d1
  8776. ; bge.s .okbl
  8777. ; moveq #0,d1
  8778. ;.okbl:
  8779.  
  8780. ; move.w rightbrighttab-leftsidetab(a4),d3
  8781. ; bge.s .okbr
  8782. ; moveq #0,d3
  8783. ;.okbr:
  8784.  
  8785. ; sub.w d1,d3
  8786. ; asl.w #8,d1
  8787. ; move.l d1,leftbright
  8788. ; swap d3
  8789. ; asr.l #5,d3
  8790. ; divs d5,d3
  8791. ; move.w d3,d5
  8792. ; muls.w d6,d5
  8793. ; asr.l #3,d5
  8794. ; clr.b d5
  8795. ; add.w d5,leftbright+2
  8796.  
  8797. ; ext.l d3
  8798. ; asl.l #5,d3
  8799. ; swap d3
  8800. ; asl.w #8,d3
  8801. ; move.l d3,brightspd
  8802.  
  8803.  move.l a6,a3
  8804.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8805.  move.l a2,d7
  8806.  asl.l #2,d7
  8807.  ext.l d0
  8808.  divs.l d0,d7
  8809.  move.l d7,d0
  8810.  jsr (a5)
  8811.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8812. nodrawline
  8813.  sub.w #1,disttobot
  8814.  move.w linedir(pc),d3
  8815.  adda.w d3,a6
  8816. ; ext.l d3
  8817. ; sub.l d3,REFPTR
  8818.  move.w tonextline,d3
  8819.  add.w d3,a4
  8820.  asr.w #1,d3
  8821.  add.w d3,d0
  8822.  subq #1,d7
  8823.  bgt dofloor
  8824.  
  8825. predontdrawfloor
  8826.  move.l (a7)+,a0
  8827.  
  8828. dontdrawfloor:
  8829.  
  8830.  rts
  8831.  
  8832. tonextline: dc.w 0
  8833. anyclipping: dc.w 0
  8834.  
  8835. dofloornoclip:
  8836. ; move.w (a2)+,d0
  8837.  move.w rightsidetab-leftsidetab(a4),d2
  8838.  addq #1,d2
  8839.  move.w (a4),d1
  8840.  move.w d1,leftedge
  8841.  move.w d2,rightedge
  8842.  
  8843. ; sub.w d1,d2
  8844.  
  8845. ; moveq #0,d1
  8846. ; moveq #0,d3
  8847. ; move.w leftbrighttab-leftsidetab(a4),d1
  8848. ; bge.s .okbl
  8849. ; moveq #0,d1
  8850. ;.okbl:
  8851.  
  8852. ; move.w rightbrighttab-leftsidetab(a4),d3
  8853. ; bge.s .okbr
  8854. ; moveq #0,d3
  8855. ;.okbr:
  8856.  
  8857. ; sub.w d1,d3
  8858. ; asl.w #8,d1
  8859. ; move.l d1,leftbright
  8860. ; swap d3
  8861. ; asr.l #5,d3
  8862. ; divs d2,d3
  8863. ; ext.l d3
  8864. ; asl.l #5,d3
  8865. ; swap d3
  8866. ; asl.w #8,d3
  8867. ; move.l d3,brightspd
  8868.  
  8869.  move.l a6,a3
  8870.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8871.  move.l a2,d7
  8872.  asl.l #2,d7
  8873.  ext.l d0
  8874.  divs.l d0,d7
  8875.  move.l d7,d0
  8876.  jsr (a5)
  8877.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8878.  sub.w #1,disttobot
  8879.  move.w linedir(pc),d3
  8880.  adda.w d3,a6
  8881. ; ext.l d3
  8882. ; sub.l d3,REFPTR
  8883.  move.w tonextline,d3
  8884.  add.w d3,a4
  8885.  asr.w #1,d3
  8886.  add.w d3,d0
  8887.  subq #1,d7
  8888.  bgt dofloornoclip
  8889.  
  8890.  bra predontdrawfloor
  8891.  
  8892. dogourfloor:
  8893.  tst.b anyclipping
  8894.  beq dofloornoclipGOUR
  8895.  
  8896. dofloorGOUR:
  8897. ; move.w (a2)+,d0
  8898.  move.w leftclip,d3
  8899.  move.w rightclip,d4
  8900.  move.w rightsidetab-leftsidetab(a4),d2
  8901.  
  8902.  move.w d2,d5
  8903.  sub.w (a4),d5
  8904.  addq #1,d5
  8905.  moveq #0,d6
  8906.  
  8907.  addq #1,d2
  8908.  cmp.w d3,d2
  8909.  ble nodrawlineGOUR
  8910.  cmp.w d4,d2
  8911.  ble.s nocliprightGOUR
  8912.  move.w d4,d2
  8913. nocliprightGOUR:
  8914.  move.w (a4),d1
  8915.  cmp.w d4,d1
  8916.  bge nodrawlineGOUR
  8917.  cmp.w d3,d1
  8918.  bge.s noclipleftGOUR
  8919.  move.w d3,d6
  8920.  subq #1,d6
  8921.  sub.w d1,d6
  8922.  move.w d3,d1
  8923. noclipleftGOUR:
  8924.  cmp.w d1,d2
  8925.  ble nodrawlineGOUR
  8926.  
  8927.  move.w d1,leftedge
  8928.  move.w d2,rightedge
  8929.  
  8930.  move.l a2,d2
  8931.  asl.l #2,d2
  8932.  ext.l d0
  8933.  divs.l d0,d2
  8934.  move.l d2,dst
  8935.  asr.l #7,d2
  8936.  asr.l #2,d2
  8937. ; addq #5,d2
  8938. ; add.w lighttype,d2
  8939.  
  8940.  moveq #0,d1
  8941.  moveq #0,d3
  8942.  move.w leftbrighttab-leftsidetab(a4),d1
  8943.  add.w d2,d1
  8944.  bge.s .okbl
  8945.  moveq #0,d1
  8946. .okbl:
  8947. ; asr.w #1,d1
  8948.  cmp.w #30,d1
  8949.  ble.s .okdl
  8950.  move.w #30,d1
  8951. .okdl:
  8952.  
  8953.  move.w rightbrighttab-leftsidetab(a4),d3
  8954.  add.w d2,d3
  8955.  bge.s .okbr
  8956.  moveq #0,d3
  8957. .okbr:
  8958. ; asr.w #1,d3
  8959.  cmp.w #30,d3
  8960.  ble.s .okdr
  8961.  move.w #30,d3
  8962. .okdr:
  8963.  
  8964.  sub.w d1,d3
  8965.  asl.w #8,d1
  8966.  move.w d1,leftbright
  8967.  swap d3
  8968.  tst.l d3
  8969.  bgt.s .OKITSPOSALREADY 
  8970.  neg.l d3
  8971.  asr.l #6,d3
  8972.  divs d5,d3
  8973.  neg.w d3
  8974.  bra.s .OKNOWITSNEG
  8975.  
  8976. .OKITSPOSALREADY
  8977.  asr.l #6,d3
  8978.  divs d5,d3
  8979. .OKNOWITSNEG
  8980.  muls d3,d6
  8981.  add.w #256*4,d6
  8982.  asr.w #2,d6
  8983.  clr.b d6
  8984.  add.w leftbright,d6
  8985.  bge.s .oklbnn
  8986.  moveq #0,d6
  8987. .oklbnn:
  8988.  move.w d6,leftbright
  8989.  
  8990.  ext.l d3
  8991.  asr.l #2,d3
  8992. ; swap d3
  8993. ; asl.w #8,d3
  8994.  move.w d3,brightspd
  8995.  
  8996.  move.l a6,a3
  8997.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8998.  move.l dst,d0
  8999.  move.l TexturePal,a1
  9000.  add.l #256*32,a1
  9001.  move.l floortile,a0
  9002.  adda.w whichtile,a0
  9003.  jsr pastfloorbright
  9004.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9005. nodrawlineGOUR
  9006.  
  9007.  sub.w #1,disttobot
  9008.  
  9009.  move.w linedir(pc),d3
  9010.  adda.w d3,a6
  9011. ; ext.l d3
  9012. ; sub.l d3,REFPTR
  9013.  move.w tonextline,d3
  9014.  add.w d3,a4
  9015.  asr.w #1,d3
  9016.  add.w d3,d0
  9017.  subq #1,d7
  9018.  bgt dofloorGOUR
  9019.  
  9020. predontdrawfloorGOUR
  9021.  move.l (a7)+,a0
  9022.  
  9023. dontdrawfloorGOUR:
  9024.  
  9025.  rts
  9026.  
  9027. REFPTR: dc.l 0
  9028.  
  9029. dofloornoclipGOUR:
  9030. ; move.w (a2)+,d0
  9031.  move.w rightsidetab-leftsidetab(a4),d2
  9032.  addq #1,d2
  9033.  move.w (a4),d1
  9034.  move.w d1,leftedge
  9035.  move.w d2,rightedge
  9036.  
  9037.  sub.w d1,d2
  9038.  
  9039.  move.l a2,d6
  9040.  asl.l #2,d6
  9041.  ext.l d0
  9042.  divs.l d0,d6
  9043.  move.l d6,d5
  9044.  asr.l #7,d5
  9045.  asr.l #2,d5
  9046. ; addq #5,d5
  9047. ; add.w lighttype,d5
  9048.  
  9049.  moveq #0,d1
  9050.  moveq #0,d3
  9051.  move.w leftbrighttab-leftsidetab(a4),d1
  9052.  add.w d5,d1
  9053.  bge.s .okbl
  9054.  moveq #0,d1
  9055. .okbl:
  9056. ; asr.w #1,d1
  9057.  cmp.w #30,d1
  9058.  ble.s .okdl
  9059.  move.w #30,d1
  9060. .okdl:
  9061.  
  9062.  move.w rightbrighttab-leftsidetab(a4),d3
  9063.  add.w d5,d3
  9064.  bge.s .okbr
  9065.  moveq #0,d3
  9066. .okbr:
  9067. ; asr.w #1,d3
  9068.  cmp.w #30,d3
  9069.  ble.s .okdr
  9070.  move.w #30,d3
  9071. .okdr:
  9072.  
  9073. ; sub.w d1,d3
  9074. ; asl.w #8,d1
  9075. ; move.l d1,leftbright
  9076. ; swap d3
  9077. ; asr.l #5,d3
  9078. ; divs d2,d3
  9079. ; ext.l d3
  9080. ; asl.l #5,d3
  9081. ; swap d3
  9082. ; asl.w #8,d3
  9083. ; move.l d3,brightspd
  9084.  
  9085.  sub.w d1,d3
  9086.  asl.w #8,d1
  9087.  move.w d1,leftbright
  9088.  swap d3
  9089.  ext.l d2
  9090.  divs.l d2,d3
  9091.  asr.l #8,d3
  9092.  move.w d3,brightspd
  9093.  
  9094.  move.l a6,a3
  9095.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9096.  move.l d6,d0
  9097.  move.l d0,dst
  9098.  move.l TexturePal,a1
  9099.  add.l #256*32,a1
  9100.  move.l floortile,a0
  9101.  adda.w whichtile,a0
  9102.  jsr pastfloorbright
  9103.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9104.  sub.w #1,disttobot
  9105.  
  9106.  move.w linedir(pc),d3
  9107.  adda.w d3,a6
  9108. ; ext.l d3
  9109. ; sub.l d3,REFPTR
  9110.  
  9111.  move.w tonextline,d3
  9112.  add.w d3,a4
  9113.  asr.w #1,d3
  9114.  add.w d3,d0
  9115.  subq #1,d7
  9116.  bgt dofloornoclipGOUR
  9117.  
  9118.  bra predontdrawfloorGOUR
  9119.  
  9120.  
  9121.  
  9122. dists:
  9123. ; incbin "floordists"
  9124. drawit: dc.w 0
  9125.  
  9126. LineToUse: dc.l 0
  9127.  
  9128. ***************************
  9129. * Right then, time for the floor
  9130. * routine...
  9131. * For test purposes, give it
  9132. * a3 = point to screen
  9133. * d0= z distance away
  9134. * and sinval+cosval must be set up.
  9135. ***************************
  9136.  
  9137. BLACKFLOOR:
  9138.  moveq #0,d0
  9139.  bra.s DOBLACK
  9140.  
  9141. SimpleFloorLine:
  9142.  
  9143.  CACHE_OFF d2
  9144.  
  9145.  move.l #doacrossline,a1
  9146.  move.w leftedge(pc),d1
  9147.  move.w rightedge(pc),d3
  9148.  sub.w d1,d3
  9149.  lea (a1,d1.w*4),a1
  9150.  move.w (a1,d3.w*4),d4
  9151.  move.w #$4e75,(a1,d3.w*4)
  9152.  
  9153.  tst.b CLRNOFLOOR
  9154.  bne.s BLACKFLOOR
  9155.  
  9156.  move.l #PLAINSCALE,a2
  9157.  
  9158.  move.w d0,d2
  9159.  move.w lighttype,d1
  9160.  asr.w #8,d2
  9161.  add.w #5,d1
  9162.  add.w d2,d1
  9163.  bge.s .fixedbright
  9164.  moveq #0,d1
  9165. .fixedbright:
  9166.  cmp.w #28,d1
  9167.  ble.s .smallbright
  9168.  move.w #28,d1
  9169. .smallbright:
  9170.  lea (a2,d1.w*2),a2
  9171.  
  9172.  move.w whichtile,d0
  9173.  move.w d0,d1
  9174.  and.w #$3,d1
  9175.  and.w #$300,d0
  9176.  lsl.b #6,d1
  9177.  move.b d1,d0
  9178.  move.w d0,tstwhich
  9179.  move.w (a2,d0.w),d0
  9180.  
  9181. DOBLACK:
  9182.  jsr (a1)
  9183.  move.w d4,(a1,d3.w*4)
  9184.  
  9185.  CACHE_ON d2
  9186.  
  9187.  rts
  9188.  
  9189. tstwhich: dc.w 0
  9190. whichtile: dc.w 0
  9191.   
  9192. PLAINSCALE: 
  9193. ;incbin "ab3:includes/plainscale"
  9194.   
  9195. storeit: dc.l 0
  9196.  
  9197. doacrossline:
  9198. val SET 0
  9199.  REPT 32
  9200.  move.w d0,val(a3)
  9201. val SET val+4
  9202.  ENDR
  9203. val SET val+4
  9204.  REPT 32
  9205.  move.w d0,val(a3)
  9206. val SET val+4
  9207.  ENDR
  9208. val SET val+4
  9209.  REPT 32
  9210.  move.w d0,val(a3)
  9211. val SET val+4
  9212.  ENDR
  9213.  rts
  9214.  
  9215.  
  9216. leftedge: dc.w 0
  9217. rightedge: dc.w 0
  9218.  
  9219. rndpt: dc.l rndtab
  9220.  
  9221.  
  9222. dst: dc.l 0
  9223.  
  9224. FloorLine:
  9225.  
  9226.  move.l floortile,a0
  9227.  adda.w whichtile,a0
  9228.  move.w lighttype,d1
  9229.  move.l d0,dst    ; *4
  9230.  move.l d0,d2    ; *4
  9231. *********************
  9232. * Old version
  9233.  asr.l #2,d2
  9234.  asr.l #8,d2
  9235.  add.w #5,d1
  9236. *********************
  9237. ; asr.w #3,d2
  9238. ; sub.w #4,d2
  9239. ; cmp.w #6,d2
  9240. ; blt.s flbrbr
  9241. ; move.w #6,d2
  9242. ;flbrbr:
  9243. *********************
  9244.  add.w d2,d1
  9245.  bge.s .fixedbright
  9246.  moveq #0,d1
  9247. .fixedbright:
  9248.  cmp.w #28,d1
  9249.  ble.s .smallbright
  9250.  move.w #28,d1
  9251. .smallbright:
  9252.  move.l TexturePal,a1
  9253.  add.l #256*32,a1
  9254.  add.l floorbright(pc,d1.w*4),a1
  9255.  bra pastfloorbright
  9256.  
  9257. ConstCol: dc.w 0
  9258.  
  9259. BumpLine:
  9260.  
  9261.  tst.b smoothbumps
  9262.  beq.s Chunky
  9263.  
  9264.  move.l #SmoothTile,a0
  9265.  lea Smoothscalecols,a1
  9266.  bra pastast
  9267.  
  9268. Chunky:
  9269.  
  9270.  moveq #0,d2
  9271.  move.l #Bumptile,a0
  9272.  move.w whichtile,d2
  9273.  adda.w d2,a0
  9274.  ror.l #2,d2
  9275.  lsr.w #6,d2
  9276.  rol.l #2,d2
  9277.  and.w #15,d2
  9278.  move.l #ConstCols,a1
  9279.  move.w (a1,d2.w*2),ConstCol
  9280.  lea Bumpscalecols,a1
  9281.  
  9282. pastast:
  9283.  move.w lighttype,d1
  9284.  
  9285.  move.l d0,dst
  9286.  
  9287.  move.l d0,d2
  9288. *********************
  9289. * Old version
  9290.  asr.l #2,d2
  9291.  asr.l #8,d2
  9292.  add.w #5,d1
  9293. *********************
  9294. ; asr.w #3,d2
  9295. ; sub.w #4,d2
  9296. ; cmp.w #6,d2
  9297. ; blt.s flbrbr
  9298. ; move.w #6,d2
  9299. ;flbrbr:
  9300. *********************
  9301.  add.w d2,d1
  9302.  bge.s .fixedbright
  9303.  moveq #0,d1
  9304. .fixedbright:
  9305.  cmp.w #31,d1
  9306.  ble.s .smallbright
  9307.  move.w #31,d1
  9308. .smallbright:
  9309.  add.l floorbright(pc,d1.w*4),a1
  9310.  bra pastfloorbright
  9311.  
  9312.  
  9313. floorbright:
  9314.  dc.l 512*0
  9315.  dc.l 512*1
  9316.  dc.l 512*2
  9317.  dc.l 512*3
  9318.  dc.l 512*4
  9319.  
  9320.  dc.l 512*5
  9321.  dc.l 512*6
  9322.  dc.l 512*7
  9323.  dc.l 512*8
  9324.  dc.l 512*9
  9325.  
  9326.  dc.l 512*10
  9327.  dc.l 512*11
  9328.  dc.l 512*12
  9329.  dc.l 512*13
  9330.  dc.l 512*14
  9331.  
  9332.  dc.l 512*15
  9333.  dc.l 512*16
  9334.  dc.l 512*17
  9335.  dc.l 512*18
  9336.  dc.l 512*19
  9337.  
  9338.  dc.l 512*20
  9339.  dc.l 512*21
  9340.  dc.l 512*22
  9341.  dc.l 512*23
  9342.  dc.l 512*24
  9343.  
  9344.  dc.l 512*25
  9345.  dc.l 512*26
  9346.  dc.l 512*27
  9347.  dc.l 512*28
  9348.  dc.l 512*29
  9349.  
  9350.  dc.l 512*30
  9351.  dc.l 512*31
  9352.  
  9353. widthleft: dc.w 0
  9354. scaleval: dc.w 0
  9355. sxoff: dc.l 0
  9356. szoff: dc.l 0
  9357. xoff34: dc.w 0
  9358. zoff34: dc.w 0
  9359. scosval: dc.w 0
  9360. ssinval: dc.w 0
  9361.  
  9362.  
  9363. floorsetbright:
  9364.  move.l #walltiles,a0
  9365.  
  9366. pastfloorbright:
  9367.  
  9368.  move.l d0,d1
  9369.  muls cosval,d1    ; change in x across whole width
  9370.  move.l d0,d2
  9371.  muls sinval,d2    ; change in z across whole width
  9372.  neg.l d2
  9373.  ifne CHEESEY
  9374.  asr.l #3,d2
  9375.  asr.l #3,d1
  9376.  endc
  9377.  ifeq CHEESEY
  9378.  asr.l #2,d2
  9379.  asr.l #2,d1
  9380.  endc
  9381. scaleprog:
  9382.  move.w scaleval(pc),d3
  9383.  beq.s .samescale
  9384.  bgt.s .scaledown
  9385.  neg.w d3
  9386.  asr.l d3,d1
  9387.  asr.l d3,d2
  9388.  bra.s .samescale
  9389. .scaledown:
  9390.  asl.l d3,d1
  9391.  asl.l d3,d2
  9392. .samescale
  9393.  
  9394.  
  9395.  move.l d1,d3 ;    z cos
  9396.  move.l d3,d6
  9397.  move.l d3,d5
  9398.  asr.l #1,d6
  9399.  add.l d6,d3
  9400.  asr.l #1,d3
  9401.  
  9402.  move.l d2,d4    ; z sin
  9403.  move.l d4,d6
  9404.  asr.l #1,d6
  9405.  add.l d4,d6
  9406.  add.l d3,d4
  9407.  neg.l d4    ; start x
  9408.  
  9409.  asr.l #1,d6    ; zsin/2
  9410.  sub.l d6,d5    ; start z
  9411.  
  9412.  add.l sxoff,d4
  9413.  add.l szoff,d5
  9414.  
  9415.  tst.b FULLSCR
  9416.  beq.s .nob
  9417.  
  9418.  moveq #0,d6
  9419.  move.w leftedge(pc),d6
  9420.  beq.s .nomultleftB
  9421.  
  9422.  add.l d6,d6
  9423.  divs #3,d6
  9424.  ext.l d6
  9425.  
  9426.  move.l d1,a4
  9427.  move.l d2,a5
  9428.  
  9429.  muls.l d6,d1
  9430.  asr.l #7,d1
  9431.  add.l d1,d4
  9432.  
  9433.  muls.l d6,d2
  9434.  asr.l #7,d2
  9435.  add.l d2,d5
  9436.  move.l a4,d1
  9437.  move.l a5,d2
  9438.  
  9439.  move.w leftedge(pc),d6
  9440.  
  9441. .nomultleftB:
  9442.  
  9443.  move.w d4,startsmoothx
  9444.  move.w d5,startsmoothz
  9445.  
  9446.  asr.l #8,d4
  9447.  asl.l #8,d5
  9448. ; add.w szoff,d5
  9449. ; add.w sxoff,d4
  9450. ; and.w #63,d4
  9451. ; and.w #63*256,d5
  9452.  
  9453.  move.w d4,d5
  9454.  
  9455.  asr.l #6,d1
  9456.  asr.l #6,d2
  9457.  divs.l #3,d1
  9458.  divs.l #3,d2
  9459.  
  9460.  bra.s doneallmult
  9461.  
  9462. .nob 
  9463.  
  9464.  moveq #0,d6
  9465.  move.w leftedge(pc),d6
  9466.  beq.s nomultleft
  9467.  
  9468.  move.l d1,a4
  9469.  move.l d2,a5
  9470.  
  9471.  muls.l d6,d1
  9472.  asr.l #7,d1
  9473.  add.l d1,d4
  9474.  
  9475.  muls.l d6,d2
  9476.  asr.l #7,d2
  9477.  add.l d2,d5
  9478.  move.l a4,d1
  9479.  move.l a5,d2
  9480.  
  9481.  move.w leftedge(pc),d6
  9482.  
  9483. nomultleft:
  9484.  
  9485.  move.w d4,startsmoothx
  9486.  move.w d5,startsmoothz
  9487.  
  9488.  asr.l #8,d4
  9489.  asl.l #8,d5
  9490.  
  9491.  
  9492. ; add.w szoff,d5
  9493. ; add.w sxoff,d4
  9494. ; and.w #63,d4
  9495. ; and.w #63*256,d5
  9496.  
  9497.  move.w d4,d5
  9498.  
  9499.  asr.l #7,d1
  9500.  asr.l #7,d2
  9501. ; divs.l #3,d1
  9502. ; divs.l #3,d2
  9503.  
  9504. doneallmult:
  9505.  
  9506.  move.w d1,a4
  9507.  move.w d2,a5
  9508.  asl.l #8,d2
  9509. ; and.w #%0011111100000000,d2
  9510.  asr.l #8,d1
  9511.  move.w d1,d2
  9512.  ifeq CHEESEY
  9513.  move.l #$3fff3fff,d1
  9514.  endc
  9515.  ifne CHEESEY
  9516.  move.l #$1fff1fff,d1
  9517.  endc
  9518.  and.l d1,d5
  9519. ; swap d5
  9520. ; move.w startsmoothz,d5
  9521. ; swap d5
  9522. ; swap d2
  9523. ; move.w a5,d2
  9524. ; swap d2
  9525.  
  9526. ***********************************
  9527.  
  9528.  
  9529.  tst.b DOUBLEWIDTH
  9530.  beq.s .nodoub
  9531.  
  9532.  and.b #$fe,d6
  9533.  
  9534.  move.w d6,a2
  9535.  moveq #0,d0 
  9536.  move.w rightedge(pc),d3 
  9537.  lea (a3,a2.w),a3 
  9538.  move.w d3,d7
  9539.  sub.w a2,d7
  9540.  asr.w #1,d7
  9541.  move.w startsmoothx,d3
  9542.  
  9543.  tst.b usewater
  9544.  bne texturedwaterDOUB
  9545. ; tst.b gourfloor
  9546.  bra gouraudfloorDOUB
  9547.  
  9548. .nodoub:
  9549.  
  9550.  move.w d6,a2
  9551.  moveq #0,d0 
  9552.  move.w rightedge(pc),d3 
  9553.  lea (a3,a2.w),a3 
  9554.  move.w d3,d7
  9555.  sub.w a2,d7
  9556.  
  9557. intofirststrip:
  9558. allintofirst:
  9559.  
  9560.  move.w startsmoothx,d3
  9561.  
  9562. tstwat:
  9563.  
  9564.  tst.b usewater
  9565.  bne texturedwater
  9566. ; tst.b gourfloor
  9567.  bra gouraudfloor
  9568.  
  9569.  
  9570.  
  9571. ******************************
  9572. * BumpMap the floor/ceiling! *
  9573.  tst.b usebumps
  9574.  bne.s BumpMap
  9575. ******************************
  9576.  
  9577. ordinary:
  9578.  moveq #0,d0
  9579.  
  9580.  dbra d7,acrossscrn
  9581.  rts
  9582.  
  9583. usebumps: dc.w $0
  9584. smoothbumps: dc.w $0
  9585. gourfloor: dc.w 0
  9586.  
  9587.  include "ab3:source_4000/bumpmap.s"
  9588.  
  9589.  CNOP 0,4
  9590. backbefore:
  9591.  and.w d1,d5
  9592.  move.b (a0,d5.w*4),d0
  9593.  add.w a4,d3
  9594.  addx.l d6,d5
  9595.  move.w (a1,d0.w*2),(a3)
  9596.  addq #4,a3
  9597.  dbcs d7,acrossscrn
  9598.  dbcc d7,backbefore
  9599.  bra.s past1
  9600.  
  9601. acrossscrn:
  9602.  and.w d1,d5
  9603.  move.b (a0,d5.w*4),d0
  9604.  add.w a4,d3
  9605.  addx.l d2,d5
  9606.  move.w (a1,d0.w*2),(a3)
  9607.  addq #4,a3
  9608.  dbcs d7,acrossscrn
  9609.  dbcc d7,backbefore
  9610. past1:
  9611.  bcc.s gotoacross
  9612.  
  9613.  move.w d4,d7
  9614.  bne.s .notdoneyet
  9615.  rts
  9616. .notdoneyet:
  9617.  
  9618.  cmp.w #32,d7
  9619.  ble.s .notoowide
  9620.  move.w #32,d7
  9621. .notoowide
  9622.  sub.w d7,d4  
  9623.  addq #4,a3
  9624.  
  9625.  dbra d7,backbefore
  9626.  rts
  9627.  
  9628.  
  9629. gotoacross:
  9630.  
  9631.  move.w d4,d7
  9632.  bne.s .notdoneyet
  9633.  rts
  9634. .notdoneyet:
  9635.  
  9636.  cmp.w #32,d7
  9637.  ble.s .notoowide
  9638.  move.w #32,d7
  9639. .notoowide
  9640.  sub.w d7,d4  
  9641.  addq #4,a3
  9642.  
  9643.  dbra d7,acrossscrn
  9644.  rts
  9645.  
  9646. leftbright: dc.l 0
  9647. brightspd: dc.l 0
  9648.  
  9649. gouraudfloor:
  9650.  
  9651.  move.w leftbright,d0
  9652.  move.l d1,d4
  9653.  move.w brightspd,d1
  9654.  
  9655.  move.w d7,d3
  9656.  asr.w #1,d7
  9657.  btst #0,d3
  9658.  beq.s .nosingle1
  9659.  move.w d5,d3
  9660.  move.l d5,d6
  9661.  lsr.w #8,d3
  9662.  swap d6
  9663.  move.b d3,d6
  9664.  move.w d0,d3
  9665.  ifeq CHEESEY
  9666.  move.b (a0,d6.w*4),d3
  9667.  endc
  9668.  ifne CHEESEY
  9669.  move.b (a0,d6.w),d3
  9670.  endc
  9671.  
  9672.  add.w d1,d0
  9673.  add.l d2,d5
  9674.  and.l d4,d5
  9675.  move.b (a1,d3.w),(a3)+
  9676. .nosingle1
  9677.  
  9678.  move.w d7,d3
  9679.  asr.w #1,d7
  9680.  btst #0,d3
  9681.  beq.s .nosingle2
  9682.  move.w d5,d3
  9683.  move.l d5,d6
  9684.  lsr.w #8,d3
  9685.  swap d6
  9686.  move.b d3,d6
  9687.  move.w d0,d3
  9688.  ifeq CHEESEY
  9689.  move.b (a0,d6.w*4),d3
  9690.  endc
  9691.  ifne CHEESEY
  9692.  move.b (a0,d6.w),d3
  9693.  endc
  9694.  add.w d1,d0
  9695.  add.l d2,d5
  9696.  and.l d4,d5
  9697.  move.l d5,d6
  9698.  swap d6
  9699.  move.b (a1,d3.w),(a3)+
  9700.  move.w d5,d3
  9701.  lsr.w #8,d3
  9702.  move.b d3,d6
  9703.  move.w d0,d3
  9704.  ifeq CHEESEY
  9705.  move.b (a0,d6.w*4),d3
  9706.  endc
  9707.  ifne CHEESEY
  9708.  move.b (a0,d6.w),d3
  9709.  endc
  9710.  add.w d1,d0
  9711.  add.l d2,d5
  9712.  and.l d4,d5
  9713.  move.b (a1,d3.w),(a3)+
  9714.  
  9715. .nosingle2
  9716.  
  9717.  move.l d5,d6
  9718.  swap d6
  9719.  
  9720.  dbra d7,acrossscrngour
  9721.  rts
  9722.  
  9723.  CNOP 0,4
  9724.  
  9725. acrossscrngour:
  9726.  move.w d5,d3
  9727.  lsr.w #8,d3
  9728.  move.b d3,d6
  9729.  move.w d0,d3
  9730.  ifeq CHEESEY
  9731.  move.b (a0,d6.w*4),d3
  9732.  endc
  9733.  ifne CHEESEY
  9734.  move.b (a0,d6.w),d3
  9735.  endc
  9736.  add.w d1,d0
  9737.  add.l d2,d5
  9738.  and.l d4,d5
  9739.  move.l d5,d6
  9740.  swap d6
  9741.  move.b (a1,d3.w),(a3)+
  9742.  move.w d5,d3
  9743.  lsr.w #8,d3
  9744.  move.b d3,d6
  9745.  move.w d0,d3
  9746.  ifeq CHEESEY
  9747.  move.b (a0,d6.w*4),d3
  9748.  endc
  9749.  ifne CHEESEY
  9750.  move.b (a0,d6.w),d3
  9751.  endc
  9752.  add.w d1,d0
  9753.  add.l d2,d5
  9754.  and.l d4,d5
  9755.  move.l d5,d6
  9756.  swap d6
  9757.  move.b (a1,d3.w),(a3)+
  9758.  move.w d5,d3
  9759.  lsr.w #8,d3
  9760.  move.b d3,d6
  9761.  move.w d0,d3
  9762.  ifeq CHEESEY
  9763.  move.b (a0,d6.w*4),d3
  9764.  endc
  9765.  ifne CHEESEY
  9766.  move.b (a0,d6.w),d3
  9767.  endc
  9768.  add.w d1,d0
  9769.  add.l d2,d5
  9770.  and.l d4,d5
  9771.  move.l d5,d6
  9772.  swap d6
  9773.  move.b (a1,d3.w),(a3)+
  9774.  move.w d5,d3
  9775.  lsr.w #8,d3
  9776.  move.b d3,d6
  9777.  move.w d0,d3
  9778.  ifeq CHEESEY
  9779.  move.b (a0,d6.w*4),d3
  9780.  endc
  9781.  ifne CHEESEY
  9782.  move.b (a0,d6.w),d3
  9783.  endc
  9784.  add.w d1,d0
  9785.  add.l d2,d5
  9786.  and.l d4,d5
  9787.  move.l d5,d6
  9788.  swap d6
  9789.  move.b (a1,d3.w),(a3)+
  9790.  dbra d7,acrossscrngour
  9791.  
  9792.  rts
  9793.  
  9794.  
  9795. gouraudfloorDOUB:
  9796.  
  9797.  move.w leftbright,d0
  9798.  move.l d1,d4
  9799.  move.w brightspd,d1
  9800.  add.w d1,d1
  9801.  add.l d2,d2
  9802.  
  9803.  move.w d7,d3
  9804.  asr.w #1,d7
  9805.  btst #0,d3
  9806.  beq.s .nosingle1
  9807.  move.w d5,d3
  9808.  move.l d5,d6
  9809.  lsr.w #8,d3
  9810.  swap d6
  9811.  move.b d3,d6
  9812.  move.w d0,d3
  9813.  ifeq CHEESEY
  9814.  move.b (a0,d6.w*4),d3
  9815.  endc
  9816.  ifne CHEESEY
  9817.  move.b (a0,d6.w),d3
  9818.  endc
  9819.  add.w d1,d0
  9820.  add.l d2,d5
  9821.  and.l d4,d5
  9822.  move.w (a1,d3.w),(a3)+
  9823. .nosingle1
  9824.  
  9825.  move.w d7,d3
  9826.  asr.w #1,d7
  9827.  btst #0,d3
  9828.  beq.s .nosingle2
  9829.  move.w d5,d3
  9830.  move.l d5,d6
  9831.  lsr.w #8,d3
  9832.  swap d6
  9833.  move.b d3,d6
  9834.  move.w d0,d3
  9835.  ifeq CHEESEY
  9836.  move.b (a0,d6.w*4),d3
  9837.  endc
  9838.  ifne CHEESEY
  9839.  move.b (a0,d6.w),d3
  9840.  endc
  9841.  add.w d1,d0
  9842.  add.l d2,d5
  9843.  and.l d4,d5
  9844.  move.l d5,d6
  9845.  swap d6
  9846.  move.w (a1,d3.w),(a3)+
  9847.  move.w d5,d3
  9848.  lsr.w #8,d3
  9849.  move.b d3,d6
  9850.  move.w d0,d3
  9851.  ifeq CHEESEY
  9852.  move.b (a0,d6.w*4),d3
  9853.  endc
  9854.  ifne CHEESEY
  9855.  move.b (a0,d6.w),d3
  9856.  endc
  9857.  add.w d1,d0
  9858.  add.l d2,d5
  9859.  and.l d4,d5
  9860.  move.w (a1,d3.w),(a3)+
  9861.  
  9862. .nosingle2
  9863.  
  9864.  move.l d5,d6
  9865.  swap d6
  9866.  
  9867.  dbra d7,acrossscrngourD
  9868.  rts
  9869.  
  9870.  CNOP 0,4
  9871.  
  9872. acrossscrngourD:
  9873.  move.w d5,d3
  9874.  lsr.w #8,d3
  9875.  move.b d3,d6
  9876.  move.w d0,d3
  9877.  ifeq CHEESEY
  9878.  move.b (a0,d6.w*4),d3
  9879.  endc
  9880.  ifne CHEESEY
  9881.  move.b (a0,d6.w),d3
  9882.  endc
  9883.  add.w d1,d0
  9884.  add.l d2,d5
  9885.  and.l d4,d5
  9886.  move.l d5,d6
  9887.  swap d6
  9888.  move.w (a1,d3.w),(a3)+
  9889.  move.w d5,d3
  9890.  lsr.w #8,d3
  9891.  move.b d3,d6
  9892.  move.w d0,d3
  9893.  ifeq CHEESEY
  9894.  move.b (a0,d6.w*4),d3
  9895.  endc
  9896.  ifne CHEESEY
  9897.  move.b (a0,d6.w),d3
  9898.  endc
  9899.  add.w d1,d0
  9900.  add.l d2,d5
  9901.  and.l d4,d5
  9902.  move.l d5,d6
  9903.  swap d6
  9904.  move.w (a1,d3.w),(a3)+
  9905.  move.w d5,d3
  9906.  lsr.w #8,d3
  9907.  move.b d3,d6
  9908.  move.w d0,d3
  9909.  ifeq CHEESEY
  9910.  move.b (a0,d6.w*4),d3
  9911.  endc
  9912.  ifne CHEESEY
  9913.  move.b (a0,d6.w),d3
  9914.  endc
  9915.  add.w d1,d0
  9916.  add.l d2,d5
  9917.  and.l d4,d5
  9918.  move.l d5,d6
  9919.  swap d6
  9920.  move.w (a1,d3.w),(a3)+
  9921.  move.w d5,d3
  9922.  lsr.w #8,d3
  9923.  move.b d3,d6
  9924.  move.w d0,d3
  9925.  ifeq CHEESEY
  9926.  move.b (a0,d6.w*4),d3
  9927.  endc
  9928.  ifne CHEESEY
  9929.  move.b (a0,d6.w),d3
  9930.  endc
  9931.  add.w d1,d0
  9932.  add.l d2,d5
  9933.  and.l d4,d5
  9934.  move.l d5,d6
  9935.  swap d6
  9936.  move.w (a1,d3.w),(a3)+
  9937.  dbra d7,acrossscrngourD
  9938.  
  9939.  rts
  9940.  
  9941.  
  9942. ;backbeforegour:
  9943. ; and.w #63*256+63,d5
  9944. ; move.b (a0,d5.w*4),d0
  9945. ; add.l d1,d0
  9946. ; bcc.s .nomoreb
  9947. ; add.w #256,d0
  9948. ;.nomoreb:
  9949. ; add.w a4,d3
  9950. ; move.w (a1,d0.w*2),(a3)+
  9951. ; addx.l d6,d5
  9952. ; dbcs d7,acrossscrngour
  9953. ; dbcc d7,backbeforegour
  9954. ; rts
  9955. ; bra.s past1gour
  9956.  
  9957. ;acrossscrngour:
  9958. ; and.l #$3f3f,d5 
  9959. ; move.b (a0,d5.w*4),d0
  9960. ; add.l d1,d0
  9961. ; bcc.s .nomoreb
  9962. ; add.w #256,d0
  9963. ;.nomoreb:
  9964. ; add.w a4,d3
  9965. ; move.w (a1,d0.w*2),(a3)+
  9966. ; addx.l d2,d5
  9967. ; dbcs d7,acrossscrngour
  9968. ; dbcc d7,backbeforegour
  9969. ;past1gour:
  9970. ; rts
  9971.  
  9972.  move.w d4,d7
  9973.  bne.s .notdoneyet
  9974.  move.l d0,leftbright
  9975.  
  9976.  rts
  9977. .notdoneyet:
  9978.  
  9979.  cmp.w #32,d7
  9980.  ble.s .notoowide
  9981.  move.w #32,d7
  9982. .notoowide
  9983.  sub.w d7,d4  
  9984.  addq #4,a3
  9985.  
  9986. ; dbra d7,backbeforegour
  9987.  rts
  9988.  
  9989.  
  9990. gotoacrossgour:
  9991.  
  9992.  move.w d4,d7
  9993.  bne.s .notdoneyet
  9994.  rts
  9995. .notdoneyet:
  9996.  
  9997.  cmp.w #32,d7
  9998.  ble.s .notoowide
  9999.  move.w #32,d7
  10000. .notoowide
  10001.  sub.w d7,d4  
  10002.  addq #4,a3
  10003.  
  10004.  dbra d7,acrossscrngour
  10005.  rts
  10006.  
  10007.  
  10008. waterpt: dc.l waterlist
  10009.  
  10010. waterlist:
  10011.  dc.l waterfile
  10012.  dc.l waterfile+2
  10013.  dc.l waterfile+256
  10014.  dc.l waterfile+256+2
  10015.  dc.l waterfile+512
  10016.  dc.l waterfile+512+2
  10017.  dc.l waterfile+768
  10018.  dc.l waterfile+768+2
  10019. ; dc.l waterfile+768
  10020. ; dc.l waterfile+512+2
  10021. ; dc.l waterfile+512
  10022. ; dc.l waterfile+256+2
  10023. ; dc.l waterfile+256
  10024. ; dc.l waterfile+2
  10025. endwaterlist:
  10026.  
  10027. watertouse: dc.l waterfile
  10028.  
  10029. wtan: dc.w 0
  10030. wateroff: dc.l 0
  10031.  
  10032. REFLECTIONWATER:
  10033.  
  10034.  move.l d1,d4
  10035.  
  10036.  add.l wateroff,d5
  10037.  
  10038.  move.l TexturePal,a1
  10039.  add.l #256*16,a1
  10040.  move.l dst,d0
  10041.  clr.b d0
  10042.  
  10043.  add.w d0,d0
  10044.  cmp.w #12*512,d0
  10045.  blt.s .notoowater
  10046.  move.w #12*512,d0
  10047.  
  10048. .notoowater:
  10049.   
  10050.  adda.w d0,a1
  10051.  
  10052.  move.l dst,d0
  10053.  asl.w #7,d0
  10054.  add.w wtan,d0
  10055.  and.w #8191,d0
  10056.  move.l #SineTable,a0
  10057.  move.w (a0,d0.w),d0
  10058.  ext.l d0
  10059.  
  10060.  move.l dst,d3
  10061.  add.w #300,d3
  10062.  divs d3,d0
  10063.  asr.w #5,d0
  10064.  addq #4,d0
  10065.  cmp.w disttobot,d0
  10066.  blt.s oknotoffbotototr
  10067.  
  10068.  move.w disttobot,d0
  10069.  subq #1,d0
  10070.  
  10071. oknotoffbotototr
  10072.  
  10073. ; move.w dst,d3
  10074. ; asr.w #7,d3
  10075. ; add.w d3,d0
  10076.  
  10077.  muls #320,d0
  10078.  tst.w above
  10079.  beq.s nonnnnnegr
  10080.  neg.l d0
  10081.  
  10082. nonnnnnegr:
  10083.  
  10084.  move.l d0,a6
  10085.  
  10086.  move.l watertouse,a0
  10087.  
  10088. ; move.l #mixtab,a5
  10089.  
  10090.  moveq #0,d1
  10091.  
  10092.  move.w startsmoothx,d3
  10093.  dbra d7,acrossscrnwr
  10094.  rts
  10095.  
  10096. backbeforewr:
  10097.  and.w d1,d5 
  10098.  move.w (a0,d5.w*4),d0
  10099.  move.b (a3,a6.w),d0
  10100.  move.w (a1,d0.w),(a3)+
  10101.  add.w a4,d3
  10102.  addx.l d6,d5
  10103.  dbcs d7,acrossscrnwr
  10104.  dbcc d7,backbeforewr
  10105.  rts
  10106.  
  10107. acrossscrnwr:
  10108.  move.w d5,d3
  10109.  move.l d5,d6
  10110.  lsr.w #8,d3
  10111.  swap d6
  10112.  move.b d3,d6
  10113.  move.w (a0,d6.w*4),d0
  10114.  add.l d2,d5
  10115.  move.w (a4,a6.w),d1
  10116.  addq #2,a4
  10117.  move.b (a3,a6.w),d1
  10118.  move.b (a5,d1.l),d0
  10119.  and.l d4,d5
  10120.  move.w (a1,d0.w),(a3)+
  10121.  dbra d7,acrossscrnwr
  10122.  rts
  10123.  
  10124. texturedwater:
  10125.  
  10126.  move.l d1,d4
  10127.  
  10128.  add.l wateroff,d5
  10129.  
  10130.  move.l TexturePal,a1
  10131.  add.l #256*16,a1
  10132.  move.l dst,d0
  10133.  asr.l #2,d0
  10134.  clr.b d0
  10135.  
  10136.  add.w d0,d0
  10137.  cmp.w #9*512,d0
  10138.  blt.s .notoowater
  10139.  move.w #9*512,d0
  10140. .notoowater:
  10141.   
  10142.  adda.w d0,a1
  10143.  
  10144.  move.l dst,d0
  10145.  asl.w #7,d0
  10146.  add.w wtan,d0
  10147.  and.w #8191,d0
  10148.  move.l #SineTable,a0
  10149.  move.w (a0,d0.w),d0
  10150.  ext.l d0
  10151.  
  10152.  move.l dst,d3
  10153.  add.w #300,d3
  10154.  divs d3,d0
  10155.  asr.w #5,d0
  10156.  addq #4,d0
  10157.  cmp.w disttobot,d0
  10158.  blt.s oknotoffbototot
  10159.  
  10160.  move.w disttobot,d0
  10161.  subq #1,d0
  10162.  
  10163. oknotoffbototot
  10164.  
  10165. ; move.w dst,d3
  10166. ; asr.w #7,d3
  10167. ; add.w d3,d0
  10168.  
  10169.  tst.b DOUBLEHEIGHT
  10170.  beq.s .nodoub
  10171.  and.b #$fe,d0
  10172. .nodoub:
  10173.  
  10174.  muls #320,d0
  10175.  tst.w above
  10176.  beq.s nonnnnneg
  10177.  neg.l d0
  10178.  
  10179. nonnnnneg:
  10180.  
  10181.  move.l d0,a6
  10182.  
  10183.  move.l watertouse,a0
  10184.  
  10185.  move.w startsmoothx,d3
  10186.  dbra d7,acrossscrnw
  10187.  rts
  10188.  
  10189. backbeforew:
  10190.  and.w d1,d5
  10191.  move.w (a0,d5.w*4),d0
  10192.  add.w d0,d0
  10193.  move.b (a3,a6.w),d0
  10194.  move.b (a1,d0.w),(a3)+
  10195.  add.w a4,d3
  10196.  addx.l d6,d5
  10197.  dbcs d7,acrossscrnw
  10198.  dbcc d7,backbeforew
  10199.  rts
  10200.  
  10201. acrossscrnw:
  10202.  move.w d5,d3
  10203.  move.l d5,d6
  10204.  lsr.w #8,d3
  10205.  swap d6
  10206.  move.b d3,d6
  10207.  move.w (a0,d6.w*4),d0
  10208.  add.w d0,d0
  10209.  add.l d2,d5
  10210.  move.b (a3,a6.w),d0
  10211.  and.l d4,d5
  10212.  move.b (a1,d0.w),(a3)+
  10213.  dbra d7,acrossscrnw
  10214.  rts
  10215.  
  10216.  
  10217. texturedwaterDOUB:
  10218.  
  10219.  move.l d1,d4
  10220.  
  10221.  add.l wateroff,d5
  10222.  
  10223.  move.l TexturePal,a1
  10224.  add.l #256*16,a1
  10225.  move.l dst,d0
  10226.  asr.l #2,d0
  10227.  clr.b d0
  10228.  
  10229.  add.w d0,d0
  10230.  cmp.w #9*512,d0
  10231.  blt.s .notoowater
  10232.  move.w #9*512,d0
  10233. .notoowater:
  10234.   
  10235.  adda.w d0,a1
  10236.  
  10237.  move.l dst,d0
  10238.  asl.w #7,d0
  10239.  add.w wtan,d0
  10240.  and.w #8191,d0
  10241.  move.l #SineTable,a0
  10242.  move.w (a0,d0.w),d0
  10243.  ext.l d0
  10244.  
  10245.  move.l dst,d3
  10246.  add.w #300,d3
  10247.  divs d3,d0
  10248.  asr.w #5,d0
  10249.  addq #4,d0
  10250.  cmp.w disttobot,d0
  10251.  blt.s .oknotoffbototot
  10252.  
  10253.  move.w disttobot,d0
  10254.  subq #1,d0
  10255.  
  10256. .oknotoffbototot
  10257.  
  10258. ; move.w dst,d3
  10259. ; asr.w #7,d3
  10260. ; add.w d3,d0
  10261.  
  10262.  tst.b DOUBLEHEIGHT
  10263.  beq.s .nodoub
  10264.  and.b #$fe,d0
  10265. .nodoub:
  10266.  
  10267.  muls #320,d0
  10268.  tst.w above
  10269.  beq.s .nonnnnneg
  10270.  neg.l d0
  10271.  
  10272. .nonnnnneg:
  10273.  
  10274.  move.l d0,a6
  10275.  
  10276.  move.l watertouse,a0
  10277.  
  10278.  add.l d2,d2
  10279.  
  10280.  move.w startsmoothx,d3
  10281.  dbra d7,acrossscrnwD
  10282.  rts
  10283.  
  10284.  
  10285. acrossscrnwD:
  10286.  move.w d5,d3
  10287.  move.l d5,d6
  10288.  lsr.w #8,d3
  10289.  swap d6
  10290.  move.b d3,d6
  10291.  move.w (a0,d6.w*4),d0
  10292.  add.w d0,d0
  10293.  add.l d2,d5
  10294.  move.b (a3,a6.w),d0
  10295.  and.l d4,d5
  10296.  move.w (a1,d0.w),(a3)+
  10297.  dbra d7,acrossscrnwD
  10298.  rts
  10299.  
  10300.  
  10301. usewater: dc.w 0
  10302.  dc.w 0
  10303. startsmoothx: dc.w 0
  10304.  dc.w 0
  10305. startsmoothz: dc.w 0
  10306.  
  10307. ********************************
  10308. *
  10309.  include "AB3:source_4000/ObjDrawHIRES.s"
  10310. *
  10311. ********************************
  10312.  
  10313. numframes:
  10314.  dc.w 0
  10315.  
  10316. alframe: dc.l 0
  10317.  
  10318. alan:
  10319.  dcb.l 8,0
  10320.  dcb.l 8,1
  10321.  dcb.l 8,2
  10322.  dcb.l 8,3
  10323. endalan:
  10324.  
  10325. alanptr: dc.l alan
  10326.  
  10327. Time2: dc.l 0
  10328. dispco:
  10329.  dc.w 0
  10330.  
  10331.  
  10332. key_interrupt:
  10333.         movem.l    d0-d7/a0-a6,-(sp)
  10334.  
  10335. ;        move.w    INTREQR,d0
  10336. ;        btst    #3,d0
  10337. ;        beq    .not_key
  10338.  
  10339.         move.b    $bfdd00,d0
  10340.         btst    #0,d0
  10341.         bne    .key_cont
  10342. ;        move.b    $bfed01,d0
  10343. ;        btst    #0,d0
  10344. ;        bne    .key_cont
  10345.     
  10346. ;        btst    #3,d0
  10347. ;        beq    .key_cont
  10348.  
  10349.         move.b    $bfec01,d0
  10350.         clr.b    $bfec01
  10351.  
  10352.         tst.b    d0
  10353.         beq    .key_cont
  10354.  
  10355. ;        bset    #6,$bfee01
  10356. ;        move.b    #$f0,$bfe401
  10357. ;        move.b    #$00,$bfe501
  10358. ;        bset    #0,$bfee01
  10359.  
  10360.  
  10361.         not.b    d0
  10362.         ror.b    #1,d0
  10363.         lea.l    KeyMap,a0
  10364.         tst.b    d0
  10365.         bmi.b    .key_up
  10366.         and.w    #$7f,d0
  10367. ;        add.w    #1,d0
  10368.         move.b    #$ff,(a0,d0.w)
  10369.         move.b    d0,lastpressed
  10370.  
  10371.         bra.b    .key_cont2
  10372. .key_up:
  10373.         and.w    #$7f,d0
  10374. ;        add.w    #1,d0
  10375.         move.b    #$00,(a0,d0.w)
  10376.  
  10377. .key_cont2
  10378. ;        btst    #0,$bfed01
  10379. ;        beq    .key_cont2
  10380. ;        move.b    #%00000000,$bfee01
  10381. ;        move.b    #%10001000,$bfed01
  10382.  
  10383. ;alt keys should not be independent so overlay ralt on lalt
  10384.  
  10385.         
  10386. .key_cont
  10387.  
  10388. ;        move.w    #$0008,INTREQ
  10389. .not_key:    ;lea.l    $dff000,a5
  10390.  
  10391. ;        lea.l    _keypressed(pc),a0
  10392. ;        move.b    101(a0),d0    ;read LALT
  10393. ;        or.b    102(a0),d0    ;blend it with RALT
  10394. ;        move.b    d0,127(a0)    ;save in combined position
  10395.  
  10396.         movem.l    (sp)+,d0-d7/a0-a6
  10397.  
  10398.         rts
  10399.  
  10400. lastpressed:    dc.b 0
  10401. KInt_CCode    Ds.b    1
  10402. KInt_Askey    Ds.b    1
  10403. KInt_OCode    Ds.w    1
  10404.  
  10405.  
  10406. OldSpace: dc.b 0
  10407. SpaceTapped: dc.b 0
  10408. PLR1_SPCTAP: dc.b 0
  10409. PLR2_SPCTAP: dc.b 0
  10410. PLR1_Ducked: dc.b 0
  10411. PLR2_Ducked: dc.b 0
  10412.  even
  10413.  
  10414.  include "ab3:source_4000/PLR1CONTROL.s"
  10415.  include "ab3:source_4000/PLR2CONTROL.s"
  10416.  include "ab3:source_4000/FALL.s"
  10417.  
  10418.  
  10419.  
  10420. *******************************************8
  10421.  
  10422. nullmessage: dcb.b 160,' '
  10423.  
  10424. SENDMESSAGENORET
  10425.  move.l a1,-(a7)
  10426.  bra intosend
  10427.  
  10428. SENDMESSAGE:
  10429.  
  10430.  move.l a1,-(a7)
  10431.  
  10432.  move.l MESSPTR,a1
  10433.  move.l d0,(a1)+
  10434.  cmp.l #ENDMESSBUFF,a1
  10435.  blt.s .okinbuff
  10436.  move.l #MESSAGEBUFFER,a1
  10437. .okinbuff:
  10438.  move.l a1,MESSPTR
  10439.  move.l a1,LASTMESSPTR
  10440.  
  10441. intosend:
  10442.  
  10443.  move.l d0,SCROLLPOINTER
  10444.  move.w #0,SCROLLXPOS
  10445.  add.l #160,d0
  10446.  move.l d0,ENDSCROLL
  10447.  move.w #40,SCROLLTIMER
  10448.  
  10449.  move.l (a7)+,a1
  10450.  rts
  10451.  
  10452. RETRIEVEPREVMESSAGE:
  10453.  
  10454.  move.l LASTMESSPTR,a1
  10455.  cmp.l #MESSAGEBUFFER,a1
  10456.  bgt.s .okinbuff
  10457.  
  10458.  move.l #ENDMESSBUFF,a1
  10459.  
  10460. .okinbuff:
  10461.  
  10462.  move.l -(a1),d0
  10463.  beq.s .nomessage
  10464.  
  10465.  move.l d0,SCROLLPOINTER
  10466.  move.w #0,SCROLLXPOS
  10467.  add.l #160,d0
  10468.  move.l d0,ENDSCROLL
  10469.  move.w #40,SCROLLTIMER
  10470.  
  10471.  move.l a1,LASTMESSPTR
  10472.  
  10473. .nomessage:
  10474.  
  10475.  
  10476.  rts
  10477.  
  10478. MESSAGEBUFFER:
  10479.  ds.l 20
  10480. ENDMESSBUFF:
  10481.  
  10482. MESSPTR: dc.l MESSAGEBUFFER
  10483. LASTMESSPTR: dc.l MESSAGEBUFFER
  10484.  
  10485. **********************************************
  10486.  
  10487.  
  10488.  
  10489. prot7: dc.w 0
  10490.  
  10491. GOTTOSEND: dc.w 0
  10492.  
  10493. COUNTER: dc.w 0
  10494. COUNTER2: dc.w 0
  10495. COUNTSPACE: ds.b 160
  10496.  
  10497. OtherInter:
  10498.  move.w #$0010,$dff000+intreq
  10499.  movem.l d0-d7/a0-a6,-(a7)
  10500.  bra justshake
  10501.  
  10502.     cnop 0,4
  10503.  
  10504. Chan0inter:
  10505.  
  10506.     SAVEREGS
  10507.     jsr    .routine
  10508.     GETREGS
  10509.  
  10510. ;    move.w    #1024+'.',$dff030
  10511.     
  10512.     moveq #1,d0
  10513.     rts
  10514.  
  10515. .routine
  10516.  
  10517.     
  10518. ;w move.w #$0010,$dff000+intreq
  10519.  
  10520.  tst.b doanything
  10521.  bne dosomething
  10522.  
  10523.  movem.l d0-d7/a0-a6,-(a7)
  10524.  bra JUSTSOUNDS
  10525.  
  10526.  rts
  10527.  
  10528. tabheld: dc.w 0
  10529. ObjWork: ds.l 600
  10530. WORKPTR: dc.l 0
  10531. thistime: dc.w 0
  10532.  
  10533. DOALLANIMS:
  10534.  
  10535.  sub.b #1,thistime
  10536.  ble.s .okdosome
  10537.  rts
  10538.  
  10539. .okdosome:
  10540.  move.b #5,thistime
  10541.  
  10542.  
  10543.  move.l #ObjWork,a5
  10544.  move.l ObjectData,a0
  10545. Objectloop2:
  10546.  tst.w (a0)
  10547.  blt doneallobj2
  10548.  move.w 12(a0),d0
  10549.  blt doneobj2
  10550.  move.w d0,GraphicRoom(a0)
  10551.  tst.b worry(a0)
  10552.  beq.s doneobj2
  10553.  
  10554.  move.b 16(a0),d0
  10555.  cmp.b #1,d0
  10556.  blt JUMPALIENANIM
  10557. ; beq JUMPOBJECTANIM
  10558. ; cmp.b #2,d0
  10559. ; beq JUMPBULLET
  10560.  
  10561. doneobj2:
  10562.  
  10563.  adda.w #64,a0
  10564.  addq #8,a5
  10565.  bra Objectloop2
  10566.  
  10567. doneallobj2:
  10568.  rts
  10569.  
  10570. JUMPALIENANIM:
  10571.  
  10572.  moveq #0,d0
  10573.  move.b WhichAnim(a0),d0
  10574. ; 0=walking
  10575. ; 1=attacking
  10576. ; 2=getting hit
  10577. ; 3=dying
  10578.  
  10579.  cmp.b #1,d0
  10580.  blt.s ALWALK
  10581.  beq.s ALATTACK
  10582.  
  10583.  cmp.b #3,d0
  10584.  blt ALGETHIT
  10585.  beq ALDIE
  10586.  
  10587.  bra doneobj2
  10588.  
  10589. ALDIE
  10590.  move.l #10,d0
  10591.  bra intowalk
  10592.  
  10593. ALGETHIT:
  10594.  move.l #9,d0
  10595.  bra intowalk
  10596.  
  10597. ALATTACK:
  10598.  move.l #8,d0
  10599.  bra intowalk
  10600.  
  10601. AUXOBJ: dc.w 0
  10602.  
  10603. ALWALK:
  10604.  
  10605. ; jsr ViewpointToDraw
  10606. ; add.l d0,d0
  10607. ; move.l LINKFILE,a6
  10608. ; add.l #AlienStats,a6
  10609. ; moveq #0,d1
  10610. ; move.b TypeOfThing(a0),d1
  10611. ; muls #AlienStatLen,d1
  10612. ; add.l d1,a6
  10613. ; cmp.w #1,A_GFXType(a6)
  10614. ; bne.s NOSIDES2
  10615.  
  10616.  moveq #0,d0
  10617. intowalk:
  10618.  
  10619. NOSIDES2:
  10620.  
  10621.  move.b d0,2(a5)
  10622.  move.l LINKFILE,a6
  10623.  
  10624.  add.l #AlienAnimData,a6
  10625.  
  10626.  moveq #0,d1
  10627.  move.b TypeOfThing(a0),d1
  10628.  move.w .valtables+4(pc,d1.w*8),d1
  10629. ; muls #A_AnimLen,d1
  10630.  add.l d1,a6
  10631.  
  10632. ; move.l ANIMPOINTER,a6
  10633.  
  10634. ; muls #A_OptLen,d0
  10635.  move.w .valtables+2(pc,d0.w*8),d0
  10636.  add.w d0,a6
  10637.  
  10638.  move.w SecTimer(a0),d1
  10639.  move.w d1,d2
  10640. ; muls #A_FrameLen,d1
  10641.  move.w .valtables(pc,d1.w*8),d1
  10642.  
  10643.  moveq #0,d0
  10644.  move.b 5(a6,d1.w),d0
  10645.  beq.s .nosoundmake
  10646.  
  10647.  movem.l d0-d7/a0-a6,-(a7)
  10648.  subq #1,d0
  10649.  move.w d0,Samplenum
  10650.  clr.b notifplaying
  10651.  move.b 1(a0),IDNUM
  10652.  move.w #80,Noisevol
  10653.  move.l #ObjRotated,a1
  10654.  move.w (a0),d0
  10655.  lea (a1,d0.w*8),a1
  10656.  move.l (a1),Noisex
  10657.  jsr MakeSomeNoise
  10658.  movem.l (a7)+,d0-d7/a0-a6
  10659. .nosoundmake
  10660.  
  10661.  move.b 6(a6,d1.w),d0
  10662.  beq.s .noaction
  10663.  add.b #1,(a5)
  10664.  move.b d2,1(a5)
  10665. .noaction
  10666.  
  10667.  addq #1,d2
  10668.  
  10669.  moveq #0,d0
  10670.  move.b 7(a6,d1.w),d0
  10671.  beq .nospecial
  10672.  bra .special
  10673.  
  10674. .valtables:
  10675. val SET 0
  10676.  REPT 20
  10677.  dc.w A_FrameLen*val,A_OptLen*val
  10678.  dc.w A_AnimLen*val,0
  10679. val SET val+1
  10680.  ENDR
  10681.  
  10682. .special
  10683.  move.b d0,d3
  10684.  and.w #63,d3
  10685.  lsr.w #6,d0
  10686.  cmp.w #2,d0
  10687.  blt.s .storeval
  10688.  beq.s .randval
  10689.  
  10690.  sub.b #1,4(a5)
  10691.  beq.s .nospecial
  10692.  
  10693.  move.w d3,d2
  10694.  bra.s .nospecial
  10695.  
  10696. .randval:
  10697.  jsr GetRand
  10698.  divs d3,d0
  10699.  swap d0
  10700.  move.w d0,d3
  10701.  
  10702. .storeval:
  10703.  move.b d3,4(a5)
  10704. .nospecial:
  10705.  
  10706. ; move.w d2,d3
  10707.  move.w .valtables2(pc,d2.w*8),d3
  10708. ; muls #A_FrameLen,d3
  10709.  tst.b (a6,d3.w)
  10710.  bge.s .noendanim
  10711.  st 3(a5)
  10712.  move.w #0,d2
  10713. .noendanim
  10714.  move.w d2,SecTimer(a0)
  10715.  
  10716.  bra doneobj2
  10717.  
  10718. .valtables2:
  10719. val SET 0
  10720.  REPT 20
  10721.  dc.w A_FrameLen*val,A_OptLen*val
  10722.  dc.w A_AnimLen*val,0
  10723. val SET val+1
  10724.  ENDR
  10725.  
  10726.  
  10727. JUMPOBJECTANIM:
  10728.  bra doneobj2
  10729.  
  10730. timetodamage: dc.w 0
  10731. SAVESAVE: dc.w 0
  10732.  
  10733. dosomething:
  10734.  
  10735.  
  10736.  
  10737.  addq.w #1,FramesToDraw
  10738.  movem.l d0-d7/a0-a6,-(a7)
  10739.  
  10740.  jsr NARRATOR
  10741.  
  10742.  bsr DOALLANIMS
  10743.  
  10744.  sub.w #1,timetodamage
  10745.  bgt.s .nodam
  10746.  
  10747.  move.w #100,timetodamage
  10748.  
  10749.  move.l PLR1_Roompt,a0
  10750.  move.w ToFloorNoise(a0),d0
  10751.  tst.b PLR1_StoodInTop
  10752.  beq.s .okinbot
  10753.  move.w ToUpperFloorNoise(a0),d0
  10754. .okinbot:
  10755.  
  10756.  move.l LINKFILE,a0
  10757.  add.l #FloorData,a0
  10758.  move.w (a0,d0.w*4),d0    ; damage. 
  10759.  move.l PLR1_Obj,a0
  10760.  add.b d0,damagetaken(a0)
  10761.  
  10762.  move.l PLR2_Roompt,a0
  10763.  move.w ToFloorNoise(a0),d0
  10764.  tst.b PLR2_StoodInTop
  10765.  beq.s .okinbot2
  10766.  move.w ToUpperFloorNoise(a0),d0
  10767. .okinbot2:
  10768.  
  10769.  move.l LINKFILE,a0
  10770.  add.l #FloorData,a0
  10771.  move.w (a0,d0.w*4),d0    ; damage. 
  10772.  
  10773.  move.l PLR2_Obj,a0
  10774.  add.b d0,damagetaken(a0)
  10775.  
  10776. .nodam:
  10777.  
  10778.  move.l #KeyMap,a5
  10779.  
  10780.  tst.b 82(a5)    ;f3
  10781.  beq notogglesound
  10782.  
  10783.  tst.b lasttogsound
  10784.  bne notogglesound2
  10785.  
  10786.  st lasttogsound
  10787.  
  10788.  move.w TOPPOPT,d0
  10789.  addq #1,d0
  10790.  and.w #3,d0
  10791.  move.w d0,TOPPOPT
  10792.  move.b STEROPT(pc,d0.w*2),STEREO
  10793.  
  10794.  
  10795.  move.b STEROPT+1(pc,d0.w*2),d1
  10796.  muls #160,d0
  10797.  add.l #SOUNDOPTSTEXT,d0
  10798.  jsr SENDMESSAGE
  10799.  
  10800.  
  10801.  move.b d1,Prefsfile+1
  10802.  
  10803.  bra pastster
  10804.  
  10805.  STEROPT:
  10806.  dc.b 0,4
  10807.  dc.b $FF,4
  10808.  dc.b 0,8
  10809.  dc.b $ff,8
  10810.  
  10811. lasttogsound: dc.w 0
  10812.  
  10813. SOUNDOPTSTEXT:
  10814. ;      1234567890123456789012345678901234567890
  10815.  dc.b "Four Channel Mono Selected              "
  10816.  dc.b "                                        "
  10817.  dc.b "                                        "
  10818.  dc.b "                                        "
  10819.  
  10820.  dc.b "Four Channel Stereo Selected            "
  10821.  dc.b "                                        "
  10822.  dc.b "                                        "
  10823.  dc.b "                                        "
  10824.  
  10825.  dc.b "Eight Channel Mono Selected             "
  10826.  dc.b "                                        "
  10827.  dc.b "                                        "
  10828.  dc.b "                                        "
  10829.  
  10830.  dc.b "Eight Channel Stereo Selected           "
  10831.  dc.b "                                        "
  10832.  dc.b "                                        "
  10833.  dc.b "                                        "
  10834.  
  10835. LIGHTING: dc.w $FFff
  10836. OLDLTOG: dc.w 0
  10837.  
  10838. pastster:
  10839.  
  10840.  cmp.b #'4',d1
  10841.  seq.s CHANNELDATA+8
  10842.  seq.s CHANNELDATA+12
  10843.  seq.s CHANNELDATA+24
  10844.  seq.s CHANNELDATA+28
  10845.  
  10846. * Mt_init *********************
  10847.  st CHANNELDATA+8
  10848.  st CHANNELDATA
  10849. *******************************
  10850.  
  10851.  move.w #$f,$dff000+dmacon
  10852.  move.l #null,$dff0a0
  10853.  move.w #100,$dff0a4
  10854.  move.w #443,$dff0a6
  10855.  move.w #63,$dff0a8
  10856.  
  10857.  move.l #null2,$dff0b0
  10858.  move.w #100,$dff0b4
  10859.  move.w #443,$dff0b6
  10860.  move.w #63,$dff0b8
  10861.  
  10862.  move.l #null4,$dff0c0
  10863.  move.w #100,$dff0c4
  10864.  move.w #443,$dff0c6
  10865.  move.w #63,$dff0c8
  10866.  
  10867.  move.l #null3,$dff0d0
  10868.  move.w #100,$dff0d4
  10869.  move.w #443,$dff0d6
  10870.  move.w #63,$dff0d8
  10871.  
  10872.  move.l #empty,pos0LEFT
  10873.  move.l #empty,pos1LEFT
  10874.  move.l #empty,pos2LEFT
  10875.  move.l #empty,pos3LEFT
  10876.  move.l #empty,pos0RIGHT
  10877.  move.l #empty,pos1RIGHT
  10878.  move.l #empty,pos2RIGHT
  10879.  move.l #empty,pos3RIGHT
  10880.  move.l #emptyend,Samp0endLEFT
  10881.  move.l #emptyend,Samp1endLEFT
  10882.  move.l #emptyend,Samp2endLEFT
  10883.  move.l #emptyend,Samp3endLEFT
  10884.  move.l #emptyend,Samp0endRIGHT
  10885.  move.l #emptyend,Samp1endRIGHT
  10886.  move.l #emptyend,Samp2endRIGHT
  10887.  move.l #emptyend,Samp3endRIGHT
  10888.  
  10889.  move.w #10,d3
  10890. .willy
  10891.  btst #0,$dff000+intreqrl
  10892.  beq.s .willy
  10893.  move.w #1,$dff000+intreq
  10894.  
  10895.  dbra d3,.willy
  10896.  
  10897.  move.w #$820f,$dff000+dmacon
  10898.  
  10899.  bra notogglesound2
  10900.  
  10901. Prefsfile:
  10902.  dc.b 'k4nx'
  10903.  
  10904. notogglesound:
  10905.  clr.b lasttogsound
  10906. notogglesound2:
  10907.  
  10908.  
  10909.  tst.b 83(a5)
  10910.  beq nolighttoggle
  10911.  tst.b OLDLTOG
  10912.  bne nolighttoggle2
  10913.  st OLDLTOG
  10914.  
  10915.  move.l #LIGHTINGTEXT,d0
  10916.  not.b LIGHTING
  10917.  beq.s .noon
  10918.  add.l #160,d0
  10919. .noon:
  10920.  bra pastlighttext
  10921.  
  10922. LIGHTINGTEXT:
  10923.  dc.b "Lighting Effects Deactivated            "
  10924.  dc.b "                                        "
  10925.  dc.b "                                        "
  10926.  dc.b "                                        "
  10927.  
  10928.  dc.b "Lighting Effects Activated              "
  10929.  dc.b "                                        "
  10930.  dc.b "                                        "
  10931.  dc.b "                                        "
  10932.  
  10933. OLDRET: dc.w 0
  10934. OLDCENT: dc.w 0
  10935. OLDGOOD: dc.w 0
  10936.  
  10937. GOODRENDERTXT:
  10938.  dc.b "Rendering Quality : High                "
  10939.  dc.b "                                        "
  10940.  dc.b "                                        "
  10941.  dc.b "                                        "
  10942. BADRENDERTXT:
  10943.  dc.b "Rendering Quality : Reduced             "
  10944.  dc.b "                                        "
  10945.  dc.b "                                        "
  10946.  dc.b "                                        "
  10947.  
  10948. pastlighttext:
  10949.  
  10950.  jsr SENDMESSAGE
  10951.  
  10952. ; move.l d0,SCROLLPOINTER
  10953. ; move.w #0,SCROLLXPOS
  10954. ; add.l #160,d0
  10955. ; move.l d0,ENDSCROLL
  10956. ; move.w #40,SCROLLTIMER 
  10957.  
  10958.  bra nolighttoggle2
  10959.  
  10960. nolighttoggle:
  10961.  clr.b OLDLTOG
  10962. nolighttoggle2:
  10963.  
  10964.  
  10965.  tst.b 84(a5)
  10966.  beq.s noret
  10967.  tst.b OLDRET
  10968.  bne.s noret2
  10969.  st OLDRET
  10970.  
  10971.  jsr RETRIEVEPREVMESSAGE
  10972.  
  10973.  bra noret2
  10974.  
  10975. noret
  10976.  clr.b OLDRET
  10977. noret2:
  10978.  
  10979.  tst.b 85(a5)
  10980.  beq.s .nogood
  10981.  tst.b OLDGOOD
  10982.  bne.s .nogood2
  10983.  st OLDGOOD
  10984.  
  10985.  move.l #GOODRENDERTXT,d0
  10986.  not.b GOODRENDER
  10987.  bne.s .okgood
  10988.  move.l #BADRENDERTXT,d0
  10989. .okgood:
  10990.  
  10991.  jsr SENDMESSAGE
  10992.  
  10993.  bra .nogood2
  10994.  
  10995. .nogood
  10996.  clr.b OLDGOOD
  10997. .nogood2:
  10998.  
  10999.  
  11000.  tst.b $42(a5)
  11001.  bne.s .tabprsd
  11002.  clr.b tabheld
  11003.  bra.s .noswitch
  11004.  
  11005. .tabprsd:
  11006.  tst.b tabheld
  11007.  bne.s .noswitch
  11008.  not.b MAPON
  11009.  st tabheld
  11010. .noswitch
  11011.  
  11012.  tst.b $3e(a5)
  11013.  sne d0
  11014.  tst.b $1e(a5)
  11015.  sne d1
  11016.  tst.b $2d(a5)
  11017.  sne d2
  11018.  tst.b $2f(a5)
  11019.  sne d3
  11020.  
  11021.  tst.b $3d(a5)
  11022.  sne d4
  11023.  tst.b $3f(a5)
  11024.  sne d5
  11025.  tst.b $1d(a5)
  11026.  sne d6
  11027.  tst.b $1f(a5)
  11028.  sne d7
  11029.  
  11030.  or.b d4,d0
  11031.  or.b d5,d0
  11032.  or.b d6,d1
  11033.  or.b d7,d1
  11034.  or.b d4,d2
  11035.  or.b d6,d2
  11036.  or.b d7,d3
  11037.  or.b d5,d3
  11038.  
  11039.  move.w MAPBRIGHT,d4
  11040.  add.w #2,d4
  11041.  clr.l d5
  11042.  bset d4,d5
  11043.  
  11044.  tst.b d0
  11045.  beq.s .nomapup
  11046.  sub.w d5,mapzoff
  11047. .nomapup 
  11048.  
  11049.  tst.b d1
  11050.  beq.s .nomapdown
  11051.  add.w d5,mapzoff
  11052. .nomapdown 
  11053.  
  11054.  tst.b d2
  11055.  beq.s .nomapleft
  11056.  add.w d5,mapxoff
  11057. .nomapleft 
  11058.  
  11059.  tst.b d3
  11060.  beq.s .nomapright
  11061.  sub.w d5,mapxoff
  11062. .nomapright 
  11063.  
  11064.  tst.b $2e(a5)
  11065.  beq.s .nomapcentre
  11066.  
  11067.  move.w #0,mapxoff
  11068.  move.w #0,mapzoff
  11069.  
  11070. .nomapcentre
  11071.  
  11072. ; move.w STOPOFFSET,d0
  11073. ; tst.b 27(a5)
  11074. ; beq.s .nolookup
  11075. ; sub.w #5,d0
  11076. ; cmp.w #-80,d0
  11077. ; bgt.s .nolookup
  11078. ; move.w #-80,d0
  11079. ;.nolookup:
  11080. ; tst.b 42(a5)
  11081. ; beq.s .nolookdown
  11082. ; add.w #5,d0
  11083. ; cmp.w #80,d0
  11084. ; blt.s .nolookdown
  11085. ; move.w #80,d0
  11086. ;.nolookdown:
  11087. ;
  11088. ; move.w d0,STOPOFFSET
  11089. ; neg.w d0
  11090. ; add.w #120,d0
  11091. ; move.w d0,SMIDDLEY
  11092. ; muls #320*2,d0
  11093. ; move.l d0,SBIGMIDDLEY
  11094.  
  11095.  
  11096. ; jsr INITREC
  11097. ; jsr RECEIVE
  11098.  
  11099. ; tst.l BUFFER
  11100. ; beq.s justshake
  11101. ; st GOTTOSEND
  11102. ; move.l #OtherInter,$6c
  11103.  
  11104. justshake:
  11105.  
  11106. ; cmp.b #'b',Prefsfile+3
  11107. ; bne.s .noback
  11108.  
  11109.  
  11110.  jsr mt_music
  11111.  
  11112.  
  11113.  
  11114. ;.noback:
  11115.  
  11116.  bra dontshowtime
  11117.  
  11118.  tst.b oktodisplay
  11119.  beq dontshowtime
  11120.  clr.b oktodisplay
  11121.  subq.w #1,dispco
  11122.  bgt dontshowtime
  11123.  move.w #10,dispco
  11124.  
  11125.  move.l #TimerScr+10,a0
  11126.  move.l TimeCount,d0
  11127.  bge.s timenotneg
  11128.  move.l #1111*256,d0
  11129. timenotneg:
  11130.  asr.l #8,d0
  11131.  move.l #digits,a1
  11132.  move.w #7,d2
  11133. digitlop
  11134.  divs #10,d0
  11135.  swap d0
  11136.  lea (a1,d0.w*8),a2
  11137.  move.b (a2)+,(a0)
  11138.  move.b (a2)+,24(a0)
  11139.  move.b (a2)+,24*2(a0)
  11140.  move.b (a2)+,24*3(a0)
  11141.  move.b (a2)+,24*4(a0)
  11142.  move.b (a2)+,24*5(a0)
  11143.  move.b (a2)+,24*6(a0)
  11144.  move.b (a2)+,24*7(a0)
  11145.  subq #1,a0
  11146.  swap d0
  11147.  ext.l d0
  11148.  dbra d2,digitlop
  11149.  
  11150.  move.l #TimerScr+10+24*10,a0
  11151.  move.l NumTimes,d0
  11152.  move.l #digits,a1
  11153.  move.w #3,d2
  11154. digitlop2
  11155.  divs #10,d0
  11156.  swap d0
  11157.  lea (a1,d0.w*8),a2
  11158.  move.b (a2)+,(a0)
  11159.  move.b (a2)+,24(a0)
  11160.  move.b (a2)+,24*2(a0)
  11161.  move.b (a2)+,24*3(a0)
  11162.  move.b (a2)+,24*4(a0)
  11163.  move.b (a2)+,24*5(a0)
  11164.  move.b (a2)+,24*6(a0)
  11165.  move.b (a2)+,24*7(a0)
  11166.  subq #1,a0
  11167.  swap d0
  11168.  ext.l d0
  11169.  dbra d2,digitlop2
  11170.  
  11171.  move.l #TimerScr+10+24*20,a0
  11172.  moveq #0,d0
  11173.  move.w FramesToDraw,d0
  11174.  move.l #digits,a1
  11175.  move.w #2,d2
  11176. digitlop3
  11177.  divs #10,d0
  11178.  swap d0
  11179.  lea (a1,d0.w*8),a2
  11180.  move.b (a2)+,(a0)
  11181.  move.b (a2)+,24(a0)
  11182.  move.b (a2)+,24*2(a0)
  11183.  move.b (a2)+,24*3(a0)
  11184.  move.b (a2)+,24*4(a0)
  11185.  move.b (a2)+,24*5(a0)
  11186.  move.b (a2)+,24*6(a0)
  11187.  move.b (a2)+,24*7(a0)
  11188.  subq #1,a0
  11189.  swap d0
  11190.  ext.l d0
  11191.  dbra d2,digitlop3
  11192.  
  11193. dontshowtime:
  11194.  
  11195.  
  11196.  move.l alanptr,a0
  11197.  move.l (a0)+,alframe
  11198.  cmp.l #endalan,a0
  11199.  blt.s nostartalan
  11200.  move.l #alan,a0
  11201. nostartalan:
  11202.  move.l a0,alanptr
  11203.  
  11204.  
  11205.  tst.b READCONTROLS
  11206.  beq nocontrols
  11207.  
  11208.  cmp.b #'s',mors
  11209.  beq control2
  11210.  
  11211.  tst.w PLAYERONEHEALTH
  11212.  bgt .propercontrol
  11213.  
  11214.  move.l #7*2116,hitcol
  11215.  move.l #PLR1_Obj,a0
  11216.  move.w #-1,12+128(a0)
  11217.  
  11218.  clr.b PLR1_fire
  11219.  clr.b PLR1_clicked
  11220.  move.w #0,ADDTOBOBBLE
  11221.  move.l #playercrouched,PLR1s_height
  11222.  move.w #-80,d0
  11223.  move.w d0,STOPOFFSET
  11224.  neg.w d0
  11225.  add.w TOTHEMIDDLE,d0
  11226.  move.w d0,SMIDDLEY
  11227.  muls #320,d0
  11228.  move.l d0,SBIGMIDDLEY
  11229.  jsr PLR1_fall
  11230.  
  11231.  move.l PLR1s_xspdval,d6
  11232.  move.l PLR1s_zspdval,d7
  11233.  
  11234.  tst.b SLOWDOWN
  11235.  beq.s .nofriction
  11236.  
  11237.  neg.l d6
  11238.  ble.s .nobug1
  11239.  asr.l #3,d6
  11240.  add.l #1,d6
  11241.  bra.s .bug1
  11242. .nobug1
  11243.  asr.l #3,d6
  11244. .bug1:
  11245.  
  11246.  neg.l d7
  11247.  ble.s .nobug2
  11248.  asr.l #3,d7
  11249.  add.l #1,d7
  11250.  bra.s .bug2
  11251. .nobug2
  11252.  asr.l #3,d7
  11253. .bug2: 
  11254.  
  11255.  add.l d6,PLR1s_xspdval
  11256.  add.l d7,PLR1s_zspdval
  11257.  
  11258. .nofriction:
  11259.  move.l PLR1s_xspdval,d6
  11260.  move.l PLR1s_zspdval,d7
  11261.  add.l d6,PLR1s_xoff
  11262.  add.l d7,PLR1s_zoff
  11263.  
  11264.  move.w PLR1s_angspd,d3
  11265.  tst.b SLOWDOWN
  11266.  beq.s .nofric
  11267.  asr.w #2,d3
  11268.  bge.s .nneg
  11269.  addq #1,d3
  11270. .nneg:
  11271. .nofric:
  11272.  
  11273.  move.w d3,PLR1s_angspd
  11274.  add.w d3,PLR1s_angpos
  11275.  add.w d3,PLR1s_angpos
  11276.  and.w #8190,PLR1s_angpos
  11277.  
  11278.  bra nocontrols
  11279.  
  11280. .propercontrol:
  11281.  
  11282.  tst.b PLR1MOUSE
  11283.  beq.s PLR1_nomouse
  11284.  bsr PLR1_mouse_control
  11285. PLR1_nomouse:
  11286.  tst.b PLR1KEYS
  11287.  beq.s PLR1_nokeys
  11288.  bsr PLR1_keyboard_control
  11289. PLR1_nokeys:
  11290. ; tst.b PLR1PATH
  11291. ; beq.s PLR1_nopath
  11292. ; bsr PLR1_follow_path
  11293. ;PLR1_nopath:
  11294.  tst.b PLR1JOY
  11295.  beq.s PLR1_nojoy
  11296.  bsr PLR1_JoyStick_control
  11297. PLR1_nojoy: 
  11298.  bra nocontrols
  11299.  
  11300. control2:
  11301.  
  11302.  tst.w PLAYERTWOHEALTH
  11303.  bgt .propercontrol
  11304.  
  11305.  move.l #7*2116,hitcol
  11306.  move.l #PLR1_Obj,a0
  11307.  move.w #-1,12+128(a0)
  11308.  clr.b PLR2_fire
  11309.  move.w #0,ADDTOBOBBLE
  11310.  move.l #playercrouched,PLR2s_height
  11311.  move.w #-80,d0
  11312.  move.w d0,STOPOFFSET
  11313.  neg.w d0
  11314.  add.w TOTHEMIDDLE,d0
  11315.  move.w d0,SMIDDLEY
  11316.  muls #320,d0
  11317.  move.l d0,SBIGMIDDLEY
  11318.  jsr PLR2_fall
  11319.  
  11320.  move.l PLR2s_xspdval,d6
  11321.  move.l PLR2s_zspdval,d7
  11322.  
  11323.  tst.b SLOWDOWN
  11324.  beq.s .nofriction
  11325.  
  11326.  neg.l d6
  11327.  ble.s .nobug1
  11328.  asr.l #3,d6
  11329.  add.l #1,d6
  11330.  bra.s .bug1
  11331. .nobug1
  11332.  asr.l #3,d6
  11333. .bug1:
  11334.  
  11335.  neg.l d7
  11336.  ble.s .nobug2
  11337.  asr.l #3,d7
  11338.  add.l #1,d7
  11339.  bra.s .bug2
  11340. .nobug2
  11341.  asr.l #3,d7
  11342. .bug2: 
  11343.  
  11344.  add.l d6,PLR2s_xspdval
  11345.  add.l d7,PLR2s_zspdval
  11346.  
  11347. .nofriction:
  11348.  move.l PLR2s_xspdval,d6
  11349.  move.l PLR2s_zspdval,d7
  11350.  add.l d6,PLR2s_xoff
  11351.  add.l d7,PLR2s_zoff
  11352.  
  11353.  move.w PLR2s_angspd,d3
  11354.  tst.b SLOWDOWN
  11355.  beq.s .nofric
  11356.  asr.w #2,d3
  11357.  bge.s .nneg
  11358.  addq #1,d3
  11359. .nneg:
  11360. .nofric:
  11361.  
  11362.  move.w d3,PLR2s_angspd
  11363.  add.w d3,PLR2s_angpos
  11364.  add.w d3,PLR2s_angpos
  11365.  and.w #8190,PLR2s_angpos
  11366.  
  11367.  bra.s nocontrols
  11368.  
  11369. .propercontrol:
  11370.  tst.b PLR2MOUSE
  11371.  beq.s PLR2_nomouse
  11372.  bsr PLR2_mouse_control
  11373. PLR2_nomouse:
  11374.  tst.b PLR2KEYS
  11375.  beq.s PLR2_nokeys
  11376.  bsr PLR2_keyboard_control
  11377. PLR2_nokeys:
  11378. ; tst.b PLR2PATH
  11379. ; beq.s PLR2_nopath
  11380. ; bsr PLR1_follow_path
  11381. ;PLR2_nopath:
  11382.  tst.b PLR2JOY
  11383.  beq.s PLR2_nojoy
  11384.  bsr PLR2_JoyStick_control
  11385. PLR2_nojoy: 
  11386.  
  11387.  
  11388. nocontrols:
  11389.  
  11390.  move.l #$dff000,a6
  11391.  
  11392.  cmp.b #'4',Prefsfile+1
  11393.  bne.s nomuckabout
  11394.  
  11395.  move.w #$0,d0 
  11396.  tst.b NoiseMade0LEFT
  11397.  beq.s noturnoff0
  11398.  move.w #1,d0
  11399. noturnoff0:
  11400.  tst.b NoiseMade0RIGHT
  11401.  beq.s noturnoff1
  11402.  or.w #2,d0
  11403. noturnoff1:
  11404.  tst.b NoiseMade1RIGHT
  11405.  beq.s noturnoff2
  11406.  or.w #4,d0
  11407. noturnoff2:
  11408.  tst.b NoiseMade1LEFT
  11409.  beq.s noturnoff3
  11410.  or.w #8,d0
  11411. noturnoff3:
  11412.  
  11413. *********************
  11414.  and.w #$fffe,d0
  11415. *********************
  11416.  
  11417.     move.w d0,dmacon(a6)
  11418.  
  11419. nomuckabout:
  11420.  
  11421.  
  11422. ; tst.b PLR2_fire
  11423. ; beq.s firenotpressed2
  11424. ; fire was pressed last time.
  11425. ; btst #7,$bfe001
  11426. ; bne.s firenownotpressed2
  11427. ; fire is still pressed this time.
  11428. ; st PLR2_fire
  11429. ; bra dointer
  11430.  
  11431. firenownotpressed2:
  11432. ; fire has been released.
  11433. ; clr.b PLR2_fire
  11434. ; bra dointer
  11435.  
  11436. firenotpressed2
  11437.  
  11438. ; fire was not pressed last frame...
  11439.  
  11440. ; btst #7,$bfe001
  11441. ; if it has still not been pressed, go back above
  11442. ; bne.s firenownotpressed2
  11443. ; fire was not pressed last time, and was this time, so has
  11444. ; been clicked.
  11445. ; st PLR2_clicked
  11446. ; st PLR2_fire
  11447.  
  11448. dointer
  11449.  
  11450. JUSTSOUNDS:
  11451.  
  11452.  tst.b dosounds
  11453.  beq.s .notthing
  11454.  
  11455.  cmp.b #'4',Prefsfile+1
  11456.     beq fourchannel
  11457.  
  11458.  btst #1,$dff000+intreqr
  11459.     bne.s newsampbitl
  11460.  
  11461. .notthing:
  11462.  
  11463.  movem.l (a7)+,d0-d7/a0-a6
  11464.  
  11465.  moveq #0,d0
  11466.  rts
  11467.  
  11468.  
  11469. dosounds: dc.w 0
  11470.  
  11471. swappedem: dc.w 0
  11472.  
  11473. newsampbitl:
  11474.  
  11475.  
  11476.  
  11477.  move.w #$200,$dff000+intreq
  11478.  
  11479.  tst.b CHANNELDATA
  11480.  bne nochannel0
  11481.  
  11482.  move.l pos0LEFT,a0
  11483.  move.l pos2LEFT,a1
  11484.  
  11485.  move.l #tab,a2
  11486.  
  11487.  moveq #0,d0
  11488.  moveq #0,d1
  11489.  move.b vol0left,d0
  11490.  move.b vol2left,d1
  11491.  cmp.b d1,d0
  11492.  slt swappedem
  11493.  bge.s fbig0
  11494.  
  11495. ; d1 is bigger so scale d0 and use d1
  11496. ; as audiochannel volume.
  11497.  
  11498.  exg a0,a1
  11499.  asl.w #6,d0
  11500.  divs d1,d0
  11501.  lsl.w #8,d0
  11502.  adda.w d0,a2
  11503.  move.w d1,$dff0a8
  11504.  bra.s donechan0
  11505.  
  11506. fbig0:
  11507.  tst.w d0
  11508.  beq.s donechan0
  11509.  asl.w #6,d1
  11510.  divs d0,d1
  11511.  lsl.w #8,d1
  11512.  adda.w d1,a2
  11513.  move.w d0,$dff0a8
  11514.  
  11515. donechan0:
  11516.  
  11517.  move.l Aupt0,a3
  11518.  move.l a3,$dff0a0
  11519.  move.l Auback0,Aupt0
  11520.  move.l a3,Auback0
  11521.  
  11522.  move.l Auback0,a3
  11523.  
  11524.  moveq #0,d0
  11525.  moveq #0,d1
  11526.  moveq #0,d2
  11527.  moveq #0,d3
  11528.  moveq #0,d4
  11529.  moveq #0,d5
  11530.  move.w #49,d7
  11531. loop:
  11532.  move.l (a0)+,d0
  11533.  move.b (a1)+,d1
  11534.  move.b (a1)+,d2
  11535.  move.b (a1)+,d3
  11536.  move.b (a1)+,d4
  11537.  move.b (a2,d3.w),d5
  11538.  swap d5
  11539.  move.b (a2,d1.w),d5
  11540.  asl.l #8,d5
  11541.  move.b (a2,d2.w),d5
  11542.  swap d5
  11543.  move.b (a2,d4.w),d5
  11544.  add.l d5,d0
  11545.  move.l d0,(a3)+
  11546.  dbra d7,loop
  11547.  
  11548.  tst.b swappedem
  11549.  beq.s .ok23
  11550.  exg a0,a1
  11551. .ok23:
  11552.  
  11553.  cmp.l Samp0endLEFT,a0
  11554.  blt.s .notoffendsamp1
  11555.  move.l #empty,a0
  11556.  move.l #emptyend,Samp0endLEFT
  11557.  move.b #0,vol0left
  11558.  st LEFTCHANDATA+1
  11559.  move.w #0,LEFTCHANDATA+2
  11560. .notoffendsamp1:
  11561.  
  11562.  cmp.l Samp2endLEFT,a1
  11563.  blt.s .notoffendsamp2
  11564.  move.l #empty,a1
  11565.  move.l #emptyend,Samp2endLEFT
  11566.  move.b #0,vol2left
  11567.  st LEFTCHANDATA+1+8
  11568.  move.w #0,LEFTCHANDATA+2+8
  11569. .notoffendsamp2:
  11570.  
  11571.  move.l a0,pos0LEFT
  11572.  move.l a1,pos2LEFT
  11573.  
  11574. nochannel0:
  11575.  
  11576.  tst.b CHANNELDATA+16
  11577.  bne nochannel1
  11578.  
  11579.  
  11580.  move.l pos0RIGHT,a0
  11581.  move.l pos2RIGHT,a1
  11582.  
  11583.  move.l Aupt1,a3
  11584.  move.l a3,$dff0b0
  11585.  move.l Auback1,Aupt1
  11586.  move.l a3,Auback1
  11587.  
  11588.  move.l #tab,a2
  11589.  
  11590.  moveq #0,d0
  11591.  moveq #0,d1
  11592.  move.b vol0right,d0
  11593.  move.b vol2right,d1
  11594.  cmp.b d1,d0
  11595.  slt swappedem
  11596.  bge.s fbig1
  11597.  
  11598. ; d1 is bigger so scale d0 and use d1
  11599. ; as audiochannel volume.
  11600.  
  11601.  exg a0,a1
  11602.  asl.w #6,d0
  11603.  divs d1,d0
  11604.  lsl.w #8,d0
  11605.  adda.w d0,a2
  11606.  move.w d1,$dff0b8
  11607.  bra.s donechan1
  11608.  
  11609. fbig1:
  11610.  tst.w d0
  11611.  beq.s donechan1
  11612.  asl.w #6,d1
  11613.  divs d0,d1
  11614.  lsl.w #8,d1
  11615.  adda.w d1,a2
  11616.  move.w d0,$dff0b8
  11617.  
  11618. donechan1:
  11619.  moveq #0,d0
  11620.  moveq #0,d1
  11621.  moveq #0,d2
  11622.  moveq #0,d3
  11623.  moveq #0,d4
  11624.  moveq #0,d5
  11625.  move.w #49,d7
  11626. loop2:
  11627.  move.l (a0)+,d0
  11628.  move.b (a1)+,d1
  11629.  move.b (a1)+,d2
  11630.  move.b (a1)+,d3
  11631.  move.b (a1)+,d4
  11632.  move.b (a2,d3.w),d5
  11633.  swap d5
  11634.  move.b (a2,d1.w),d5
  11635.  asl.l #8,d5
  11636.  move.b (a2,d2.w),d5
  11637.  swap d5
  11638.  move.b (a2,d4.w),d5
  11639.  add.l d5,d0
  11640.  move.l d0,(a3)+
  11641.  dbra d7,loop2
  11642.  
  11643.  tst.b swappedem
  11644.  beq.s ok01
  11645.  exg a0,a1
  11646. ok01:
  11647.  
  11648.  cmp.l Samp0endRIGHT,a0
  11649.  blt.s .notoffendsamp1
  11650.  move.l #empty,a0
  11651.  move.l #emptyend,Samp0endRIGHT
  11652.  move.b #0,vol0right
  11653.  st RIGHTCHANDATA+1
  11654.  move.w #0,RIGHTCHANDATA+2
  11655. .notoffendsamp1:
  11656.  
  11657.  cmp.l Samp2endRIGHT,a1
  11658.  blt.s .notoffendsamp2
  11659.  move.l #empty,a1
  11660.  move.l #emptyend,Samp2endRIGHT
  11661.  move.b #0,vol2right
  11662.  st RIGHTCHANDATA+1+8
  11663.  move.w #0,RIGHTCHANDATA+2+8
  11664. .notoffendsamp2:
  11665.  
  11666.  move.l a0,pos0RIGHT
  11667.  move.l a1,pos2RIGHT
  11668.  
  11669. nochannel1:
  11670.  
  11671. ******************* Other two channels
  11672.  
  11673.  move.l pos1LEFT,a0
  11674.  move.l pos3LEFT,a1
  11675.  
  11676.  move.l #tab,a2
  11677.  
  11678.  moveq #0,d0
  11679.  moveq #0,d1
  11680.  move.b vol1left,d0
  11681.  move.b vol3left,d1
  11682.  cmp.b d1,d0
  11683.  slt swappedem
  11684.  bge.s fbig2
  11685.  
  11686. ; d1 is bigger so scale d0 and use d1
  11687. ; as audiochannel volume.
  11688.  
  11689.  exg a0,a1
  11690.  asl.w #6,d0
  11691.  divs d1,d0
  11692.  lsl.w #8,d0
  11693.  adda.w d0,a2
  11694.  move.w d1,$dff0d8
  11695.  bra.s donechan2
  11696.  
  11697. fbig2:
  11698.  tst.w d0
  11699.  beq.s donechan2
  11700.  asl.w #6,d1
  11701.  divs d0,d1
  11702.  lsl.w #8,d1
  11703.  adda.w d1,a2
  11704.  move.w d0,$dff0d8
  11705.  
  11706. donechan2:
  11707.  
  11708.  move.l Aupt2,a3
  11709.  move.l a3,$dff0d0
  11710.  move.l Auback2,Aupt2
  11711.  move.l a3,Auback2
  11712.  
  11713.  moveq #0,d0
  11714.  moveq #0,d1
  11715.  moveq #0,d2
  11716.  moveq #0,d3
  11717.  moveq #0,d4
  11718.  moveq #0,d5
  11719.  move.w #49,d7
  11720. loop3:
  11721.  move.l (a0)+,d0
  11722.  move.b (a1)+,d1
  11723.  move.b (a1)+,d2
  11724.  move.b (a1)+,d3
  11725.  move.b (a1)+,d4
  11726.  move.b (a2,d3.w),d5
  11727.  swap d5
  11728.  move.b (a2,d1.w),d5
  11729.  asl.l #8,d5
  11730.  move.b (a2,d2.w),d5
  11731.  swap d5
  11732.  move.b (a2,d4.w),d5
  11733.  add.l d5,d0
  11734.  move.l d0,(a3)+
  11735.  dbra d7,loop3
  11736.  
  11737.  tst.b swappedem
  11738.  beq.s .ok23
  11739.  exg a0,a1
  11740. .ok23:
  11741.  
  11742.  cmp.l Samp1endLEFT,a0
  11743.  blt.s .notoffendsamp3
  11744.  move.l #empty,a0
  11745.  move.l #emptyend,Samp1endLEFT
  11746.  move.b #0,vol1left
  11747.  st LEFTCHANDATA+1+4
  11748.  move.w #0,LEFTCHANDATA+2+4
  11749. .notoffendsamp3:
  11750.  
  11751.  cmp.l Samp3endLEFT,a1
  11752.  blt.s .notoffendsamp4
  11753.  move.l #empty,a1
  11754.  move.l #emptyend,Samp3endLEFT
  11755.  move.b #0,vol3left
  11756.  st LEFTCHANDATA+1+12
  11757.  move.w #0,LEFTCHANDATA+2+12
  11758. .notoffendsamp4:
  11759.  
  11760.  move.l a0,pos1LEFT
  11761.  move.l a1,pos3LEFT
  11762.  
  11763.  move.l pos1RIGHT,a0
  11764.  move.l pos3RIGHT,a1
  11765.  
  11766.  move.l Aupt3,a3
  11767.  move.l a3,$dff0c0
  11768.  move.l Auback3,Aupt3
  11769.  move.l a3,Auback3
  11770.  
  11771.  move.l #tab,a2
  11772.  
  11773.  moveq #0,d0
  11774.  moveq #0,d1
  11775.  move.b vol1right,d0
  11776.  move.b vol3right,d1
  11777.  cmp.b d1,d0
  11778.  slt.s swappedem
  11779.  bge.s fbig3
  11780.  
  11781.  exg a0,a1
  11782.  asl.w #6,d0
  11783.  divs d1,d0
  11784.  lsl.w #8,d0
  11785.  adda.w d0,a2
  11786.  move.w d1,$dff0c8
  11787.  bra.s donechan3
  11788.  
  11789. fbig3:
  11790.  tst.w d0
  11791.  beq.s donechan3
  11792.  asl.w #6,d1
  11793.  divs d0,d1
  11794.  lsl.w #8,d1
  11795.  adda.w d1,a2
  11796.  move.w d0,$dff0c8
  11797. donechan3:
  11798.  
  11799.  moveq #0,d0
  11800.  moveq #0,d1
  11801.  moveq #0,d2
  11802.  moveq #0,d3
  11803.  moveq #0,d4
  11804.  moveq #0,d5
  11805.  move.w #49,d7
  11806. loop4:
  11807.  move.l (a0)+,d0
  11808.  move.b (a1)+,d1
  11809.  move.b (a1)+,d2
  11810.  move.b (a1)+,d3
  11811.  move.b (a1)+,d4
  11812.  move.b (a2,d3.w),d5
  11813.  swap d5
  11814.  move.b (a2,d1.w),d5
  11815.  asl.l #8,d5
  11816.  move.b (a2,d2.w),d5
  11817.  swap d5
  11818.  move.b (a2,d4.w),d5
  11819.  add.l d5,d0
  11820.  move.l d0,(a3)+
  11821.  dbra d7,loop4
  11822.  
  11823.  tst.b swappedem
  11824.  beq.s .ok23
  11825.  exg a0,a1
  11826. .ok23:
  11827.  
  11828.  cmp.l Samp1endRIGHT,a0
  11829.  blt.s notoffendsamp3
  11830.  move.l #empty,a0
  11831.  move.l #emptyend,Samp1endRIGHT
  11832.  move.b #0,vol1right
  11833.  st RIGHTCHANDATA+1+4
  11834.  move.w #0,RIGHTCHANDATA+2+4
  11835. notoffendsamp3:
  11836.  
  11837.  cmp.l Samp3endRIGHT,a1
  11838.  blt.s notoffendsamp4
  11839.  move.l #empty,a1
  11840.  move.l #emptyend,Samp3endRIGHT
  11841.  move.b #0,vol3right
  11842.  st RIGHTCHANDATA+1+12
  11843.  move.w #0,RIGHTCHANDATA+2+12
  11844. notoffendsamp4:
  11845.  
  11846.  move.l a0,pos1RIGHT
  11847.  move.l a1,pos3RIGHT
  11848.  
  11849.  movem.l (a7)+,d0-d7/a0-a6
  11850. ; tst.b counting
  11851. ; beq .nostartcounter
  11852. ; JSR STARTCOUNT
  11853. ;.nostartcounter:
  11854.  
  11855.  move.w #$820f,$dff000+dmacon
  11856.  
  11857.  moveq #0,d0
  11858.  rts
  11859.  
  11860. ***********************************
  11861. * 4 channel sound routine
  11862. ***********************************
  11863.  
  11864. fourchannel:
  11865.  
  11866.  move.l #$dff000,a6
  11867.  
  11868.  tst.b LEFTCHANDATA
  11869.  bne.s NoChan0sound
  11870.  
  11871.  btst #7,intreqrl(a6)
  11872.  beq.s nofinish0
  11873. ; move.w #0,LEFTCHANDATA+2
  11874. ; st LEFTCHANDATA+1
  11875.  move.l #null,$a0(a6)
  11876.  move.w #100,$a4(a6) 
  11877.  move.w #$0080,intreq(a6)
  11878. nofinish0:
  11879.  
  11880.  tst.b NoiseMade0pLEFT
  11881.  beq.s NoChan0sound
  11882.  
  11883.  move.l Samp0endLEFT,d0
  11884.  move.l pos0LEFT,d1
  11885.  sub.l d1,d0
  11886.  lsr.l #1,d0
  11887.  move.w d0,$a4(a6)
  11888.  move.l d1,$a0(a6)
  11889.  ext.l d0
  11890.  divs #100,d0
  11891.  move.w d0,playnull0
  11892.  move.w #$8201,dmacon(a6)
  11893.  moveq #0,d0
  11894.  move.b vol0left,d0
  11895.  move.w d0,$a8(a6)
  11896.  
  11897. NoChan0sound:
  11898.  
  11899. *****************************************
  11900. *****************************************
  11901.  
  11902.  btst #0,intreqr(a6)
  11903.  beq.s nofinish1
  11904.  move.l #null,$b0(a6)
  11905.  move.w #100,$b4(a6)
  11906.  move.w #$0100,intreq(a6)
  11907. nofinish1:
  11908.  
  11909.  tst.b NoiseMade0pRIGHT
  11910.  beq.s NoChan1sound
  11911.  
  11912.  move.l Samp0endRIGHT,d0
  11913.  move.l pos0RIGHT,d1
  11914.  sub.l d1,d0
  11915.  lsr.l #1,d0
  11916.  move.w d0,$b4(a6)
  11917.  move.l d1,$b0(a6)
  11918.  ext.l d0
  11919.  divs #100,d0
  11920.  move.w d0,playnull1
  11921.  move.w #$8202,dmacon(a6)
  11922.  moveq #0,d0
  11923.  move.b vol0right,d0
  11924.  move.w d0,$b8(a6)
  11925.  
  11926. NoChan1sound:
  11927.  
  11928. *****************************************
  11929. *****************************************
  11930.  
  11931.  btst #1,intreqr(a6)
  11932.  beq.s nofinish2
  11933.  move.l #null,$c0(a6)
  11934.  move.w #100,$c4(a6)
  11935.  move.w #$0200,intreq(a6)
  11936. nofinish2:
  11937.  
  11938.  tst.b NoiseMade1pRIGHT
  11939.  beq.s NoChan2sound
  11940.  
  11941.  move.l Samp1endRIGHT,d0
  11942.  move.l pos1RIGHT,d1
  11943.  sub.l d1,d0
  11944.  lsr.l #1,d0
  11945.  move.w d0,$c4(a6)
  11946.  ext.l d0
  11947.  divs #100,d0
  11948.  move.w d0,playnull2
  11949.  
  11950.  move.l d1,$c0(a6)
  11951.  move.w #$8204,dmacon(a6)
  11952.  moveq #0,d0
  11953.  move.b vol1right,d0
  11954.  move.w d0,$c8(a6)
  11955.  
  11956. NoChan2sound:
  11957.  
  11958. *****************************************
  11959. *****************************************
  11960.  
  11961.  btst #2,intreqr(a6)
  11962.  beq.s nofinish3
  11963.  move.l #null,$d0(a6)
  11964.  move.w #100,$d4(a6)
  11965.  move.w #$0400,intreq(a6)
  11966. nofinish3:
  11967.  
  11968.  tst.b NoiseMade1pLEFT
  11969.  beq.s NoChan3sound
  11970.  
  11971.  move.l Samp1endLEFT,d0
  11972.  move.l pos1LEFT,d1
  11973.  sub.l d1,d0
  11974.  lsr.l #1,d0
  11975.  move.w d0,$d4(a6)
  11976.  ext.l d0
  11977.  divs #100,d0
  11978.  move.w d0,playnull3
  11979.  move.l d1,$d0(a6)
  11980.  move.w #$8208,dmacon(a6)
  11981.  moveq #0,d0
  11982.  move.b vol1left,d0
  11983.  move.w d0,$d8(a6)
  11984.  
  11985. NoChan3sound:
  11986.  
  11987. nomorechannels:
  11988.  
  11989.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  11990.  move.l #0,NoiseMade0LEFT
  11991.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  11992.  move.l #0,NoiseMade0RIGHT
  11993.  
  11994. ; tst.b playnull0
  11995. ; beq.s .nnul
  11996. ; sub.b #1,playnull0
  11997. ; bra.s chan0still
  11998. ;.nnul:
  11999. ;chan0still:
  12000.  
  12001.  tst.b NoiseMade0pLEFT
  12002.  bne.s chan0still
  12003.  tst.w playnull0
  12004.  beq.s nnul0
  12005.  sub.w #1,playnull0
  12006.  bra.s chan0still
  12007. nnul0:
  12008.  move.w #0,LEFTCHANDATA+2
  12009.  st LEFTCHANDATA+1
  12010. chan0still:
  12011.  
  12012.  tst.b NoiseMade0pRIGHT
  12013.  bne.s chan1still    ;it'll never work
  12014.  tst.w playnull1
  12015.  beq.s nnul1
  12016.  sub.w #1,playnull1
  12017.  bra.s chan1still
  12018. nnul1:
  12019.  move.w #0,RIGHTCHANDATA+2
  12020.  st RIGHTCHANDATA+1
  12021. chan1still:
  12022.  
  12023.  tst.b NoiseMade1pRIGHT
  12024.  bne.s chan2still
  12025.  tst.w playnull2
  12026.  beq.s nnul2
  12027.  sub.w #1,playnull2
  12028.  bra.s chan2still
  12029. nnul2:
  12030.  move.w #0,RIGHTCHANDATA+2+4
  12031.  st RIGHTCHANDATA+1+4
  12032. chan2still:
  12033.  
  12034.  tst.b NoiseMade1pLEFT
  12035.  bne.s chan3still
  12036.  tst.w playnull3
  12037.  beq.s nnul3
  12038.  sub.w #1,playnull3
  12039.  bra.s chan3still
  12040. nnul3:
  12041.  move.w #0,LEFTCHANDATA+2+4
  12042.  st LEFTCHANDATA+1+4
  12043.  
  12044. chan3still:
  12045.  
  12046.  
  12047.  movem.l (a7)+,d0-d7/a0-a6
  12048.  
  12049.  moveq #0,d0
  12050.  rts
  12051.  
  12052. backbeat: dc.w 0
  12053.  
  12054. playnull0: dc.w 0
  12055. playnull1: dc.w 0
  12056. playnull2: dc.w 0
  12057. playnull3: dc.w 0
  12058.  
  12059. Samp0endRIGHT: dc.l emptyend
  12060. Samp1endRIGHT: dc.l emptyend
  12061. Samp2endRIGHT: dc.l emptyend
  12062. Samp3endRIGHT: dc.l emptyend
  12063. Samp0endLEFT: dc.l emptyend
  12064. Samp1endLEFT: dc.l emptyend
  12065. Samp2endLEFT: dc.l emptyend
  12066. Samp3endLEFT: dc.l emptyend
  12067.  
  12068. Aupt0: dc.l null
  12069. Auback0: dc.l null+500
  12070. Aupt2: dc.l null3
  12071. Auback2: dc.l null3+500
  12072. Aupt3: dc.l null4
  12073. Auback3: dc.l null4+500
  12074. Aupt1: dc.l null2
  12075. Auback1: dc.l null2+500
  12076.  
  12077. NoiseMade0LEFT: dc.b 0
  12078. NoiseMade1LEFT: dc.b 0
  12079. NoiseMade2LEFT: dc.b 0
  12080. NoiseMade3LEFT: dc.b 0
  12081. NoiseMade0pLEFT: dc.b 0
  12082. NoiseMade1pLEFT: dc.b 0
  12083. NoiseMade2pLEFT: dc.b 0
  12084. NoiseMade3pLEFT: dc.b 0
  12085. NoiseMade0RIGHT: dc.b 0
  12086. NoiseMade1RIGHT: dc.b 0
  12087. NoiseMade2RIGHT: dc.b 0
  12088. NoiseMade3RIGHT: dc.b 0
  12089. NoiseMade0pRIGHT: dc.b 0
  12090. NoiseMade1pRIGHT: dc.b 0
  12091. NoiseMade2pRIGHT: dc.b 0
  12092. NoiseMade3pRIGHT: dc.b 0
  12093.  
  12094. empty: ds.l 100
  12095. emptyend:
  12096.  
  12097. **************************************
  12098. * I want a routine to calculate all the
  12099. * info needed for the sound player to
  12100. * work, given say position of noise, volume
  12101. * and sample number.
  12102.  
  12103. Samplenum: dc.w 0
  12104. Noisex: dc.w 0
  12105. Noisez: dc.w 0
  12106. Noisevol: dc.w 0
  12107. chanpick: dc.w 0
  12108. IDNUM: dc.w 0
  12109. needleft: dc.b 0
  12110. needright: dc.b 0
  12111. STEREO: dc.b $0
  12112. even
  12113. prot6: dc.w 0
  12114.  
  12115.  even
  12116.  
  12117. CHANNELDATA:
  12118. LEFTCHANDATA:
  12119.  dc.l $00000000
  12120.  dc.l $00000000
  12121.  dc.l $FF000000
  12122.  dc.l $FF000000
  12123. RIGHTCHANDATA:
  12124.  dc.l $00000000
  12125.  dc.l $00000000
  12126.  dc.l $FF000000
  12127.  dc.l $FF000000
  12128.  
  12129. RIGHTPLAYEDTAB: ds.l 20
  12130. LEFTPLAYEDTAB: ds.l 20
  12131.  
  12132. SourceEcho: dc.w 0
  12133.  
  12134. MakeSomeNoise:
  12135.  
  12136.  
  12137.  
  12138.  
  12139.  
  12140.  
  12141.  
  12142.  
  12143.  move.w #$10,$dff000+intena
  12144.  
  12145. ; Plan for new sound handler:
  12146. ; It is sent a sample number,
  12147. ; a position relative to the
  12148. ; player, an id number and a volume.
  12149. ; Also notifplaying.
  12150.     
  12151. ; indirect inputs are the available
  12152. ; channel flags and whether or not
  12153. ; stereo sound is selected.
  12154.  
  12155. ; the algorithm must decide
  12156. ; whether the new sound is more
  12157. ; important than the ones already
  12158. ; playing. Thus an 'importance'
  12159. ; must be calculated, probably
  12160. ; using volume.
  12161.  
  12162. ; The output needs to be:
  12163.  
  12164. ; Write the pointers and volumes of
  12165. ; the sound channels
  12166.  
  12167.  
  12168.  tst.b notifplaying
  12169.  beq.s dontworry
  12170.  
  12171. ; find if we are already playing
  12172.  
  12173.  move.b IDNUM,d0
  12174.  move.w #7,d1
  12175.  lea CHANNELDATA,a3
  12176. findsameasme
  12177.  tst.b (a3)
  12178.  bne.s notavail
  12179.  cmp.b 1(a3),d0
  12180.  beq SameAsMe
  12181. notavail:
  12182.  add.w #4,a3
  12183.  dbra d1,findsameasme
  12184.  bra dontworry
  12185. SameAsMe
  12186.  move.w #$8010,$dff000+intena
  12187.  rts
  12188.  
  12189. noiseloud: dc.w 0
  12190.  
  12191. dontworry:
  12192.  
  12193. ; Ok its fine for us to play a sound.
  12194. ; So calculate left/right volume.
  12195.  
  12196.  move.w Noisex,d1
  12197.  muls d1,d1
  12198.  move.w Noisez,d2
  12199.  muls d2,d2
  12200.  move.w Noisevol,d3
  12201.  move.w #32767,noiseloud
  12202.  moveq #1,d0
  12203.  add.l d1,d2
  12204.  beq pastcalc
  12205.  
  12206.  move.w #31,d0
  12207. .findhigh
  12208.  btst d0,d2
  12209.  bne .foundhigh
  12210.  dbra d0,.findhigh
  12211. .foundhigh
  12212.  asr.w #1,d0
  12213.  clr.l d3
  12214.  bset d0,d3
  12215.  move.l d3,d0
  12216.  
  12217.  move.w d0,d3
  12218.  muls d3,d3    ; x*x
  12219.  sub.l d2,d3    ; x*x-a
  12220.  asr.l #1,d3    ; (x*x-a)/2
  12221.  divs d0,d3    ; (x*x-a)/2x
  12222.  sub.w d3,d0    ; second approx
  12223.  bgt .stillnot0
  12224.  move.w #1,d0
  12225. .stillnot0
  12226.  
  12227.  move.w d0,d3
  12228.  muls d3,d3
  12229.  sub.l d2,d3
  12230.  asr.l #1,d3
  12231.  divs d0,d3
  12232.  sub.w d3,d0    ; second approx
  12233.  bgt .stillnot02
  12234.  move.w #1,d0
  12235. .stillnot02
  12236.  
  12237.  move.w Noisevol,d3
  12238.  ext.l d3
  12239.  asl.l #6,d3
  12240.  cmp.l #32767,d3
  12241.  ble.s .nnnn
  12242.  move.l #32767,d3
  12243. .nnnn
  12244.  
  12245.  asr.w #2,d0
  12246.  addq #1,d0
  12247.  divs d0,d3
  12248.  
  12249. pastcalc:
  12250.  move.w d3,noiseloud
  12251.  
  12252.  cmp.w #64,d3
  12253.  ble.s notooloud
  12254.  move.w #64,d3
  12255. notooloud:
  12256.  
  12257.     ; d3 contains volume of noise.
  12258.     
  12259.  move.w d3,d4
  12260.  tst.b STEREO
  12261.  beq NOSTEREO
  12262.  
  12263.  move.w d3,d2
  12264.  muls Noisex,d2
  12265.  asl.w #2,d0
  12266.  divs d0,d2
  12267.  
  12268.  bgt.s quietleft
  12269.  add.w d2,d4
  12270.  bge.s donequiet
  12271.  move.w #0,d4
  12272.  bra.s donequiet
  12273. quietleft:
  12274.  sub.w d2,d3
  12275.  bge.s donequiet
  12276.  move.w #0,d3
  12277. donequiet:
  12278.  
  12279. ; d3=leftvol?
  12280. ; d4=rightvol?
  12281.  
  12282.  clr.w needleft
  12283.  
  12284.  cmp.b d3,d4
  12285.  bgt.s RightLouder
  12286.  
  12287. ; Left is louder; is it MUCH louder?
  12288.  
  12289.  st needleft
  12290.  move.w d3,d2
  12291.  sub.w d4,d2
  12292.  cmp.w #32,d2
  12293.  slt needright
  12294.  bra aboutsame
  12295.  
  12296. RightLouder:
  12297.  st needright
  12298.  move.w d4,d2
  12299.  sub.w d3,d2
  12300.  cmp.w #32,d2
  12301.  slt needleft
  12302.  
  12303. aboutsame:
  12304.  
  12305.  
  12306. ; Find least important sound on left
  12307.  
  12308.  move.l #0,a2
  12309.  move.l #0,d5
  12310.  move.w #32767,d2
  12311.  move.b IDNUM,d0
  12312.  lea LEFTCHANDATA,a3
  12313.  move.w #3,d1
  12314. FindLeftChannel
  12315.  tst.b (a3)
  12316.  bne.s .notactive
  12317.  cmp.b 1(a3),d0
  12318.  beq.s FOUNDLEFT
  12319.  cmp.w 2(a3),d2
  12320.  blt.s .notactive
  12321.  move.w 2(a3),d2
  12322.  move.l a3,a2
  12323.  move.w d5,d6
  12324.  
  12325. .notactive:
  12326.  add.w #4,a3
  12327.  add.w #1,d5
  12328.  dbra d1,FindLeftChannel
  12329.  move.l a2,a3
  12330.  bra.s gopastleft
  12331. FOUNDLEFT:
  12332.  move.w d5,d6
  12333. gopastleft:
  12334.  move.l a3,d5
  12335.  tst.l d5
  12336.  bne.s FOUNDALEFT
  12337. NONOISE:
  12338.  move.w #$8010,$dff000+intena
  12339.  rts
  12340. FOUNDALEFT:
  12341.  
  12342.  cmp.w noiseloud,d3
  12343.  bge.s NONOISE
  12344.  
  12345. ; d6 = channel number
  12346.  move.b d0,1(a3)
  12347.  move.w d3,2(a3)
  12348.  
  12349.  move.w Samplenum,d5
  12350.  
  12351.  tst.b Echo
  12352.  bne.s YESECHO
  12353.  tst.b SourceEcho
  12354.  beq.s NOECHO
  12355.  
  12356. YESECHO:
  12357.  
  12358.  move.l LINKFILE,a3
  12359.  add.l #EchoTable,a3
  12360.  move.b (a3,d5.w),d5
  12361.  
  12362. NOECHO:
  12363.  
  12364.  move.l #SampleList,a3
  12365.  move.l (a3,d5.w*8),a1
  12366.  move.l 4(a3,d5.w*8),a2
  12367.  
  12368.  tst.b d6
  12369.  seq NoiseMade0LEFT
  12370.  beq.s .chan0
  12371.  cmp.b #2,d6
  12372.  slt NoiseMade1LEFT
  12373.  blt .chan1
  12374.  seq NoiseMade2LEFT
  12375.  beq .chan2
  12376.  st NoiseMade3LEFT
  12377.  
  12378.  move.b d5,LEFTPLAYEDTAB+9
  12379.  move.b d3,LEFTPLAYEDTAB+1+9
  12380.  move.b d4,LEFTPLAYEDTAB+2+9
  12381.  move.b d3,vol3left
  12382.  move.l a1,pos3LEFT
  12383.  move.l a2,Samp3endLEFT
  12384.  bra dorightchan
  12385.  
  12386. .chan0: 
  12387.  move.b d5,LEFTPLAYEDTAB
  12388.  move.b d3,LEFTPLAYEDTAB+1
  12389.  move.b d4,LEFTPLAYEDTAB+2
  12390.  move.l a1,pos0LEFT
  12391.  move.l a2,Samp0endLEFT
  12392.  move.b d3,vol0left
  12393.  bra dorightchan
  12394.  
  12395. .chan1:
  12396.  move.b d5,LEFTPLAYEDTAB+3
  12397.  move.b d3,LEFTPLAYEDTAB+1+3
  12398.  move.b d4,LEFTPLAYEDTAB+2+3
  12399.  move.b d3,vol1left
  12400.  move.l a1,pos1LEFT
  12401.  move.l a2,Samp1endLEFT
  12402.  bra dorightchan
  12403.  
  12404. .chan2: 
  12405.  move.b d5,LEFTPLAYEDTAB+6
  12406.  move.b d3,LEFTPLAYEDTAB+1+6
  12407.  move.b d4,LEFTPLAYEDTAB+2+6
  12408.  move.l a1,pos2LEFT
  12409.  move.l a2,Samp2endLEFT
  12410.  move.b d3,vol2left
  12411.  
  12412. dorightchan:
  12413.  
  12414. ; Find least important sound on right
  12415.  
  12416.  move.l #0,a2
  12417.  move.l #0,d5
  12418.  move.w #10000,d2
  12419.  move.b IDNUM,d0
  12420.  lea RIGHTCHANDATA,a3
  12421.  move.w #3,d1
  12422. FindRightChannel
  12423.  tst.b (a3)
  12424.  bne.s .notactive
  12425.  cmp.b 1(a3),d0
  12426.  beq.s FOUNDRIGHT
  12427.  cmp.w 2(a3),d2
  12428.  blt.s .notactive
  12429.  move.w 2(a3),d2
  12430.  move.l a3,a2
  12431.  move.w d5,d6
  12432.  
  12433. .notactive:
  12434.  add.w #4,a3
  12435.  add.w #1,d5
  12436.  dbra d1,FindRightChannel
  12437.  move.l a2,a3
  12438.  bra.s gopastright
  12439. FOUNDRIGHT:
  12440.  move.w d5,d6
  12441. gopastright:
  12442.  move.l a3,d5
  12443.  tst.l d5
  12444.  bne.s FOUNDARIGHT
  12445.  move.w #$8010,$dff000+intena
  12446.  rts
  12447. FOUNDARIGHT:
  12448.  
  12449. ; d6 = channel number
  12450.  move.b d0,1(a3)
  12451.  move.w d3,2(a3)
  12452.  
  12453.  move.w Samplenum,d5
  12454.  move.l #SampleList,a3
  12455.  move.l (a3,d5.w*8),a1
  12456.  move.l 4(a3,d5.w*8),a2
  12457.  
  12458.  tst.b d6
  12459.  seq NoiseMade0RIGHT
  12460.  beq.s .chan0
  12461.  cmp.b #2,d6
  12462.  slt NoiseMade1RIGHT
  12463.  blt .chan1
  12464.  seq NoiseMade2RIGHT
  12465.  beq .chan2
  12466.  st NoiseMade3RIGHT
  12467.  
  12468.  move.b d5,RIGHTPLAYEDTAB+9
  12469.  move.b d3,RIGHTPLAYEDTAB+1+9
  12470.  move.b d4,RIGHTPLAYEDTAB+2+9
  12471.  move.b d4,vol3right
  12472.  move.l a1,pos3RIGHT
  12473.  move.l a2,Samp3endRIGHT
  12474.  move.w #$8010,$dff000+intena
  12475.  rts
  12476.  
  12477. .chan0: 
  12478.  move.b d5,RIGHTPLAYEDTAB
  12479.  move.b d3,RIGHTPLAYEDTAB+1
  12480.  move.b d4,RIGHTPLAYEDTAB+2
  12481.  move.l a1,pos0RIGHT
  12482.  move.l a2,Samp0endRIGHT
  12483.  move.b d4,vol0right
  12484.  move.w #$8010,$dff000+intena
  12485.  rts
  12486.  
  12487. .chan1:
  12488.  move.b d5,RIGHTPLAYEDTAB+3
  12489.  move.b d3,RIGHTPLAYEDTAB+1+3
  12490.  move.b d4,RIGHTPLAYEDTAB+2+3
  12491.  move.b d3,vol1right
  12492.  move.l a1,pos1RIGHT
  12493.  move.l a2,Samp1endRIGHT
  12494.  move.w #$8010,$dff000+intena
  12495.  rts
  12496.  
  12497. .chan2: 
  12498.  move.b d5,RIGHTPLAYEDTAB+6
  12499.  move.b d3,RIGHTPLAYEDTAB+1+6
  12500.  move.b d4,RIGHTPLAYEDTAB+2+6
  12501.  move.l a1,pos2RIGHT
  12502.  move.l a2,Samp2endRIGHT
  12503.  move.b d3,vol2right
  12504.  move.w #$8010,$dff000+intena
  12505.  rts
  12506.  
  12507. NOSTEREO:
  12508.  move.l #0,a2
  12509.  move.l #-1,d5
  12510.  move.w #32767,d2
  12511.  move.b IDNUM,d0
  12512.  lea CHANNELDATA,a3
  12513.  move.w #7,d1
  12514.  moveq #-1,d6
  12515.  
  12516. FindChannel
  12517.  tst.b (a3)
  12518.  bne.s .notactive
  12519.  cmp.b 1(a3),d0
  12520.  beq.s FOUNDMYCHAN
  12521.  cmp.w 2(a3),d2
  12522.  blt.s .notactive
  12523.  move.w 2(a3),d2
  12524.  move.l a3,a2
  12525.  move.w d5,d6
  12526.  add.w #1,d6
  12527.  
  12528. .notactive:
  12529.  add.w #4,a3
  12530.  add.w #1,d5
  12531.  dbra d1,FindChannel
  12532.  
  12533.  move.l a2,a3
  12534.  bra.s gopastchan
  12535.  
  12536. FOUNDMYCHAN:
  12537.  move.w 2(a3),d2
  12538.  
  12539. FOUNDCHAN:
  12540.  move.w d5,d6
  12541.  add.w #1,d6
  12542. gopastchan:
  12543.  tst.w d6
  12544.  bge.s FOUNDACHAN
  12545. tooquiet:
  12546.  move.w #$8010,$dff000+intena
  12547.  rts
  12548. FOUNDACHAN:
  12549.  
  12550. ; d6 = channel number
  12551.  
  12552.  cmp.w noiseloud,d2
  12553.  bgt.s tooquiet
  12554.  
  12555.  move.b d0,1(a3)
  12556.  move.w noiseloud,2(a3)
  12557.  
  12558.  move.w Samplenum,d5
  12559.  
  12560.  tst.b Echo
  12561.  bne.s YESECHO2
  12562.  tst.b SourceEcho
  12563.  beq.s NOECHO2
  12564.  
  12565. YESECHO2:
  12566.  
  12567.  move.l LINKFILE,a3
  12568.  add.l #EchoTable,a3
  12569.  move.b (a3,d5.w),d5
  12570.  
  12571. NOECHO2:
  12572.  
  12573.  move.l #SampleList,a3
  12574.  move.l (a3,d5.w*8),a1
  12575.  move.l 4(a3,d5.w*8),a2
  12576.  
  12577.  tst.b d6
  12578.  beq .chan0
  12579.  cmp.b #2,d6
  12580.  blt .chan1
  12581.  beq .chan2
  12582.  cmp.b #4,d6
  12583.  blt .chan3
  12584.  beq .chan4
  12585.  cmp.b #6,d6
  12586.  blt .chan5
  12587.  beq .chan6
  12588.  st NoiseMade3RIGHT
  12589.  
  12590.  move.b d5,RIGHTPLAYEDTAB+9
  12591.  move.b d3,RIGHTPLAYEDTAB+1+9
  12592.  move.b d4,RIGHTPLAYEDTAB+2+9
  12593.  move.b d4,vol3right
  12594.  move.l a1,pos3RIGHT
  12595.  move.l a2,Samp3endRIGHT
  12596.  move.w #$8010,$dff000+intena
  12597.  rts
  12598.  
  12599. .chan3:
  12600.  st NoiseMade3LEFT
  12601.  move.b d5,LEFTPLAYEDTAB+9
  12602.  move.b d3,LEFTPLAYEDTAB+1+9
  12603.  move.b d4,LEFTPLAYEDTAB+2+9
  12604.  move.b d3,vol3left
  12605.  move.l a1,pos3LEFT
  12606.  move.l a2,Samp3endLEFT
  12607.  move.w #$8010,$dff000+intena
  12608.  rts
  12609.  
  12610. .chan0: 
  12611.  st NoiseMade0LEFT
  12612.  move.b d5,LEFTPLAYEDTAB
  12613.  move.b d3,LEFTPLAYEDTAB+1
  12614.  move.b d4,LEFTPLAYEDTAB+2
  12615.  move.l a1,pos0LEFT
  12616.  move.l a2,Samp0endLEFT
  12617.  move.b d3,vol0left
  12618.  move.w #$8010,$dff000+intena
  12619.  rts
  12620.  
  12621. .chan1:
  12622.  st NoiseMade1LEFT
  12623.  move.b d5,LEFTPLAYEDTAB+3
  12624.  move.b d3,LEFTPLAYEDTAB+1+3
  12625.  move.b d4,LEFTPLAYEDTAB+2+3
  12626.  move.b d3,vol1left
  12627.  move.l a1,pos1LEFT
  12628.  move.l a2,Samp1endLEFT
  12629.  move.w #$8010,$dff000+intena
  12630.  rts
  12631.  
  12632. .chan2: 
  12633.  st NoiseMade2LEFT
  12634.  move.b d5,LEFTPLAYEDTAB+6
  12635.  move.b d3,LEFTPLAYEDTAB+1+6
  12636.  move.b d4,LEFTPLAYEDTAB+2+6
  12637.  move.l a1,pos2LEFT
  12638.  move.l a2,Samp2endLEFT
  12639.  move.b d3,vol2left
  12640.  move.w #$8010,$dff000+intena
  12641.  rts
  12642.  
  12643. .chan4: 
  12644.  st NoiseMade0RIGHT
  12645.  move.b d5,RIGHTPLAYEDTAB
  12646.  move.b d3,RIGHTPLAYEDTAB+1
  12647.  move.b d4,RIGHTPLAYEDTAB+2
  12648.  move.l a1,pos0RIGHT
  12649.  move.l a2,Samp0endRIGHT
  12650.  move.b d4,vol0right
  12651.  move.w #$8010,$dff000+intena
  12652.  rts
  12653.  
  12654. .chan5:
  12655.  st NoiseMade1RIGHT
  12656.  move.b d5,RIGHTPLAYEDTAB+3
  12657.  move.b d3,RIGHTPLAYEDTAB+1+3
  12658.  move.b d4,RIGHTPLAYEDTAB+2+3
  12659.  move.b d3,vol1right
  12660.  move.l a1,pos1RIGHT
  12661.  move.l a2,Samp1endRIGHT
  12662.  move.w #$8010,$dff000+intena
  12663.  rts
  12664.  
  12665. .chan6: 
  12666.  st NoiseMade2RIGHT
  12667.  move.b d5,RIGHTPLAYEDTAB+6
  12668.  move.b d3,RIGHTPLAYEDTAB+1+6
  12669.  move.b d4,RIGHTPLAYEDTAB+2+6
  12670.  move.l a1,pos2RIGHT
  12671.  move.l a2,Samp2endRIGHT
  12672.  move.b d3,vol2right
  12673.  move.w #$8010,$dff000+intena
  12674.  rts
  12675.  
  12676. SampleList:
  12677.  dc.l Scream,EndScream
  12678.  dc.l Shoot,EndShoot
  12679.  dc.l Munch,EndMunch
  12680.  dc.l PooGun,EndPooGun
  12681.  dc.l Collect,EndCollect
  12682. ;5
  12683.  dc.l DoorNoise,EndDoorNoise
  12684.  dc.l 0,0
  12685.  dc.l Stomp,EndStomp
  12686.  dc.l LowScream,EndLowScream
  12687.  dc.l BaddieGun,EndBaddieGun
  12688. ;10
  12689.  dc.l SwitchNoise,EndSwitch
  12690.  dc.l Reload,EndReload
  12691.  dc.l NoAmmo,EndNoAmmo
  12692.  dc.l Splotch,EndSplotch
  12693.  dc.l SplatPop,EndSplatPop
  12694. ;15
  12695.  dc.l Boom,EndBoom
  12696.  dc.l Hiss,EndHiss
  12697.  dc.l Howl1,EndHowl1
  12698.  dc.l Howl2,EndHowl2
  12699.  dc.l Pant,EndPant
  12700. ;20
  12701.  dc.l Whoosh,EndWhoosh
  12702.  dc.l ROAR,EndROAR
  12703.  dc.l whoosh,Endwhoosh
  12704.  dc.l 0,0
  12705.  dc.l 0,0
  12706.  dc.l 0,0
  12707.  dc.l 0,0
  12708.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12709.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12710.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12711.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12712.  
  12713.  dc.l 0
  12714.  
  12715. storeval: dc.w 0
  12716.  
  12717.  include "ab3:source_4000/wallchunk.s"
  12718.  include "ab3:source_4000/newloadfromdisk.s"
  12719.  include "ab3:source_4000/screensetup.s"
  12720.  include "ab3:source_4000/CONTROLLOOP.s"
  12721.  
  12722.  
  12723.  
  12724.  
  12725. saveinters:  
  12726.  dc.w 0
  12727.  
  12728. z: dc.w 10
  12729.  
  12730. notifplaying:
  12731.  dc.w 0
  12732.  
  12733. audpos1: dc.w 0
  12734. audpos1b: dc.w 0
  12735. audpos2: dc.w 0
  12736. audpos2b: dc.w 0
  12737. audpos3: dc.w 0
  12738. audpos3b: dc.w 0
  12739. audpos4: dc.w 0
  12740. audpos4b: dc.w 0
  12741.  
  12742. vol0left: dc.w 0
  12743. vol0right: dc.w 0
  12744. vol1left: dc.w 0
  12745. vol1right: dc.w 0
  12746. vol2left: dc.w 0
  12747. vol2right: dc.w 0
  12748. vol3left: dc.w 0
  12749. vol3right: dc.w 0
  12750.  
  12751. pos: dc.l 0
  12752.  
  12753. pos0LEFT: dc.l empty
  12754. pos1LEFT: dc.l empty
  12755. pos2LEFT: dc.l empty
  12756. pos3LEFT: dc.l empty
  12757. pos0RIGHT: dc.l empty
  12758. pos1RIGHT: dc.l empty
  12759. pos2RIGHT: dc.l empty
  12760. pos3RIGHT: dc.l empty
  12761.  
  12762. numtodo dc.w 0
  12763.  
  12764. npt: dc.w 0
  12765.  
  12766. pretab:
  12767. val SET 0
  12768.  REPT 128
  12769.  dc.b val
  12770. val SET val+1
  12771.  ENDR
  12772. val SET -128
  12773.  REPT 128
  12774.  dc.b val
  12775. val SET val+1
  12776.  ENDR 
  12777.  
  12778. tab:
  12779.  ifeq CHEESEY
  12780.  ds.b 256*65
  12781.  endc
  12782.  
  12783. test: dc.l 0
  12784.  ds.l 30
  12785.  
  12786.  
  12787.  even
  12788. ConstCols:
  12789. ; incbin "ConstCols"
  12790.  even
  12791. Smoothscalecols:
  12792. ; incbin "smoothbumppalscaled"
  12793.  even
  12794. SmoothTile:
  12795. ; incbin "smoothbumptile"
  12796.  even
  12797. Bumpscalecols:
  12798. ; incbin "Bumppalscaled"
  12799.  even
  12800. Bumptile:
  12801. ; incbin "bumptile"
  12802.  even
  12803. scalecols: ;incbin "bytepixpalscaled"
  12804.  even
  12805. ;floorscalecols:
  12806. ; incbin "floor256pal"
  12807. ; ds.w 256*4
  12808.  
  12809.  even
  12810. PaletteAddr: dc.l 0
  12811. ChunkAddr: dc.l 0
  12812. ;walltiles:
  12813. ; dc.l GreenMechanicWALL
  12814. ; dc.l BlueGreyMetalWALL
  12815. ; dc.l TechnoDetailWALL
  12816. ; dc.l BlueStoneWALL
  12817. ; dc.l RedAlertWALL
  12818. ; dc.l RockWALL
  12819. ;
  12820. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  12821. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  12822. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  12823. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  12824. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  12825. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  12826.  
  12827. floortile:
  12828.  dc.l 0
  12829. ; incbin "floortile" 
  12830.  even
  12831. wallrouts:
  12832. ; incbin "2x2WallDraw" 
  12833.  CNOP 0,64
  12834.  
  12835.  ifeq CHEESEY 
  12836. BackPicture:
  12837.  dc.l 0
  12838. ; incbin "rawback"
  12839. EndBackPicture:
  12840.  endc
  12841.  
  12842. drawpt: dc.l 0
  12843. olddrawpt: dc.l 0
  12844. frompt: dc.l 0 
  12845.  
  12846. SineTable:
  12847.  incbin "bigsine"
  12848.  
  12849. angspd: dc.w 0
  12850. flooryoff: dc.w 0
  12851. xoff: dc.l 0
  12852. yoff: dc.l 0
  12853. yvel: dc.l 0
  12854. zoff: dc.l 0
  12855. tyoff: dc.l 0
  12856. xspdval: dc.l 0
  12857. zspdval: dc.l 0
  12858. Zone: dc.w 0
  12859.  
  12860. PLR1: dc.b $ff
  12861.  even
  12862. PLR1_energy: dc.w 191
  12863. PLR1_GunSelected: dc.w 0
  12864. PLR1_cosval: dc.w 0
  12865. PLR1_sinval: dc.w 0
  12866. PLR1_angpos: dc.w 0
  12867. PLR1_angspd: dc.w 0
  12868. PLR1_xoff: dc.l 0
  12869. PLR1_yoff: dc.l 0
  12870. PLR1_yvel: dc.l 0
  12871. PLR1_zoff: dc.l 0
  12872. PLR1_tyoff: dc.l 0
  12873. PLR1_xspdval: dc.l 0
  12874. PLR1_zspdval: dc.l 0
  12875. PLR1_Zone: dc.w 0
  12876. PLR1_Roompt: dc.l 0
  12877. PLR1_FloorSpd: dc.l 0
  12878. PLR2_FloorSpd: dc.l 0
  12879. PLR1_OldRoompt: dc.l 0
  12880. PLR1_PointsToRotatePtr: dc.l 0
  12881. PLR1_ListOfGraphRooms: dc.l 0
  12882. PLR1_oldxoff: dc.l 0
  12883. PLR1_oldzoff: dc.l 0
  12884. PLR1_StoodInTop: dc.b 0
  12885.  even
  12886. PLR1_height: dc.l 0
  12887. PLR1_RoomBright: dc.w 0
  12888.  
  12889. DOUBLEWIDTH: dc.b $0,0
  12890. DOUBLEHEIGHT: dc.b 0,0
  12891. PLR1_TELEPORTED: dc.w 0
  12892. PLR2_TELEPORTED: dc.w 0
  12893.  
  12894.  ds.w 4
  12895.  
  12896. OLDX1: dc.l 0
  12897. OLDX2: dc.l 0
  12898. OLDZ1: dc.l 0
  12899. OLDZ2: dc.l 0
  12900.  
  12901. XDIFF1: dc.l 0
  12902. ZDIFF1: dc.l 0
  12903. XDIFF2: dc.l 0
  12904. ZDIFF2: dc.l 0
  12905.  
  12906. PLR1s_cosval: dc.w 0
  12907. PLR1s_sinval: dc.w 0
  12908. PLR1s_angpos: dc.w 0
  12909. PLR1s_angspd: dc.w 0
  12910. PLR1s_xoff: dc.l 0
  12911. PLR1s_yoff: dc.l 0
  12912. PLR1s_yvel: dc.l 0
  12913. PLR1s_zoff: dc.l 0
  12914. PLR1s_tyoff: dc.l 0
  12915. PLR1s_xspdval: dc.l 0
  12916. PLR1s_zspdval: dc.l 0
  12917. PLR1s_Zone: dc.w 0
  12918. PLR1s_Roompt: dc.l 0
  12919. PLR1s_OldRoompt: dc.l 0
  12920. PLR1s_PointsToRotatePtr: dc.l 0
  12921. PLR1s_ListOfGraphRooms: dc.l 0
  12922. PLR1s_oldxoff: dc.l 0
  12923. PLR1s_oldzoff: dc.l 0
  12924. PLR1s_height: dc.l 0
  12925. PLR1s_targheight: dc.l 0
  12926.  
  12927. PLR1_Echo: dc.w 0
  12928.  
  12929. p1_xoff: dc.l 0
  12930. p1_zoff: dc.l 0
  12931. p1_yoff: dc.l 0
  12932. p1_height: dc.l 0
  12933. p1_angpos: dc.w 0
  12934. p1_bobble: dc.w 0
  12935. p1_clicked: dc.b 0
  12936. p1_spctap: dc.b 0
  12937. p1_ducked: dc.b 0
  12938. p1_gunselected: dc.b 0
  12939. p1_fire: dc.b 0
  12940.  even
  12941. p1_holddown: dc.w 0
  12942.  
  12943.  ds.w 4
  12944.  
  12945. PLR2: dc.b $ff
  12946.  even
  12947. PLR2_GunSelected: dc.w 0
  12948. PLR2_energy: dc.w 191
  12949. PLR2_cosval: dc.w 0
  12950. PLR2_sinval: dc.w 0
  12951. PLR2_angpos: dc.w 0
  12952. PLR2_angspd: dc.w 0
  12953. PLR2_xoff: dc.l 0
  12954. PLR2_yoff: dc.l 0
  12955. PLR2_yvel: dc.l 0
  12956. PLR2_zoff: dc.l 0
  12957. PLR2_tyoff: dc.l 0
  12958. PLR2_xspdval: dc.l 0
  12959. PLR2_zspdval: dc.l 0
  12960. PLR2_Zone: dc.w 0
  12961. PLR2_Roompt: dc.l 0
  12962. PLR2_OldRoompt: dc.l 0
  12963. PLR2_PointsToRotatePtr: dc.l 0
  12964. PLR2_ListOfGraphRooms: dc.l 0
  12965. PLR2_oldxoff: dc.l 0
  12966. PLR2_oldzoff: dc.l 0
  12967. PLR2_StoodInTop: dc.b 0
  12968.  even
  12969. PLR2_height: dc.l 0
  12970. PLR2_Echo: dc.w 0
  12971. Echo: dc.w 0
  12972.  
  12973.  ds.w 4
  12974.  
  12975. PLR2s_cosval: dc.w 0
  12976. PLR2s_sinval: dc.w 0
  12977. PLR2s_angpos: dc.w 0
  12978. PLR2s_angspd: dc.w 0
  12979. PLR2s_xoff: dc.l 0
  12980. PLR2s_yoff: dc.l 0
  12981. PLR2s_yvel: dc.l 0
  12982. PLR2s_zoff: dc.l 0
  12983. PLR2s_tyoff: dc.l 0
  12984. PLR2s_xspdval: dc.l 0
  12985. PLR2s_zspdval: dc.l 0
  12986. PLR2s_Zone: dc.w 0
  12987. PLR2s_Roompt: dc.l 0
  12988. PLR2s_OldRoompt: dc.l 0
  12989. PLR2s_PointsToRotatePtr: dc.l 0
  12990. PLR2s_ListOfGraphRooms: dc.l 0
  12991. PLR2s_oldxoff: dc.l 0
  12992. PLR2s_oldzoff: dc.l 0
  12993. PLR2s_height: dc.l 0
  12994. PLR2s_targheight: dc.l 0
  12995.  
  12996.  ds.w 4
  12997.  
  12998. p2_xoff: dc.l 0
  12999. p2_zoff: dc.l 0
  13000. p2_yoff: dc.l 0
  13001. p2_height: dc.l 0
  13002. p2_angpos: dc.w 0
  13003. p2_bobble: dc.w 0
  13004. p2_clicked: dc.b 0
  13005. p2_spctap: dc.b 0
  13006. p2_ducked: dc.b 0
  13007. p2_gunselected: dc.b 0
  13008. p2_fire: dc.b 0
  13009.  even
  13010. p2_holddown: dc.w 0
  13011.  
  13012. liftanimtab:
  13013.  
  13014. endliftanimtab:
  13015.  
  13016. glassball:
  13017. ; incbin "glassball.inc"
  13018.  
  13019. endglass
  13020. glassballpt: dc.l glassball
  13021.  
  13022. rndtab: ; incbin "randfile"
  13023. endrnd: 
  13024.  
  13025. brightanimtab:
  13026. ; dcb.w 200,20
  13027. ; dc.w 5
  13028. ; dc.w 10,20
  13029. ; dc.w 5
  13030. ; dcb.w 30,20
  13031. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  13032. ; dcb.w 40,0
  13033. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  13034. ; dcb.w 300,0
  13035. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  13036. ; dc.w -1
  13037.  
  13038. Roompt: dc.l 0
  13039. OldRoompt: dc.l 0
  13040.  
  13041. *****************************************************************
  13042.  *
  13043.  include "AB3:source_4000/LevelData2"
  13044.  *
  13045. *****************************************************************
  13046.  
  13047.  
  13048. wallpt: dc.l 0
  13049. floorpt: dc.l 0
  13050.  
  13051. Rotated:
  13052.  ds.l 2*800 
  13053. ObjRotated:
  13054.  ds.l 2*500
  13055.  
  13056. OnScreen:
  13057.  ds.l 2*800 
  13058.  
  13059. startwait: dc.w 0
  13060. endwait: dc.w 0
  13061.  
  13062. ;Faces:
  13063. ; incbin "faces2raw"
  13064.  
  13065. LINKS: dc.l 0
  13066. FLYLINKS: dc.l 0
  13067. *************************************************************
  13068.  
  13069. consttab:
  13070.  ds.b 65536
  13071.  
  13072. ; incbin "constantfile"
  13073.  
  13074. *******************************************************************
  13075.  
  13076.  
  13077.  
  13078. *********************************
  13079.  
  13080. ; include "ab3:source_4000/loadmod.a"
  13081. ; include "ab3:source_4000/proplayer.a"
  13082.  
  13083.  
  13084. darkentab: 
  13085. ;val SET 0
  13086. ; REPT 256
  13087. ; dc.b val
  13088. ;val SET val+1
  13089. ; ENDR
  13090. ; incbin "darkenfile"
  13091.  
  13092.     dc.w 0
  13093. MIDDLEX: dc.w 0
  13094. RIGHTX: dc.w 192
  13095. FULLSCR: dc.w 0
  13096.  
  13097. ;SHADINGTABLE: incbin "SHADEFILE" 
  13098.  
  13099. ******************************************
  13100. * Link file !*****************************
  13101. ******************************************
  13102.  
  13103. LINKSPACE:
  13104. ; ds.l 22500
  13105. ; incbin "ab3:includes/test.lnk"
  13106.  
  13107. LINKname:
  13108.  dc.b "TKG1:includes/test.lnk",0
  13109.  even
  13110.  
  13111. LINKFILE:
  13112.  dc.l LINKSPACE
  13113.  
  13114. ******************************************
  13115.  
  13116.  
  13117. ;brightentab:
  13118. ; incbin "brightenfile"
  13119. WorkSpace:
  13120.  ds.l 8192 
  13121. waterfile:
  13122.  incbin "waterfile"
  13123.  
  13124.  SECTION ffff,CODE_C
  13125.  
  13126. nullspr: dc.l 0
  13127.  
  13128.  cnop 0,8
  13129. ;borders:
  13130. ; incbin "newleftbord"
  13131. ; incbin "newrightbord"
  13132.  
  13133. health: 
  13134. ;incbin "healthstrip"
  13135. Ammunition: 
  13136. ;incbin "ammostrip"
  13137. healthpal: 
  13138. ;incbin "healthpal"
  13139. PanelKeys: 
  13140. ;incbin "greenkey"
  13141. ; incbin "redkey"
  13142. ; incbin "yellowkey"
  13143. ; incbin "bluekey"
  13144.  
  13145. null: ds.w 500
  13146. null2: ds.w 500
  13147. null3: ds.w 500
  13148. null4: ds.w 500
  13149.  
  13150.  
  13151. Blurbfield:
  13152.  
  13153.  dc.w bpl1ptl
  13154. bl1l: dc.w 0
  13155.  dc.w bpl1pth
  13156. bl1h: dc.w 0
  13157.  
  13158.  dc.w diwstart,$2c81
  13159.  dc.w diwstop,$1cc1
  13160.  dc.w ddfstart,$38
  13161.  dc.w ddfstop,$b8
  13162.  dc.w bplcon0,$9201
  13163.  dc.w bplcon1,0
  13164.  dc.w $106,$c40
  13165. blcols:
  13166.  dc.w col0,0
  13167.  dc.w col1,$fff
  13168.  
  13169.  dc.w $108,0
  13170.  dc.w $10a,0
  13171.  
  13172.  dc.w $ffff,$fffe
  13173.  dc.w $ffff,$fffe
  13174.  
  13175. nullline:
  13176.  ds.b 80    
  13177.  
  13178.  include "ab3:source_4000/titlecop.s"
  13179.  
  13180. bigfield:    
  13181.                 ; Start of our copper list.
  13182.  dc.w dmacon,$8020
  13183.  dc.w intreq,$8011
  13184.  dc.w $1fc,$f
  13185.  dc.w diwstart
  13186. winstart: dc.w $2c81
  13187.  dc.w diwstop
  13188. winstop: dc.w $2cc1
  13189.  dc.w ddfstart
  13190. fetchstart: dc.w $38
  13191.  dc.w ddfstop
  13192. fetchstop: dc.w $b8
  13193.  
  13194. bordercols:
  13195.  incbin "borderpal"
  13196.  
  13197.  dc.w spr0ptl
  13198. s0l:
  13199.  dc.w 0
  13200.  dc.w spr0pth
  13201. s0h:
  13202.  dc.w 0
  13203.  dc.w spr1ptl
  13204. s1l:
  13205.  dc.w 0
  13206.  dc.w spr1pth
  13207. s1h:
  13208.  dc.w 0
  13209.  dc.w spr2ptl
  13210. s2l:
  13211.  dc.w 0
  13212.  dc.w spr2pth
  13213. s2h:
  13214.  dc.w 0
  13215.  dc.w spr3ptl
  13216. s3l:
  13217.  dc.w 0
  13218.  dc.w spr3pth
  13219. s3h:
  13220.  dc.w 0
  13221.  dc.w spr4ptl
  13222. s4l:
  13223.  dc.w 0
  13224.  dc.w spr4pth
  13225. s4h:
  13226.  dc.w 0
  13227.  dc.w spr5ptl
  13228. s5l:
  13229.  dc.w 0
  13230.  dc.w spr5pth
  13231. s5h:
  13232.  dc.w 0
  13233.  dc.w spr6ptl
  13234. s6l:
  13235.  dc.w 0
  13236.  dc.w spr6pth
  13237. s6h:
  13238.  dc.w 0
  13239.  dc.w spr7ptl
  13240. s7l:
  13241.  dc.w 0
  13242.  dc.w spr7pth
  13243. s7h:
  13244.  dc.w 0
  13245.  
  13246. ; dc.w $106,$c42
  13247. ; incbin "borderpal"
  13248.  
  13249.  dc.w $106,$c42
  13250.  
  13251.  dc.w bplcon0,$0211
  13252.  dc.w bplcon1
  13253. smoff:
  13254.  dc.w $0
  13255.  
  13256.  dc.w $108
  13257. modulo: dc.w 0
  13258.  dc.w $10a,0
  13259.  
  13260.  dc.w $1001,$ff00
  13261.  dc.w intreq,$11
  13262.  
  13263. PALETTESPACE:
  13264.  dcb.l 528,$1fe0000
  13265.  
  13266.  dc.w $2001,$ff00
  13267.  
  13268.  dc.w bpl1pth
  13269. pl1h
  13270.  dc.w 0
  13271.  
  13272.  dc.w bpl1ptl
  13273. pl1l
  13274.  dc.w 0
  13275.  
  13276.  dc.w bpl2pth
  13277. pl2h
  13278.  dc.w 0
  13279.  
  13280.  dc.w bpl2ptl
  13281. pl2l
  13282.  dc.w 0
  13283.  
  13284.  dc.w bpl3pth
  13285. pl3h
  13286.  dc.w 0
  13287.  
  13288.  dc.w bpl3ptl
  13289. pl3l
  13290.  dc.w 0
  13291.  
  13292.  dc.w bpl4pth
  13293. pl4h
  13294.  dc.w 0
  13295.  
  13296.  dc.w bpl4ptl
  13297. pl4l
  13298.  dc.w 0
  13299.  
  13300.  dc.w bpl5pth
  13301. pl5h
  13302.  dc.w 0
  13303.  
  13304.  dc.w bpl5ptl
  13305. pl5l
  13306.  dc.w 0
  13307.  
  13308.  dc.w bpl6pth
  13309. pl6h
  13310.  dc.w 0
  13311.  
  13312.  dc.w bpl6ptl
  13313. pl6l
  13314.  dc.w 0
  13315.  
  13316.  dc.w bpl7pth
  13317. pl7h
  13318.  dc.w 0
  13319.  
  13320.  dc.w bpl7ptl
  13321. pl7l
  13322.  dc.w 0
  13323.  
  13324.  dc.w bpl8pth
  13325. pl8h
  13326.  dc.w 0
  13327.  
  13328.  dc.w bpl8ptl
  13329. pl8l
  13330.  dc.w 0
  13331.  
  13332.  
  13333. val SET $2c
  13334. SCRMODULOS:
  13335.  REPT 232
  13336.  dc.b val,1,$ff,$fe
  13337.  dc.w $108,0
  13338.  dc.w $10a,0
  13339.  dc.b val,$df,$ff,$fe
  13340. val SET (val+1)&$ff
  13341.  ENDR
  13342.  
  13343.  dc.w $108,0,$10a,0
  13344.  dc.w $2401,$ff00
  13345.  dc.w ddfstop,$c8
  13346.  dc.w bplcon0,$9201
  13347.  dc.w bpl1ptl
  13348. scroll:
  13349.  dc.w 0
  13350.  dc.w bpl1pth
  13351. scrolh:
  13352.  dc.w 0
  13353.  
  13354.  dc.w $106,$c40
  13355.  dc.w $180,0
  13356.  dc.w $182,$f0
  13357. ; dc.w $108,40
  13358. ; dc.w $10a,40
  13359.  
  13360. ; dc.w $80
  13361. ;JUMPBACKH:
  13362. ; dc.w 0
  13363. ; dc.w $82
  13364. ;JUMPBACKL:
  13365. ; dc.w 0
  13366.  
  13367. ; dc.w $8a,0
  13368.  
  13369.  dc.w $ffff,$fffe
  13370.  dc.w $ffff,$fffe
  13371.  
  13372. PALETTEBIT:
  13373.  incbin "256palette"
  13374.  dc.w $ffff,$fffe
  13375.  
  13376. yposcop:
  13377. ; dc.w $2a11,$fffe
  13378. ; dc.w $8a,0
  13379.  
  13380. ; ds.l 104*12
  13381.  
  13382. ;colbars:
  13383. ;val SET $2a
  13384. ; dcb.l 104*80,$1fe0000
  13385. ; dc.w $106,$c42
  13386. ; dc.w $80
  13387. ;pch1:
  13388. ; dc.w 0
  13389. ; dc.w $82
  13390. ;pcl1:
  13391. ; dc.w 0 
  13392. ; dc.w $88,0
  13393. ; dc.w $ffff,$fffe       ; End copper list.
  13394.  
  13395. ; ds.l 104*12
  13396.  
  13397.  
  13398. ;colbars2:
  13399. ;val SET $2a
  13400. ; dcb.l 104*80,$1fe0000
  13401. ; dc.w $106,$c42
  13402. ; dc.w $80
  13403. ;pch2:
  13404. ; dc.w 0
  13405. ; dc.w $82
  13406. ;pcl2:
  13407. ; dc.w 0
  13408. ; dc.w $88,0
  13409. ; dc.w $ffff,$fffe       ; End copper list.
  13410.  
  13411. ; ds.l 104*10
  13412.  
  13413. NullCopper:
  13414.  dc.w $ffff,$fffe
  13415.  
  13416. hitcol: dc.l 0
  13417.  
  13418. old: dc.l 0
  13419.  
  13420.  CNOP 0,64
  13421. SCROLLSCRN: ds.l 20*16
  13422.  
  13423. SCROLLOFFSET: dc.w 0
  13424. SCROLLTIMER: dc.w 100
  13425. SCROLLDIRECTION: dc.w 1
  13426. SCROLLXPOS: dc.w 0
  13427. SCROLLPOINTER: dc.l testscroll
  13428. ENDSCROLL: dc.l endtestscroll
  13429.  
  13430. testscroll:
  13431. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  13432. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13433. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  13434. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13435.  
  13436. BLANKSCROLL:
  13437.  dc.b "                                                                                "
  13438. endtestscroll: 
  13439.  
  13440. prot5: dc.w 0
  13441. PanelCop:
  13442.  
  13443.  dc.w $80
  13444. och:
  13445.  dc.w 0
  13446.  dc.w $82
  13447. ocl:
  13448.  dc.w 0
  13449.  
  13450. statskip:
  13451.  dc.w $1fe,0
  13452.  dc.w $1fe,0
  13453.  
  13454.  dc.w $10c,0
  13455.  dc.w bplcon0,$1201
  13456.  dc.w bpl1ptl
  13457. n1l:
  13458.  dc.w 0
  13459.  dc.w bpl1pth
  13460. n1h:
  13461.  dc.w 0
  13462.  dc.w $108,-24
  13463. ; incbin "Panelpal"
  13464.  
  13465.  dc.w bpl2pth
  13466. p2h
  13467.  dc.w 0
  13468.  
  13469.  dc.w bpl2ptl
  13470. p2l
  13471.  dc.w 0
  13472.  
  13473.  dc.w bpl3pth
  13474. p3h
  13475.  dc.w 0
  13476.  
  13477.  dc.w bpl3ptl
  13478. p3l
  13479.  dc.w 0
  13480.  
  13481.  dc.w bpl4pth
  13482. p4h
  13483.  dc.w 0
  13484.  dc.w bpl4ptl
  13485. p4l
  13486.  dc.w 0
  13487.  dc.w bpl5pth
  13488. p5h
  13489.  dc.w 0
  13490.  dc.w bpl5ptl
  13491. p5l
  13492.  dc.w 0
  13493.  dc.w bpl6pth
  13494. p6h
  13495.  dc.w 0
  13496.  dc.w bpl6ptl
  13497. p6l
  13498.  dc.w 0
  13499.  dc.w bpl7pth
  13500. p7h
  13501.  dc.w 0
  13502.  dc.w bpl7ptl
  13503. p7l
  13504.  dc.w 0
  13505.  dc.w bpl8pth
  13506. p8h
  13507.  dc.w 0
  13508.  dc.w bpl8ptl
  13509. p8l
  13510.  dc.w 0
  13511.  
  13512.  
  13513.  dc.w ddfstart,$38
  13514.  dc.w ddfstop,$b8
  13515.  dc.w diwstart,$2c81
  13516.  dc.w diwstop,$2cc1
  13517.  
  13518.  dc.w bplcon0
  13519. Panelcon: dc.w $0211
  13520.  dc.w bpl1pth
  13521. p1h
  13522.  dc.w 0
  13523.  
  13524.  dc.w bpl1ptl
  13525. p1l
  13526.  dc.w 0
  13527.  
  13528.  
  13529.  dc.w $108,40*7
  13530.  dc.w $10a,40*7
  13531.  
  13532.  dc.w $ffff,$fffe
  13533.  
  13534.  dc.w $180,$fff
  13535.  
  13536.  
  13537.  dc.w $f801,$ff00
  13538.  dc.w col1,$50
  13539.  dc.w $f901,$ff00
  13540.  dc.w col1,$90
  13541.  dc.w $fa01,$ff00
  13542.  dc.w col1,$f0
  13543.  dc.w $fb01,$ff00
  13544.  dc.w col1,$f0
  13545.  dc.w $fc01,$ff00
  13546.  dc.w col1,$90
  13547.  dc.w $fd01,$ff00
  13548.  dc.w col1,$50
  13549.  
  13550.  dc.w $fe01,$ff00
  13551.  dc.w col1,$fff
  13552.  
  13553.  dc.w $ffdf,$fffe
  13554.  dc.w $a01,$ff00
  13555.  dc.w bplcon0,$201
  13556.  
  13557. ; incbin "faces2cols"
  13558.  dc.w bpl1pth
  13559. f1h
  13560.  dc.w 0
  13561.  
  13562.  dc.w bpl1ptl
  13563. f1l
  13564.  dc.w 0
  13565.  
  13566.  dc.w bpl2pth
  13567. f2h
  13568.  dc.w 0
  13569.  
  13570.  dc.w bpl2ptl
  13571. f2l
  13572.  dc.w 0
  13573.  
  13574.  dc.w bpl3pth
  13575. f3h
  13576.  dc.w 0
  13577.  
  13578.  dc.w bpl3ptl
  13579. f3l
  13580.  dc.w 0
  13581.  
  13582.  dc.w bpl4pth
  13583. f4h
  13584.  dc.w 0
  13585.  dc.w bpl4ptl
  13586. f4l
  13587.  dc.w 0
  13588.  
  13589.  dc.w bpl5pth
  13590. f5h
  13591.  dc.w 0
  13592.  dc.w bpl5ptl
  13593. f5l
  13594.  dc.w 0
  13595.  
  13596.  dc.w $0c01,$ff00
  13597.  dc.w bplcon0,$5201
  13598.   
  13599.  dc.w $ffff,$fffe
  13600.  
  13601.  cnop 0,64
  13602. FacePlace:
  13603. ; ds.l 6*32*5
  13604.  
  13605. TEXTSCRN: dc.l 0
  13606.  
  13607. TEXTCOP:
  13608.  dc.w intreq,$8030
  13609.  
  13610.  dc.w spr0ptl
  13611. txs0l:
  13612.  dc.w 0
  13613.  dc.w spr0pth
  13614. txs0h:
  13615.  dc.w 0
  13616.  dc.w spr1ptl
  13617. txs1l:
  13618.  dc.w 0
  13619.  dc.w spr1pth
  13620. txs1h:
  13621.  dc.w 0
  13622.  dc.w spr2ptl
  13623. txs2l:
  13624.  dc.w 0
  13625.  dc.w spr2pth
  13626. txs2h:
  13627.  dc.w 0
  13628.  dc.w spr3ptl
  13629. txs3l:
  13630.  dc.w 0
  13631.  dc.w spr3pth
  13632. txs3h:
  13633.  dc.w 0
  13634.  dc.w spr4ptl
  13635. txs4l:
  13636.  dc.w 0
  13637.  dc.w spr4pth
  13638. txs4h:
  13639.  dc.w 0
  13640.  dc.w spr5ptl
  13641. txs5l:
  13642.  dc.w 0
  13643.  dc.w spr5pth
  13644. txs5h:
  13645.  dc.w 0
  13646.  dc.w spr6ptl
  13647. txs6l:
  13648.  dc.w 0
  13649.  dc.w spr6pth
  13650. txs6h:
  13651.  dc.w 0
  13652.  dc.w spr7ptl
  13653. txs7l:
  13654.  dc.w 0
  13655.  dc.w spr7pth
  13656. txs7h:
  13657.  dc.w 0
  13658.  
  13659.  
  13660.  dc.w $10c,$0088
  13661.  
  13662.  dc.w $1fc,$f
  13663.  dc.w diwstart,$2c81    ; Top left corner of screen.
  13664.  dc.w diwstop
  13665. BOTOFTXT:
  13666.  dc.w $2cc1     ; Bottom right corner of screen.
  13667.  dc.w ddfstart,$38      ; Data fetch start.
  13668.  dc.w ddfstop,$c8       ; Data fetch stop.
  13669.  
  13670.  dc.w bplcon0
  13671. TSCP:
  13672.  dc.w $a201
  13673.  
  13674.  dc.w $106,$c40
  13675.  
  13676.  dc.w $2a01,$ff00
  13677.  
  13678.  dc.w col0,0
  13679.  dc.w col1
  13680. TOPLET:
  13681. TXTCOLL:
  13682.  dc.w 0
  13683.   dc.w col2
  13684. BOTLET:
  13685. TOPCOLL:
  13686.  dc.w 0
  13687.  dc.w col3
  13688. ALLTEXT:
  13689. MIXCOLL:
  13690.  dc.w $fff
  13691.  dc.w $106,$e40
  13692.  dc.w col3
  13693. ALLTEXTLOW:
  13694.  dc.w $0
  13695.  
  13696.  
  13697.  dc.w bpl1pth
  13698. TSPTh:
  13699.  dc.w 0
  13700.  dc.w bpl1ptl
  13701. TSPTl:
  13702.  dc.w 0
  13703.  
  13704.  dc.w bpl2pth
  13705. TSPTh2:
  13706.  dc.w 0
  13707.  dc.w bpl2ptl
  13708. TSPTl2:
  13709.  dc.w 0
  13710.  
  13711.  
  13712.  dc.w $108,0
  13713.  dc.w $10a,0
  13714.  
  13715.  dc.w $ffff,$fffe
  13716.  
  13717. ********************************************
  13718. * Stuff you don't have to worry about yet. *
  13719. ********************************************
  13720.  
  13721. closeeverything:
  13722.  
  13723. ; jsr mt_end
  13724.  
  13725.  move.l #nullcop,d0
  13726. ; move.l old,d0
  13727.  
  13728.  
  13729. ;charlie  
  13730.  move.l d0,$dff080     ; Restore old copper list.
  13731.  move.w d0,ocl
  13732.  swap d0
  13733.  move.w d0,och
  13734.  
  13735. ; move.l doslib,a6
  13736. ; move.l #4,d1
  13737. ; jsr -198(a6)
  13738.  
  13739. ; move.l doslib,d0
  13740. ; move.l d0,a1
  13741. ; move.l 4.w,a6
  13742. ; jsr CloseLib(a6)
  13743.  
  13744.  move.l #$dff000,a6
  13745.  move.w #$8020,dmacon(a6)
  13746.  move.w #$f,dmacon(a6)
  13747.  
  13748. ; move.l 4.w,a6
  13749. ; lea VBLANKInt,a1
  13750. ; moveq #INTB_COPER,d0
  13751. ; jsr _LVORemIntServer(a6)
  13752.  
  13753. ; IFEQ CD32VER
  13754. ; move.l OLDKINT,$68.w
  13755. ; ENDC
  13756. ; move.w saveinters,d0
  13757. ; or.w #$c000,d0
  13758. ; move.w d0,intena(a6)
  13759.  clr.w $dff0a8
  13760.  clr.w $dff0b8
  13761.  clr.w $dff0c8
  13762.  clr.w $dff0d8
  13763.  
  13764.  
  13765. ; move.l oldview,a1
  13766. ; move.l a1,d0
  13767. ; move.l gfxbase,a6
  13768. ; jsr -$de(a6)
  13769.  
  13770. ; cmp.b #'s',mors
  13771. ; beq.s leaveold
  13772. ; move.w #$f8e,$dff1dc
  13773. ;leaveold:
  13774.  
  13775.  jsr RELEASELEVELMEM
  13776.  jsr RELEASESCRNMEM
  13777.  
  13778.  move.l #0,d0
  13779.  
  13780.  rts
  13781.  
  13782.  
  13783.  
  13784. intbase: dc.l 0
  13785. gfxbase: dc.l 0
  13786. oldview: dc.l 0
  13787.  
  13788. stuff:
  13789.  
  13790.     PRSDL
  13791.     Lea    gfxname(pc),a1    
  13792.     Moveq.l    #0,d0
  13793.     Move.l    $4.w,a6    
  13794.     Jsr    -$228(a6)
  13795.     add.w d1,RVAL1
  13796.     Move.l     d0,gfxbase
  13797.     Move.l    d0,a6                Use As Base Reg
  13798.     Move.l    34(a6),oldview
  13799.     move.l 38(a6),old
  13800.     rts
  13801.  
  13802. gfxname dc.b "graphics.library",0
  13803.  even
  13804. INTUNAME    dc.b    "intuition.library",0
  13805.  
  13806.  even
  13807.  
  13808.  
  13809.  cnop 0,64
  13810.  
  13811. Panel:
  13812.  dc.l 0
  13813.  
  13814. TimerScr: 
  13815. ;ds.b 40*64
  13816.  
  13817. scrntab:
  13818.  ds.b 16
  13819. val SET 32
  13820.  REPT 96
  13821.  dc.b val,val,val
  13822. val SET val+1
  13823.  ENDR
  13824.  ds.b 16
  13825.  
  13826. smallscrntab:
  13827. val SET 32
  13828.  REPT 96
  13829.  dc.b val,val
  13830. val SET val+1
  13831.  ENDR
  13832.  
  13833.  cnop 0,64
  13834. scrn:
  13835.  dc.l 0
  13836. ; incbin "ab3:includes/newborderRAW"
  13837. ; ds.b 80
  13838. scrn2:
  13839.  dc.l 0
  13840.  
  13841. ;flib:
  13842. ; incbin "ab3:includes/newborderRAW"
  13843. ; ds.b 80
  13844. ;flib2:
  13845. ; incbin "ab3:includes/newborderRAW"
  13846. ; ds.b 80
  13847.  
  13848. ; incbin "ab3:includes/newborderRAW"
  13849. ; ds.b 80
  13850.  
  13851. SCRNDRAWPT: dc.l 0
  13852. SCRNSHOWPT: dc.l 0
  13853.  
  13854. ; dcb.l 8,$33333333
  13855. ; dc.l 0
  13856. ; dc.l 0
  13857. ; dcb.l 8,$0f0f0f0f
  13858. ; dc.l 0
  13859. ; dc.l 0
  13860. ;
  13861. ; dcb.l 8,$00ff00ff
  13862. ; dc.l 0
  13863. ; dc.l 0
  13864. ; dcb.l 8,$0000ffff
  13865. ; dc.l 0
  13866. ; dc.l 0
  13867. ; dc.l 0,-1,0,-1,0,-1,0,-1
  13868. ; dc.l 0
  13869. ; dc.l 0
  13870. ; dc.l -1,-1,0,0,-1,-1,0,0
  13871. ; dc.l 0
  13872. ; dc.l 0
  13873. ; dc.l 0,0,-1,-1,-1,-1,-1,-1
  13874. ; dc.l 0
  13875. ; dc.l 0
  13876.  
  13877. NumTimes: dc.l 0
  13878. TimeCount: dc.l 0
  13879. oldtime: dc.l 0
  13880. counting: dc.b 0
  13881. oktodisplay: dc.b 0
  13882.  
  13883. INITTIMER:
  13884.  move.l #0,TimeCount
  13885.  move.l #0,NumTimes
  13886.  rts
  13887.  
  13888. STARTCOUNT:
  13889.  move.l d0,-(a7)
  13890.  move.l $dff004,d0
  13891.  and.l #$1ffff,d0
  13892.  move.l d0,oldtime
  13893.  st counting
  13894.  move.l (a7)+,d0
  13895.  rts
  13896.  
  13897. STOPCOUNT:
  13898.  move.l d0,-(a7)
  13899.  move.l $dff004,d0
  13900.  and.l #$1ffff,d0
  13901.  
  13902.  sub.l oldtime,d0
  13903.  cmp.l #-256,d0
  13904.  bge.s okcount
  13905.  add.l #313*256,d0
  13906. okcount:
  13907.  add.l d0,TimeCount
  13908.  addq.l #1,NumTimes
  13909.  clr.b counting
  13910.  move.l (a7)+,d0
  13911.  rts
  13912.  
  13913. STOPCOUNTNOADD:
  13914.  move.l d0,-(a7)
  13915.  move.l $dff004,d0
  13916.  and.l #$1ffff,d0
  13917.  
  13918.  sub.l oldtime,d0
  13919.  cmp.l #-256,d0
  13920.  bge.s okcount2
  13921.  add.l #313*256,d0
  13922. okcount2:
  13923.  add.l d0,TimeCount
  13924.  clr.b counting
  13925.  move.l (a7)+,d0
  13926.  rts
  13927.  
  13928. maxbot: dc.w 0
  13929. tstneg: dc.l 0
  13930.  
  13931. STOPTIMER:
  13932.  st oktodisplay
  13933.  rts
  13934.  
  13935. digits: incbin "numbers.inc"
  13936.  
  13937. COMPACTMAP: ds.l 257
  13938.  
  13939. BIGMAP: ds.l 256*10
  13940.  
  13941.  Section Sounds,CODE_C
  13942.  
  13943. nullcop:
  13944.  dc.w $106,$c40
  13945.  dc.w $180,0 
  13946.  dc.w $100,$0
  13947.  dc.w $ffff,$fffe
  13948.  
  13949. Scream:
  13950. ; incbin "ab3:sounds/Scream"
  13951. ; ds.w 100
  13952. EndScream:
  13953. LowScream:
  13954. ; incbin "ab3:sounds/LowScream"
  13955. ; ds.w 100
  13956. EndLowScream:
  13957. BaddieGun:
  13958. ; incbin "ab3:sounds/BaddieGun"
  13959. EndBaddieGun:
  13960. bass:
  13961. ; incbin "ab3:sounds/backbass+drum"
  13962. bassend:
  13963. Shoot:
  13964. ; incbin "ab3:sounds/fire!"
  13965. EndShoot:
  13966. Munch:
  13967. ; incbin "ab3:sounds/munch"
  13968. EndMunch:
  13969. PooGun:
  13970. ; incbin "ab3:sounds/shoot.dm"
  13971. EndPooGun:
  13972. Collect:
  13973. ; incbin "ab3:sounds/collect"
  13974. EndCollect:
  13975. DoorNoise:
  13976. ; incbin "ab3:sounds/newdoor"
  13977. EndDoorNoise:
  13978. Stomp:
  13979. ; incbin "ab3:sounds/footstep3"
  13980. EndStomp:
  13981. SwitchNoise:
  13982. ; incbin "ab3:sounds/switch"
  13983. EndSwitch:
  13984. Reload:
  13985. ; incbin "ab3:sounds/switch1.SFX"
  13986. EndReload:
  13987.  
  13988. CHEATFRAME:
  13989.  dc.b 26,20,33,27,17,12
  13990. ENDCHEAT:
  13991.  
  13992. NoAmmo:
  13993. ; incbin "ab3:sounds/noammo"
  13994. EndNoAmmo:
  13995. Splotch:
  13996. ; incbin "ab3:sounds/splotch"
  13997. EndSplotch:
  13998. SplatPop:
  13999. ; incbin "ab3:sounds/splatpop"
  14000. EndSplatPop:
  14001. Boom:
  14002. ; incbin "ab3:sounds/boom"
  14003. EndBoom:
  14004. Hiss:
  14005. ; incbin "ab3:sounds/newhiss"
  14006. EndHiss:
  14007. Howl1:
  14008. ; incbin "ab3:sounds/howl1"
  14009. EndHowl1:
  14010. Howl2:
  14011. ; incbin "ab3:sounds/howl2"
  14012. EndHowl2:
  14013. Pant:
  14014. ; incbin "ab3:sounds/pant"
  14015. EndPant:
  14016. Whoosh:
  14017. ; incbin "ab3:sounds/whoosh"
  14018. EndWhoosh:
  14019. ROAR:
  14020. ; incbin "ab3:sounds/bigscream"
  14021. EndROAR
  14022. whoosh:
  14023. ; incbin "ab3:sounds/flame"
  14024. Endwhoosh:
  14025.  SECTION music,code_c
  14026.  
  14027. UseAllChannels: dc.w 0
  14028.  
  14029. mt_init:
  14030.     move.l    mt_data,a0
  14031.     move.l    a0,a1
  14032.     add.l    #$3b8,a1
  14033.     moveq    #$7f,d0
  14034.     moveq    #0,d1
  14035. mt_loop:move.l    d1,d2
  14036.     subq.w    #1,d0
  14037. mt_lop2:move.b    (a1)+,d1
  14038.     cmp.b    d2,d1
  14039.     bgt.s    mt_loop
  14040.     dbf    d0,mt_lop2
  14041.     addq.b    #1,d2
  14042.  
  14043.     lea    mt_samplestarts(pc),a1
  14044.     asl.l    #8,d2
  14045.     asl.l    #2,d2
  14046.     add.l    #$43c,d2
  14047.     add.l    a0,d2
  14048.     move.l    d2,a2
  14049.     moveq    #$1e,d0
  14050. mt_lop3:
  14051.     clr.l    (a2)
  14052.     move.l    a2,(a1)+
  14053.     moveq    #0,d1
  14054.     move.w    42(a0),d1
  14055.     asl.l    #1,d1
  14056.     add.l    d1,a2
  14057.     add.l    #$1e,a0
  14058.     dbf    d0,mt_lop3
  14059.  
  14060.     or.b    #$2,$bfe001
  14061.     move.b    #$6,mt_speed
  14062.     clr.w    $dff0a8
  14063.     clr.w    $dff0b8
  14064.     clr.w    $dff0c8
  14065.     clr.w    $dff0d8
  14066.     clr.b    mt_songpos
  14067.     clr.b    mt_counter
  14068.     clr.w    mt_pattpos
  14069.     rts
  14070.  
  14071. mt_end:    clr.w    $dff0a8
  14072.     clr.w    $dff0b8
  14073.     clr.w    $dff0c8
  14074.     clr.w    $dff0d8
  14075.     move.w    #$f,$dff096
  14076.     rts
  14077.  
  14078. mt_music:
  14079.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  14080.     move.l    mt_data,a0
  14081.     addq.b    #$1,mt_counter
  14082.     move.b    mt_counter,D0
  14083.     cmp.b    mt_speed,D0
  14084.     blt.s    mt_nonew
  14085.     clr.b    mt_counter
  14086.     bra    mt_getnew
  14087.  
  14088. mt_nonew:
  14089.     lea    mt_voice1(pc),a6
  14090.     lea    $dff0a0,a5
  14091.     bsr    mt_checkcom
  14092.     tst.b UseAllChannels
  14093.     beq mt_endr
  14094.     lea    mt_voice2(pc),a6
  14095.     lea    $dff0b0,a5
  14096.     bsr    mt_checkcom
  14097.      lea    mt_voice3(pc),a6
  14098.     lea    $dff0c0,a5
  14099.     bsr    mt_checkcom
  14100.     lea    mt_voice4(pc),a6
  14101.     lea    $dff0d0,a5
  14102.     bsr    mt_checkcom
  14103.     bra    mt_endr
  14104.  
  14105. mt_arpeggio:
  14106.     moveq    #0,d0
  14107.     move.b    mt_counter,d0
  14108.     divs    #$3,d0
  14109.     swap    d0
  14110.     cmp.w    #$0,d0
  14111.     beq.s    mt_arp2
  14112.     cmp.w    #$2,d0
  14113.     beq.s    mt_arp1
  14114.  
  14115.     moveq    #0,d0
  14116.     move.b    $3(a6),d0
  14117.     lsr.b    #4,d0
  14118.     bra.s    mt_arp3
  14119. mt_arp1:moveq    #0,d0
  14120.     move.b    $3(a6),d0
  14121.     and.b    #$f,d0
  14122.     bra.s    mt_arp3
  14123. mt_arp2:move.w    $10(a6),d2
  14124.     bra.s    mt_arp4
  14125. mt_arp3:asl.w    #1,d0
  14126.     moveq    #0,d1
  14127.     move.w    $10(a6),d1
  14128.     lea    mt_periods(pc),a0
  14129.     moveq    #$24,d7
  14130. mt_arploop:
  14131.     move.w    (a0,d0.w),d2
  14132.     cmp.w    (a0),d1
  14133.     bge.s    mt_arp4
  14134.     addq.l    #2,a0
  14135.     dbf    d7,mt_arploop
  14136.     rts
  14137. mt_arp4:move.w    d2,$6(a5)
  14138.     rts
  14139.  
  14140. mt_getnew:
  14141.     move.l    mt_data,a0
  14142.     move.l    a0,a3
  14143.     move.l    a0,a2
  14144.     add.l    #$c,a3
  14145.     add.l    #$3b8,a2
  14146.     add.l    #$43c,a0
  14147.  
  14148.     moveq    #0,d0
  14149.     move.l    d0,d1
  14150.     move.b    mt_songpos,d0
  14151.     move.b    (a2,d0.w),d1
  14152.     asl.l    #8,d1
  14153.     asl.l    #2,d1
  14154.     add.w    mt_pattpos,d1
  14155.     clr.w    mt_dmacon
  14156.  
  14157.     lea    $dff0a0,a5
  14158.     lea    mt_voice1(pc),a6
  14159.     bsr    mt_playvoice
  14160.     tst.b UseAllChannels
  14161.     beq mt_setdma
  14162.     lea    $dff0b0,a5
  14163.     lea    mt_voice2(pc),a6
  14164.     bsr    mt_playvoice
  14165.     lea    $dff0c0,a5
  14166.     lea    mt_voice3(pc),a6
  14167.     bsr    mt_playvoice
  14168.     lea    $dff0d0,a5
  14169.     lea    mt_voice4(pc),a6
  14170.     bsr    mt_playvoice
  14171.     bra    mt_setdma
  14172.  
  14173. PROTCALC:
  14174. ;    include "ab3:source_4000/protcalc.s"
  14175.     incbin "ab3:includes/protcalc.bin"
  14176. ENDPROTCALC:
  14177.  
  14178. mt_playvoice:
  14179.     move.l    (a0,d1.l),(a6)
  14180.     addq.l    #4,d1
  14181.     moveq    #0,d2
  14182.     move.b    $2(a6),d2
  14183.     and.b    #$f0,d2
  14184.     lsr.b    #4,d2
  14185.     move.b    (a6),d0
  14186.     and.b    #$f0,d0
  14187.     or.b    d0,d2
  14188.     tst.b    d2
  14189.     beq.s    mt_setregs
  14190.     moveq    #0,d3
  14191.     lea    mt_samplestarts(pc),a1
  14192.     move.l    d2,d4
  14193.     subq.l    #$1,d2
  14194.     asl.l    #2,d2
  14195.     mulu    #$1e,d4
  14196.     move.l    (a1,d2.l),$4(a6)
  14197.     move.w    (a3,d4.l),$8(a6)
  14198.     move.w    $2(a3,d4.l),$12(a6)
  14199.     move.w    $4(a3,d4.l),d3
  14200.     tst.w    d3
  14201.     beq.s    mt_noloop
  14202.     move.l    $4(a6),d2
  14203.     asl.w    #1,d3
  14204.     add.l    d3,d2
  14205.     move.l    d2,$a(a6)
  14206.     move.w    $4(a3,d4.l),d0
  14207.     add.w    $6(a3,d4.l),d0
  14208.     move.w    d0,8(a6)
  14209.     move.w    $6(a3,d4.l),$e(a6)
  14210.     move.w    $12(a6),d0
  14211.     move.w d0,$8(a5)
  14212.     bra.s    mt_setregs
  14213. mt_noloop:
  14214.     move.l    $4(a6),d2
  14215.     add.l    d3,d2
  14216.     move.l    d2,$a(a6)
  14217.     move.w    $6(a3,d4.l),$e(a6)
  14218.     move.w    $12(a6),d0
  14219.     move.w d0,$8(a5)
  14220. mt_setregs:
  14221.     move.w    (a6),d0
  14222.     and.w    #$fff,d0
  14223.     beq    mt_checkcom2
  14224.     move.b    $2(a6),d0
  14225.     and.b    #$F,d0
  14226.     cmp.b    #$3,d0
  14227.     bne.s    mt_setperiod
  14228.     bsr    mt_setmyport
  14229.     bra    mt_checkcom2
  14230. mt_setperiod:
  14231.     move.w    (a6),$10(a6)
  14232.     and.w    #$fff,$10(a6)
  14233.     move.w    $14(a6),d0
  14234.     move.w    d0,$dff096
  14235.     clr.b    $1b(a6)
  14236.  
  14237.     move.l    $4(a6),(a5)
  14238.     move.w    $8(a6),$4(a5)
  14239.     move.w    $10(a6),d0
  14240.     and.w    #$fff,d0
  14241.     move.w    d0,$6(a5)
  14242.     move.w    $14(a6),d0
  14243.     or.w    d0,mt_dmacon
  14244.     bra    mt_checkcom2
  14245.  
  14246. mt_setdma:
  14247.      move.w #250,d0
  14248. mt_wait:
  14249.      add.w #1,testchip
  14250.      dbra d0,mt_wait
  14251.     move.w    mt_dmacon,d0
  14252.     or.w    #$8000,d0
  14253.     tst.b UseAllChannels
  14254.     bne.s .splib
  14255.     and.w #%1111111111110001,d0
  14256. .splib
  14257.     move.w    d0,$dff096
  14258.     move.w #250,d0
  14259. mt_wait2:
  14260.     add.w #1,testchip
  14261.     dbra    d0,mt_wait2
  14262.     lea    $dff000,a5
  14263.     tst.b UseAllChannels
  14264.     beq.s noall
  14265.     lea    mt_voice4(pc),a6
  14266.     move.l    $a(a6),$d0(a5)
  14267.     move.w    $e(a6),$d4(a5)
  14268.     lea    mt_voice3(pc),a6
  14269.     move.l    $a(a6),$c0(a5)
  14270.     move.w    $e(a6),$c4(a5)
  14271.     lea    mt_voice2(pc),a6
  14272.     move.l    $a(a6),$b0(a5)
  14273.     move.w    $e(a6),$b4(a5)
  14274. noall:
  14275.     lea    mt_voice1(pc),a6
  14276.     move.l    $a(a6),$a0(a5)
  14277.     move.w    $e(a6),$a4(a5)
  14278.  
  14279.     add.w    #$10,mt_pattpos
  14280.     cmp.w    #$400,mt_pattpos
  14281.     bne.s    mt_endr
  14282. mt_nex:    clr.w    mt_pattpos
  14283.     clr.b    mt_break
  14284.     addq.b    #1,mt_songpos
  14285.     and.b    #$7f,mt_songpos
  14286.     move.b    mt_songpos,d1
  14287. ;    cmp.b    mt_data+$3b6,d1
  14288. ;    bne.s    mt_endr
  14289. ;    move.b    mt_data+$3b7,mt_songpos
  14290. mt_endr:tst.b    mt_break
  14291.     bne.s    mt_nex
  14292.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  14293.     rts
  14294.  
  14295. mt_setmyport:
  14296.     move.w    (a6),d2
  14297.     and.w    #$fff,d2
  14298.     move.w    d2,$18(a6)
  14299.     move.w    $10(a6),d0
  14300.     clr.b    $16(a6)
  14301.     cmp.w    d0,d2
  14302.     beq.s    mt_clrport
  14303.     bge.s    mt_rt
  14304.     move.b    #$1,$16(a6)
  14305.     rts
  14306. mt_clrport:
  14307.     clr.w    $18(a6)
  14308. mt_rt:    rts
  14309.  
  14310. CODESTORE: dc.l 0
  14311.  
  14312. mt_myport:
  14313.     move.b    $3(a6),d0
  14314.     beq.s    mt_myslide
  14315.     move.b    d0,$17(a6)
  14316.     clr.b    $3(a6)
  14317. mt_myslide:
  14318.     tst.w    $18(a6)
  14319.     beq.s    mt_rt
  14320.     moveq    #0,d0
  14321.     move.b    $17(a6),d0
  14322.     tst.b    $16(a6)
  14323.     bne.s    mt_mysub
  14324.     add.w    d0,$10(a6)
  14325.     move.w    $18(a6),d0
  14326.     cmp.w    $10(a6),d0
  14327.     bgt.s    mt_myok
  14328.     move.w    $18(a6),$10(a6)
  14329.     clr.w    $18(a6)
  14330. mt_myok:move.w    $10(a6),$6(a5)
  14331.     rts
  14332. mt_mysub:
  14333.     sub.w    d0,$10(a6)
  14334.     move.w    $18(a6),d0
  14335.     cmp.w    $10(a6),d0
  14336.     blt.s    mt_myok
  14337.     move.w    $18(a6),$10(a6)
  14338.     clr.w    $18(a6)
  14339.     move.w    $10(a6),$6(a5)
  14340.     rts
  14341.  
  14342. mt_vib:    move.b    $3(a6),d0
  14343.     beq.s    mt_vi
  14344.     move.b    d0,$1a(a6)
  14345.  
  14346. mt_vi:    move.b    $1b(a6),d0
  14347.     lea    mt_sin(pc),a4
  14348.     lsr.w    #$2,d0
  14349.     and.w    #$1f,d0
  14350.     moveq    #0,d2
  14351.     move.b    (a4,d0.w),d2
  14352.     move.b    $1a(a6),d0
  14353.     and.w    #$f,d0
  14354.     mulu    d0,d2
  14355.     lsr.w    #$6,d2
  14356.     move.w    $10(a6),d0
  14357.     tst.b    $1b(a6)
  14358.     bmi.s    mt_vibmin
  14359.     add.w    d2,d0
  14360.     bra.s    mt_vib2
  14361. mt_vibmin:
  14362.     sub.w    d2,d0
  14363. mt_vib2:move.w    d0,$6(a5)
  14364.     move.b    $1a(a6),d0
  14365.     lsr.w    #$2,d0
  14366.     and.w    #$3c,d0
  14367.     add.b    d0,$1b(a6)
  14368.     rts
  14369.  
  14370. mt_nop:    move.w    $10(a6),$6(a5)
  14371.     rts
  14372.  
  14373.  
  14374. mt_checkcom:
  14375.     move.w    $2(a6),d0
  14376.     and.w    #$fff,d0
  14377.     beq.s    mt_nop
  14378.     move.b    $2(a6),d0
  14379.     and.b    #$f,d0
  14380.     tst.b    d0
  14381.     beq    mt_arpeggio
  14382.     cmp.b    #$1,d0
  14383.     beq.s    mt_portup
  14384.     cmp.b    #$2,d0
  14385.     beq    mt_portdown
  14386.     cmp.b    #$3,d0
  14387.     beq    mt_myport
  14388.     cmp.b    #$4,d0
  14389.     beq    mt_vib
  14390.     move.w    $10(a6),$6(a5)
  14391.     cmp.b    #$a,d0
  14392.     beq.s    mt_volslide
  14393.     rts
  14394.  
  14395. mt_volslide:
  14396.     moveq    #0,d0
  14397.     move.b    $3(a6),d0
  14398.     lsr.b    #4,d0
  14399.     tst.b    d0
  14400.     beq.s    mt_voldown
  14401.     add.w    d0,$12(a6)
  14402.     cmp.w    #$40,$12(a6)
  14403.     bmi.s    mt_vol2
  14404.     move.w    #$40,$12(a6)
  14405. mt_vol2:move.w    $12(a6),d0
  14406.     asr.w #2,d0
  14407.     move.w d0,$8(a5)
  14408.     rts
  14409.  
  14410. mt_voldown:
  14411.     moveq    #0,d0
  14412.     move.b    $3(a6),d0
  14413.     and.b    #$f,d0
  14414.     sub.w    d0,$12(a6)
  14415.     bpl.s    mt_vol3
  14416.     clr.w    $12(a6)
  14417. mt_vol3:move.w    $12(a6),d0
  14418.     move.w d0,$8(a5)
  14419.     rts
  14420.  
  14421. mt_portup:
  14422.     moveq    #0,d0
  14423.     move.b    $3(a6),d0
  14424.     sub.w    d0,$10(a6)
  14425.     move.w    $10(a6),d0
  14426.     and.w    #$fff,d0
  14427.     cmp.w    #$71,d0
  14428.     bpl.s    mt_por2
  14429.     and.w    #$f000,$10(a6)
  14430.     or.w    #$71,$10(a6)
  14431. mt_por2:move.w    $10(a6),d0
  14432.     and.w    #$fff,d0
  14433.     move.w    d0,$6(a5)
  14434.     rts
  14435.  
  14436. mt_portdown:
  14437.     clr.w    d0
  14438.     move.b    $3(a6),d0
  14439.     add.w    d0,$10(a6)
  14440.     move.w    $10(a6),d0
  14441.     and.w    #$fff,d0
  14442.     cmp.w    #$358,d0
  14443.     bmi.s    mt_por3
  14444.     and.w    #$f000,$10(a6)
  14445.     or.w    #$358,$10(a6)
  14446. mt_por3:move.w    $10(a6),d0
  14447.     and.w    #$fff,d0
  14448.     move.w    d0,$6(a5)
  14449.     rts
  14450.  
  14451. mt_checkcom2:
  14452.     move.b    $2(a6),d0
  14453.     and.b    #$f,d0
  14454.     cmp.b    #$e,d0
  14455.     beq.s    mt_setfilt
  14456.     cmp.b    #$d,d0
  14457.     beq.s    mt_pattbreak
  14458.     cmp.b    #$b,d0
  14459.     beq.s    mt_posjmp
  14460.     cmp.b    #$c,d0
  14461.     beq.s    mt_setvol
  14462.     cmp.b    #$f,d0
  14463.     beq.s    mt_setspeed
  14464.     rts
  14465.  
  14466. mt_setfilt:
  14467.     move.b    $3(a6),d0
  14468.     and.b    #$1,d0
  14469.     asl.b    #$1,d0
  14470.     and.b    #$fd,$bfe001
  14471.     or.b    d0,$bfe001
  14472.     rts
  14473. mt_pattbreak:
  14474.     not.b    mt_break
  14475.     rts
  14476. mt_posjmp:
  14477.     st reachedend
  14478.     move.b    $3(a6),d0
  14479.     subq.b    #$1,d0
  14480.     move.b    d0,mt_songpos
  14481.     not.b    mt_break
  14482.     rts
  14483. mt_setvol:
  14484.     cmp.b    #$40,$3(a6)
  14485.     ble.s    mt_vol4
  14486.     move.b    #$40,$3(a6)
  14487. mt_vol4:move.b    $3(a6),d0
  14488.     move.w d0,$8(a5)
  14489.     rts
  14490. mt_setspeed:
  14491.     cmp.b    #$1f,$3(a6)
  14492.     ble.s    mt_sets
  14493.     move.b    #$1f,$3(a6)
  14494. mt_sets:move.b    $3(a6),d0
  14495.     beq.s    mt_rts2
  14496.     move.b    d0,mt_speed
  14497.     clr.b    mt_counter
  14498. mt_rts2:rts
  14499.  
  14500. mt_sin:
  14501.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  14502.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  14503.  
  14504. mt_periods:
  14505.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  14506.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  14507.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  14508.  DC.w $007f,$0078,$0071,$0000,$0000
  14509.  
  14510. reachedend: dc.b 0
  14511. mt_speed:    DC.b    6
  14512. mt_songpos:    DC.b    0
  14513. mt_pattpos:    DC.w    0
  14514. mt_counter:    DC.b    0
  14515.  
  14516. mt_break:    DC.b    0
  14517. mt_dmacon:    DC.w    0
  14518. mt_samplestarts:DS.L    $1f
  14519. mt_voice1:    DS.w    10
  14520.         DC.w    1
  14521.         DS.w    3
  14522. mt_voice2:    DS.w    10
  14523.         DC.w    2
  14524.         DS.w    3
  14525. mt_voice3:    DS.w    10
  14526.         DC.w    4
  14527.         DS.w    3
  14528. mt_voice4:    DS.w    10
  14529.         DC.w    8
  14530.         DS.w    3
  14531.  
  14532. CHEATPTR: dc.l 0
  14533. CHEATNUM: dc.l 0
  14534.  
  14535. testchip: dc.w 0
  14536.  
  14537. LEVELMUSIC: dc.l 0
  14538.  
  14539. ;/* End of File */
  14540. mt_data: dc.l 0
  14541. tstchip: dc.l 0
  14542.  include "SERIAL_NIGHTMARE"
  14543.  
  14544. ingame:
  14545. ; incbin "work:temp/newmusic/testonechan"
  14546. gameover: 
  14547. ;incbin "ab3:includes/gameover"
  14548. welldone: incbin "ab3:includes/newwelldone"
  14549.  
  14550.  
  14551.