home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / games / alienbreed3d2 / source_4000 / fasthires.s < prev    next >
Text File  |  1997-01-31  |  218KB  |  14,542 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 #$dff000,a6
  646.  
  647. ; move.b LEVTOPLAY,d0
  648. ; move.b d0,LEVA
  649. ; move.b d0,LEVB
  650. ; move.b d0,LEVC
  651. ; move.b d0,LEVD
  652. ; move.b d0,LEVE
  653.  
  654.  
  655. ; move.l #LEVELDATAD,LEVELDATA
  656. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  657. ; move.l #LEVELCLIPSD,LEVELCLIPS
  658.  
  659. ; bra noload
  660.  
  661. *********************************
  662.  
  663. ; move.l doslib,a6
  664. ; move.l #LLname,d1
  665. ; move.l #1005,d2
  666. ; jsr -30(a6)
  667. ; move.l d0,LLhandle
  668. ;
  669. ; move.l doslib,a6
  670. ; move.l d0,d1
  671. ; move.l #LINKS,d2
  672. ; move.l #10000,d3
  673. ; jsr -42(a6)
  674. ;
  675. ; move.l doslib,a6
  676. ; move.l LLhandle,d1
  677. ; jsr -36(a6)
  678.  
  679.  ********************************
  680.  
  681. ; move.l doslib,a6
  682. ; move.l #LLFname,d1
  683. ; move.l #1005,d2
  684. ; jsr -30(a6)
  685. ; move.l d0,LLhandle
  686.  
  687. ; move.l doslib,a6
  688. ; move.l d0,d1
  689. ; move.l #FLYLINKS,d2
  690. ; move.l #10000,d3
  691. ; jsr -42(a6)
  692.  
  693. ; move.l doslib,a6
  694. ; move.l LLhandle,d1
  695. ; jsr -36(a6)
  696.  
  697.  ************************
  698.  ********
  699.  
  700.  
  701.  move.l doslib,a6
  702.  move.l #LDname,d1
  703.  move.l #1005,d2
  704.  jsr -30(a6)
  705.  move.l d0,LDhandle
  706.  
  707.  move.l doslib,a6
  708.  move.l d0,d1
  709.  move.l LEVELCLIPS,d2
  710.  move.l #40000,d3
  711.  jsr -42(a6)
  712.  
  713.  move.l doslib,a6
  714.  move.l LDhandle,d1
  715.  jsr -36(a6)
  716.  
  717. *************************************
  718.     move.l    LEVELCLIPS,d0
  719.     moveq    #0,d1
  720.     move.l LEVELDATA,a0
  721.     lea    WorkSpace,a1
  722.     lea    $0,a2
  723.     jsr    unLHA
  724. *************************************
  725.  
  726. ********
  727.  
  728.  move.l doslib,a6
  729.  move.l #LGname,d1
  730.  move.l #1005,d2
  731.  jsr -30(a6)
  732.  move.l d0,LGhandle
  733.  
  734.  move.l doslib,a6
  735.  move.l d0,d1
  736.  move.l LEVELCLIPS,d2
  737.  move.l #40000,d3
  738.  jsr -42(a6)
  739.  
  740.  move.l doslib,a6
  741.  move.l LGhandle,d1
  742.  jsr -36(a6)
  743.  
  744. *************************************
  745.     move.l    LEVELCLIPS,d0
  746.     moveq    #0,d1
  747.     move.l LEVELGRAPHICS,a0
  748.     lea    WorkSpace,a1
  749.     lea    $0,a2
  750.     jsr    unLHA
  751. *************************************
  752.  
  753. ********
  754.  
  755.  move.l doslib,a6
  756.  move.l #LCname,d1
  757.  move.l #1005,d2
  758.  jsr -30(a6)
  759.  move.l d0,LChandle
  760.  
  761.  move.l doslib,a6
  762.  move.l d0,d1
  763.  move.l #WorkSpace+16384,d2
  764.  move.l #16000,d3
  765.  jsr -42(a6)
  766.  
  767.  move.l doslib,a6
  768.  move.l LChandle,d1
  769.  jsr -36(a6)
  770.  
  771. *************************************
  772.     move.l    #WorkSpace+16384,d0
  773.     moveq    #0,d1
  774.     move.l LEVELCLIPS,a0
  775.     lea    WorkSpace,a1
  776.     lea    $0,a2
  777.     jsr    unLHA
  778. *************************************
  779.  
  780.  
  781. *******
  782.  
  783. noload:
  784.  
  785. ********
  786.  
  787. ; move.l doslib,a6
  788. ; move.l #Prefsname,d1
  789. ; move.l #1005,d2
  790. ; jsr -30(a6)
  791. ; move.l d0,Prefshandle
  792.  
  793. ; move.l doslib,a6
  794. ; move.l d0,d1
  795. ; move.l #Prefsfile,d2
  796. ; move.l #50,d3
  797. ; jsr -42(a6)
  798.  
  799. ; move.l doslib,a6
  800. ; move.l Prefshandle,d1
  801. ; jsr -36(a6)
  802.  
  803. *******
  804.  
  805.  IFNE CD32VER
  806.  move.l doslib,a6
  807.  move.l #115,d1
  808.  jsr -198(a6)
  809.  ENDC
  810.  
  811.  
  812. ; move.l doslib,d0
  813. ; move.l d0,a1
  814. ; move.l 4.w,a6
  815. ; jsr CloseLib(a6)
  816.  
  817.  move.l #$dff000,a6
  818.  
  819. charlie:
  820. ; jmp  ENDGAMESCROLL
  821.  
  822.     move.w #$87c0,dmacon(a6)
  823.  
  824.     move.w    #%1000000000100000,dmacon(a6)
  825.  
  826. ; move.w intenar(a6),saveinters
  827.     
  828.     move.w #%00101111,intena(a6)
  829.  
  830.     move.w #255,adkcon(a6)
  831.  
  832.  
  833. *** Put myself in supervisor mode
  834.  
  835.  bra blag
  836. ; move.l $6c,d0
  837. ; move.l #blag,$6c
  838. ; move.w #$8010,intreq(a6)
  839.  
  840.  rts
  841.  
  842. saveit: ds.l 10
  843. doslibname: dc.b 'dos.library',0
  844.  even
  845. doslib: dc.l 0
  846.  
  847. mors: dc.w 0
  848.  
  849. LDname: dc.b 'tkg2:levels/level_'
  850. LEVA:
  851.  dc.b 'a/twolev.bin',0
  852.  even
  853. LDhandle: dc.l 0
  854. LGname: dc.b 'tkg2:levels/level_'
  855. LEVB:
  856.  dc.b 'a/twolev.graph.bin',0
  857.  even
  858. LGhandle: dc.l 0
  859. LCname: dc.b 'tkg2:levels/level_'
  860. LEVC:
  861.  dc.b 'a/twolev.clips',0
  862.  even
  863. LChandle: dc.l 0
  864. LLname: dc.b 'tkg2:levels/level_'
  865. LEVD:
  866.  dc.b 'a/twolev.map',0
  867.  even
  868. LLFname: dc.b 'tkg2:levels/level_'
  869. LEVE:
  870.  dc.b 'a/twolev.flymap',0
  871.  even
  872. LLhandle: dc.l 0
  873.  
  874.     cnop    0,4
  875.  
  876. Prefsname: dc.b 'ram:prefs',0
  877.  even
  878. Prefshandle: dc.l 0
  879.  
  880.  
  881.  even
  882.  
  883.  cnop 0,4
  884.  
  885. VBLANKInt
  886.  dc.l 0,0
  887.  dc.b NT_INTERRUPT,9
  888.  dc.l Prefsname
  889.  dc.l 0
  890.  dc.l Chan0inter
  891.  
  892.  
  893. KEYInt
  894.  dc.l 0,0
  895.  dc.b NT_INTERRUPT,127
  896.  dc.l Prefsname
  897.  dc.l 0
  898.  dc.l key_interrupt
  899.  
  900.  
  901. blag:
  902. ; move.w #$10,intreq(a6)
  903. ; move.l d0,$6c
  904. ; move.w #$7fff,intena(a6)
  905.  
  906. ; move.w #$20,$dff1dc
  907.  
  908. ; move.l 4.w,a6
  909. ; lea VBLANKInt(pc),a1
  910. ; moveq #INTB_COPER,d0
  911. ; jsr _LVOAddIntServer(a6)
  912.  
  913. ****************************
  914. * Initialize level
  915. ****************************
  916. * Poke all clip offsets into
  917. * correct bit of level data.
  918. ****************************
  919.  move.l LEVELGRAPHICS,a0
  920.  move.l 12(a0),a1
  921.  add.l a0,a1
  922.  move.l a1,ZoneGraphAdds
  923.  move.l (a0),a1
  924.  add.l a0,a1
  925.  move.l a1,DoorData
  926.  move.l 4(a0),a1
  927.  add.l a0,a1
  928.  move.l a1,LiftData
  929.  move.l 8(a0),a1
  930.  add.l a0,a1
  931.  move.l a1,SwitchData
  932.  adda.w #16,a0
  933.  move.l a0,ZoneAdds
  934.  
  935.  move.l LEVELDATA,a4
  936.  lea 160*10(a4),a1
  937.  
  938.  lea 54(a1),a2
  939.  move.l a2,CPtPos
  940.  move.w 12(a1),NumCPts
  941.  move.w 14(a1),NumLevPts
  942.  
  943.  move.l 16+6(a1),a2
  944.  add.l a4,a2
  945.  move.l a2,Points
  946.  move.w 8+6(a1),d0
  947.  lea 4(a2,d0.w*4),a2
  948.  move.l a2,PointBrights
  949.  move.w 16(a1),d0
  950.  addq #1,d0
  951.  muls #80,d0
  952.  add.l d0,a2
  953.  move.l a2,ZoneBorderPts
  954.  
  955.  move.l 20+6(a1),a2
  956.  add.l a4,a2
  957.  move.l a2,FloorLines
  958.  move.w -2(a2),ENDZONE
  959.  move.l 24+6(a1),a2
  960.  add.l a4,a2
  961.  move.l a2,ObjectData
  962. *****************************************
  963. * Just for charles
  964.  
  965. ; move.w #$6060,6(a2)
  966. ; move.l #$d0000,8(a2)
  967. ; sub.w #40,4(a2)
  968. ; move.w #45*256+45,14(a2)
  969. ****************************************
  970.  move.l 28+6(a1),a2
  971.  add.l a4,a2
  972.  move.l a2,PlayerShotData
  973.  move.l 32+6(a1),a2
  974.  add.l a4,a2
  975.  move.l a2,NastyShotData
  976.  
  977.  add.l #64*20,a2
  978.  move.l a2,OtherNastyData
  979.  
  980.  move.l 36+6(a1),a2
  981.  add.l a4,a2
  982.  move.l a2,ObjectPoints  
  983.  move.l 40+6(a1),a2
  984.  add.l a4,a2
  985.  move.l a2,PLR1_Obj
  986.  move.l 44+6(a1),a2
  987.  add.l a4,a2
  988.  move.l a2,PLR2_Obj
  989.  move.w 14+6(a1),NumObjectPoints
  990.  
  991. ; bra noclips
  992.   
  993.  move.l LEVELCLIPS,a2
  994.  moveq #0,d0
  995.  move.w 10+6(a1),d7    ;numzones
  996.  move.w d7,NUMZONES
  997. assignclips:
  998.  move.l (a0)+,a3
  999.  add.l a4,a3    ; pointer to a zone
  1000.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  1001. dowholezone:
  1002.  tst.w (a3)
  1003.  blt.s nomorethiszone
  1004.  tst.w 2(a3)
  1005.  blt.s thisonenull
  1006.  
  1007.  move.l d0,d1
  1008.  asr.l #1,d1
  1009.  move.w d1,2(a3)
  1010.  
  1011. findnextclip:
  1012.  cmp.w #-2,(a2,d0.l)
  1013.  beq.s foundnextclip
  1014.  addq.l #2,d0
  1015.  bra.s findnextclip
  1016. foundnextclip
  1017.  addq.l #2,d0
  1018.  
  1019. thisonenull:
  1020.  addq #8,a3 
  1021.  bra.s dowholezone
  1022. nomorethiszone:
  1023.  dbra d7,assignclips
  1024.  
  1025.  lea (a2,d0.l),a2
  1026.  move.l a2,CONNECT_TABLE
  1027.  
  1028. noclips:
  1029.  
  1030. * Put in addresses of glowything
  1031.  
  1032.  
  1033. ************************************
  1034.  
  1035. ; cmp.b #'k',Prefsfile
  1036. ; bne.s nkb
  1037.  
  1038. ;nkb:
  1039. ; cmp.b #'m',Prefsfile
  1040. ; bne.s nmc
  1041. ; clr.b PLR1KEYS
  1042. ; clr.b PLR1PATH
  1043. ; st PLR1MOUSE
  1044. ; clr.b PLR1JOY
  1045. ;nmc:
  1046. ; cmp.b #'j',Prefsfile
  1047. ; bne.s njc
  1048. ; clr.b PLR1KEYS
  1049. ; clr.b PLR1PATH
  1050. ; clr.b PLR1MOUSE
  1051. ; st PLR1JOY
  1052. ;njc:
  1053.  
  1054.  clr.b PLR1_StoodInTop
  1055.  move.l #playerheight,PLR1s_height
  1056.  
  1057.  move.l #empty,pos1LEFT
  1058.  move.l #empty,pos2LEFT
  1059.  move.l #empty,pos1RIGHT
  1060.  move.l #empty,pos2RIGHT
  1061.  move.l #empty,pos0LEFT
  1062.  move.l #empty,pos3LEFT
  1063.  move.l #empty,pos0RIGHT
  1064.  move.l #empty,pos3RIGHT
  1065.  move.l #emptyend,Samp0endLEFT
  1066.  move.l #emptyend,Samp1endLEFT
  1067.  move.l #emptyend,Samp0endRIGHT
  1068.  move.l #emptyend,Samp1endRIGHT
  1069.  move.l #emptyend,Samp2endLEFT
  1070.  move.l #emptyend,Samp3endLEFT
  1071.  move.l #emptyend,Samp2endRIGHT
  1072.  move.l #emptyend,Samp3endRIGHT
  1073.  
  1074.  
  1075.  move.l #nullline,d0
  1076.  move.w d0,n1l
  1077.  swap d0
  1078.  move.w d0,n1h
  1079.  
  1080.  move.l Panel,d0
  1081.  move.w d0,p1l
  1082.  swap d0
  1083.  move.w d0,p1h
  1084.  swap d0
  1085.  add.l #40,d0
  1086.  move.w d0,p2l
  1087.  swap d0
  1088.  move.w d0,p2h
  1089.  swap d0
  1090.  add.l #40,d0
  1091.  move.w d0,p3l
  1092.  swap d0
  1093.  move.w d0,p3h
  1094.  swap d0
  1095.  add.l #40,d0
  1096.  move.w d0,p4l
  1097.  swap d0
  1098.  move.w d0,p4h
  1099.  swap d0
  1100.  add.l #40,d0
  1101.  move.w d0,p5l
  1102.  swap d0
  1103.  move.w d0,p5h
  1104.  swap d0
  1105.  add.l #40,d0
  1106.  move.w d0,p6l
  1107.  swap d0
  1108.  move.w d0,p6h
  1109.  swap d0
  1110.  add.l #40,d0
  1111.  move.w d0,p7l
  1112.  swap d0
  1113.  move.w d0,p7h
  1114.  swap d0
  1115.  add.l #40,d0
  1116.  move.w d0,p8l
  1117.  swap d0
  1118.  move.w d0,p8h
  1119.  
  1120. *******************************
  1121. * TIMER SCREEN SETUP
  1122. ; move.l #TimerScr,d0
  1123. ; move.w d0,p1l
  1124. ; swap d0
  1125. ; move.w d0,p1h
  1126. ; move.w #$1201,Panelcon
  1127.  
  1128. ; move.l #borders,d0
  1129. ; move.w d0,s0l
  1130. ; swap d0
  1131. ; move.w d0,s0h
  1132. ; move.l #borders+2592,d0
  1133. ; move.w d0,s1l
  1134. ; swap d0
  1135. ; move.w d0,s1h
  1136. ; move.l #borders+2592*2,d0
  1137. ; move.w d0,s2l
  1138. ; swap d0
  1139. ; move.w d0,s2h
  1140. ; move.l #borders+2592*3,d0
  1141. ; move.w d0,s3l
  1142. ; swap d0
  1143. ; move.w d0,s3h
  1144.  
  1145.  move.l #nullspr,d0
  1146.  move.w d0,s0l
  1147.  move.w d0,s1l
  1148.  move.w d0,s2l
  1149.  move.w d0,s3l
  1150.  
  1151.  move.w d0,s4l
  1152.  move.w d0,s5l
  1153.  move.w d0,s6l
  1154.  move.w d0,s7l
  1155.  swap d0
  1156.  
  1157.  move.w d0,s0h
  1158.  move.w d0,s1h
  1159.  move.w d0,s2h
  1160.  move.w d0,s3h
  1161.  
  1162.  move.w d0,s4h
  1163.  move.w d0,s5h
  1164.  move.w d0,s6h
  1165.  move.w d0,s7h 
  1166.  
  1167.  
  1168. ; move.w #52*256+64,borders
  1169. ; move.w #212*256+0,borders+8
  1170. ; move.w #52*256+64,borders+2592
  1171. ; move.w #212*256+128,borders+8+2592
  1172. ; move.w #52*256+192,borders+2592*2
  1173. ; move.w #212*256+0,borders+8+2592*2
  1174. ; move.w #52*256+192,borders+2592*3
  1175. ; move.w #212*256+128,borders+8+2592*3
  1176.  
  1177.  move.l #FacePlace,d0
  1178.  move.w d0,f1l
  1179.  swap d0
  1180.  move.w d0,f1h
  1181.  move.l #FacePlace+32*24,d0
  1182.  move.w d0,f2l
  1183.  swap d0
  1184.  move.w d0,f2h
  1185.  move.l #FacePlace+32*24*2,d0
  1186.  move.w d0,f3l
  1187.  swap d0
  1188.  move.w d0,f3h
  1189.  move.l #FacePlace+32*24*3,d0
  1190.  move.w d0,f4l
  1191.  swap d0
  1192.  move.w d0,f4h
  1193.  move.l #FacePlace+32*24*4,d0
  1194.  move.w d0,f5l
  1195.  swap d0
  1196.  move.w d0,f5h
  1197.   
  1198.  
  1199.  move.l #bigfield,d0
  1200.  move.w d0,ocl
  1201.  swap d0
  1202.  move.w d0,och
  1203.  
  1204.  bset.b #1,$bfe001
  1205.  
  1206. ; jmp stuff
  1207. ;endstuff:
  1208.  
  1209.  move.w #$00ff,$dff09e
  1210.  
  1211. ; move.l #Blurbfield,$dff080
  1212.  
  1213.  move.w #0,d0
  1214.  
  1215.  move.l scrn,d0
  1216.  move.w d0,pl1l
  1217.  swap d0
  1218.  move.w d0,pl1h
  1219.  
  1220.  swap d0
  1221.  add.l #10240,d0
  1222.  move.w d0,pl2l
  1223.  swap d0
  1224.  move.w d0,pl2h
  1225.  
  1226.  swap d0
  1227.  add.l #10240,d0
  1228.  move.w d0,pl3l
  1229.  swap d0
  1230.  move.w d0,pl3h
  1231.  
  1232.  swap d0
  1233.  add.l #10240,d0
  1234.  move.w d0,pl4l
  1235.  swap d0
  1236.  move.w d0,pl4h
  1237.  
  1238.  swap d0
  1239.  add.l #10240,d0
  1240.  move.w d0,pl5l
  1241.  swap d0
  1242.  move.w d0,pl5h
  1243.  
  1244.  swap d0
  1245.  add.l #10240,d0
  1246.  move.w d0,pl6l
  1247.  swap d0
  1248.  move.w d0,pl6h
  1249.  
  1250.  swap d0
  1251.  add.l #10240,d0
  1252.  move.w d0,pl7l
  1253.  swap d0
  1254.  move.w d0,pl7h
  1255.  
  1256.  swap d0
  1257.  add.l #10240,d0
  1258.  move.w d0,pl8l
  1259.  swap d0
  1260.  move.w d0,pl8h
  1261.  
  1262.  
  1263. ****************************
  1264.  jsr INITPLAYER
  1265. ; bsr initobjpos
  1266. ****************************
  1267.  
  1268.  
  1269.  move.l #$dff000,a6
  1270.  
  1271.  move.l #null,$dff0a0
  1272.  move.w #100,$dff0a4
  1273.  move.w #443,$dff0a6
  1274.  move.w #63,$dff0a8
  1275.  
  1276.  move.l #null2,$dff0b0
  1277.  move.w #100,$dff0b4
  1278.  move.w #443,$dff0b6
  1279.  move.w #63,$dff0b8
  1280.  
  1281.  move.l #null4,$dff0c0
  1282.  move.w #100,$dff0c4
  1283.  move.w #443,$dff0c6
  1284.  move.w #63,$dff0c8
  1285.  
  1286.  move.l #null3,$dff0d0
  1287.  move.w #100,$dff0d4
  1288.  move.w #443,$dff0d6
  1289.  move.w #63,$dff0d8
  1290.  
  1291.  ifeq CHEESEY
  1292.  
  1293.  move.l #tab,a1
  1294.  move.w #64,d7
  1295.  move.w #0,d6
  1296. outerlop
  1297.  move.l #pretab,a0
  1298.  move.w #255,d5
  1299. scaledownlop:
  1300.  move.b (a0)+,d0
  1301.  ext.w d0
  1302.  ext.l d0
  1303.  muls d6,d0
  1304.  asr.l #6,d0
  1305.  move.b d0,(a1)+
  1306.  dbra d5,scaledownlop
  1307.  addq #1,d6
  1308.  dbra d7,outerlop
  1309.  
  1310.  endc
  1311.  
  1312.  move.l #$dff000,a6
  1313.  
  1314.  move.w #$c018,intena(a6)
  1315.  
  1316.  move.w #$f,dmacon(a6)
  1317.  move.w #$820f,dmacon(a6)
  1318.  
  1319. ; bsr protinit
  1320.  
  1321.  
  1322. ; move.w #$20,$1dc(a6)
  1323.  
  1324.  move.w #$0,$dff034
  1325.  move.w #0,Conditions
  1326.  
  1327.  cmp.b #'n',mors
  1328.  beq.s .nokeys
  1329.  move.w #%111111111111,Conditions
  1330. .nokeys:
  1331.  
  1332.  move.l #KeyMap,a5
  1333.  clr.b $45(a5)
  1334.  
  1335.  move.l #ingame,mt_data
  1336.  clr.b UseAllChannels
  1337.  
  1338. ; cmp.b #'b',Prefsfile+3
  1339. ; bne.s .noback
  1340. ; jsr mt_init
  1341. ;.noback:
  1342. ;
  1343. ; clr.b CHANNELDATA
  1344. ; clr.b CHANNELDATA+8
  1345. ; clr.b CHANNELDATA+16
  1346. ; clr.b CHANNELDATA+24
  1347. ;
  1348. ; cmp.b #'b',Prefsfile+3
  1349. ; bne.s noreserve
  1350. ;
  1351. ; st CHANNELDATA
  1352. ; st CHANNELDATA+8
  1353. ; st CHANNELDATA+16
  1354. ; st CHANNELDATA+24
  1355. ;noreserve: 
  1356.  
  1357. ; st CHANNELDATA
  1358. ; st CHANNELDATA+8
  1359.  
  1360.  move.l SampleList+6*8,pos0LEFT
  1361.  move.l SampleList+6*8+4,Samp0endLEFT
  1362.  move.l #playerheight,PLR1s_targheight
  1363.  move.l #playerheight,PLR1s_height
  1364.  move.l #playerheight,PLR2s_targheight
  1365.  move.l #playerheight,PLR2s_height
  1366.  
  1367. ; cmp.b #'n',mors
  1368. ; beq.s nohandshake
  1369. ;
  1370. ; move.b #%11011000,$bfd200
  1371. ; move.b #%00010000,$bfd000
  1372. ;waitloop:
  1373. ; btst.b #4,$bfd000
  1374. ; bne.s waitloop
  1375. ; move.b #%11000000,$bfd200
  1376.  
  1377. ;wtmouse:
  1378. ; btst #6,$bfe001
  1379. ; bne.s wtmouse
  1380.  
  1381. ;nohandshake:
  1382.  
  1383. ; jmp end
  1384.  
  1385. ; move.l COPSCRN1,drawpt
  1386. ; move.l COPSCRN2,olddrawpt
  1387.  
  1388.  jsr CLEARKEYBOARD
  1389. ; jsr MAKEBACKROUT
  1390.  
  1391.  clr.b MASTERQUITTING
  1392.  
  1393.  cmp.b #'n',mors
  1394.  seq SLAVEQUITTING
  1395.  
  1396. ; move.w #200,PLAYERTWOHEALTH
  1397. ; move.w #200,PLAYERONEHEALTH
  1398.  
  1399. ; move.l #ANOTHERSUP,$80
  1400. ; trap #0
  1401. ; rts
  1402. ;
  1403. ;ANOTHERSUP:
  1404.  
  1405.  move.l $4.w,a6
  1406.  jsr _LVOSuperState(a6)
  1407.  move.l d0,SSTACK
  1408.  
  1409.  CACHE_FREEZE_OFF d2
  1410.  
  1411. ; charlie
  1412. ; DATA_CACHE_ON d2
  1413.  
  1414.  DataCacheOn
  1415.  
  1416.  move.l $4.w,a6
  1417.  move.l SSTACK,d0
  1418.  jsr _LVOUserState(a6)
  1419.  
  1420.  move.l #0,hitcol
  1421.  
  1422.  cmp.b #'n',mors
  1423.  bne.s NOCLTXT
  1424.  
  1425.  move.b #0,lastpressed
  1426. .wtpress
  1427.  btst #6,$bfe001
  1428.  beq.s CLOSETXT
  1429.  btst #7,$bfe001
  1430.  beq.s CLOSETXT
  1431.  tst.b lastpressed
  1432.  beq.s .wtpress
  1433.  
  1434. CLOSETXT:
  1435.  
  1436.  move.w #$8f8,d0
  1437.  move.w #7,d1
  1438.  
  1439. .fdup
  1440.  move.w d0,TXTCOLL
  1441.  move.w d0,MIXCOLL
  1442.  sub.w #$121,d0
  1443. .wtframe:
  1444.  btst #5,$dff000+intreqrl
  1445.  beq.s .wtframe
  1446.  move.w #$0020,$dff000+intreq
  1447.  dbra d1,.fdup
  1448.  
  1449.  move.w #0,TXTCOLL
  1450.  move.w #0,MIXCOLL
  1451.  
  1452. NOCLTXT:
  1453.  
  1454.  
  1455.  
  1456.     move.l    4.w,a6
  1457.     jsr    _LVOForbid(a6)
  1458. ;    jsr    _LVODisable(a6)
  1459.  
  1460.  
  1461. ;    move.w    #%0111111111111111,intena+$dff000
  1462. ;    move.w    #%1000000011111111,intena+$dff000
  1463.  
  1464.  
  1465. ;charlie 
  1466.  move.l #PALETTEBIT,$dff084
  1467.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1468.  
  1469.  
  1470.  clr.b PLR1_Ducked
  1471.  clr.b PLR2_Ducked
  1472.  clr.b p1_ducked
  1473.  clr.b p2_ducked
  1474.  
  1475. ********************************************
  1476.  
  1477. ;    jmp docredits
  1478.  
  1479. ********************************************
  1480.  
  1481.  
  1482.  st doanything
  1483.  st dosounds
  1484.  
  1485.  jsr CLRNASTYMEM
  1486.  
  1487.  move.l #COMPACTMAP,a0
  1488.  move.l a0,LASTZONE
  1489.  move.w #255,d0
  1490. .clrmap
  1491.  move.l #0,(a0)+
  1492.  dbra d0,.clrmap
  1493.  
  1494.  move.l #COMPACTMAP,a0
  1495.  move.l #BIGMAP,a1
  1496.  
  1497.  bra NOALLWALLS
  1498.  
  1499.  move.l ZoneGraphAdds,a2
  1500. DOALLWALLS:
  1501.  move.l (a2),d0
  1502.  beq.s nomorezones
  1503.  move.l d0,a3
  1504.  
  1505.  addq #8,a2
  1506.  
  1507.  add.l LEVELGRAPHICS,a3
  1508.  addq #2,a3
  1509.  move.l a1,a4
  1510.  
  1511. ; DOLOWERROOM
  1512.  
  1513. innerwalls:
  1514.  move.b (a3),d1
  1515.  move.b 1(a3),d0
  1516.  bne doneinner
  1517.  
  1518.  tst.b d1
  1519.  blt noid
  1520.  
  1521.  move.b d1,d3
  1522.  and.w #15,d1
  1523.  
  1524.  moveq #0,d0
  1525.  move.w d1,d2
  1526.  add.w d1,d1
  1527.  add.w d2,d1
  1528.  addq #1,d1
  1529.  bset d1,d0
  1530.  btst #4,d3
  1531.  beq.s .nodoor
  1532.  addq #1,d1
  1533.  bset d1,d0
  1534. .nodoor
  1535.  
  1536.  or.l d0,(a0)
  1537.  
  1538.  move.w 2(a3),(a4)
  1539.  move.w 4(a3),2(a4)
  1540.  
  1541. noid:
  1542.  
  1543.  add.w #30,a3
  1544.  addq #4,a4
  1545.  
  1546.  bra innerwalls
  1547.  
  1548. doneinner:
  1549.  
  1550.  add.w #40,a1
  1551.  addq #4,a0
  1552.  
  1553.  bra DOALLWALLS
  1554. nomorezones:
  1555.  
  1556. NOALLWALLS
  1557.  
  1558.  move.w #96,MIDDLEX
  1559.  move.w #192,RIGHTX
  1560.  move.w #160,BOTTOMY
  1561.  move.w #80,TOTHEMIDDLE
  1562.  clr.b FULLSCR
  1563.  move.l scrn,a0
  1564.  jsr WIPEDISPLAY
  1565.  move.l scrn2,a0
  1566.  jsr WIPEDISPLAY
  1567.  
  1568.  st PLAYERONEGUNS+1
  1569.  st PLAYERTWOGUNS+1
  1570.  
  1571.  move.w #100,timetodamage
  1572.  
  1573.  move.w #299,d0
  1574.  move.l #DAMAGED,a0
  1575. CLRDAM:
  1576.  move.w #0,(a0)+
  1577.  dbra d0,CLRDAM
  1578.  
  1579.  moveq #0,d0
  1580.  move.w d0,STOPOFFSET
  1581.  neg.w d0
  1582.  add.w TOTHEMIDDLE,d0
  1583.  move.w d0,SMIDDLEY
  1584.  muls #320,d0
  1585.  move.l d0,SBIGMIDDLEY
  1586.  
  1587.  move.w #0,PLR1_AIMSPD
  1588.  move.w #0,PLR2_AIMSPD
  1589.  
  1590.  move.l scrn,SCRNSHOWPT
  1591.  
  1592.  move.l scrn2,SCRNDRAWPT
  1593.  
  1594.  move.w #%110000000000,$dff034
  1595.  
  1596.  
  1597.  move.l #MESSAGEBUFFER,a0
  1598.  move.w #19,d0
  1599. clrmessbuff:
  1600.  move.l #0,(a0)+
  1601.  dbra d0,clrmessbuff
  1602.  
  1603. lop:
  1604.  
  1605. ; move.w COUNTER,d0
  1606. ; ext.l d0
  1607. ; divs #10,d0
  1608. ; swap d0
  1609. ; add.b #'0',d0
  1610. ; move.b d0,COUNTSPACE+2
  1611. ; swap d0
  1612. ; ext.l d0
  1613. ; divs #10,d0
  1614. ; swap d0
  1615. ; add.b #'0',d0
  1616. ; move.b d0,COUNTSPACE+1
  1617. ; swap d0
  1618. ; add.b #'0',d0
  1619. ; move.b d0,COUNTSPACE
  1620. ;
  1621. ; move.w COUNTER2,d0
  1622. ; ext.l d0
  1623. ; divs #10,d0
  1624. ; swap d0
  1625. ; add.b #'0',d0
  1626. ; move.b d0,COUNTSPACE+5
  1627. ; swap d0
  1628. ; ext.l d0
  1629. ; divs #10,d0
  1630. ; swap d0
  1631. ; add.b #'0',d0
  1632. ; move.b d0,COUNTSPACE+4
  1633. ; swap d0
  1634. ; add.b #'0',d0
  1635. ; move.b d0,COUNTSPACE+3
  1636.  
  1637. ;
  1638. ; move.l #COUNTSPACE,d0
  1639. ; jsr SENDMESSAGE
  1640. ;
  1641. ; move.w #0,COUNTER
  1642. ; move.w #0,COUNTER2
  1643.  
  1644.  move.b MAPON,REALMAPON
  1645.  
  1646.  move.b FULLSCRTEMP,d0
  1647.  move.b FULLSCR,d1
  1648.  eor.b d1,d0
  1649.  beq.s .notswapscr2
  1650.  
  1651.  move.b FULLSCRTEMP,FULLSCR
  1652.  beq.s .notswapscr3
  1653.  
  1654.  move.w #144,MIDDLEX
  1655.  move.w #288,RIGHTX
  1656.  move.w #232,BOTTOMY
  1657.  move.w #120,TOTHEMIDDLE
  1658.  move.l SCRNSHOWPT,a0
  1659.  jsr WIPEDISPLAY
  1660.  move.l SCRNDRAWPT,a0
  1661.  jsr WIPEDISPLAY
  1662.  
  1663.  bra.s .notswapscr2
  1664.  
  1665. .notswapscr3:
  1666.  move.w #96,MIDDLEX
  1667.  move.w #192,RIGHTX
  1668.  move.w #160,BOTTOMY
  1669.  move.w #80,TOTHEMIDDLE
  1670.  move.l SCRNSHOWPT,a0
  1671.  jsr WIPEDISPLAY
  1672.  move.l SCRNDRAWPT,a0
  1673.  jsr WIPEDISPLAY
  1674. .notswapscr2:
  1675.  
  1676.  
  1677.  btst #6,$bfe001
  1678. ;charlie bne.b .nocop
  1679.  
  1680. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1681.  
  1682. .nocop
  1683.  
  1684.  move.l #KeyMap,a5
  1685.  
  1686.  cmp.b #'n',mors
  1687.  bne .nopause
  1688.  tst.b $19(a5)
  1689.  beq.s .nopause
  1690.  clr.b doanything
  1691.  
  1692. .waitrel:
  1693.  
  1694.  tst.b PLR1JOY
  1695.  beq.s .NOJOY
  1696.  jsr _ReadJoy1
  1697. .NOJOY
  1698.  
  1699.  tst.b $19(a5)
  1700.  bne.s .waitrel
  1701.  
  1702.  bsr PAUSEOPTS
  1703.  
  1704.  st doanything
  1705. .nopause: 
  1706.  
  1707.  move.l hitcol,d0
  1708.  move.l d0,d1
  1709.  
  1710. ********************************************
  1711. * Remove after colour testing 
  1712. ; moveq #0,d1
  1713. ********************************************
  1714.  
  1715.  add.l #PALETTEBIT,d1
  1716.  tst.l d0
  1717.  beq.s nofadedownhc
  1718.  sub.l #2116,d0
  1719.  move.l d0,hitcol
  1720. nofadedownhc:
  1721.  
  1722.  move.l d1,a0
  1723.  move.l #PALETTESPACE,a1
  1724.  move.l #(2116/4)-2,d0
  1725. putinpal:
  1726.  move.l (a0)+,(a1)+
  1727.  dbra d0,putinpal
  1728.  
  1729.  st READCONTROLS
  1730.  move.l #$dff000,a6
  1731.  
  1732.  
  1733.  cmp.b #'n',mors
  1734.  beq .nopause
  1735.  
  1736.  move.b SLAVEPAUSE,d0
  1737.  or.b MASTERPAUSE,d0
  1738.  beq.s .nopause
  1739.  clr.b doanything
  1740.  
  1741.  move.l #KeyMap,a5
  1742. .waitrel:
  1743.  
  1744.  cmp.b #'s',mors
  1745.  beq.s .RE2
  1746.  tst.b PLR1JOY
  1747.  beq.s .NOJOY
  1748.  jsr _ReadJoy1
  1749.  bra .RE1
  1750. .RE2:
  1751.  tst.b PLR2JOY
  1752.  beq.s .NOJOY
  1753.  jsr _ReadJoy2
  1754. .RE1
  1755. .NOJOY:
  1756.  tst.b $19(a5)
  1757.  bne.s .waitrel
  1758.  
  1759.  bsr PAUSEOPTS
  1760.  
  1761.  cmp.b #'m',mors
  1762.  bne.s .slavelast
  1763.  Jsr SENDFIRST
  1764.  bra .masfirst
  1765. .slavelast
  1766.  Jsr RECFIRST
  1767. .masfirst:
  1768.  clr.b SLAVEPAUSE
  1769.  clr.b MASTERPAUSE
  1770.  st doanything
  1771.  
  1772. .nopause: 
  1773.  
  1774.  
  1775.  move.l drawpt,d0
  1776.  move.l olddrawpt,drawpt
  1777.  move.l d0,olddrawpt
  1778.  
  1779.  move.l SCRNDRAWPT,d0
  1780.  move.l SCRNSHOWPT,SCRNDRAWPT
  1781.  move.l d0,SCRNSHOWPT
  1782.  
  1783. ; move.l d0,$dff084    
  1784.  move.l drawpt,a3
  1785. ; move.l COPSCRNBUFF,a3
  1786.  adda.w #10,a3
  1787.  move.l a3,frompt
  1788.  add.l #104*4*40,a3
  1789.  move.l a3,midpt
  1790.  
  1791.  cmp.b #'s',mors
  1792.  beq.s nowaitslave
  1793.  
  1794. waitfortop:
  1795.  
  1796.  btst.b #0,intreqrl(a6)
  1797.  beq.b waitfortop
  1798.  
  1799.  move.w #$1,intreq(a6)
  1800. ; move.l #PLR1_GunData,GunData
  1801.  move.b PLR1_GunSelected,GunSelected
  1802.  bra waitmaster
  1803.  
  1804. nowaitslave:
  1805. ; move.l #PLR2_GunData,GunData
  1806.  move.b PLR2_GunSelected,GunSelected
  1807. waitmaster:
  1808.  
  1809.  move.l d0,d1
  1810.  move.l d1,d0
  1811.  move.w d0,pl1l
  1812.  swap d0
  1813.  move.w d0,pl1h
  1814.  
  1815.  add.l #10240,d1
  1816.  move.l d1,d0
  1817.  move.w d0,pl2l
  1818.  swap d0
  1819.  move.w d0,pl2h
  1820.  
  1821.  add.l #10240,d1
  1822.  move.l d1,d0
  1823.  move.w d0,pl3l
  1824.  swap d0
  1825.  move.w d0,pl3h
  1826.  
  1827.  add.l #10240,d1
  1828.  move.l d1,d0
  1829.  move.w d0,pl4l
  1830.  swap d0
  1831.  move.w d0,pl4h
  1832.  
  1833.  add.l #10240,d1
  1834.  move.l d1,d0
  1835.  move.w d0,pl5l
  1836.  swap d0
  1837.  move.w d0,pl5h
  1838.  
  1839.  add.l #10240,d1
  1840.  move.l d1,d0
  1841.  move.w d0,pl6l
  1842.  swap d0
  1843.  move.w d0,pl6h
  1844.  
  1845.  add.l #10240,d1
  1846.  move.l d1,d0
  1847.  move.w d0,pl7l
  1848.  swap d0
  1849.  move.w d0,pl7h
  1850.  
  1851.  add.l #10240,d1
  1852.  move.l d1,d0
  1853.  move.w d0,pl8l
  1854.  swap d0
  1855.  move.w d0,pl8h 
  1856.  
  1857.  move.l #SMIDDLEY,a0
  1858.  movem.l (a0)+,d0/d1
  1859.  move.l d0,MIDDLEY
  1860.  move.l d1,MIDDLEY+4
  1861.  
  1862.  move.l waterpt,a0
  1863.  move.l (a0)+,watertouse
  1864.  cmp.l #endwaterlist,a0
  1865.  blt.s okwat
  1866.  move.l #waterlist,a0
  1867. okwat:
  1868.  move.l a0,waterpt
  1869.  
  1870.  add.w #640,wtan
  1871.  and.w #8191,wtan
  1872.  add.l #1,wateroff
  1873.  and.l #$3fff3fff,wateroff
  1874.  
  1875.  move.l PLR1_xoff,OLDX1
  1876.  move.l PLR1_zoff,OLDZ1
  1877.  move.l PLR2_xoff,OLDX2
  1878.  move.l PLR2_zoff,OLDZ2
  1879.  
  1880.  move.l #$dff000,a6
  1881.  
  1882.  cmp.b #'s',mors
  1883.  beq ASlaveShouldWaitOnHisMaster
  1884.  
  1885.  cmp.b #'n',mors
  1886.  bne NotOnePlayer
  1887.  
  1888.  movem.l d0-d7/a0-a6,-(a7)
  1889.  
  1890.  moveq #0,d0
  1891.  move.b GunSelected,d0
  1892.  move.l LINKFILE,a6
  1893.  add.l #GunBulletTypes,a6
  1894.  move.w (a6,d0.w*8),d0
  1895.  
  1896.  move.l #PLAYERONEAMMO,a6
  1897.  move.w (a6,d0.w*2),d0
  1898.  move.w d0,Ammo
  1899.  movem.l (a7)+,d0-d7/a0-a6
  1900.  
  1901.  move.w PLAYERONEHEALTH,Energy
  1902.  
  1903.  move.w FramesToDraw,TempFrames
  1904.  cmp.w #15,TempFrames
  1905.  blt.s .okframe
  1906.  move.w #15,TempFrames
  1907. .okframe:
  1908.  move.w #0,FramesToDraw
  1909.  
  1910. *********************************************
  1911. *********** TAKE THIS OUT *******************
  1912. *********************************************
  1913.  
  1914.  move.l CHEATPTR,a4
  1915.  add.l #200000,a4
  1916.  moveq #0,d0
  1917.  move.b (a4),d0
  1918.  
  1919.  move.l #KeyMap,a5
  1920.  tst.b (a5,d0.w)
  1921.  beq.s .nocheat
  1922.  
  1923.  addq #1,a4
  1924.  cmp.l #ENDCHEAT,a4
  1925.  blt.s .nocheat
  1926.  cmp.w #0,CHEATNUM
  1927.  beq.s .nocheat
  1928.  sub.w #1,CHEATNUM
  1929.  move.l #CHEATFRAME,a4
  1930.  move.w #127,PLR1_energy
  1931.  jsr EnergyBar
  1932. .nocheat
  1933.  
  1934.  sub.l #200000,a4
  1935.  move.l a4,CHEATPTR
  1936.  
  1937. **********************************************
  1938. **********************************************
  1939. **********************************************
  1940.  
  1941.  move.l PLR1s_xoff,p1_xoff
  1942.  move.l PLR1s_zoff,p1_zoff
  1943.  move.l PLR1s_yoff,p1_yoff
  1944.  move.l PLR1s_height,p1_height
  1945.  move.w PLR1s_angpos,p1_angpos
  1946.  move.w PLR1_bobble,p1_bobble
  1947.  move.b PLR1_clicked,p1_clicked
  1948.  move.b PLR1_fire,p1_fire
  1949.  clr.b PLR1_clicked
  1950.  move.b PLR1_SPCTAP,p1_spctap
  1951.  clr.b PLR1_SPCTAP
  1952.  move.b PLR1_Ducked,p1_ducked
  1953.  move.b PLR1_GunSelected,p1_gunselected
  1954.  
  1955.  bsr PLR1_Control
  1956.  
  1957.  move.l PLR1_Roompt,a0
  1958.  move.l ToZoneRoof(a0),SplitHeight
  1959.  move.w p1_xoff,THISPLRxoff
  1960.  move.w p1_zoff,THISPLRzoff
  1961.  
  1962.  
  1963.  move.l #$60000,p2_yoff
  1964.  move.l PLR2_Obj,a0
  1965.  move.w #-1,GraphicRoom(a0)
  1966.  move.w #-1,12(a0)
  1967.  move.b #0,17(a0)
  1968.  move.l #BollocksRoom,PLR2_Roompt
  1969.  
  1970.  bra donetalking
  1971.  
  1972. NotOnePlayer:
  1973.  move.l #KeyMap,a5
  1974.  tst.b $19(a5)
  1975.  sne MASTERPAUSE
  1976.  
  1977. *********************************
  1978.  move.w PLAYERONEHEALTH,Energy
  1979. ; change this back
  1980. *********************************
  1981.  movem.l d0-d7/a0-a6,-(a7)
  1982.  
  1983.  moveq #0,d0
  1984.  move.b GunSelected,d0
  1985.  move.l LINKFILE,a6
  1986.  add.l #GunBulletTypes,a6
  1987.  move.w (a6,d0.w*8),d0
  1988.  
  1989.  move.l #PLAYERONEAMMO,a6
  1990.  move.w (a6,d0.w*2),d0
  1991.  move.w d0,Ammo
  1992.  movem.l (a7)+,d0-d7/a0-a6
  1993.  
  1994.  jsr SENDFIRST
  1995.  
  1996.  move.w FramesToDraw,TempFrames
  1997.  cmp.w #15,TempFrames
  1998.  blt.s .okframe
  1999.  move.w #15,TempFrames
  2000. .okframe:
  2001.  move.w #0,FramesToDraw
  2002.  
  2003.  move.l PLR1s_xoff,p1_xoff
  2004.  move.l PLR1s_zoff,p1_zoff
  2005.  move.l PLR1s_yoff,p1_yoff
  2006.  move.l PLR1s_height,p1_height
  2007.  move.w PLR1s_angpos,p1_angpos
  2008.  move.w PLR1_bobble,p1_bobble
  2009.  move.b PLR1_clicked,p1_clicked
  2010.  clr.b PLR1_clicked
  2011.  move.b PLR1_fire,p1_fire
  2012.  move.b PLR1_SPCTAP,p1_spctap
  2013.  clr.b PLR1_SPCTAP
  2014.  move.b PLR1_Ducked,p1_ducked
  2015.  move.b PLR1_GunSelected,p1_gunselected
  2016.  
  2017.  move.l PLR1_AIMSPD,d0
  2018.  jsr SENDFIRST
  2019.  move.l d0,PLR2_AIMSPD
  2020.  
  2021.  move.l p1_xoff,d0
  2022.  jsr SENDFIRST
  2023.  move.l d0,p2_xoff
  2024.  
  2025.  move.l p1_zoff,d0
  2026.  jsr SENDFIRST
  2027.  move.l d0,p2_zoff 
  2028.  
  2029.  move.l p1_yoff,d0
  2030.  jsr SENDFIRST
  2031.  move.l d0,p2_yoff
  2032.   
  2033.  move.l p1_height,d0
  2034.  jsr SENDFIRST
  2035.  move.l d0,p2_height
  2036.  
  2037.  move.w p1_angpos,d0
  2038.  swap d0
  2039.  move.w p1_bobble,d0
  2040.  jsr SENDFIRST
  2041.  move.w d0,p2_bobble
  2042.  swap d0
  2043.  move.w d0,p2_angpos
  2044.  
  2045.  
  2046.  move.w TempFrames,d0
  2047.  swap d0
  2048.  move.b p1_spctap,d0
  2049.  lsl.w #8,d0
  2050.  move.b p1_clicked,d0
  2051.  jsr SENDFIRST
  2052.  move.b d0,p2_clicked
  2053.  lsr.w #8,d0
  2054.  move.b d0,p2_spctap
  2055.  
  2056.  
  2057.  move.w Rand1,d0
  2058.  swap d0
  2059.  move.b p1_ducked,d0
  2060.  lsl.w #8,d0
  2061.  move.b p1_gunselected,d0
  2062.  jsr SENDFIRST
  2063.  move.b d0,p2_gunselected
  2064.  lsr.w #8,d0
  2065.  move.b d0,p2_ducked
  2066.  
  2067.  move.b p1_fire,d0
  2068.  lsl.w #8,d0
  2069.  move.b MASTERQUITTING,d0
  2070.  or.b d0,SLAVEQUITTING
  2071.  swap d0
  2072.  move.b MASTERPAUSE,d0
  2073.  or.b d0,SLAVEPAUSE
  2074.  jsr SENDFIRST
  2075.  or.b d0,MASTERPAUSE
  2076.  or.b d0,SLAVEPAUSE
  2077.  swap d0
  2078.  or.b d0,SLAVEQUITTING
  2079.  or.b d0,MASTERQUITTING
  2080.  lsr.w #8,d0
  2081.  move.b d0,p2_fire
  2082.  
  2083.  bsr PLR1_Control
  2084.  bsr PLR2_Control
  2085.  move.l PLR1_Roompt,a0
  2086.  move.l ToZoneRoof(a0),SplitHeight
  2087.  move.w p1_xoff,THISPLRxoff
  2088.  move.w p1_zoff,THISPLRzoff
  2089.  
  2090.  bra donetalking
  2091.  
  2092. ASlaveShouldWaitOnHisMaster:
  2093.  
  2094.  move.l #KeyMap,a5
  2095.  tst.b $19(a5)
  2096.  sne SLAVEPAUSE
  2097.  
  2098.  movem.l d0-d7/a0-a6,-(a7)
  2099.  
  2100.  moveq #0,d0
  2101.  move.b GunSelected,d0
  2102.  move.l LINKFILE,a6
  2103.  add.l #GunBulletTypes,a6
  2104.  move.w (a6,d0.w*8),d0
  2105.  
  2106.  move.l #PLAYERTWOAMMO,a6
  2107.  move.w (a6,d0.w*2),d0
  2108.  move.w d0,Ammo
  2109.  movem.l (a7)+,d0-d7/a0-a6
  2110.  
  2111.  move.w PLAYERTWOHEALTH,Energy
  2112.  
  2113.  jsr RECFIRST
  2114.  
  2115.  move.l PLR2s_xoff,p2_xoff
  2116.  move.l PLR2s_zoff,p2_zoff
  2117.  move.l PLR2s_yoff,p2_yoff
  2118.  move.l PLR2s_height,p2_height
  2119.  move.w PLR2s_angpos,p2_angpos
  2120.  move.w PLR2_bobble,p2_bobble
  2121.  move.b PLR2_clicked,p2_clicked
  2122.  clr.b PLR2_clicked
  2123.  move.b PLR2_fire,p2_fire
  2124.  move.b PLR2_SPCTAP,p2_spctap
  2125.  clr.b PLR2_SPCTAP
  2126.  move.b PLR2_Ducked,p2_ducked
  2127.  move.b PLR2_GunSelected,p2_gunselected
  2128.  
  2129.  move.l PLR2_AIMSPD,d0
  2130.  jsr RECFIRST
  2131.  move.l d0,PLR1_AIMSPD
  2132.  
  2133.  move.l p2_xoff,d0
  2134.  jsr RECFIRST
  2135.  move.l d0,p1_xoff
  2136.  
  2137.  move.l p2_zoff,d0
  2138.  jsr RECFIRST
  2139.  move.l d0,p1_zoff
  2140.  
  2141.  move.l p2_yoff,d0
  2142.  jsr RECFIRST
  2143.  move.l d0,p1_yoff
  2144.  
  2145.  move.l p2_height,d0
  2146.  jsr RECFIRST
  2147.  move.l d0,p1_height
  2148.  
  2149.  move.w p2_angpos,d0
  2150.  swap d0
  2151.  move.w p2_bobble,d0
  2152.  jsr RECFIRST
  2153.  move.w d0,p1_bobble
  2154.  swap d0
  2155.  move.w d0,p1_angpos
  2156.  
  2157.  
  2158.  move.b p2_spctap,d0
  2159.  lsl.w #8,d0
  2160.  move.b p2_clicked,d0
  2161.  jsr RECFIRST
  2162.  move.b d0,p1_clicked
  2163.  lsr.w #8,d0
  2164.  move.b d0,p1_spctap
  2165.  swap d0
  2166.  move.w d0,TempFrames
  2167.  
  2168.  move.b p2_ducked,d0
  2169.  lsl.w #8,d0
  2170.  move.b p2_gunselected,d0
  2171.  jsr RECFIRST
  2172.  move.b d0,p1_gunselected
  2173.  lsr.w #8,d0
  2174.  move.b d0,p1_ducked
  2175.  swap d0
  2176.  move.w d0,Rand1
  2177.  
  2178.  move.b p2_fire,d0
  2179.  lsl.w #8,d0
  2180.  move.b SLAVEQUITTING,d0
  2181.  or.b d0,MASTERQUITTING
  2182.  swap d0
  2183.  move.b SLAVEPAUSE,d0
  2184.  or.b d0,MASTERPAUSE
  2185.  jsr RECFIRST
  2186.  or.b d0,MASTERPAUSE
  2187.  or.b d0,SLAVEPAUSE
  2188.  swap d0
  2189.  or.b d0,SLAVEQUITTING
  2190.  or.b d0,MASTERQUITTING
  2191.  lsr.w #8,d0
  2192.  move.b d0,p1_fire
  2193.  
  2194.  
  2195.  bsr PLR1_Control
  2196.  bsr PLR2_Control
  2197.  move.w p2_xoff,THISPLRxoff
  2198.  move.w p2_zoff,THISPLRzoff
  2199.  move.l PLR2_Roompt,a0
  2200.  move.l ToZoneRoof(a0),SplitHeight
  2201.  
  2202. donetalking:
  2203.  
  2204.  
  2205.  move.l #ZoneBrightTable,a1
  2206.  move.l ZoneAdds,a2
  2207.  move.l PLR2_ListOfGraphRooms,a0
  2208. ; move.l PLR2_PointsToRotatePtr,a5
  2209.  move.l a0,a5
  2210.  cmp.b #'s',mors
  2211.  beq.s doallz
  2212.  move.l PLR1_ListOfGraphRooms,a0
  2213. ; move.l PLR1_PointsToRotatePtr,a5
  2214.  move.l a0,a5 
  2215. doallz
  2216.  move.w (a0),d0
  2217.  blt.s doneallz
  2218.  add.w #8,a0
  2219.  
  2220.  move.l (a2,d0.w*4),a3
  2221.  add.l LEVELDATA,a3
  2222.  move.w ToZoneBrightness(a3),d2
  2223.  
  2224.  blt.s justbright
  2225.  move.w d2,d3
  2226.  lsr.w #8,d3
  2227.  tst.b d3
  2228.  beq.s justbright
  2229.  
  2230.  move.l #BrightAnimTable,a4
  2231.  move.w -2(a4,d3.w*2),d2
  2232.  
  2233. justbright:
  2234.  muls #32,d2
  2235.  divs #20,d2
  2236.  move.w d2,(a1,d0.w*4)
  2237.  
  2238.  move.w ToUpperBrightness(a3),d2
  2239.  
  2240.  blt.s justbright2
  2241.  move.w d2,d3
  2242.  lsr.w #8,d3
  2243.  tst.b d3
  2244.  beq.s justbright2
  2245.  
  2246.  move.l #BrightAnimTable,a4
  2247.  move.w -2(a4,d3.w*2),d2
  2248.  
  2249. justbright2:
  2250.  
  2251.  muls #32,d2
  2252.  divs #20,d2
  2253.  move.w d2,2(a1,d0.w*4)
  2254.  
  2255.  bra doallz
  2256.  
  2257. doneallz:
  2258.  
  2259.  move.l PointBrights,a2
  2260.  move.l #CurrentPointBrights,a3
  2261. justtheone:
  2262.  move.w (a5),d0
  2263.  blt whythehell
  2264.  addq #8,a5
  2265.  
  2266.  muls #40,d0
  2267.  
  2268.  move.w #39,d7
  2269.  
  2270. allinzone:
  2271.  move.w (a2,d0.w*2),d2
  2272.  
  2273.  tst.b d2
  2274.  blt.s .justbright
  2275.  move.w d2,d3
  2276.  lsr.w #8,d3
  2277.  tst.b d3
  2278.  beq.s .justbright
  2279.  
  2280.  move.w d3,d4
  2281.  and.w #$f,d3
  2282.  lsr.w #4,d4
  2283.  add.w #1,d4
  2284.  move.l #BrightAnimTable,a0
  2285.  move.w -2(a0,d3.w*2),d3
  2286.  ext.w d2
  2287.  sub.w d2,d3
  2288.  muls d4,d3
  2289.  asr.w #4,d3
  2290.  add.w d3,d2
  2291.  
  2292. .justbright:
  2293.  ext.w d2
  2294.  
  2295.  muls #31,d2
  2296.  divs #20,d2
  2297.  bge.s .itspos
  2298.  sub.w #600,d2
  2299. .itspos:
  2300.  add.w #300,d2
  2301.  
  2302.  move.w d2,(a3,d0.w*2)
  2303.  addq #1,d0
  2304.  dbra d7,allinzone
  2305.  
  2306.  bra justtheone
  2307.  
  2308. whythehell:
  2309.  
  2310.  move.l PLR1_Roompt,a0
  2311.  move.l #CurrentPointBrights,a1
  2312.  move.l ZoneBorderPts,a2
  2313.  move.w (a0),d0
  2314.  muls #10,d0
  2315.  lea (a2,d0.w*2),a2
  2316.  lea (a1,d0.w*8),a1
  2317.  
  2318.  moveq #9,d7
  2319.  moveq #0,d0
  2320.  moveq #0,d1
  2321. findaverage:
  2322.  tst.w (a2)+
  2323.  blt.s .foundaverage
  2324.  addq #1,d0
  2325.  move.w (a1)+,d2
  2326.  bge.s .okpos
  2327.  neg.w d2
  2328. .okpos:
  2329.  add.w d2,d1
  2330.  
  2331.  dbra d7,findaverage
  2332.  
  2333. .foundaverage:
  2334.  
  2335.  ext.l d1
  2336.  divs d0,d1
  2337.  sub.w #300,d1
  2338.  move.w d1,PLR1_RoomBright
  2339.  
  2340.  cmp.b #'n',mors
  2341.  beq nosee
  2342.  
  2343.  move.l PLR1_Roompt,FromRoom
  2344.  move.l PLR2_Roompt,ToRoom
  2345.  move.w p1_xoff,Viewerx
  2346.  move.w p1_zoff,Viewerz
  2347.  move.l p1_yoff,d0
  2348.  asr.l #7,d0
  2349.  move.w d0,Viewery
  2350.  move.w p2_xoff,Targetx
  2351.  move.w p2_zoff,Targetz
  2352.  move.l p2_yoff,d0
  2353.  asr.l #7,d0
  2354.  move.w d0,Targety
  2355.  move.b PLR1_StoodInTop,ViewerTop
  2356.  move.b PLR2_StoodInTop,TargetTop
  2357.  jsr CanItBeSeen
  2358.  
  2359.  move.l PLR1_Obj,a0
  2360.  move.b CanSee,d0
  2361.  and.b #2,d0
  2362.  move.b d0,17(a0)
  2363.  move.l PLR2_Obj,a0
  2364.  move.b CanSee,d0
  2365.  and.b #1,d0
  2366.  move.b d0,17(a0)
  2367.  
  2368. nosee:
  2369.  
  2370.  
  2371.  move.w TempFrames,d0
  2372.  add.w d0,p1_holddown
  2373.  cmp.w #30,p1_holddown
  2374.  blt.s oklength
  2375.  move.w #30,p1_holddown
  2376. oklength:
  2377.  
  2378.  tst.b p1_fire
  2379.  bne.s okstillheld
  2380.  sub.w d0,p1_holddown
  2381.  bge.s okstillheld
  2382.  move.w #0,p1_holddown
  2383.  
  2384. okstillheld:
  2385.  
  2386.  move.w TempFrames,d0
  2387.  add.w d0,p2_holddown
  2388.  
  2389.  cmp.w #30,p2_holddown
  2390.  blt.s oklength2
  2391.  move.w #30,p2_holddown
  2392. oklength2:
  2393.  
  2394.  
  2395.  tst.b p2_fire
  2396.  bne.s okstillheld2
  2397.  sub.w d0,p2_holddown
  2398.  bge.s okstillheld2
  2399.  move.w #0,p2_holddown
  2400. okstillheld2:
  2401.  
  2402. ***** CHECKING LIGHT *********
  2403.  
  2404. ; move.w #-20,d0
  2405. ; move.w PLR1_xoff,d1
  2406. ; move.w PLR1_zoff,d2
  2407. ; move.l PLR1_Roompt,a0
  2408. ; move.w (a0),d3
  2409. ; move.w PLR1_angpos,d4
  2410. ;
  2411. ; jsr BRIGHTENPOINTSANGLE
  2412.  
  2413. ******************************
  2414.  
  2415. ; move.l #PLR1_GunData,a1
  2416. ; move.w p1_holddown,d0
  2417. ; move.w #50,10+32*3(a1)
  2418. ; move.l #PLR2_GunData,a1
  2419. ; move.w p2_holddown,d0
  2420. ; move.w #50,10+32*3(a1)
  2421.  
  2422. ******************************************
  2423. ******************************************
  2424.  
  2425.  move.w TempFrames,d1
  2426.  bgt.s noze
  2427.  moveq #1,d1
  2428. noze:
  2429.  
  2430.  move.w PLR1_xoff,d0
  2431.  sub.w OLDX1,d0
  2432.  asl.w #4,d0
  2433.  ext.l d0
  2434.  divs d1,d0
  2435.  move.w d0,XDIFF1
  2436.  move.w PLR2_xoff,d0
  2437.  sub.w OLDX2,d0
  2438.  asl.w #4,d0
  2439.  ext.l d0
  2440.  divs d1,d0
  2441.  move.w d0,XDIFF2
  2442.  move.w PLR1_zoff,d0
  2443.  sub.w OLDZ1,d0
  2444.  asl.w #4,d0
  2445.  ext.l d0
  2446.  divs d1,d0
  2447.  move.w d0,ZDIFF1
  2448.  move.w PLR2_zoff,d0
  2449.  sub.w OLDZ2,d0
  2450.  asl.w #4,d0
  2451.  ext.l d0
  2452.  divs d1,d0
  2453.  move.w d0,ZDIFF2
  2454.  
  2455.  cmp.b #'s',mors
  2456.  beq.s ImPlayer2OhYesIAm
  2457.  bsr USEPLR1
  2458.  bra IWasPlayer1
  2459.  
  2460. ImPlayer2OhYesIAm:
  2461.  bsr USEPLR2
  2462. IWasPlayer1:
  2463.  
  2464.  
  2465.  cmp.b #'s',mors
  2466.  beq drawplayer2
  2467.  
  2468.  move.w #0,scaleval
  2469.  
  2470.  move.l PLR1_xoff,xoff
  2471.  move.l PLR1_yoff,yoff
  2472.  move.l PLR1_zoff,zoff
  2473.  move.w PLR1_angpos,angpos
  2474.  move.w PLR1_cosval,cosval
  2475.  move.w PLR1_sinval,sinval
  2476.  
  2477.  
  2478.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2479.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2480.  move.l PLR1_Roompt,Roompt
  2481.  
  2482.  move.l #KeyMap,a5
  2483.  moveq #0,d5
  2484.  move.b look_behind_key,d5
  2485.  tst.b (a5,d5.w)
  2486.  beq.s .nolookback
  2487.  
  2488.  move.l PLR1_Obj,a0
  2489.  move.w #-1,12+128(a0)
  2490.  
  2491.  eor.w #4096,angpos 
  2492.  neg.w cosval
  2493.  neg.w sinval
  2494. .nolookback:
  2495.  
  2496.  bsr OrderZones
  2497.  jsr objmoveanim
  2498.  jsr EnergyBar
  2499.  jsr AmmoBar
  2500.  
  2501. ;********************************************
  2502. ;************* Do reflection ****************
  2503. ;
  2504. ; move.l ListOfGraphRooms,a0
  2505. ; move.l ZoneAdds,a1
  2506. ;checkwaterheights
  2507. ; move.w (a0),d0
  2508. ; blt allzonesdone
  2509. ; addq #8,a0
  2510. ; move.l (a1,d0.w*4),a2
  2511. ; add.l LEVELDATA,a2
  2512. ; move.l ToZoneWater(a2),d0
  2513. ; cmp.l ToZoneFloor(a2),d0
  2514. ; blt.s WEHAVEAHEIGHT
  2515. ; bra.s checkwaterheights
  2516. ;
  2517. ;WEHAVEAHEIGHT:
  2518. ;
  2519. ; sub.l yoff,d0
  2520. ; blt.s underwater
  2521. ; add.l d0,d0
  2522. ; add.l d0,yoff
  2523. ; move.l FASTBUFFER2,FASTBUFFER
  2524. ; move.w #0,leftclip
  2525. ; move.w RIGHTX,rightclip
  2526. ; move.w #0,deftopclip
  2527. ; move.w #BOTTOMY/2,defbotclip
  2528. ; move.w #0,topclip
  2529. ; move.w #BOTTOMY/2,botclip
  2530. ;
  2531. ; clr.b DOANYWATER 
  2532. ; bsr DrawDisplay
  2533. ;allzonesdone:
  2534. ;underwater:
  2535.  
  2536. ********************************************
  2537.  
  2538.  st DOANYWATER
  2539.  
  2540.  move.l PLR1_yoff,yoff
  2541.  
  2542.  move.w #0,leftclip
  2543.  move.w RIGHTX,rightclip
  2544.  move.w #0,deftopclip
  2545.  move.w WIDESCRN,d0
  2546.  add.w d0,deftopclip
  2547.  
  2548.  move.w BOTTOMY,defbotclip
  2549.  sub.w d0,defbotclip
  2550.  move.w #0,topclip
  2551.  add.w d0,topclip
  2552.  move.w BOTTOMY,botclip
  2553.  sub.w d0,botclip
  2554. ; sub.l #10*104*4,frompt
  2555. ; sub.l #10*104*4,midpt
  2556.  
  2557. * Subroom loop
  2558.  
  2559.  bsr DrawDisplay 
  2560.  
  2561.  bra nodrawp2
  2562.  
  2563. drawplayer2
  2564.  
  2565.  move.w #0,scaleval
  2566.  move.l PLR2_xoff,xoff
  2567.  move.l PLR2_yoff,yoff
  2568.  move.l PLR2_zoff,zoff
  2569.  move.w PLR2_angpos,angpos
  2570.  move.w PLR2_cosval,cosval
  2571.  move.w PLR2_sinval,sinval 
  2572.  
  2573.  
  2574.  
  2575.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2576.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2577.  move.l PLR2_Roompt,Roompt
  2578.  
  2579.  move.l #KeyMap,a5
  2580.  moveq #0,d5
  2581.  move.b look_behind_key,d5
  2582.  tst.b (a5,d5.w)
  2583.  beq.s .nolookback
  2584.  
  2585.  move.l PLR1_Obj,a0
  2586.  move.w #-1,12+128(a0)
  2587.  eor.w #4096,angpos 
  2588.  
  2589.  neg.w cosval
  2590.  neg.w sinval
  2591. .nolookback:
  2592.  
  2593.  bsr OrderZones
  2594.  jsr objmoveanim
  2595.  jsr EnergyBar
  2596.  jsr AmmoBar
  2597.  
  2598.  move.w WIDESCRN,d0
  2599.  
  2600.  move.w #0,leftclip
  2601.  move.w RIGHTX,rightclip
  2602.  move.w #0,deftopclip
  2603.  add.w d0,deftopclip
  2604.  move.w BOTTOMY,defbotclip
  2605.  sub.w d0,defbotclip
  2606.  move.w #0,topclip
  2607.  add.w d0,topclip
  2608.  move.w BOTTOMY,botclip
  2609.  sub.w d0,botclip
  2610.  
  2611.  bsr DrawDisplay
  2612.  
  2613. nodrawp2:
  2614.  
  2615. ***************************************** 
  2616. * Copy from copbuff to chip ram
  2617.  
  2618.  
  2619. ; move.l drawpt,a3
  2620. ; adda.w #10,a3
  2621. ; move.l COPSCRNBUFF,a2
  2622. ; move.w #2,d6
  2623. ; adda.w #10,a2
  2624. ;COPYOUT
  2625. ; move.w #31,d0
  2626. ;COPYDOWN1:
  2627. ; move.w #3,d1
  2628. ; move.l a2,a4
  2629. ; move.l a3,a5
  2630. ;.inlop1:
  2631. ;val SET 0
  2632. ; REPT 20
  2633. ; move.w val(a4),val(a5)
  2634. ;val SET val+104*4
  2635. ; ENDR
  2636. ; adda.l #104*4*20,a4
  2637. ; adda.l #104*4*20,a5
  2638. ; dbra d1,.inlop1
  2639. ; addq #4,a2
  2640. ; addq #4,a3
  2641. ; dbra d0,COPYDOWN1
  2642. ; addq #4,a2
  2643. ; addq #4,a3
  2644. ; dbra d6,COPYOUT 
  2645.  
  2646.  tst.b REALMAPON
  2647.  beq.s .nomap
  2648.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2649. .nomap
  2650.  
  2651.  move.w WIDESCRN,d7
  2652.  
  2653.  tst.b FULLSCR
  2654.  beq nobigconv
  2655.  
  2656.  move.l FASTBUFFER,a0
  2657. ; add.l #320*2*20,a0
  2658.  move.w d7,d6
  2659.  muls #320,d6
  2660.  add.l d6,a0
  2661.  move.l SCRNDRAWPT,a1
  2662.  move.w d7,d6
  2663.  muls #40,d6
  2664.  add.l d6,a1
  2665.  add.l #2,a1
  2666.  move.l #(288/8)-1,d0
  2667.  move.l #231,d1
  2668.  sub.w d7,d1
  2669.  sub.w d7,d1
  2670.  blt nochunk
  2671.  move.w #(320-288),d2
  2672.  move.w #4,d3
  2673.  
  2674.  bra donebigconv
  2675.  
  2676. nobigconv:
  2677.  
  2678.  move.l FASTBUFFER,a0
  2679.  move.w d7,d6
  2680.  muls #320,d6
  2681.  add.l d6,a0
  2682.  move.l SCRNDRAWPT,a1
  2683.  add.l #8+40*20,a1
  2684.  move.w d7,d6
  2685.  muls #40,d6
  2686.  add.l d6,a1
  2687.  move.l #(192/8)-1,d0
  2688.  move.l #159,d1
  2689.  sub.w d7,d1
  2690.  sub.w d7,d1
  2691.  blt nochunk
  2692.  move.w #(320-192),d2
  2693.  move.w #16,d3
  2694. donebigconv
  2695.  
  2696.  tst.b DOUBLEHEIGHT
  2697.  beq.s .nodoub
  2698.  asr.w #1,d1
  2699.  blt nochunk
  2700.  add.w #320,d2
  2701.  add.w #40,d3
  2702. .nodoub:
  2703.  
  2704.  move.b DOUBLEWIDTH,d4
  2705.  
  2706.  move.b PLR1_TELEPORTED,d5
  2707.  clr.b PLR1_TELEPORTED
  2708.  cmp.b #'s',mors
  2709.  bne.s .notplr2
  2710.  move.b PLR2_TELEPORTED,d5
  2711.  clr.b PLR2_TELEPORTED
  2712. .notplr2
  2713.  jsr CHUNKYTOPLANAR 
  2714.  
  2715. nochunk:
  2716.  
  2717.  jsr MORECHUNK
  2718.  jsr MORECHUNK
  2719.  jsr MORECHUNK
  2720.  jsr MORECHUNK
  2721.  jsr MORECHUNK
  2722.  jsr MORECHUNK
  2723.  jsr MORECHUNK
  2724.  jsr MORECHUNK
  2725.  
  2726.  move.l #KeyMap,a5
  2727.  tst.b $4a(a5)
  2728.  beq .nosmallscr
  2729.  
  2730.  move.l #0,d7
  2731.  move.l #0,d6
  2732.  tst.b FULLSCR
  2733.  bne.s .attop
  2734.  move.l #40*20,d7
  2735.  move.l #40*52,d6
  2736. .attop:
  2737.  
  2738.  move.w WIDESCRN,d0
  2739.  move.l SCRNDRAWPT,a0
  2740.  add.l d7,a0
  2741.  muls #40,d0
  2742.  add.l d0,a0
  2743.  bsr CLRTWOLINES
  2744.  move.w WIDESCRN,d0
  2745.  move.l SCRNSHOWPT,a0
  2746.  add.l d7,a0
  2747.  muls #40,d0
  2748.  add.l d0,a0
  2749.  bsr CLRTWOLINES
  2750.  
  2751.  add.w #2,WIDESCRN
  2752.  
  2753.  move.l SCRNDRAWPT,a0
  2754.  add.l #232*40,a0
  2755.  sub.l d6,a0
  2756.  move.w WIDESCRN,d0
  2757.  muls #40,d0
  2758.  sub.l d0,a0
  2759.  bsr CLRTWOLINES
  2760.  move.l SCRNSHOWPT,a0
  2761.  sub.l d6,a0
  2762.  add.l #232*40,a0
  2763.  move.w WIDESCRN,d0
  2764.  muls #40,d0
  2765.  sub.l d0,a0
  2766.  bsr CLRTWOLINES
  2767.  
  2768. .nosmallscr
  2769.  
  2770.  tst.b $5e(a5)
  2771.  beq.s .nobigscr
  2772.  tst.w WIDESCRN
  2773.  ble.s .nobigscr
  2774.  
  2775.  sub.w #2,WIDESCRN
  2776.  
  2777. .nobigscr
  2778.  
  2779.  
  2780.  tst.b (a5)
  2781.  beq.s .nosavescrn
  2782.  
  2783.  not.b USEDOUG
  2784.  
  2785.  jsr SAVETHESCREEN
  2786.  
  2787. .nosavescrn:
  2788.  
  2789.  tst.b $5b(a5)
  2790.  beq notdoubheight
  2791.  tst.b LASTDH
  2792.  bne notdoubheight2
  2793.  move.l SCRNSHOWPT,a0
  2794.  jsr WIPEDISPLAY
  2795.  move.l SCRNDRAWPT,a0
  2796.  jsr WIPEDISPLAY
  2797.  st LASTDH 
  2798.  
  2799.  move.w #0,d0
  2800.  move.w #0,d1
  2801.  
  2802.  not.b DOUBLEHEIGHT
  2803.  beq.s singlepixheight
  2804.  move.w #-40,d0
  2805.  move.w #40,d1
  2806.  
  2807. singlepixheight:
  2808.  
  2809.  move.l #SCRMODULOS,a0
  2810.  move.w #115,d2
  2811. putinmode:
  2812.  move.w d0,6(a0)
  2813.  move.w d0,6+4(a0)
  2814.  move.w d1,6+16(a0)
  2815.  move.w d1,6+16+4(a0)
  2816.  add.w #32,a0
  2817.  dbra d2,putinmode
  2818.  
  2819.  bra notdoubheight2
  2820.  
  2821. notdoubheight:
  2822.  clr.b LASTDH
  2823. notdoubheight2
  2824.  
  2825.  tst.b $5a(a5)
  2826.  beq.s notdoubwidth
  2827.  tst.b LASTDW
  2828.  bne notdoubwidth2
  2829.  move.l SCRNSHOWPT,a0
  2830.  jsr WIPEDISPLAY
  2831.  move.l SCRNDRAWPT,a0
  2832.  jsr WIPEDISPLAY
  2833.  st LASTDW
  2834.  not.b DOUBLEWIDTH
  2835.  bra.s notdoubwidth2
  2836.  
  2837. notdoubwidth:
  2838.  clr.b LASTDW
  2839. notdoubwidth2:
  2840.  
  2841. ***************************************** 
  2842.  move.l PLR2_Roompt,a0
  2843.  move.l #WorkSpace,a1
  2844.  clr.l (a1)
  2845.  clr.l 4(a1)
  2846.  clr.l 8(a1)
  2847.  clr.l 12(a1)
  2848.  clr.l 16(a1)
  2849.  clr.l 20(a1)
  2850.  clr.l 24(a1)
  2851.  clr.l 28(a1)
  2852.  
  2853.  cmp.b #'n',mors
  2854.  beq.s plr1only
  2855.  
  2856.  lea ToListOfGraph(a0),a0
  2857. .doallrooms:
  2858.  move.w (a0),d0
  2859.  blt.s .allroomsdone
  2860.  addq #8,a0
  2861.  move.w d0,d1
  2862.  asr.w #3,d0
  2863.  bset d1,(a1,d0.w)
  2864.  bra .doallrooms
  2865. .allroomsdone:
  2866.  
  2867. plr1only:
  2868.  
  2869.  move.l PLR1_Roompt,a0
  2870.  lea ToListOfGraph(a0),a0
  2871. .doallrooms2:
  2872.  move.w (a0),d0
  2873.  blt.s .allroomsdone2
  2874.  addq #8,a0
  2875.  move.w d0,d1
  2876.  asr.w #3,d0
  2877.  bset d1,(a1,d0.w)
  2878.  bra .doallrooms2
  2879. .allroomsdone2:
  2880.  
  2881.  move.l #%000001,d7
  2882.  lea TEAMWORK,a2
  2883.  move.l ObjectData,a0
  2884.  sub.w #64,a0
  2885. .doallobs:
  2886.  add.w #64,a0
  2887.  move.w (a0),d0
  2888.  blt.s .allobsdone
  2889.  move.w 12(a0),d0
  2890.  blt.s .doallobs
  2891.  move.w d0,d1
  2892.  asr.w #3,d0
  2893.  btst d1,(a1,d0.w)
  2894.  bne.s .worryobj
  2895.  move.b 16(a0),d0
  2896.  btst d0,d7
  2897.  beq.s .doallobs
  2898.  moveq #0,d0
  2899.  move.b teamnumber(a0),d0
  2900.  blt.s .doallobs
  2901.  asl.w #4,d0
  2902.  tst.w SEENBY(a2,d0.w)
  2903.  blt.s .doallobs
  2904. .worryobj:
  2905.  or.b #127,worry(a0)
  2906.  bra.s .doallobs
  2907. .allobsdone:
  2908.  
  2909.  
  2910.  
  2911. ; move.l #brightentab,a0
  2912. ; move.l frompt,a3
  2913. ; adda.w #(4*33)+(104*4*20),a3
  2914. ; move.w #20,d7
  2915. ; move.w #20,d6
  2916. ;horl:
  2917. ; move.w d6,d5
  2918. ; move.l a3,a1
  2919. ;vertl
  2920. ; move.w (a1),d0
  2921. ; move.w (a0,d0.w*2),(a1)
  2922. ; addq #4,a1
  2923. ; dbra d5,vertl
  2924. ; adda.w #104*4,a3
  2925. ; dbra d7,horl
  2926.  
  2927.  move.l #$dff000,a6
  2928.  
  2929. ; move.w #$300,col0(a6)
  2930.  
  2931.  move.l #KeyMap,a5
  2932.  tst.b $45(a5)
  2933.  beq.s noend
  2934.  
  2935.  cmp.b #'s',mors
  2936.  beq plr2quit 
  2937.  
  2938.  st MASTERQUITTING
  2939.  bra noend
  2940.  
  2941. plr2quit:
  2942.  st SLAVEQUITTING
  2943. noend:
  2944.  
  2945.  tst.b MASTERQUITTING
  2946.  beq.s .noquit
  2947.  tst.b SLAVEQUITTING
  2948.  beq.s .noquit
  2949.  jmp endnomusic
  2950. .noquit
  2951.  
  2952.  cmp.b #'n',mors
  2953.  bne.s noexit
  2954.  move.l PLR1_Roompt,a0
  2955.  move.w (a0),d0
  2956. ; move.w PLOPT,d1
  2957. ; move.l #ENDZONES,a0
  2958. ; cmp.w (a0,d1.w*2),d0
  2959.  
  2960.  cmp.w ENDZONE,d0
  2961.  
  2962. ; change this for quick exit, charlie
  2963. zzzz:
  2964. ; bra end
  2965.  
  2966.  bne.s noexit
  2967.  jmp end
  2968. noexit:
  2969.  
  2970. ; tst.w PLAYERONEHEALTH
  2971. ; bgt nnoend1
  2972. ; jmp end
  2973. ;nnoend1:
  2974. ; tst.w PLAYERTWOHEALTH
  2975. ; bgt nnoend2
  2976. ; jmp end
  2977. ;nnoend2:
  2978.  
  2979. ; move.l SwitchData,a0
  2980. ; tst.b 24+8(a0)
  2981. ; bne end
  2982.   
  2983. ; JSR STOPTIMER
  2984.  
  2985.  
  2986.  bra lop
  2987.  
  2988. MORECHUNK:
  2989.  movem.l d0/a0/a1,-(a7)
  2990.  
  2991.  move.w CHUNKPROGRESS,d0
  2992.  move.l ROUTINES(pc,d0.w*4),a1
  2993.  move.l #$dff000,a0
  2994.  jsr (a1)
  2995.  
  2996.  movem.l (a7)+,d0/a0/a1
  2997.  rts
  2998.  
  2999. ROUTINES:
  3000.  dc.l .p40
  3001.  dc.l .p41
  3002.  dc.l .p42
  3003.  dc.l .p43
  3004.  dc.l .p44
  3005.  dc.l .p45
  3006.  dc.l .p46
  3007.  dc.l .p48
  3008.  
  3009. WorkBM:
  3010.  ds.l 8
  3011.  
  3012. .p40    move.l    a1,-(sp)
  3013.     move.w    #-1,bltafwm(a0)
  3014.     move.w    #-1,bltalwm(a0)
  3015.     move.l    BBuffer,d0
  3016.     move.l    d0,(bltapt,a0)
  3017.     addq.l    #2,d0
  3018.     move.l    d0,(bltbpt,a0)
  3019.     move.l    #WorkBM,a1
  3020.     move.l    2*4(a1),d0
  3021.     move.l    d0,bltdpt(a0)
  3022.     move.w    #14,bltamod(a0)
  3023.     move.w    #14,bltbmod(a0)
  3024.     move.w    #0,bltdmod(a0)
  3025.     move.w    #$cccc,bltcdat(a0)
  3026.     move.w    #$0de4,bltcon0(a0)
  3027.     move.w    #$2000,bltcon1(a0)
  3028.     move.l    PlaneSize,d0
  3029.     lsr.l    #1,d0
  3030.     move.w    d0,(bltsizv,a0)
  3031.     move.w    #1,bltsizh(a0)
  3032.     move.l    (sp)+,a1
  3033.     move.w #1,CHUNKPROGRESS
  3034.     
  3035.     rts
  3036.  
  3037. .p41    move.l    a1,-(sp)
  3038.     move.l    BBuffer,d0
  3039.     addq.l    #8,d0
  3040.     move.l    d0,(bltapt,a0)
  3041.     addq.l    #2,d0
  3042.     move.l    d0,(bltbpt,a0)
  3043.     move.l    #WorkBM,a1
  3044.     move.l    6*4(a1),d0
  3045.     move.l    d0,bltdpt(a0)
  3046.     move.w    #1,bltsizh(a0)
  3047.     move.l    (sp)+,a1
  3048.     move.w #2,CHUNKPROGRESS
  3049.     rts
  3050.  
  3051. .p42    move.l    a1,-(sp)
  3052.     move.l    BBuffer,d0
  3053.     addq.l    #4,d0
  3054.     move.l    d0,(bltapt,a0)
  3055.     addq.l    #2,d0
  3056.     move.l    d0,(bltbpt,a0)
  3057.     move.l    #WorkBM,a1
  3058.     move.l    3*4(a1),d0
  3059.     move.l    d0,bltdpt(a0)
  3060.     move.w    #1,bltsizh(a0)
  3061.     move.l    (sp)+,a1
  3062.     move.w #3,CHUNKPROGRESS
  3063.     rts
  3064.  
  3065. .p43    move.l    a1,-(sp)
  3066.     move.l    BBuffer,d0
  3067.     add.l    #12,d0
  3068.     move.l    d0,(bltapt,a0)
  3069.     addq.l    #2,d0
  3070.     move.l    d0,(bltbpt,a0)
  3071.     move.l    #WorkBM,a1
  3072.     move.l    7*4(a1),d0
  3073.     move.l    d0,bltdpt(a0)
  3074.     move.w    #1,bltsizh(a0)
  3075.     move.l    (sp)+,a1
  3076.     move.w #4,CHUNKPROGRESS
  3077.     rts
  3078.  
  3079. .p44    move.l    a1,-(sp)
  3080.     move.l    BBuffer,d0
  3081.     sub.l    #16,d0
  3082.     add.l    ChunkyPixels,d0
  3083.     move.l    d0,(bltapt,a0)
  3084.     addq.l    #2,d0
  3085.     move.l    d0,(bltbpt,a0)
  3086.     move.l    #WorkBM,a1
  3087.     move.l    0*4(a1),d0
  3088.     add.l    PlaneSize,d0
  3089.     subq.l    #2,d0
  3090.     move.l    d0,bltdpt(a0)
  3091.     move.w    #$2de4,bltcon0(a0)
  3092.     move.w    #$0002,bltcon1(a0)
  3093.     move.w    #1,bltsizh(a0)
  3094.     move.l    (sp)+,a1
  3095.     move.w #5,CHUNKPROGRESS
  3096.     rts
  3097.  
  3098. .p45    move.l    a1,-(sp)
  3099.     move.l    BBuffer,d0
  3100.     subq.l    #8,d0
  3101.     add.l    ChunkyPixels,d0
  3102.     move.l    d0,(bltapt,a0)
  3103.     addq.l    #2,d0
  3104.     move.l    d0,(bltbpt,a0)
  3105.     move.l    #WorkBM,a1
  3106.     move.l    4*4(a1),d0
  3107.     add.l    PlaneSize,d0
  3108.     subq.l    #2,d0
  3109.     move.l    d0,bltdpt(a0)
  3110.     move.w    #1,bltsizh(a0)
  3111.     move.l    (sp)+,a1
  3112.     move.w #6,CHUNKPROGRESS
  3113.     rts
  3114.  
  3115. .p46    move.l    a1,-(sp)
  3116.     move.l    BBuffer,d0
  3117.     sub.l    #12,d0
  3118.     add.l    ChunkyPixels,d0
  3119.     move.l    d0,(bltapt,a0)
  3120.     addq.l    #2,d0
  3121.     move.l    d0,(bltbpt,a0)
  3122.     move.l    #WorkBM,a1
  3123.     move.l    1*4(a1),d0
  3124.     add.l    PlaneSize,d0
  3125.     subq.l    #2,d0
  3126.     move.l    d0,bltdpt(a0)
  3127.     move.w    #1,bltsizh(a0)
  3128.     move.l    (sp)+,a1
  3129.     move.w #7,CHUNKPROGRESS
  3130.     rts
  3131.  
  3132. .p48    move.l    a1,-(sp)
  3133.     move.l    BBuffer,d0
  3134.     subq.l    #4,d0
  3135.     add.l    ChunkyPixels,d0
  3136.     move.l    d0,(bltapt,a0)
  3137.     addq.l    #2,d0
  3138.     move.l    d0,(bltbpt,a0)
  3139.     move.l    #WorkBM,a1
  3140.     move.l    5*4(a1),d0
  3141.     add.l    SizeToBot,d0
  3142.     subq.l    #2,d0
  3143.     move.l    d0,bltdpt(a0)
  3144.     move.w    #1,bltsizh(a0)
  3145.     move.l    (sp)+,a1
  3146.     move.l    #.p40,(4,a1)
  3147.     moveq    #0,d0
  3148.     rts
  3149.  
  3150.  
  3151.  
  3152.  include "ab3:source_4000/ab3diipatchidr.s"
  3153.  
  3154. CLRTWOLINES:
  3155.  
  3156.  moveq #0,d1
  3157.  move.w #7,d2
  3158. .ccc
  3159.  move.l d1,2(a0)
  3160.  move.l d1,6(a0)
  3161.  move.l d1,10(a0)
  3162.  move.l d1,14(a0)
  3163.  move.l d1,18(a0)
  3164.  move.l d1,22(a0)
  3165.  move.l d1,26(a0)
  3166.  move.l d1,30(a0)
  3167.  move.l d1,34(a0)
  3168.  move.l d1,2+40(a0)
  3169.  move.l d1,6+40(a0)
  3170.  move.l d1,10+40(a0)
  3171.  move.l d1,14+40(a0)
  3172.  move.l d1,18+40(a0)
  3173.  move.l d1,22+40(a0)
  3174.  move.l d1,26+40(a0)
  3175.  move.l d1,30+40(a0)
  3176.  move.l d1,34+40(a0)
  3177.  add.l #10240,a0
  3178.  dbra d2,.ccc
  3179.  rts
  3180.  
  3181.  
  3182. LASTDH: dc.b 0
  3183. LASTDW: dc.b 0
  3184. WIDESCRN: dc.w 0
  3185. TRRANS: dc.w 0
  3186. DOANYWATER: dc.w 0
  3187.  
  3188. DoTheMapWotNastyCharlesIsForcingMeToDo:
  3189.  
  3190.  move.l TexturePal,a4
  3191.  add.l #256*32,a4
  3192. ; add.w MAPBRIGHT,a4
  3193.  
  3194.  move.l #KeyMap,a5
  3195.  tst.b $50(a5)
  3196.  beq.s .nobrighter
  3197.  tst.w MAPBRIGHT
  3198.  beq.s .nobrighter
  3199.  
  3200.  sub.w #1,MAPBRIGHT
  3201.  
  3202. .nobrighter:
  3203.  
  3204.  tst.b $51(a5)
  3205.  beq.s .nodimmer
  3206.  cmp.w #7,MAPBRIGHT
  3207.  bge.s .nodimmer
  3208.  
  3209.  add.w #1,MAPBRIGHT
  3210.  
  3211. .nodimmer:
  3212.  
  3213.  move.l #Rotated,a1
  3214.  move.l #COMPACTMAP,a2
  3215.  move.l #BIGMAP-40,a3
  3216.  
  3217. preshow:
  3218.  add.w #40,a3
  3219.  
  3220. SHOWMAP:
  3221.  move.l (a2)+,d5
  3222.  move.l a2,d7
  3223.  cmp.l LASTZONE,d7
  3224.  bgt shownmap
  3225.  
  3226.  tst.l d5
  3227.  beq.s preshow
  3228.  
  3229.  move.w #9,d7
  3230. wallsofzone
  3231.  
  3232.  asr.l #1,d5
  3233.  bcs.s WALLSEEN
  3234.  
  3235.  asr.l #1,d5
  3236.  bcs.s WALLMAPPED
  3237.  
  3238.  asr.l #1,d5
  3239.  addq #4,a3
  3240.  bra.s DECIDEDWALL
  3241.  
  3242. WALLMAPPED:
  3243.  move.w #$b00,d4
  3244.  asr.l #1,d5
  3245.  bcc.s .notadoor
  3246.  move.w #$e00,d4
  3247. .notadoor
  3248.  
  3249.  st TRRANS
  3250.  
  3251.  bra.s DECIDEDCOLOUR
  3252.  
  3253. WALLSEEN:
  3254.  
  3255.  clr.b TRRANS
  3256.  
  3257.  move.w #255,d4
  3258.  asr.l #2,d5
  3259.  bcc.s .notadoor
  3260.  move.w #254,d4
  3261. .notadoor
  3262. DECIDEDCOLOUR:
  3263.  move.w (a3)+,d6
  3264.  move.l (a1,d6.w*8),d0
  3265.  asr.l #7,d0
  3266.  add.w mapxoff,d0
  3267.  move.w 6(a1,d6.w*8),d1
  3268.  add.w mapzoff,d1
  3269.  move.w (a3)+,d6
  3270.  move.l (a1,d6.w*8),d2
  3271.  asr.l #7,d2
  3272.  add.w mapxoff,d2
  3273.  move.w 6(a1,d6.w*8),d3
  3274.  add.w mapzoff,d3
  3275.  
  3276.  neg.w d1
  3277.  neg.w d3
  3278.  
  3279.  movem.l d7/d5,-(a7)
  3280.  bsr CLIPANDDRAW
  3281.  movem.l (a7)+,d7/d5
  3282.  
  3283. DECIDEDWALL:
  3284.  
  3285.  dbra d7,wallsofzone
  3286.  bra SHOWMAP
  3287.  
  3288. shownmap:
  3289.  
  3290.  clr.b TRRANS
  3291.  
  3292.  move.w mapxoff,d0
  3293.  move.w mapzoff,d1
  3294.  neg.w d1
  3295.  move.w d0,d2
  3296.  move.w d1,d3
  3297.  sub.w #128,d1
  3298.  add.w #128,d3
  3299.  move.w #250,d4
  3300.  bsr CLIPANDDRAW
  3301.  
  3302.  move.w mapxoff,d0
  3303.  move.w mapzoff,d1
  3304.  neg.w d1
  3305.  move.w d0,d2
  3306.  move.w d1,d3
  3307.  sub.w #128,d1
  3308.  sub.w #32,d3
  3309.  sub.w #64,d2
  3310.  move.w #250,d4
  3311.  bsr CLIPANDDRAW
  3312.  
  3313.  move.w mapxoff,d0
  3314.  move.w mapzoff,d1
  3315.  neg.w d1
  3316.  move.w d0,d2
  3317.  move.w d1,d3
  3318.  sub.w #128,d1
  3319.  sub.w #32,d3
  3320.  add.w #64,d2
  3321.  move.w #250,d4
  3322.  bsr CLIPANDDRAW
  3323.  rts
  3324.  
  3325.  
  3326. CLIPANDDRAW:
  3327.  
  3328.  tst.b FULLSCR
  3329.  beq.s .nodov
  3330.  
  3331.  add.w d0,d0
  3332.  add.w d2,d2
  3333.  ext.l d0
  3334.  ext.l d2
  3335.  divs #3,d0
  3336.  divs #3,d2
  3337.  
  3338. .nodov:
  3339.  
  3340.  move.w MAPBRIGHT,d5
  3341.  asr.w d5,d0
  3342.  asr.w d5,d1
  3343.  asr.w d5,d2
  3344.  asr.w d5,d3
  3345.  
  3346. NOSCALING:
  3347.  add.w #96,d0
  3348.  bge p1xpos
  3349.  
  3350.  add.w #96,d2
  3351.  blt OFFSCREEN
  3352.  
  3353. x1nx2p:
  3354.  
  3355.  move.w d3,d5
  3356.  sub.w d1,d5
  3357.  move.w d2,d6
  3358.  sub.w d0,d6
  3359.  beq OFFSCREEN
  3360.  
  3361.  muls d0,d5
  3362.  divs d6,d5
  3363.  sub.w d5,d1
  3364.  move.w #0,d0
  3365.  
  3366.  bra doneleftclip
  3367.  
  3368. p1xpos:
  3369.  
  3370.  add.w #96,d2
  3371.  bge doneleftclip
  3372.  
  3373.  move.w d1,d5
  3374.  sub.w d3,d5
  3375.  move.w d0,d6
  3376.  sub.w d2,d6
  3377.  beq OFFSCREEN
  3378.  
  3379.  muls d2,d5
  3380.  divs d6,d5
  3381.  sub.w d5,d3
  3382.  move.w #0,d2
  3383.  
  3384. doneleftclip:
  3385.  
  3386.  cmp.w #191,d0
  3387.  ble p1xneg
  3388.  
  3389.  cmp.w #191,d2
  3390.  bgt OFFSCREEN
  3391.  
  3392.  move.w d0,d6
  3393.  sub.w d2,d6
  3394.  beq OFFSCREEN
  3395.  sub.w #191,d0
  3396.  move.w d3,d5
  3397.  sub.w d1,d5
  3398.  
  3399.  muls d5,d0
  3400.  divs d6,d0
  3401.  add.w d0,d1
  3402.  move.w #191,d0
  3403.  
  3404.  bra donerightclip
  3405.  
  3406. p1xneg:
  3407.  
  3408.  cmp.w #191,d2
  3409.  ble donerightclip
  3410.  
  3411.  move.w d2,d6
  3412.  sub.w d0,d6
  3413.  beq OFFSCREEN
  3414.  sub.w #191,d2
  3415.  move.w d1,d5
  3416.  sub.w d3,d5
  3417.  
  3418.  muls d5,d2
  3419.  divs d6,d2
  3420.  add.w d2,d3
  3421.  move.w #191,d2
  3422.  
  3423. donerightclip:
  3424.  
  3425. *********************************
  3426.  
  3427.  add.w #80,d1
  3428.  bge p1ypos
  3429.  
  3430.  add.w #80,d3
  3431.  blt OFFSCREEN
  3432.  
  3433.  move.w d2,d5
  3434.  sub.w d0,d5
  3435.  move.w d3,d6
  3436.  sub.w d1,d6
  3437.  beq OFFSCREEN
  3438.  
  3439.  muls d1,d5
  3440.  divs d6,d5
  3441.  sub.w d5,d0
  3442.  move.w #0,d1
  3443.  
  3444.  bra donetopclip
  3445.  
  3446. p1ypos:
  3447.  
  3448.  add.w #80,d3
  3449.  bge donetopclip
  3450.  
  3451.  move.w d0,d5
  3452.  sub.w d2,d5
  3453.  move.w d1,d6
  3454.  sub.w d3,d6
  3455.  beq OFFSCREEN
  3456.  
  3457.  muls d3,d5
  3458.  divs d6,d5
  3459.  sub.w d5,d2
  3460.  move.w #0,d3
  3461.  
  3462. donetopclip:
  3463.  
  3464.  cmp.w #159,d1
  3465.  ble p1yneg
  3466.  
  3467.  cmp.w #159,d3
  3468.  bgt OFFSCREEN
  3469.  
  3470.  move.w d1,d6
  3471.  sub.w d3,d6
  3472.  beq OFFSCREEN
  3473.  sub.w #159,d1
  3474.  move.w d2,d5
  3475.  sub.w d0,d5
  3476.  
  3477.  muls d5,d1
  3478.  divs d6,d1
  3479.  add.w d1,d0
  3480.  move.w #159,d1
  3481.  
  3482.  bra donebotclip
  3483.  
  3484. p1yneg:
  3485.  
  3486.  cmp.w #159,d3
  3487.  ble donebotclip
  3488.  
  3489.  move.w d3,d6
  3490.  sub.w d1,d6
  3491.  beq OFFSCREEN
  3492.  sub.w #159,d3
  3493.  move.w d0,d5
  3494.  sub.w d2,d5
  3495.  
  3496.  muls d5,d3
  3497.  divs d6,d3
  3498.  add.w d3,d2
  3499.  move.w #159,d3
  3500.  
  3501. donebotclip:
  3502.  
  3503.  tst.b TRRANS
  3504.  bne DRAWAtransLINE
  3505.  bra DRAWAMAPLINE
  3506.  
  3507. OFFSCREEN:
  3508. NOLINEtrans:
  3509.  rts
  3510.  
  3511. MAPBRIGHT:
  3512.  dc.w 3
  3513. mapxoff: dc.w 0
  3514. mapzoff: dc.w 0
  3515.  
  3516. DRAWAtransLINE:
  3517.  
  3518.  move.l FASTBUFFER,a0    ; screen to render to.
  3519.  
  3520.  tst.b FULLSCR
  3521.  beq.s .nooffset
  3522.   
  3523.  add.l #(320*40)+(48*2),a0
  3524.   
  3525. .nooffset:
  3526.  
  3527.  cmp.w d1,d3
  3528.  bgt.s .okdown
  3529.  bne.s .aline
  3530.  cmp.w d0,d2
  3531.  beq.s NOLINEtrans 
  3532. .aline
  3533.  exg d0,d2
  3534.  exg d1,d3
  3535. .okdown
  3536.  
  3537.  move.w d1,d5
  3538.  muls #320,d5
  3539.  add.l d5,a0
  3540.  lea (a0,d0.w*2),a0
  3541.  
  3542.  sub.w d1,d3
  3543.  
  3544.  sub.w d0,d2
  3545.  bge.s downrighttrans
  3546.  
  3547. downlefttrans:
  3548.  neg.w d2
  3549.  cmp.w d2,d3
  3550.  bgt.s downmorelefttrans
  3551.  
  3552. downleftmoretrans:
  3553.  move.w #320,d6
  3554.  move.w d2,d0
  3555.  move.w d2,d7
  3556.  
  3557. .linelop:
  3558.  move.b (a0),d4
  3559.  move.b (a4,d4.w*2),(a0)
  3560.  subq #1,a0
  3561.  sub.w d3,d0
  3562.  bgt.s .noextra
  3563.  add.w d2,d0
  3564.  add.w d6,a0
  3565. .noextra:
  3566.  dbra d7,.linelop
  3567.  rts
  3568.  
  3569. downmorelefttrans:
  3570.  move.w #320,d6
  3571.  move.w d3,d0
  3572.  move.w d3,d7
  3573.  
  3574. .linelop:
  3575.  move.b (a0),d4
  3576.  move.b (a4,d4.w*2),(a0)
  3577.  add.w d6,a0
  3578.  sub.w d2,d0
  3579.  bgt.s .noextra
  3580.  add.w d3,d0
  3581.  subq #1,a0
  3582. .noextra:
  3583.  dbra d7,.linelop
  3584.  
  3585.  rts
  3586.  
  3587. downrighttrans:
  3588.  
  3589.  cmp.w d2,d3
  3590.  bgt.s downmorerighttrans
  3591.  
  3592. downrightmoretrans:
  3593.  move.w #320,d6
  3594.  move.w d2,d0
  3595.  move.w d2,d7
  3596.  
  3597. .linelop:
  3598.  move.b (a0),d4
  3599.  move.b (a4,d4.w*2),(a0)+
  3600.  sub.w d3,d0
  3601.  bgt.s .noextra
  3602.  add.w d2,d0
  3603.  add.w d6,a0
  3604. .noextra:
  3605.  dbra d7,.linelop
  3606.  
  3607.  rts
  3608.  
  3609. downmorerighttrans:
  3610.  move.w #320,d6
  3611.  move.w d3,d0
  3612.  move.w d3,d7
  3613.  
  3614. .linelop:
  3615.  move.b (a0),d4
  3616.  move.b (a4,d4.w*2),(a0)
  3617.  add.w d6,a0
  3618.  sub.w d2,d0
  3619.  bgt.s .noextra
  3620.  add.w d3,d0
  3621.  addq #1,a0
  3622. .noextra:
  3623.  dbra d7,.linelop
  3624.  
  3625.  rts
  3626.  
  3627. NOLINE:
  3628.  rts
  3629.  
  3630. DRAWAMAPLINE:
  3631.  
  3632.  
  3633.  move.l FASTBUFFER,a0    ; screen to render to.
  3634.  cmp.w d1,d3
  3635.  bgt.s .okdown
  3636.  bne.s .aline
  3637.  cmp.w d0,d2
  3638.  beq.s NOLINE 
  3639. .aline
  3640.  exg d0,d2
  3641.  exg d1,d3
  3642. .okdown
  3643.  
  3644.  move.w d1,d5
  3645.  muls #320,d5
  3646.  add.l d5,a0
  3647.  lea (a0,d0.w),a0
  3648.  
  3649.  sub.w d1,d3
  3650.  
  3651.  sub.w d0,d2
  3652.  bge.s downright
  3653.  
  3654. downleft:
  3655.  neg.w d2
  3656.  cmp.w d2,d3
  3657.  bgt.s downmoreleft
  3658.  
  3659. downleftmore:
  3660.  move.w #320,d6
  3661.  move.w d2,d0
  3662.  move.w d2,d7
  3663.  addq #1,a0
  3664.  
  3665. .linelop:
  3666.  move.b d4,-(a0)
  3667.  sub.w d3,d0
  3668.  bgt.s .noextra
  3669.  add.w d2,d0
  3670.  add.w d6,a0
  3671. .noextra:
  3672.  dbra d7,.linelop
  3673.  rts
  3674.  
  3675. downmoreleft:
  3676.  move.w #320,d6
  3677.  move.w d3,d0
  3678.  move.w d3,d7
  3679.  
  3680. .linelop:
  3681.  move.b d4,(a0)
  3682.  add.w d6,a0
  3683.  sub.w d2,d0
  3684.  bgt.s .noextra
  3685.  add.w d3,d0
  3686.  subq #1,a0
  3687. .noextra:
  3688.  dbra d7,.linelop
  3689.  
  3690.  rts
  3691.  
  3692. downright:
  3693.  
  3694.  cmp.w d2,d3
  3695.  bgt.s downmoreright
  3696.  
  3697. downrightmore:
  3698.  move.w #320,d6
  3699.  move.w d2,d0
  3700.  move.w d2,d7
  3701.  
  3702. .linelop:
  3703.  move.b d4,(a0)+
  3704.  sub.w d3,d0
  3705.  bgt.s .noextra
  3706.  add.w d2,d0
  3707.  add.w d6,a0
  3708. .noextra:
  3709.  dbra d7,.linelop
  3710.  
  3711.  rts
  3712.  
  3713. downmoreright:
  3714.  move.w #320,d6
  3715.  move.w d3,d0
  3716.  move.w d3,d7
  3717.  
  3718. .linelop:
  3719.  move.b d4,(a0)
  3720.  add.w d6,a0
  3721.  sub.w d2,d0
  3722.  bgt.s .noextra
  3723.  add.w d3,d0
  3724.  addq #1,a0
  3725. .noextra:
  3726.  dbra d7,.linelop
  3727.  
  3728.  rts
  3729.  
  3730. SAVETHESCREEN:
  3731.  
  3732.  move.l old,$dff080
  3733.  move.w #$8020,$dff000+intena
  3734.  
  3735.  move.l _IntuitionBase,a6
  3736.  jsr _LVORethinkDisplay(a6)
  3737.  
  3738.  move.l doslib,a6
  3739.  move.l #SAVENAME,d1
  3740.  move.l #1006,d2
  3741.  jsr -30(a6)
  3742.  move.l d0,handle
  3743.  
  3744.  move.l doslib,a6
  3745.  move.l #mt_init,d2
  3746.  move.l handle,d1
  3747.  move.l #10240*8,d3
  3748.  jsr _LVOWrite(a6)
  3749.  
  3750.  move.l doslib,a6
  3751.  move.l handle,d1
  3752.  jsr -36(a6)
  3753.  
  3754.  move.l doslib,a6
  3755.  move.l #200,d1
  3756.  jsr -198(a6) 
  3757.  
  3758.  move.w #$0020,$dff000+intena
  3759.  move.l #bigfield,$dff080
  3760.  
  3761.  add.b #1,SAVELETTER
  3762.  
  3763.  rts
  3764.  
  3765. SAVENAME: dc.b 'work:rawscrn'
  3766. SAVELETTER: dc.b 'd',0
  3767.  
  3768.  even
  3769.  
  3770.  include "ab3:source_4000/CHUNKY.s"
  3771.  
  3772.  
  3773. MASTERQUITTING: dc.b 0
  3774. SLAVEQUITTING: dc.b 0
  3775. MASTERPAUSE: dc.b 0
  3776. SLAVEPAUSE: dc.b 0
  3777.  
  3778. PAUSEOPTS:
  3779.  include "ab3:source_4000/pauseopts"
  3780.  
  3781. ENDZONE: dc.w 0
  3782.  
  3783. ENDZONES:
  3784. ; LEVEL 1
  3785.  dc.w -1
  3786. ; dc.w 55
  3787. ; LEVEL 2
  3788.  dc.w 149
  3789. ; LEVEL 3
  3790.  dc.w 155
  3791. ; LEVEL 4
  3792.  dc.w 107
  3793. ; LEVEL 5
  3794.  dc.w 67
  3795. ; LEVEL 6
  3796.  dc.w 132
  3797. ; LEVEL 7
  3798.  dc.w 203
  3799. ; LEVEL 8
  3800.  dc.w 166
  3801. ; LEVEL 9
  3802.  dc.w 118
  3803. ; LEVEL 10
  3804.  dc.w 102
  3805. ; LEVEL 11
  3806.  dc.w 103
  3807. ; LEVEL 12
  3808.  dc.w 2
  3809. ; LEVEL 13
  3810.  dc.w 98
  3811. ; LEVEL 14
  3812.  dc.w 0
  3813. ; LEVEL 15
  3814.  dc.w 148
  3815. ; LEVEL 16
  3816.  dc.w 103
  3817.  
  3818. ***************************************************************************
  3819. ***************************************************************************
  3820. ****************** End of Main Loop here ********************************** 
  3821. ***************************************************************************
  3822. ***************************************************************************
  3823.  
  3824. putinsmallscr:
  3825.  
  3826.  rts
  3827.  
  3828.  move.l #$1fe0000,statskip
  3829.  move.l #$1fe0000,statskip+4
  3830.  
  3831.  move.l #healthpal,a5
  3832. ; move.l COPSCRN1,a0
  3833. ; move.l COPSCRN2,a2
  3834.  move.w #scrheight-1,d0
  3835.  move.l #0,d6
  3836.  move.w #0,d3
  3837.  move.w #$2bdf,startwait
  3838.  move.w #$2d01,endwait
  3839. .fillcop
  3840.  move.w #$180,d1
  3841.  
  3842.  move.l a0,a1
  3843.  move.l a2,a3
  3844.  move.w #$10c,(a1)+
  3845.  move.w #$10c,(a3)+
  3846.  move.w d3,(a1)+
  3847.  move.w d3,(a3)+
  3848.  eor.w #$8000,d3
  3849.  
  3850.  move.w #$106,(a1)+
  3851.  move.w #$106,(a3)+
  3852.  move.w #$2c42,d5
  3853.  or.w d3,d5
  3854.  and.w #$fffe,d5
  3855.  move.w d5,(a1)+
  3856.  move.w d5,(a3)+
  3857.  bsr do32
  3858.  
  3859.  move.w #$106,(a1)+
  3860.  move.w #$106,(a3)+
  3861.  move.w #$4c42,d5
  3862.  or.w d3,d5
  3863.  and.w #$fffe,d5
  3864.  move.w d5,(a1)+
  3865.  move.w d5,(a3)+
  3866.  bsr do32
  3867.  
  3868.  move.w #$106,(a1)+
  3869.  move.w #$106,(a3)+
  3870.  move.w #$6c42,d5
  3871.  or.w d3,d5
  3872.  and.w #$fffe,d5
  3873.  move.w d5,(a1)+
  3874.  move.w d5,(a3)+
  3875.  bsr do32
  3876.  
  3877.  
  3878.  move.l #$1060c42,(a1)+
  3879.  move.l #$1060c42,(a3)+
  3880.  move.w #$19e,(a1)+
  3881.  move.w (a5),(a1)+
  3882.  move.w #$19e,(a3)+
  3883.  move.w (a5)+,(a3)+
  3884.  
  3885. **********************************
  3886.  
  3887.  adda.w #104*4,a0
  3888.  adda.w #104*4,a2
  3889.  dbra d0,.fillcop
  3890.  
  3891.  move.w #$48,fetchstart
  3892.  move.w #$88,fetchstop
  3893.  move.w #$2cb1,winstart
  3894.  move.w #$2c91,winstop
  3895.  move.w #-24,modulo
  3896.  move.w #-24,modulo+4
  3897.  
  3898.  move.l #nullspr,d0
  3899.  move.w d0,s4l
  3900.  move.w d0,s5l
  3901.  move.w d0,s6l
  3902.  move.w d0,s7l
  3903.  swap d0
  3904.  move.w d0,s4h
  3905.  move.w d0,s5h
  3906.  move.w d0,s6h
  3907.  move.w d0,s7h 
  3908.  
  3909. ; move.l #borders,d0
  3910. ; move.w d0,s0l
  3911. ; swap d0
  3912. ; move.w d0,s0h
  3913. ; move.l #borders+2592,d0
  3914. ; move.w d0,s1l
  3915. ; swap d0
  3916. ; move.w d0,s1h
  3917. ; move.l #borders+2592*2,d0
  3918. ; move.w d0,s2l
  3919. ; swap d0
  3920. ; move.w d0,s2h
  3921. ; move.l #borders+2592*3,d0
  3922. ; move.w d0,s3l
  3923. ; swap d0
  3924. ; move.w d0,s3h
  3925.  
  3926.  
  3927.  move.l scrn,a0
  3928.  add.l #40,a0
  3929.  move.l scrn,a1
  3930.  add.l #160,a1
  3931.  move.l scrn,a2
  3932.  add.l #280,a2
  3933.  move.l #smallscrntab,a3
  3934.  move.w #191,d7    ; counter
  3935.  move.w #0,d1    ; xpos
  3936. .plotscrnloop:
  3937.  move.b (a3)+,d0
  3938.  move.w d1,d2
  3939.  asr.w #3,d2
  3940.  move.b d1,d3
  3941.  not.b d3
  3942.  bclr.b d3,-40(a0,d2.w)
  3943.  bclr.b d3,(a0,d2.w)
  3944.  bclr.b d3,40(a0,d2.w)
  3945.  bclr.b d3,-40(a1,d2.w)
  3946.  bclr.b d3,(a1,d2.w)
  3947.  bclr.b d3,40(a1,d2.w)
  3948.  bclr.b d3,-40(a2,d2.w)
  3949.  btst #0,d0
  3950.  beq.s .nobp1
  3951.  bset.b d3,-40(a0,d2.w)
  3952. .nobp1:
  3953.  btst #1,d0
  3954.  beq.s .nobp2
  3955.  bset.b d3,(a0,d2.w)
  3956. .nobp2:
  3957.  btst #2,d0
  3958.  beq.s .nobp3
  3959.  bset.b d3,40(a0,d2.w)
  3960. .nobp3:
  3961.  btst #3,d0
  3962.  beq.s .nobp4
  3963.  bset.b d3,-40(a1,d2.w)
  3964. .nobp4:
  3965.  btst #4,d0
  3966.  beq.s .nobp5
  3967.  bset.b d3,(a1,d2.w)
  3968. .nobp5:
  3969.  btst #5,d0
  3970.  beq.s .nobp6
  3971.  bset.b d3,40(a1,d2.w)
  3972. .nobp6:
  3973.  btst #6,d0
  3974.  beq.s .nobp7
  3975.  bset.b d3,-40(a2,d2.w)
  3976. .nobp7:
  3977.  
  3978.  addq #1,d1
  3979.  
  3980.  dbra d7,.plotscrnloop
  3981.  
  3982.  
  3983.  rts
  3984.  
  3985. putinlargescr:
  3986.  
  3987.  move.l #$1000000,statskip
  3988.  move.l #$fffffffe,statskip+4
  3989.  
  3990.  move.l #healthpal,a5
  3991. ; move.l COPSCRN1,a0
  3992. ; move.l COPSCRN2,a2
  3993.  move.w #scrheight-1,d0
  3994.  move.l #0,d6
  3995.  move.w #0,d3
  3996.  move.w #$29df,startwait
  3997.  move.w #$2b01,endwait
  3998. .fillcop
  3999.  move.w #$180,d1
  4000.  
  4001.  move.l a0,a1
  4002.  move.l a2,a3
  4003.  move.w #$10c,(a1)+
  4004.  move.w #$10c,(a3)+
  4005.  move.w d3,(a1)+
  4006.  move.w d3,(a3)+
  4007.  eor.w #$8000,d3
  4008.  
  4009.  move.w #$106,(a1)+
  4010.  move.w #$106,(a3)+
  4011.  move.w #$2c42,d5
  4012.  or.w d3,d5
  4013.  and.w #$fffe,d5
  4014.  move.w d5,(a1)+
  4015.  move.w d5,(a3)+
  4016.  bsr do32
  4017.  
  4018.  move.w #$106,(a1)+
  4019.  move.w #$106,(a3)+
  4020.  move.w #$4c42,d5
  4021.  or.w d3,d5
  4022.  and.w #$fffe,d5
  4023.  move.w d5,(a1)+
  4024.  move.w d5,(a3)+
  4025.  bsr do32
  4026.  
  4027.  move.w #$106,(a1)+
  4028.  move.w #$106,(a3)+
  4029.  move.w #$6c42,d5
  4030.  or.w d3,d5
  4031.  and.w #$fffe,d5
  4032.  move.w d5,(a1)+
  4033.  move.w d5,(a3)+
  4034.  bsr do32
  4035.  
  4036.  move.w startwait,(a1)+
  4037.  move.w #$fffe,(a1)+
  4038.  move.w endwait,(a1)+
  4039.  move.w #$ff00,(a1)+
  4040.  move.w startwait,(a3)+
  4041.  move.w #$fffe,(a3)+
  4042.  move.w endwait,(a3)+
  4043.  move.w #$ff00,(a3)+
  4044.  
  4045. ; move.l $1fe0000,(a1)+
  4046. ; move.l $1fe0000,(a3)+
  4047. ; move.l $1fe0000,(a1)+
  4048. ; move.l $1fe0000,(a3)+
  4049.  
  4050.  
  4051.  add.w #$300,startwait
  4052.  add.w #$300,endwait
  4053.  
  4054. ; move.l #$1060c42,(a1)+
  4055. ; move.l #$1060c42,(a3)+
  4056. ; move.w #$19e,(a1)+
  4057. ; move.w (a5),(a1)+
  4058. ; move.w #$19e,(a3)+
  4059. ; move.w (a5)+,(a3)+
  4060.  
  4061. **********************************
  4062.  
  4063.  adda.w #104*4,a0
  4064.  adda.w #104*4,a2
  4065.  dbra d0,.fillcop
  4066.  
  4067.  move.w #$38,fetchstart
  4068.  move.w #$b8,fetchstop
  4069.  move.w #$2c81,winstart
  4070.  move.w #$2cc1,winstop
  4071.  move.w #-40,modulo
  4072.  move.w #-40,modulo+4
  4073.  
  4074.  move.l #nullspr,d0
  4075.  move.w d0,s0l
  4076.  move.w d0,s1l
  4077.  move.w d0,s2l
  4078.  move.w d0,s3l
  4079.  move.w d0,s4l
  4080.  move.w d0,s5l
  4081.  move.w d0,s6l
  4082.  move.w d0,s7l
  4083.  swap d0
  4084.  move.w d0,s0h
  4085.  move.w d0,s1h
  4086.  move.w d0,s2h
  4087.  move.w d0,s3h
  4088.  move.w d0,s4h
  4089.  move.w d0,s5h
  4090.  move.w d0,s6h
  4091.  move.w d0,s7h 
  4092.  
  4093.  move.l scrn,a0
  4094.  move.l a0,a1
  4095.  move.l a0,a2
  4096.  add.l #40,a0
  4097.  add.l #160,a1
  4098.  add.l #280,a2
  4099.  move.l #scrntab,a3
  4100.  move.w #319,d7    ; counter
  4101.  move.w #0,d1    ; xpos
  4102. .plotscrnloop:
  4103.  move.b (a3)+,d0
  4104.  move.w d1,d2
  4105.  asr.w #3,d2
  4106.  move.b d1,d3
  4107.  not.b d3
  4108.  bclr.b d3,-40(a0,d2.w)
  4109.  bclr.b d3,(a0,d2.w)
  4110.  bclr.b d3,40(a0,d2.w)
  4111.  bclr.b d3,-40(a1,d2.w)
  4112.  bclr.b d3,(a1,d2.w)
  4113.  bclr.b d3,40(a1,d2.w)
  4114.  bclr.b d3,-40(a2,d2.w)
  4115.  btst #0,d0
  4116.  beq.s .nobp1
  4117.  bset.b d3,-40(a0,d2.w)
  4118. .nobp1:
  4119.  btst #1,d0
  4120.  beq.s .nobp2
  4121.  bset.b d3,(a0,d2.w)
  4122. .nobp2:
  4123.  btst #2,d0
  4124.  beq.s .nobp3
  4125.  bset.b d3,40(a0,d2.w)
  4126. .nobp3:
  4127.  btst #3,d0
  4128.  beq.s .nobp4
  4129.  bset.b d3,-40(a1,d2.w)
  4130. .nobp4:
  4131.  btst #4,d0
  4132.  beq.s .nobp5
  4133.  bset.b d3,(a1,d2.w)
  4134. .nobp5:
  4135.  btst #5,d0
  4136.  beq.s .nobp6
  4137.  bset.b d3,40(a1,d2.w)
  4138. .nobp6:
  4139.  btst #6,d0
  4140.  beq.s .nobp7
  4141.  bset.b d3,-40(a2,d2.w)
  4142. .nobp7:
  4143.  
  4144.  addq #1,d1
  4145.  
  4146.  dbra d7,.plotscrnloop
  4147.  
  4148.  rts
  4149.  
  4150. CLEARKEYBOARD:
  4151.  move.l #KeyMap,a5
  4152.  moveq #0,d0
  4153.  move.w #15,d1
  4154. clrloo:
  4155.  move.l d0,(a5)+
  4156.  move.l d0,(a5)+
  4157.  move.l d0,(a5)+
  4158.  move.l d0,(a5)+
  4159.  dbra d1,clrloo
  4160.  rts
  4161.  
  4162. READCONTROLS: dc.w 0
  4163.  
  4164. tstststst: dc.w 0
  4165.  
  4166. BollocksRoom:
  4167.  dc.w -1
  4168.  ds.l 50
  4169.  
  4170. GUNYOFFS:
  4171.  dc.w 20
  4172.  dc.w 20
  4173.  dc.w 0
  4174.  dc.w 20
  4175.  dc.w 20
  4176.  dc.w 0
  4177.  dc.w 0
  4178.  dc.w 20
  4179.  
  4180. PLR1_BOBBLEY: dc.l 0
  4181. PLR2_BOBBLEY: dc.l 0
  4182.  
  4183. USEPLR1:
  4184.  
  4185. ***********************************
  4186.  
  4187.  move.l PLR1_Obj,a0 
  4188.  move.b #4,16(a0)
  4189.  move.l ObjectPoints,a1
  4190.  move.l #ObjRotated,a2
  4191.  move.w (a0),d0
  4192.  move.l PLR1_xoff,(a1,d0.w*8)
  4193.  move.l PLR1_zoff,4(a1,d0.w*8)
  4194.  move.l PLR1_Roompt,a1
  4195.  
  4196.  moveq #0,d2
  4197.  move.b damagetaken(a0),d2
  4198.  beq .notbeenshot
  4199.  
  4200.  moveq #0,d4
  4201.  move.w ImpactX(a0),d3
  4202.  beq.s .notwist
  4203.  move.w d2,d4
  4204. .notwist:
  4205.  add.w d3,PLR1s_xspdval
  4206.  move.w ImpactZ(a0),d3
  4207.  beq.s .notwist2
  4208.  move.w d2,d4
  4209. .notwist2:
  4210.  add.w d3,PLR1s_zspdval
  4211.  move.w ImpactY(a0),d3
  4212.  ext.l d3
  4213.  asl.l #8,d3
  4214.  add.l d3,PLR1s_yvel
  4215.  
  4216.  move.w #0,ImpactX(a0)
  4217.  move.w #0,ImpactY(a0)
  4218.  move.w #0,ImpactZ(a0)
  4219.  
  4220.  jsr GetRand
  4221.  muls d4,d0
  4222.  asr.l #8,d0
  4223.  asr.l #4,d0
  4224.  add.w d0,PLR1s_angspd
  4225.  
  4226.  move.l #7*2116,hitcol
  4227.  sub.w d2,PLAYERONEHEALTH
  4228.  movem.l d0-d7/a0-a6,-(a7)
  4229.  move.b #$fb,IDNUM
  4230.  move.w #19,Samplenum
  4231.  clr.b notifplaying
  4232.  move.w #0,Noisex
  4233.  move.w #0,Noisez
  4234.  move.w #100,Noisevol
  4235.  jsr MakeSomeNoise
  4236.  
  4237.  movem.l (a7)+,d0-d7/a0-a6
  4238.  
  4239. .notbeenshot
  4240.  move.b #0,damagetaken(a0)
  4241.  move.b #10,numlives(a0)
  4242.  
  4243.  move.w p1_angpos,Facing(a0)
  4244.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4245.  
  4246.  move.w (a1),12(a0)
  4247.  move.w (a1),d2
  4248.  move.l #ZoneBrightTable,a1
  4249.  move.l (a1,d2.w*4),d2
  4250.  tst.b PLR1_StoodInTop
  4251.  bne.s .okinbott
  4252.  swap d2
  4253. .okinbott:
  4254.  
  4255.  move.w d2,2(a0)
  4256.  
  4257.  
  4258.  move.l p1_yoff,d0
  4259.  move.l p1_height,d1
  4260.  asr.l #1,d1
  4261.  add.l d1,d0
  4262.  asr.l #7,d0
  4263.  move.w d0,4(a0)
  4264.  
  4265. ***********************************
  4266.  
  4267.  move.l PLR2_Obj,a0 
  4268.  move.b #5,16(a0)
  4269.  
  4270.  move.w p2_angpos,d0
  4271.  and.w #8190,d0
  4272.  move.w d0,Facing(a0)
  4273. ; jsr ViewpointToDraw
  4274. ; asl.w #2,d0
  4275. ; moveq #0,d1
  4276. ; move.b p2_bobble,d1
  4277. ; not.b d1
  4278. ; lsr.b #3,d1
  4279. ; and.b #$3,d1
  4280. ; add.w d1,d0
  4281. ; move.w d0,10(a0)
  4282. ; move.w #10,8(a0)
  4283.  
  4284.  move.l ObjectPoints,a1
  4285.  move.l #ObjRotated,a2
  4286.  move.w (a0),d0
  4287.  move.l PLR2_xoff,(a1,d0.w*8)
  4288.  move.l PLR2_zoff,4(a1,d0.w*8)
  4289.  move.l PLR2_Roompt,a1
  4290.  
  4291.  moveq #0,d2
  4292.  move.b damagetaken(a0),d2
  4293.  beq .notbeenshot2
  4294.  move.w ImpactX(a0),d3
  4295.  add.w d3,PLR2s_xspdval
  4296.  move.w ImpactZ(a0),d3
  4297.  add.w d3,PLR2s_zspdval
  4298.  move.w ImpactY(a0),d3
  4299.  ext.l d3
  4300.  asl.l #8,d3
  4301.  add.l d3,PLR2s_yvel
  4302.  
  4303.  move.w #0,ImpactX(a0)
  4304.  move.w #0,ImpactY(a0)
  4305.  move.w #0,ImpactZ(a0)
  4306.  
  4307.  sub.w d2,PLAYERTWOHEALTH
  4308. .notbeenshot2
  4309.  move.b #0,damagetaken(a0)
  4310.  move.b #10,numlives(a0)
  4311.  
  4312.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4313.  
  4314.  move.w (a1),12(a0)
  4315.  move.w (a1),d2
  4316.  move.l #ZoneBrightTable,a1
  4317.  move.l (a1,d2.w*4),d2
  4318.  tst.b PLR2_StoodInTop
  4319.  bne.s .okinbott2
  4320.  swap d2
  4321. .okinbott2:
  4322.  
  4323.  move.w d2,2(a0)
  4324.  
  4325.  move.l p2_yoff,d0
  4326.  move.l p2_height,d1
  4327.  asr.l #1,d1
  4328.  add.l d1,d0
  4329.  asr.l #7,d0
  4330.  move.w d0,4(a0)
  4331.  
  4332.  jsr ViewpointToDraw
  4333.  add.l d0,d0
  4334.  
  4335.  move.l LINKFILE,a6
  4336.  add.l #PLR2ALIEN,a6
  4337.  move.w (a6),d7
  4338.  move.w d7,d1
  4339.  
  4340.  move.l LINKFILE,a6
  4341.  add.l #AlienStats,a6
  4342.  muls #AlienStatLen,d1
  4343.  add.l d1,a6
  4344.  move.b A_GFXType+1(a6),VECOBJ
  4345.  cmp.w #1,A_GFXType(a6)
  4346.  bne.s .NOSIDES2
  4347.  
  4348.  moveq #0,d0
  4349.  
  4350. .NOSIDES2:
  4351.  
  4352.  move.l LINKFILE,a6
  4353.  
  4354.  add.l #AlienAnimData,a6
  4355.  
  4356.  move.w d7,d1
  4357.  muls #A_AnimLen,d1
  4358.  add.l d1,a6
  4359.  
  4360. ; move.l ANIMPOINTER,a6
  4361.  
  4362.  muls #A_OptLen,d0
  4363.  add.w d0,a6
  4364.  
  4365.  move.w SecTimer(a0),d1
  4366.  move.w d1,d2
  4367.  muls #A_FrameLen,d1
  4368.  
  4369.  addq #1,d2
  4370.  
  4371.  move.w d2,d3
  4372.  muls #A_FrameLen,d3
  4373.  tst.b (a6,d3.w)
  4374.  bge.s .noendanim
  4375.  move.w #0,d2
  4376. .noendanim
  4377.  move.w d2,SecTimer(a0)
  4378.  
  4379.  move.w d2,d1
  4380.  
  4381.  muls #A_FrameLen,d1
  4382.  
  4383.  move.l #0,8(a0)
  4384.  move.b (a6,d1.w),9(a0)
  4385.  move.b 1(a6,d1.w),d0
  4386.  ext.w d0
  4387.  bgt.s .noflip
  4388.  move.b #128,10(a0)
  4389.  neg.w d0
  4390. .noflip:
  4391.  sub.w #1,d0
  4392.  move.b d0,11(a0)
  4393.  
  4394.  move.w #-1,6(a0)
  4395.  cmp.b #1,VECOBJ
  4396.  beq.s .nosize
  4397.  bgt.s .setlight
  4398.  move.w 2(a6,d1.w),6(a0)
  4399.  bra.s .ddone
  4400.  
  4401. .nosize
  4402.  
  4403. ; move.l #$00090001,8(a0)
  4404.  
  4405.  bra.s .ddone
  4406.  
  4407. .setlight:
  4408.  move.w 2(a6,d1.w),6(a0)
  4409.  
  4410.  move.b VECOBJ,d1
  4411.  or.b d1,10(a0)
  4412.  
  4413. .ddone:
  4414.  
  4415.  
  4416. **********************************
  4417.  
  4418.  move.l PLR1_Obj,a0
  4419.  
  4420.  ifeq CHEESEY
  4421.  
  4422.  tst.w PLAYERONEHEALTH
  4423.  bgt.s .notdead
  4424.  
  4425.  move.w #-1,12+128(a0)
  4426.  rts
  4427.  
  4428. .notdead: 
  4429.  
  4430.  move.l PLR1_Roompt,a1
  4431.  
  4432.  move.w Facing(a0),d0
  4433.  add.w #4096,d0
  4434.  and.w #8190,d0
  4435.  move.w d0,Facing+128(a0)
  4436.  
  4437.  move.w (a1),12+128(a0)
  4438.  move.w (a1),GraphicRoom+128(a0)
  4439.  
  4440.  moveq #0,d0
  4441.  move.b p1_gunselected,d0
  4442.  
  4443.  move.l LINKFILE,a1
  4444.  add.l #GunObjects,a1
  4445.  move.w (a1,d0.w*2),d0
  4446.  
  4447.  move.b d0,TypeOfThing+128(a0)
  4448.  move.b #1,128+16(a0)
  4449.  
  4450.  move.w (a0),d0
  4451.  move.w 128(a0),d1
  4452.  move.l ObjectPoints,a1
  4453.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4454.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4455.  
  4456.  st WhichAnim+128(a0)
  4457.  
  4458.  move.l p1_yoff,d0
  4459.  move.l p1_height,d1
  4460.  asr.l #2,d1
  4461.  add.l #10*128,d1
  4462.  add.l d1,d0
  4463.  asr.l #7,d0
  4464.  move.w d0,4+128(a0)
  4465.  move.l PLR1_BOBBLEY,d1
  4466.  asr.l #8,d1
  4467.  move.l d1,d0
  4468.  asr.l #1,d0
  4469.  add.l d0,d1
  4470.  add.w d1,4+128(a0)
  4471.  
  4472.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4473.  
  4474.  endc
  4475.  
  4476.  ifne CHEESEY
  4477.  move.w #-1,12+128(a0)
  4478.  endc
  4479.  
  4480.  rts
  4481.  
  4482. ***************************************************
  4483. **************************************************
  4484.  
  4485. USEPLR2:
  4486.  
  4487. ***********************************
  4488.  
  4489.  move.l PLR2_Obj,a0 
  4490.  move.b #5,16(a0)
  4491.  move.l ObjectPoints,a1
  4492.  move.l #ObjRotated,a2
  4493.  move.w (a0),d0
  4494.  move.l PLR2_xoff,(a1,d0.w*8)
  4495.  move.l PLR2_zoff,4(a1,d0.w*8)
  4496.  move.l PLR2_Roompt,a1
  4497.  
  4498.  moveq #0,d2
  4499.  move.b damagetaken(a0),d2
  4500.  beq .notbeenshot
  4501.  
  4502.  moveq #0,d4
  4503.  move.w ImpactX(a0),d3
  4504.  beq.s .notwist
  4505.  move.w d2,d4
  4506. .notwist:
  4507.  add.w d3,PLR2s_xspdval
  4508.  move.w ImpactZ(a0),d3
  4509.  beq.s .notwist2
  4510.  move.w d2,d4
  4511. .notwist2:
  4512.  add.w d3,PLR2s_zspdval
  4513.  
  4514.  jsr GetRand
  4515.  muls d4,d0
  4516.  asr.l #8,d0
  4517.  asr.l #4,d0
  4518.  add.w d0,PLR2s_angspd
  4519.  
  4520.  move.l #7*2116,hitcol
  4521.  sub.w d2,PLAYERTWOHEALTH
  4522.  movem.l d0-d7/a0-a6,-(a7)
  4523.  move.w #19,Samplenum
  4524.  clr.b notifplaying
  4525.  move.b #$fb,IDNUM
  4526.  move.w #0,Noisex
  4527.  move.w #0,Noisez
  4528.  move.w #100,Noisevol
  4529.  jsr MakeSomeNoise
  4530.  
  4531.  movem.l (a7)+,d0-d7/a0-a6
  4532.  
  4533. .notbeenshot
  4534.  move.b #0,damagetaken(a0)
  4535.  move.b #10,numlives(a0)
  4536.  
  4537.  move.w p2_angpos,Facing(a0)
  4538.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4539.  
  4540.  move.w (a1),12(a0)
  4541.  move.w (a1),d2
  4542.  move.l #ZoneBrightTable,a1
  4543.  move.l (a1,d2.w*4),d2
  4544.  tst.b PLR2_StoodInTop
  4545.  bne.s .okinbott
  4546.  swap d2
  4547. .okinbott:
  4548.  
  4549.  move.w d2,2(a0)
  4550.  
  4551.  move.l PLR2_yoff,d0
  4552.  move.l p2_height,d1
  4553.  asr.l #1,d1
  4554.  add.l d1,d0
  4555.  asr.l #7,d0
  4556.  move.w d0,4(a0)
  4557.  
  4558. ***********************************
  4559.  
  4560.  move.l PLR1_Obj,a0 
  4561.  move.b #4,16(a0)
  4562.  
  4563.  move.w PLR1_angpos,d0
  4564.  and.w #8190,d0
  4565.  move.w d0,Facing(a0)
  4566. ; jsr ViewpointToDraw
  4567. ; asl.w #2,d0
  4568. ; moveq #0,d1
  4569. ; move.b p2_bobble,d1
  4570. ; not.b d1
  4571. ; lsr.b #3,d1
  4572. ; and.b #$3,d1
  4573. ; add.w d1,d0
  4574. ; move.w d0,10(a0)
  4575. ; move.w #10,8(a0)
  4576.  
  4577.  move.l ObjectPoints,a1
  4578.  move.l #ObjRotated,a2
  4579.  move.w (a0),d0
  4580.  move.l PLR1_xoff,(a1,d0.w*8)
  4581.  move.l PLR1_zoff,4(a1,d0.w*8)
  4582.  move.l PLR1_Roompt,a1
  4583.  
  4584.  moveq #0,d2
  4585.  move.b damagetaken(a0),d2
  4586.  beq .notbeenshot2
  4587.  
  4588.  move.w ImpactX(a0),d3
  4589.  add.w d3,PLR1s_xspdval
  4590.  move.w ImpactZ(a0),d3
  4591.  add.w d3,PLR1s_zspdval
  4592.  
  4593.  sub.w d2,PLAYERONEHEALTH
  4594. .notbeenshot2
  4595.  move.b #0,damagetaken(a0)
  4596.  move.b #10,numlives(a0)
  4597.  
  4598.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4599.  
  4600.  move.w (a1),12(a0)
  4601.  move.w (a1),d2
  4602.  move.l #ZoneBrightTable,a1
  4603.  move.l (a1,d2.w*4),d2
  4604.  tst.b PLR1_StoodInTop
  4605.  bne.s .okinbott2
  4606.  swap d2
  4607. .okinbott2:
  4608.  
  4609.  move.w d2,2(a0)
  4610.  
  4611.  move.l p1_yoff,d0
  4612.  move.l p1_height,d1
  4613.  asr.l #1,d1
  4614.  add.l d1,d0
  4615.  asr.l #7,d0
  4616.  move.w d0,4(a0)
  4617.  
  4618.  jsr ViewpointToDraw
  4619.  add.l d0,d0
  4620.  
  4621.  move.l LINKFILE,a6
  4622.  add.l #PLR1ALIEN,a6
  4623.  move.w (a6),d7
  4624.  move.w d7,d1
  4625.  
  4626.  move.l LINKFILE,a6
  4627.  add.l #AlienStats,a6
  4628.  muls #AlienStatLen,d1
  4629.  add.l d1,a6
  4630.  move.b A_GFXType+1(a6),VECOBJ
  4631.  cmp.w #1,A_GFXType(a6)
  4632.  bne.s .NOSIDES2
  4633.  
  4634.  moveq #0,d0
  4635.  
  4636. .NOSIDES2:
  4637.  
  4638.  move.l LINKFILE,a6
  4639.  
  4640.  add.l #AlienAnimData,a6
  4641.  
  4642.  move.w d7,d1
  4643.  muls #A_AnimLen,d1
  4644.  add.l d1,a6
  4645.  
  4646. ; move.l ANIMPOINTER,a6
  4647.  
  4648.  muls #A_OptLen,d0
  4649.  add.w d0,a6
  4650.  
  4651.  move.w SecTimer(a0),d1
  4652.  move.w d1,d2
  4653.  muls #A_FrameLen,d1
  4654.  
  4655.  addq #1,d2
  4656.  
  4657.  move.w d2,d3
  4658.  muls #A_FrameLen,d3
  4659.  tst.b (a6,d3.w)
  4660.  bge.s .noendanim
  4661.  move.w #0,d2
  4662. .noendanim
  4663.  move.w d2,SecTimer(a0)
  4664.  
  4665.  move.w d2,d1
  4666.  
  4667.  muls #A_FrameLen,d1
  4668.  
  4669.  move.l #0,8(a0)
  4670.  move.b (a6,d1.w),9(a0)
  4671.  move.b 1(a6,d1.w),d0
  4672.  ext.w d0
  4673.  bgt.s .noflip
  4674.  move.b #128,10(a0)
  4675.  neg.w d0
  4676. .noflip:
  4677.  sub.w #1,d0
  4678.  move.b d0,11(a0)
  4679.  
  4680.  move.w #-1,6(a0)
  4681.  cmp.b #1,VECOBJ
  4682.  beq.s .nosize
  4683.  bgt.s .setlight
  4684.  move.w 2(a6,d1.w),6(a0)
  4685.  bra.s .ddone
  4686.  
  4687. .nosize
  4688.  
  4689. ; move.l #$00090001,8(a0)
  4690.  
  4691.  bra.s .ddone
  4692.  
  4693. .setlight:
  4694.  move.w 2(a6,d1.w),6(a0)
  4695.  
  4696.  move.b VECOBJ,d1
  4697.  or.b d1,10(a0)
  4698.  
  4699. .ddone:
  4700.  
  4701. **********************************
  4702.  
  4703.  move.l PLR2_Obj,a0
  4704.  
  4705.  ifeq CHEESEY
  4706.  
  4707.  tst.w PLAYERTWOHEALTH
  4708.  bgt.s .notdead
  4709.  
  4710.  move.w #-1,12+64(a0)
  4711.  rts
  4712.  
  4713. .notdead: 
  4714.  move.l PLR2_Roompt,a1
  4715.  
  4716.  move.w Facing(a0),d0
  4717.  add.w #4096,d0
  4718.  and.w #8190,d0
  4719.  move.w d0,Facing+64(a0)
  4720.  
  4721.  move.w (a1),12+64(a0)
  4722.  move.w (a1),GraphicRoom+64(a0)
  4723.  
  4724.  moveq #0,d0
  4725.  move.b p2_gunselected,d0
  4726.  
  4727.  move.l LINKFILE,a1
  4728.  add.l #GunObjects,a1
  4729.  move.w (a1,d0.w*2),d0
  4730.  
  4731.  move.b d0,TypeOfThing+64(a0)
  4732.  move.b #1,64+16(a0)
  4733.  
  4734.  move.w (a0),d0
  4735.  move.w 64(a0),d1
  4736.  move.l ObjectPoints,a1
  4737.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4738.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4739.  
  4740.  st WhichAnim+64(a0)
  4741.  
  4742.  move.l p2_yoff,d0
  4743.  move.l p2_height,d1
  4744.  asr.l #2,d1
  4745.  add.l #10*128,d1
  4746.  add.l d1,d0
  4747.  asr.l #7,d0
  4748.  move.w d0,4+64(a0)
  4749.  move.l PLR2_BOBBLEY,d1
  4750.  asr.l #8,d1
  4751.  move.l d1,d0
  4752.  asr.l #1,d0
  4753.  add.l d0,d1
  4754.  add.w d1,4+64(a0)
  4755.  
  4756.  move.b ObjInTop(a0),ObjInTop+64(a0)
  4757.  
  4758.  endc
  4759.  
  4760.  ifne CHEESEY
  4761.  
  4762.  move.w #-1,12+64(a0)
  4763.  endc
  4764.  
  4765.  rts
  4766.  
  4767.  
  4768.  
  4769. GunSelected: dc.b 0
  4770.  even
  4771.  
  4772.  
  4773. GunData: dc.l 0
  4774.  
  4775.  
  4776. protA: dc.w 0
  4777.  
  4778. Path:
  4779. ; incbin "testpath"
  4780. endpath:
  4781. pathpt: dc.l Path
  4782.  
  4783.  
  4784. PLR1KEYS: dc.b 0
  4785. PLR1PATH: dc.b 0
  4786. PLR1MOUSE: dc.b -1
  4787. PLR1JOY: dc.b 0
  4788. PLR2KEYS: dc.b 0
  4789. PLR2PATH: dc.b 0
  4790. PLR2MOUSE: dc.b -1
  4791. PLR2JOY: dc.b 0
  4792.  
  4793.  even
  4794.  
  4795. PLR1_bobble: dc.w 0
  4796. PLR2_bobble: dc.w 0
  4797. xwobble: dc.l 0
  4798. xwobxoff: dc.w 0
  4799.  
  4800. xwobzoff: dc.w 0
  4801.  
  4802. PLR1_Control:
  4803.  
  4804. ; Take a snapshot of everything.
  4805.  
  4806.  move.l PLR1_xoff,d2
  4807.  move.l d2,PLR1_oldxoff
  4808.  move.l d2,oldx
  4809.  move.l PLR1_zoff,d3
  4810.  move.l d3,PLR1_oldzoff
  4811.  move.l d3,oldz
  4812.  move.l p1_xoff,d0
  4813.  move.l d0,PLR1_xoff
  4814.  move.l d0,newx
  4815.  move.l p1_zoff,d1
  4816.  move.l d1,newz
  4817.  move.l d1,PLR1_zoff
  4818.  
  4819.  move.l p1_height,PLR1_height
  4820.  
  4821.  sub.l d2,d0
  4822.  sub.l d3,d1
  4823.  move.l d0,xdiff
  4824.  move.l d1,zdiff
  4825.  move.w p1_angpos,d0
  4826.  move.w d0,PLR1_angpos
  4827.  
  4828.  move.l #SineTable,a1
  4829.  move.w (a1,d0.w),PLR1_sinval
  4830.  add.w #2048,d0
  4831.  and.w #8190,d0
  4832.  move.w (a1,d0.w),PLR1_cosval
  4833.  
  4834.  move.l p1_yoff,d0
  4835.  move.w p1_bobble,d1
  4836.  move.w (a1,d1.w),d1
  4837.  move.w d1,d3
  4838.  ble.s .notnegative
  4839.  neg.w d1
  4840. .notnegative:
  4841.  add.w #16384,d1
  4842.  asr.w #4,d1
  4843.  
  4844.  tst.b PLR1_Ducked
  4845.  bne.s .notdouble
  4846.  add.w d1,d1
  4847. .notdouble
  4848.  ext.l d1
  4849.  
  4850.  move.l d1,PLR1_BOBBLEY
  4851.  
  4852.  move.l PLR1_height,d4
  4853.  sub.l d1,d4
  4854.  add.l d1,d0
  4855.  
  4856.  cmp.b #'s',mors
  4857.  beq.s .otherwob
  4858.  asr.w #6,d3
  4859.  ext.l d3
  4860.  move.l d3,xwobble
  4861.  move.w PLR1_sinval,d1
  4862.  muls d3,d1
  4863.  move.w PLR1_cosval,d2
  4864.  muls d3,d2
  4865.  swap d1
  4866.  swap d2
  4867.  asr.w #7,d1
  4868.  move.w d1,xwobxoff
  4869.  asr.w #7,d2
  4870.  neg.w d2
  4871.  move.w d2,xwobzoff
  4872. .otherwob
  4873.  
  4874.  move.l d0,PLR1_yoff
  4875.  move.l d0,newy
  4876.  move.l d0,oldy
  4877.  
  4878.  move.l d4,thingheight
  4879.  move.l #40*256,StepUpVal
  4880.  tst.b PLR1_Ducked
  4881.  beq.s .okbigstep
  4882.  move.l #10*256,StepUpVal
  4883. .okbigstep:
  4884.  
  4885.  move.l #$1000000,StepDownVal
  4886.  
  4887.  move.l PLR1_Roompt,a0
  4888.  move.w ToTelZone(a0),d0
  4889.  blt .noteleport
  4890.  
  4891.  move.w ToTelX(a0),newx
  4892.  move.w ToTelZ(a0),newz
  4893.  move.w #-1,CollId
  4894.  move.l #%111111111111111111,CollideFlags
  4895.  jsr Collision
  4896.  tst.b hitwall
  4897.  beq.s .teleport
  4898.  
  4899.  move.w PLR1_xoff,newx
  4900.  move.w PLR1_zoff,newz
  4901.  bra .noteleport
  4902.  
  4903. .teleport:
  4904.  
  4905.  st PLR1_TELEPORTED
  4906.  
  4907.  move.l PLR1_Roompt,a0
  4908.  move.w ToTelZone(a0),d0
  4909.  move.w ToTelX(a0),PLR1_xoff
  4910.  move.w ToTelZ(a0),PLR1_zoff
  4911.  move.l PLR1_yoff,d1
  4912.  sub.l ToZoneFloor(a0),d1
  4913.  move.l ZoneAdds,a0
  4914.  move.l (a0,d0.w*4),a0
  4915.  add.l LEVELDATA,a0
  4916.  move.l a0,PLR1_Roompt
  4917.  add.l ToZoneFloor(a0),d1
  4918.  move.l d1,PLR1s_yoff
  4919.  move.l d1,PLR1_yoff
  4920.  move.l d1,PLR1s_tyoff
  4921.  move.l PLR1_xoff,PLR1s_xoff
  4922.  move.l PLR1_zoff,PLR1s_zoff
  4923.  
  4924.  SAVEREGS
  4925.  move.w #0,Noisex
  4926.  move.w #0,Noisez
  4927.  move.w #26,Samplenum
  4928.  move.w #100,Noisevol
  4929.  move.b #$fa,IDNUM
  4930.  jsr MakeSomeNoise
  4931.  GETREGS
  4932.  
  4933.  bra .cantmove
  4934.  
  4935. .noteleport:
  4936.  
  4937.  move.l PLR1_Roompt,objroom
  4938.  move.w #%100000000,wallflags
  4939.  move.b PLR1_StoodInTop,StoodInTop
  4940.  
  4941.  move.l #%1011111110111000011,CollideFlags
  4942.  move.w #-1,CollId
  4943.  
  4944.  jsr Collision
  4945.  tst.b hitwall
  4946.  beq.s .nothitanything
  4947.  move.w oldx,PLR1_xoff
  4948.  move.w oldz,PLR1_zoff
  4949.  move.l PLR1_xoff,PLR1s_xoff
  4950.  move.l PLR1_zoff,PLR1s_zoff
  4951.  bra .cantmove
  4952. .nothitanything:
  4953.  
  4954.  move.w #40,extlen
  4955.  move.b #0,awayfromwall
  4956.  
  4957.  clr.b exitfirst
  4958.  clr.b wallbounce
  4959.  bsr MoveObject
  4960.  move.b StoodInTop,PLR1_StoodInTop
  4961.  move.l objroom,PLR1_Roompt
  4962.  move.w newx,PLR1_xoff
  4963.  move.w newz,PLR1_zoff
  4964.  move.l PLR1_xoff,PLR1s_xoff
  4965.  move.l PLR1_zoff,PLR1s_zoff
  4966.  
  4967. .cantmove:
  4968.  
  4969.  move.l PLR1_Roompt,a0
  4970.  
  4971.  move.l ToZoneFloor(a0),d0
  4972.  tst.b PLR1_StoodInTop
  4973.  beq.s notintop
  4974.  move.l ToUpperFloor(a0),d0
  4975. notintop:
  4976.  
  4977.  adda.w #ToZonePts,a0
  4978.  sub.l PLR1_height,d0
  4979.  move.l d0,PLR1s_tyoff
  4980.  move.w p1_angpos,tmpangpos
  4981.  
  4982. ; move.l (a0),a0        ; jump to viewpoint list
  4983.  * A0 is pointing at a pointer to list of points to rotate
  4984.  move.w (a0)+,d1
  4985.  ext.l d1
  4986.  add.l PLR1_Roompt,d1
  4987.  move.l d1,PLR1_PointsToRotatePtr
  4988.  tst.w (a0)+
  4989.  sne.s DRAWNGRAPHTOP
  4990.  beq.s nobackgraphics
  4991.  cmp.b #'s',mors
  4992.  beq.s nobackgraphics
  4993.  move.l a0,-(a7)
  4994.  jsr putinbackdrop 
  4995.  move.l (a7)+,a0
  4996. nobackgraphics:
  4997.  adda.w #10,a0
  4998.  move.l a0,PLR1_ListOfGraphRooms
  4999.  
  5000. *************************************************
  5001.  rts
  5002.  
  5003. DRAWNGRAPHTOP
  5004.  dc.w 0 
  5005. tstzone: dc.l 0
  5006. CollId: dc.w 0
  5007.  
  5008. PLR2_Control:
  5009.  
  5010. ; Take a snapshot of everything.
  5011.  
  5012.  move.l PLR2_xoff,d2
  5013.  move.l d2,PLR2_oldxoff
  5014.  move.l d2,oldx
  5015.  move.l PLR2_zoff,d3
  5016.  move.l d3,PLR2_oldzoff
  5017.  move.l d3,oldz
  5018.  move.l p2_xoff,d0
  5019.  move.l d0,PLR2_xoff
  5020.  move.l d0,newx
  5021.  move.l p2_zoff,d1
  5022.  move.l d1,newz
  5023.  move.l d1,PLR2_zoff
  5024.  
  5025.  move.l p2_height,PLR2_height
  5026.  
  5027.  sub.l d2,d0
  5028.  sub.l d3,d1
  5029.  move.l d0,xdiff
  5030.  move.l d1,zdiff
  5031.  move.w p2_angpos,d0
  5032.  move.w d0,PLR2_angpos
  5033.  
  5034.  move.l #SineTable,a1
  5035.  move.w (a1,d0.w),PLR2_sinval
  5036.  add.w #2048,d0
  5037.  and.w #8190,d0
  5038.  move.w (a1,d0.w),PLR2_cosval
  5039.  
  5040.  move.l p2_yoff,d0
  5041.  move.w p2_bobble,d1
  5042.  move.w (a1,d1.w),d1
  5043.  move.w d1,d3
  5044.  ble.s .notnegative
  5045.  neg.w d1
  5046. .notnegative:
  5047.  add.w #16384,d1
  5048.  asr.w #4,d1
  5049.  
  5050.  tst.b PLR2_Ducked
  5051.  bne.s .notdouble
  5052.  add.w d1,d1
  5053. .notdouble
  5054.  ext.l d1
  5055.  
  5056.  move.l d1,PLR2_BOBBLEY
  5057.  
  5058.  move.l PLR2_height,d4
  5059.  sub.l d1,d4
  5060.  add.l d1,d0
  5061.  
  5062.  cmp.b #'s',mors
  5063.  bne.s .otherwob
  5064.  asr.w #6,d3
  5065.  ext.l d3
  5066.  move.l d3,xwobble
  5067.  move.w PLR2_sinval,d1
  5068.  muls d3,d1
  5069.  move.w PLR2_cosval,d2
  5070.  muls d3,d2
  5071.  swap d1
  5072.  swap d2
  5073.  asr.w #7,d1
  5074.  move.w d1,xwobxoff
  5075.  asr.w #7,d2
  5076.  neg.w d2
  5077.  move.w d2,xwobzoff
  5078. .otherwob
  5079.  
  5080.  move.l d0,PLR2_yoff
  5081.  move.l d0,newy
  5082.  move.l d0,oldy
  5083.  
  5084.  move.l d4,thingheight
  5085.  move.l #40*256,StepUpVal
  5086.  tst.b PLR2_Ducked
  5087.  beq.s .okbigstep
  5088.  move.l #10*256,StepUpVal
  5089. .okbigstep:
  5090.  
  5091.  move.l #$1000000,StepDownVal
  5092.  
  5093.  move.l PLR2_Roompt,a0
  5094.  move.w ToTelZone(a0),d0
  5095.  blt .noteleport
  5096.  
  5097.  move.w ToTelX(a0),newx
  5098.  move.w ToTelZ(a0),newz
  5099.  move.w #-1,CollId
  5100.  move.l #%111111111111111111,CollideFlags
  5101.  jsr Collision
  5102.  tst.b hitwall
  5103.  beq.s .teleport
  5104.  
  5105.  move.w PLR2_xoff,newx
  5106.  move.w PLR2_zoff,newz
  5107.  bra .noteleport
  5108.  
  5109. .teleport:
  5110.  
  5111.  st PLR2_TELEPORTED
  5112.  
  5113.  move.l PLR2_Roompt,a0
  5114.  move.w ToTelZone(a0),d0
  5115.  move.w ToTelX(a0),PLR2_xoff
  5116.  move.w ToTelZ(a0),PLR2_zoff
  5117.  move.l PLR2_yoff,d1
  5118.  sub.l ToZoneFloor(a0),d1
  5119.  move.l ZoneAdds,a0
  5120.  move.l (a0,d0.w*4),a0
  5121.  add.l LEVELDATA,a0
  5122.  move.l a0,PLR2_Roompt
  5123.  add.l ToZoneFloor(a0),d1
  5124.  move.l d1,PLR2s_yoff
  5125.  move.l d1,PLR2_yoff
  5126.  move.l d1,PLR2s_tyoff
  5127.  move.l PLR2_xoff,PLR2s_xoff
  5128.  move.l PLR2_zoff,PLR2s_zoff
  5129.  
  5130.  SAVEREGS
  5131.  move.w #0,Noisex
  5132.  move.w #0,Noisez
  5133.  move.w #26,Samplenum
  5134.  move.w #100,Noisevol
  5135.  move.b #$fa,IDNUM
  5136.  jsr MakeSomeNoise
  5137.  GETREGS
  5138.  
  5139.  bra .cantmove
  5140.  
  5141. .noteleport:
  5142.  
  5143.  move.l PLR2_Roompt,objroom
  5144.  move.w #%100000000000,wallflags
  5145.  move.b PLR2_StoodInTop,StoodInTop
  5146.  
  5147.  move.l #%1011111010111100011,CollideFlags
  5148.  move.w #-1,CollId
  5149.  
  5150.  jsr Collision
  5151.  tst.b hitwall
  5152.  beq.s .nothitanything
  5153.  move.w oldx,PLR2_xoff
  5154.  move.w oldz,PLR2_zoff
  5155.  move.l PLR2_xoff,PLR2s_xoff
  5156.  move.l PLR2_zoff,PLR2s_zoff
  5157.  bra .cantmove
  5158. .nothitanything:
  5159.  
  5160.  move.w #40,extlen
  5161.  move.b #0,awayfromwall
  5162.  
  5163.  clr.b exitfirst
  5164.  clr.b wallbounce
  5165.  bsr MoveObject
  5166.  move.b StoodInTop,PLR2_StoodInTop
  5167.  move.l objroom,PLR2_Roompt
  5168.  move.w newx,PLR2_xoff
  5169.  move.w newz,PLR2_zoff
  5170.  move.l PLR2_xoff,PLR2s_xoff
  5171.  move.l PLR2_zoff,PLR2s_zoff
  5172.  
  5173. .cantmove
  5174.  
  5175.  move.l PLR2_Roompt,a0
  5176.  
  5177.  move.l ToZoneFloor(a0),d0
  5178.  tst.b PLR2_StoodInTop
  5179.  beq.s .notintop
  5180.  move.l ToUpperFloor(a0),d0
  5181. .notintop:
  5182.  
  5183.  adda.w #ToZonePts,a0
  5184.  sub.l PLR2_height,d0
  5185.  move.l d0,PLR2s_tyoff
  5186.  move.w p2_angpos,tmpangpos
  5187.  
  5188. ; move.l (a0),a0        ; jump to viewpoint list
  5189.  * A0 is pointing at a pointer to list of points to rotate
  5190.  move.w (a0)+,d1
  5191.  ext.l d1
  5192.  add.l PLR2_Roompt,d1
  5193.  move.l d1,PLR2_PointsToRotatePtr
  5194.  tst.w (a0)+
  5195.  sne.s DRAWNGRAPHTOP
  5196.  beq.s .nobackgraphics
  5197.  cmp.b #'s',mors
  5198.  bne.s .nobackgraphics
  5199.  move.l a0,-(a7)
  5200.  jsr putinbackdrop 
  5201.  move.l (a7)+,a0
  5202. .nobackgraphics:
  5203.  adda.w #10,a0
  5204.  move.l a0,PLR2_ListOfGraphRooms
  5205.  
  5206. *****************************************************
  5207.  rts
  5208.  
  5209.  
  5210. KeyMap: ds.b 256
  5211.  
  5212. fillscrnwater:
  5213.  dc.w 0
  5214. DONTDOGUN:
  5215.  dc.w 0
  5216.  
  5217. ;temptemp: ds.l 200
  5218. ;temptempptr: dc.l 0
  5219.  
  5220. DrawDisplay:
  5221.  
  5222. ; move.l #temptemp,temptempptr
  5223.  
  5224.  clr.b fillscrnwater
  5225.  
  5226.  move.l #SineTable,a0
  5227.  move.w angpos,d0
  5228.  move.w (a0,d0.w),d6
  5229.  adda.w #2048,a0
  5230.  move.w (a0,d0.w),d7
  5231.  move.w d6,sinval
  5232.  move.w d7,cosval
  5233.  
  5234.  move.l yoff,d0
  5235.  asr.l #8,d0
  5236.  move.w d0,d1
  5237.  add.w #256-32,d1
  5238.  and.w #255,d1
  5239.  move.w d1,wallyoff
  5240.  move.l yoff,d0
  5241.  asr.l #6,d0
  5242.  move.w d0,flooryoff
  5243.  
  5244.  move.w xoff,d6
  5245.  move.w d6,d3
  5246.  asr.w #1,d3
  5247.  add.w d3,d6
  5248.  asr.w #1,d6
  5249.  move.w d6,xoff34
  5250.  
  5251.  move.w zoff,d6
  5252.  move.w d6,d3
  5253.  asr.w #1,d3
  5254.  add.w d3,d6
  5255.  asr.w #1,d6
  5256.  move.w d6,zoff34
  5257.  
  5258.  bsr RotateLevelPts
  5259.  bsr RotateObjectPts
  5260.  bsr CalcPLR1InLine
  5261.  
  5262.  cmp.b #'n',mors
  5263.  bne.s doplr2too
  5264.  move.l PLR2_Obj,a0
  5265.  move.w #-1,12(a0)
  5266.  move.w #-1,GraphicRoom(a0)
  5267.  bra noplr2either
  5268.  
  5269. doplr2too:
  5270.  bsr CalcPLR2InLine
  5271. noplr2either:
  5272.  
  5273.  move.l endoflist,a0
  5274. ; move.w #-1,(a0)
  5275.  
  5276. ; move.l #FinalOrder,a0
  5277.  
  5278.  
  5279. subroomloop:
  5280. ; move.w (a0)+,d7
  5281.  move.w -(a0),d7
  5282.  blt jumpoutofrooms
  5283.  
  5284. ; bsr setlrclip
  5285. ; move.w leftclip,d0
  5286. ; cmp.w rightclip,d0
  5287. ; bge subroomloop
  5288.  move.l a0,-(a7)
  5289.  
  5290.  move.l ZoneAdds,a0
  5291.  move.l (a0,d7.w*4),a0
  5292.  add.l LEVELDATA,a0
  5293.  move.l ToZoneRoof(a0),SplitHeight
  5294.  move.l a0,ROOMBACK
  5295.  
  5296.  move.l ZoneGraphAdds,a0
  5297.  move.l 4(a0,d7.w*8),a2
  5298.  move.l (a0,d7.w*8),a0
  5299.  
  5300.  add.l LEVELGRAPHICS,a0
  5301.  add.l LEVELGRAPHICS,a2
  5302.  move.l a2,ThisRoomToDraw+4
  5303.  move.l a0,ThisRoomToDraw
  5304.  
  5305.  move.l ListOfGraphRooms,a1
  5306.  
  5307.  
  5308.  
  5309. finditit:
  5310.  tst.w (a1)
  5311.  blt nomoretodoatall
  5312.  cmp.w (a1),d7
  5313.  beq outoffind
  5314.  adda.w #8,a1
  5315.  bra finditit
  5316.  
  5317. outoffind:
  5318.  
  5319.  move.l a1,-(a7)
  5320.  
  5321.  
  5322.  move.w #0,leftclip
  5323.  move.w RIGHTX,rightclip
  5324.  moveq #0,d7
  5325.  move.w 2(a1),d7
  5326.  blt.s outofrcliplop
  5327.  move.l LEVELCLIPS,a0
  5328.  lea (a0,d7.l*2),a0
  5329.  
  5330.  tst.w (a0)
  5331.  blt outoflcliplop
  5332.  
  5333.  bsr NEWsetlclip
  5334.  
  5335. intolcliplop:        ; clips
  5336.  tst.w (a0)
  5337.  blt outoflcliplop
  5338.  
  5339.  bsr NEWsetlclip 
  5340.  bra intolcliplop
  5341.  
  5342. outoflcliplop:
  5343.  
  5344.  addq #2,a0
  5345.  
  5346.  tst.w (a0)
  5347.  blt outofrcliplop
  5348.  
  5349.  bsr NEWsetrclip
  5350.  
  5351. intorcliplop:        ; clips
  5352.  tst.w (a0)
  5353.  blt outofrcliplop
  5354.  
  5355.  bsr NEWsetrclip 
  5356.  bra intorcliplop
  5357.  
  5358. outofrcliplop:
  5359.  
  5360.  
  5361.  move.w leftclip,d0
  5362.  cmp.w RIGHTX,d0
  5363.  bge dontbothercantseeit
  5364.  move.w rightclip,d1
  5365.  blt dontbothercantseeit
  5366.  cmp.w d1,d0
  5367.  bge dontbothercantseeit
  5368.  
  5369.  move.l yoff,d0
  5370.  cmp.l SplitHeight,d0
  5371.  blt botfirst
  5372.  
  5373.  move.l ThisRoomToDraw+4,a0
  5374.  cmp.l LEVELGRAPHICS,a0
  5375.  beq.s noupperroom
  5376.  st DOUPPER
  5377.  
  5378.  move.l ROOMBACK,a1
  5379.  move.l ToUpperRoof(a1),TOPOFROOM
  5380.  move.l ToUpperFloor(a1),BOTOFROOM
  5381.  
  5382.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5383.  bsr dothisroom
  5384. noupperroom:
  5385.  move.l ThisRoomToDraw,a0
  5386.  clr.b DOUPPER
  5387.  move.l #CurrentPointBrights,PointBrightsPtr
  5388.  
  5389.  move.l ROOMBACK,a1
  5390.  move.l ToZoneRoof(a1),d0
  5391.  move.l d0,TOPOFROOM
  5392.  move.l ToZoneFloor(a1),d1
  5393.  move.l d1,BOTOFROOM
  5394.  
  5395.  move.l ToZoneWater(a1),d2
  5396.  cmp.l yoff,d2
  5397.  blt.s .abovefirst
  5398.  move.l d2,BEFOREWATTOP
  5399.  move.l d1,BEFOREWATBOT
  5400.  move.l d2,AFTERWATBOT
  5401.  move.l d0,AFTERWATTOP
  5402.  bra.s .belowfirst
  5403. .abovefirst:
  5404.  move.l d0,BEFOREWATTOP
  5405.  move.l d2,BEFOREWATBOT
  5406.  move.l d1,AFTERWATBOT
  5407.  move.l d2,AFTERWATTOP
  5408. .belowfirst:
  5409.  
  5410.  bsr dothisroom
  5411.  
  5412.  bra dontbothercantseeit
  5413. botfirst:
  5414.  
  5415.  move.l ThisRoomToDraw,a0
  5416.  clr.b DOUPPER
  5417.  move.l #CurrentPointBrights,PointBrightsPtr
  5418.  
  5419.  move.l ROOMBACK,a1
  5420.  move.l ToZoneRoof(a1),d0
  5421.  move.l d0,TOPOFROOM
  5422.  move.l ToZoneFloor(a1),d1
  5423.  move.l d1,BOTOFROOM
  5424.  
  5425.  move.l ToZoneWater(a1),d2
  5426.  cmp.l yoff,d2
  5427.  blt.s .abovefirst
  5428.  move.l d2,BEFOREWATTOP
  5429.  move.l d1,BEFOREWATBOT
  5430.  move.l d2,AFTERWATBOT
  5431.  move.l d0,AFTERWATTOP
  5432.  bra.s .belowfirst
  5433. .abovefirst:
  5434.  move.l d0,BEFOREWATTOP
  5435.  move.l d2,BEFOREWATBOT
  5436.  move.l d1,AFTERWATBOT
  5437.  move.l d2,AFTERWATTOP
  5438. .belowfirst:
  5439.  
  5440.  
  5441.  bsr dothisroom
  5442.  move.l ThisRoomToDraw+4,a0
  5443.  cmp.l LEVELGRAPHICS,a0
  5444.  beq.s noupperroom2
  5445.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5446.  
  5447.  move.l ROOMBACK,a1
  5448.  move.l ToUpperRoof(a1),TOPOFROOM
  5449.  move.l ToUpperFloor(a1),BOTOFROOM
  5450.  
  5451.  st DOUPPER
  5452.  bsr dothisroom
  5453. noupperroom2:
  5454.  
  5455. dontbothercantseeit:
  5456. pastemp:
  5457.  
  5458.  move.l (a7)+,a1
  5459.  move.l ThisRoomToDraw,a0
  5460.  move.w (a0),d7
  5461.  
  5462.  adda.w #8,a1
  5463.  bra finditit
  5464.  
  5465. nomoretodoatall:
  5466.  
  5467.  move.l (a7)+,a0
  5468.  
  5469.  bra subroomloop
  5470.  
  5471. jumpoutofrooms:
  5472.  
  5473.  
  5474.  tst.b DONTDOGUN
  5475.  bne NOGUNLOOK
  5476.  
  5477.  cmp.b #'s',mors
  5478.  beq.s drawslavegun
  5479.  
  5480.  moveq #0,d0
  5481.  move.b PLR1_GunSelected,d0
  5482.  moveq #0,d1
  5483.  move.b PLR1_GunFrame,d1
  5484. ; bsr DRAWINGUN
  5485.  bra drawngun
  5486.  
  5487. drawslavegun
  5488.  moveq #0,d0
  5489.  move.b PLR2_GunSelected,d0
  5490.  moveq #0,d1
  5491.  move.b PLR2_GunFrame,d1
  5492. ; bsr DRAWINGUN
  5493.  
  5494. drawngun:
  5495.  
  5496. NOGUNLOOK:
  5497.  
  5498.  moveq #0,d1
  5499.  move.b PLR1_GunFrame,d1
  5500.  sub.w TempFrames,d1
  5501.  bgt.s .nn
  5502.  moveq #0,d1
  5503. .nn
  5504.  move.b d1,PLR1_GunFrame
  5505.  
  5506.  ble.s .donefire
  5507.  sub.b #1,PLR1_GunFrame
  5508. .donefire:
  5509.  
  5510.  moveq #0,d1
  5511.  move.b PLR2_GunFrame,d1
  5512.  sub.w TempFrames,d1
  5513.  bgt.s .nn2
  5514.  moveq #0,d1
  5515. .nn2
  5516.  move.b d2,PLR2_GunFrame
  5517.  
  5518.  ble.s .donefire2
  5519.  sub.b #1,PLR2_GunFrame
  5520. .donefire2:
  5521.  
  5522.  tst.b DOANYWATER
  5523.  beq.s nowaterfull
  5524.  
  5525.  move.w #231,d0
  5526.  move.l FASTBUFFER,a0
  5527.  tst.b fillscrnwater
  5528.  beq nowaterfull
  5529.  bgt oknothalf
  5530.  moveq #119,d0
  5531.  add.l #320*120*2,a0
  5532. oknothalf:
  5533.  
  5534.  bclr.b #1,$bfe001
  5535.  
  5536.  move.l TexturePal,a2
  5537.  add.l #256*40,a2
  5538.  moveq #0,d2
  5539.  
  5540.  tst.b FULLSCR
  5541.  bne.s DOALLSCREEN
  5542.  
  5543. DOSOMESCREEN:
  5544.  
  5545.  move.w #159,d0
  5546. .fw:
  5547.  move.w #191,d1
  5548. .fwa:
  5549.  move.b (a0),d2
  5550.  move.b (a2,d2.w),(a0)+
  5551.  dbra d1,.fwa
  5552.  add.w #(320-192),a0
  5553.  dbra d0,.fw
  5554.  rts
  5555.  
  5556. DOALLSCREEN:
  5557.  
  5558. fw:
  5559.  move.w #287,d1
  5560. fwa:
  5561.  move.b (a0),d2
  5562.  move.b (a2,d2.w),(a0)+
  5563.  dbra d1,fwa
  5564.  add.w #32,a0
  5565.  dbra d0,fw
  5566.  
  5567. ; move.l frompt,a0
  5568. ; add.l #104*4*60,a0
  5569. ; move.w #31,d0
  5570. ;fw:
  5571. ; move.w d5,d1
  5572. ; move.l a0,a1
  5573. ;fwd:
  5574. ;val SET 104*4*19
  5575. ; REPT 20
  5576. ; and.w #$ff,val(a1)
  5577. ;val SET val-104*4
  5578. ; ENDR
  5579. ; sub.l #104*4*20,a1
  5580. ; dbra d1,fwd
  5581. ; addq #4,a0
  5582. ; dbra d0,fw
  5583. ;
  5584. ; addq #4,a0
  5585. ;
  5586. ; move.w #31,d0
  5587. ;sw:
  5588. ; move.w d5,d1
  5589. ; move.l a0,a1
  5590. ;swd:
  5591. ;val SET 104*4*19
  5592. ; REPT 20
  5593. ; and.w #$ff,val(a1)
  5594. ;val SET val-104*4
  5595. ; ENDR
  5596. ; sub.l #104*4*20,a1
  5597. ; dbra d1,swd
  5598. ; addq #4,a0
  5599. ; dbra d0,sw
  5600. ;
  5601. ; addq #4,a0
  5602. ;
  5603. ; move.w #31,d0
  5604. ;tw:
  5605. ; move.w d5,d1
  5606. ; move.l a0,a1
  5607. ;twd:
  5608. ;val SET 104*4*19
  5609. ; REPT 20
  5610. ; and.w #$ff,val(a1)
  5611. ;val SET val-104*4
  5612. ; ENDR
  5613. ; sub.l #104*4*20,a1
  5614. ; dbra d1,twd
  5615. ; addq #4,a0
  5616. ; dbra d0,tw
  5617. ;
  5618.  rts
  5619.  
  5620. nowaterfull:
  5621.  bset.b #1,$bfe001
  5622.  rts
  5623.  
  5624. prot9: dc.w 0
  5625.  
  5626. ;TempBuffer: ds.l 100 
  5627.  
  5628. prot8: dc.w 0
  5629.  
  5630. ClipTable: ds.l 30
  5631. EndOfClipPt: dc.l 0
  5632. DOUPPER: dc.w 0
  5633.  
  5634. RealTable:
  5635.  dc.l prot1-78935450
  5636.  dc.l prot2-78935450
  5637.  dc.l prot3-78935450
  5638.  dc.l prot4-78935450
  5639.  dc.l prot5-78935450
  5640.  dc.l prot6-78935450
  5641.  dc.l prot7-78935450
  5642.  dc.l prot8-78935450
  5643.  dc.l prot9-78935450
  5644.  dc.l protA-78935450
  5645.  
  5646. dothisroom
  5647.  
  5648.  move.w (a0)+,d0
  5649.  move.w d0,currzone
  5650.  move.w d0,d1
  5651.  muls #40,d1
  5652.  add.l #BIGMAP,d1
  5653.  move.l d1,BIGPTR
  5654.  move.w d0,d1
  5655.  ext.l d1
  5656.  asl.w #2,d1
  5657.  add.l #COMPACTMAP,d1
  5658.  move.l d1,COMPACTPTR
  5659.  add.l #4,d1
  5660.  cmp.l LASTZONE,d1
  5661.  ble.s .nochange
  5662.  move.l d1,LASTZONE
  5663. .nochange:
  5664.  
  5665.  move.l #ZoneBrightTable,a1
  5666.  move.l (a1,d0.w*4),d1
  5667.  tst.b DOUPPER
  5668.  bne.s .okbot
  5669.  swap d1
  5670. .okbot:
  5671.  move.w d1,ZoneBright
  5672.  
  5673. polyloop:
  5674.  move.w (a0)+,d0
  5675.  move.w d0,WALLIDENT
  5676.  and.w #$ff,d0
  5677.  tst.b d0
  5678.  blt jumpoutofloop
  5679.  beq itsawall
  5680.  cmp.w #3,d0
  5681.  beq itsasetclip
  5682.  blt itsafloor
  5683.  cmp.w #4,d0
  5684.  beq itsanobject
  5685.  cmp.w #5,d0
  5686.  beq itsanarc
  5687.  cmp.w #6,d0
  5688.  beq itsalightbeam
  5689.  cmp.w #7,d0
  5690.  beq.s itswater
  5691.  cmp.w #9,d0
  5692.  ble itsachunkyfloor
  5693.  cmp.w #11,d0
  5694.  ble itsabumpyfloor
  5695.  cmp.w #12,d0
  5696.  beq.s itsbackdrop
  5697.  cmp.w #13,d0
  5698.  beq.s itsaseewall
  5699.  
  5700.  bra polyloop
  5701.  
  5702. itsaseewall:
  5703.  st seethru
  5704.  jsr itsawalldraw
  5705.  bra polyloop
  5706.  
  5707. itsbackdrop:
  5708.  jsr putinbackdrop
  5709.  bra polyloop
  5710.  
  5711. itswater:
  5712.  PROTHCHECK
  5713.  move.w #2,SMALLIT
  5714.  move.w #3,d0
  5715.  clr.b gourfloor
  5716.  move.l #FloorLine,LineToUse
  5717.  st usewater
  5718.  clr.b usebumps
  5719.  jsr itsafloordraw
  5720.  bra polyloop
  5721.  
  5722. itsanarc:
  5723.  jsr CurveDraw
  5724.  bra polyloop
  5725.  
  5726. itsanobject:
  5727.  jsr ObjDraw
  5728.  bra polyloop
  5729.  
  5730. itsalightbeam:
  5731.  jsr LightDraw
  5732.  bra polyloop
  5733.  
  5734. itsabumpyfloor:
  5735.  move.w #1,SMALLIT
  5736.  sub.w #9,d0
  5737.  st usebumps
  5738.  st smoothbumps
  5739.  clr.b usewater
  5740.  move.l #BumpLine,LineToUse
  5741.  jsr itsafloordraw
  5742.  bra polyloop
  5743.  
  5744. itsachunkyfloor:
  5745.  move.w #1,SMALLIT
  5746.  subq.w #7,d0
  5747.  st usebumps
  5748.  sub.w #12,topclip
  5749. ; add.w #10,botclip
  5750.  clr.b smoothbumps
  5751.  clr.b usewater
  5752.  move.l #BumpLine,LineToUse
  5753.  jsr itsafloordraw
  5754.  add.w #12,topclip
  5755. ; sub.w #10,botclip
  5756.  bra polyloop 
  5757.  
  5758. itsafloor:
  5759.  
  5760.  move.l PointBrightsPtr,FloorPtBrights
  5761.  
  5762.  move.w currzone,d1
  5763.  muls #80,d1
  5764.  
  5765.  cmp.w #2,d0
  5766.  bne.s .nfl
  5767.  add.l #2,d1
  5768. .nfl
  5769.  add.l d1,FloorPtBrights
  5770.  
  5771.  move.w #1,SMALLIT
  5772.  
  5773.  movem.l a0/d0,-(a7)
  5774.  move.l $4.w,a6
  5775.  jsr _LVOSuperState(a6)
  5776.  move.l d0,SSTACK
  5777.  movem.l (a7)+,a0/d0
  5778.  
  5779.  move.l #FloorLine,LineToUse
  5780. * 1,2 = floor/roof
  5781.  clr.b usewater
  5782.  clr.b usebumps
  5783.  move.b GOURSEL,gourfloor    
  5784.  jsr itsafloordraw
  5785.  move.l a0,-(a7)
  5786.  move.l $4.w,a6
  5787.  move.l SSTACK,d0
  5788.  jsr _LVOUserState(a6)
  5789.  move.l (a7)+,a0
  5790.  bra polyloop
  5791. itsasetclip:
  5792.  bra polyloop
  5793. itsawall:
  5794.  clr.b seethru
  5795. ; move.l #stripbuffer,a1
  5796.  jsr itsawalldraw
  5797.  bra polyloop
  5798.  
  5799. jumpoutofloop:
  5800.  rts
  5801.  
  5802. LASTZONE: dc.l 0
  5803. COMPACTPTR: dc.l 0
  5804. BIGPTR: dc.l 0
  5805. WALLIDENT: dc.w 0
  5806. SMALLIT: dc.w 0
  5807. GOURSEL: dc.w 0
  5808. ThisRoomToDraw: dc.l 0,0
  5809. SplitHeight: dc.l 0
  5810.  
  5811.  include "ab3:source_4000/OrderZones"
  5812.  
  5813. ReadMouse:
  5814.  move.l #$dff000,a6
  5815.  clr.l d0
  5816.  clr.l d1
  5817.  move.w $a(a6),d0
  5818.  lsr.w #8,d0
  5819.  ext.l d0
  5820.  move.w d0,d3
  5821.  move.w oldmy,d2
  5822.  sub.w d2,d0
  5823.  
  5824.  cmp.w #127,d0
  5825.  blt nonegy
  5826.  move.w #255,d1
  5827.  sub.w d0,d1
  5828.  move.w d1,d0
  5829.  neg.w d0
  5830. nonegy:
  5831.  
  5832.  cmp.w #-127,d0
  5833.  bge nonegy2
  5834.  move.w #255,d1
  5835.  add.w d0,d1
  5836.  move.w d1,d0
  5837. nonegy2:
  5838.  
  5839.  add.b d0,d2
  5840.  add.w d0,oldy2
  5841.  move.w d2,oldmy
  5842.  move.w d2,d0
  5843.  
  5844.  move.w oldy2,d0
  5845.  move.w d0,ymouse
  5846.  
  5847.  clr.l d0
  5848.  clr.l d1
  5849.  move.w $a(a6),d0
  5850.  ext.w d0
  5851.  ext.l d0
  5852.  move.w d0,d3
  5853.  move.w oldmx,d2
  5854.  sub.w d2,d0
  5855.  
  5856.  cmp.w #127,d0
  5857.  blt nonegx
  5858.  move.w #255,d1
  5859.  sub.w d0,d1
  5860.  move.w d1,d0
  5861.  neg.w d0
  5862. nonegx:
  5863.  
  5864.  cmp.w #-127,d0
  5865.  bge nonegx2
  5866.  move.w #255,d1
  5867.  add.w d0,d1
  5868.  move.w d1,d0
  5869. nonegx2:
  5870.  
  5871.  add.b d0,d2
  5872.  move.w d0,d1
  5873.  move.w d2,oldmx
  5874.  
  5875.  move.w #$0,$dff034
  5876.  
  5877.  add.w d0,oldx2
  5878.  move.w oldx2,d0
  5879.  and.w #2047,d0
  5880.  move.w d0,oldx2
  5881.  
  5882.  asl.w #2,d0
  5883.  sub.w prevx,d0
  5884.  add.w d0,prevx
  5885.  add.w d0,angpos
  5886.  move.w #0,lrs
  5887.  rts
  5888.  
  5889. noturn:
  5890.  
  5891. ; got to move lr instead. 
  5892.  
  5893. ; d1 = speed moved l/r
  5894.  
  5895.  move.w d1,lrs
  5896.  
  5897.  rts
  5898.  
  5899. lrs: dc.w 0
  5900. prevx: dc.w 0
  5901.  
  5902. angpos: dc.w 0
  5903. mang: dc.w 0
  5904. oldymouse: dc.w 0
  5905. xmouse: dc.w 0
  5906. ymouse: dc.w 0
  5907. oldx2: dc.w 0
  5908. oldmx: dc.w 0
  5909. oldmy: dc.w 0
  5910. oldy2: dc.w 0
  5911.  
  5912. MAPON: dc.w $0
  5913. REALMAPON: dc.w 0
  5914.  
  5915. RotateLevelPts:
  5916.  
  5917.  tst.b REALMAPON
  5918.  beq ONLYTHELONELY
  5919.  
  5920.  move.w sinval,d6
  5921.  swap d6
  5922.  move.w cosval,d6
  5923.  move.l Points,a3
  5924.  move.l #Rotated,a1
  5925.  move.l #OnScreen,a2
  5926.  move.w xoff,d4
  5927.  move.w zoff,d5
  5928.  
  5929. ; move.w #$c40,$dff106
  5930. ; move.w #$f00,$dff180
  5931.  
  5932.  move.w NumLevPts,d7
  5933.  
  5934.  tst.b FULLSCR
  5935.  bne BIGALL
  5936.  
  5937. pointrotlop2:
  5938.  move.w (a3)+,d0
  5939.  sub.w d4,d0
  5940.  move.w d0,d2
  5941.  move.w (a3)+,d1
  5942.  sub.w d5,d1
  5943.  muls d6,d2
  5944.  swap d6
  5945.  move.w d1,d3
  5946.  muls d6,d3
  5947.  sub.l d3,d2
  5948.  add.l d2,d2
  5949.  swap d2
  5950.  ext.l d2
  5951.  asl.l #7,d2
  5952.  add.l xwobble,d2
  5953.  move.l d2,(a1)+
  5954.  
  5955.  muls d6,d0
  5956.  swap d6
  5957.  muls d6,d1
  5958.  add.l d0,d1
  5959.  asl.l #1,d1
  5960.  swap d1
  5961. ; ext.l d1
  5962. ; divs #3,d1
  5963.  move.l d1,(a1)+
  5964.  
  5965.  tst.w d1
  5966.  bgt.s ptnotbehind
  5967.  tst.w d2
  5968.  bgt.s onrightsomewhere
  5969.  move.w #0,d2
  5970.  bra putin
  5971. onrightsomewhere:
  5972.  move.w RIGHTX,d2
  5973.  bra putin
  5974. ptnotbehind:
  5975.  
  5976.  divs d1,d2
  5977.  add.w MIDDLEX,d2
  5978. putin:
  5979.  move.w d2,(a2)+
  5980.  
  5981.  dbra d7,pointrotlop2
  5982. outofpointrot:
  5983.   rts
  5984.  
  5985.  
  5986. BIGALL:
  5987.  
  5988. pointrotlop2B:
  5989.  move.w (a3)+,d0
  5990.  sub.w d4,d0
  5991.  move.w d0,d2
  5992.  move.w (a3)+,d1
  5993.  sub.w d5,d1
  5994.  muls d6,d2
  5995.  swap d6
  5996.  move.w d1,d3
  5997.  muls d6,d3
  5998.  sub.l d3,d2
  5999.  add.l d2,d2
  6000.  swap d2
  6001.  ext.l d2
  6002.  asl.l #7,d2
  6003.  add.l xwobble,d2
  6004.  move.l d2,(a1)+
  6005.  
  6006.  muls d6,d0
  6007.  swap d6
  6008.  muls d6,d1
  6009.  add.l d0,d1
  6010.  asl.l #2,d1
  6011.  swap d1
  6012.  ext.l d1
  6013.  divs #3,d1
  6014.  move.l d1,(a1)+
  6015.  
  6016.  tst.w d1
  6017.  bgt.s ptnotbehindB
  6018.  tst.w d2
  6019.  bgt.s onrightsomewhereB
  6020.  move.w #0,d2
  6021.  bra putinB
  6022. onrightsomewhereB:
  6023.  move.w RIGHTX,d2
  6024.  bra putinB
  6025. ptnotbehindB:
  6026.  
  6027.  divs d1,d2
  6028.  add.w MIDDLEX,d2
  6029. putinB:
  6030.  move.w d2,(a2)+
  6031.  
  6032.  dbra d7,pointrotlop2B
  6033.   rts
  6034.  
  6035.  
  6036. ONLYTHELONELY:
  6037.  
  6038.  move.w sinval,d6
  6039.  swap d6
  6040.  move.w cosval,d6
  6041.  
  6042.  move.l PointsToRotatePtr,a0
  6043.  move.l Points,a3
  6044.  move.l #Rotated,a1
  6045.  move.l #OnScreen,a2
  6046.  move.w xoff,d4
  6047.  move.w zoff,d5
  6048.  
  6049. ; move.w #$c40,$dff106
  6050. ; move.w #$f00,$dff180
  6051.  
  6052.  tst.b FULLSCR
  6053.  bne BIGLONELY
  6054.  
  6055. pointrotlop:
  6056.  move.w (a0)+,d7
  6057.  blt outofpointrot
  6058.  
  6059.  move.w (a3,d7*4),d0
  6060.  sub.w d4,d0
  6061.  move.w d0,d2
  6062.  move.w 2(a3,d7*4),d1
  6063.  sub.w d5,d1
  6064.  muls d6,d2
  6065.  swap d6
  6066.  move.w d1,d3
  6067.  muls d6,d3
  6068.  sub.l d3,d2
  6069.  add.l d2,d2
  6070.  swap d2
  6071.  ext.l d2
  6072.  asl.l #7,d2
  6073.  add.l xwobble,d2
  6074.  move.l d2,(a1,d7*8)
  6075.  
  6076.  muls d6,d0
  6077.  swap d6
  6078.  muls d6,d1
  6079.  add.l d0,d1
  6080.  asl.l #1,d1
  6081.  swap d1
  6082. ; ext.l d1
  6083. ; divs #3,d1
  6084.  move.l d1,4(a1,d7*8)
  6085.  
  6086.  tst.w d1
  6087.  bgt.s .ptnotbehind
  6088.  tst.w d2
  6089.  bgt.s .onrightsomewhere
  6090.  move.w #0,d2
  6091.  bra .putin
  6092. .onrightsomewhere:
  6093.  move.w RIGHTX,d2
  6094.  bra .putin
  6095. .ptnotbehind:
  6096.  
  6097.  divs d1,d2
  6098.  add.w MIDDLEX,d2
  6099. .putin:
  6100.  move.w d2,(a2,d7*2)
  6101.  
  6102.  bra pointrotlop
  6103.  
  6104. ; move.w #$c40,$dff106
  6105. ; move.w #$ff0,$dff180
  6106.  
  6107.  rts
  6108.  
  6109. BIGLONELY:
  6110.  
  6111. .pointrotlop:
  6112.  move.w (a0)+,d7
  6113.  blt.s .outofpointrot
  6114.  
  6115.  move.w (a3,d7*4),d0
  6116.  sub.w d4,d0
  6117.  move.w d0,d2
  6118.  move.w 2(a3,d7*4),d1
  6119.  sub.w d5,d1
  6120.  muls d6,d2
  6121.  swap d6
  6122.  move.w d1,d3
  6123.  muls d6,d3
  6124.  sub.l d3,d2
  6125.  add.l d2,d2
  6126.  swap d2
  6127.  ext.l d2
  6128.  asl.l #7,d2
  6129.  add.l xwobble,d2
  6130.  move.l d2,(a1,d7*8)
  6131.  
  6132.  muls d6,d0
  6133.  swap d6
  6134.  muls d6,d1
  6135.  add.l d0,d1
  6136.  asl.l #2,d1
  6137.  swap d1
  6138.  ext.l d1
  6139.  divs #3,d1
  6140.  move.l d1,4(a1,d7*8)
  6141.  
  6142.  tst.w d1
  6143.  bgt.s .ptnotbehind
  6144.  tst.w d2
  6145.  bgt.s .onrightsomewhere
  6146.  move.w #0,d2
  6147.  bra .putin
  6148. .onrightsomewhere:
  6149.  move.w RIGHTX,d2
  6150.  bra .putin
  6151. .ptnotbehind:
  6152.  
  6153.  divs d1,d2
  6154.  add.w MIDDLEX,d2
  6155. .putin:
  6156.  move.w d2,(a2,d7*2)
  6157.  
  6158.  bra .pointrotlop
  6159.  
  6160. .outofpointrot:
  6161. ; move.w #$c40,$dff106
  6162. ; move.w #$ff0,$dff180
  6163.  
  6164.  rts
  6165.  
  6166.  
  6167. PLR1_ObjDists
  6168.  ds.w 250
  6169. PLR2_ObjDists
  6170.  ds.w 250
  6171.  
  6172. CalcPLR1InLine:
  6173.  
  6174.  move.w PLR1_sinval,d5
  6175.  move.w PLR1_cosval,d6
  6176.  move.l ObjectData,a4
  6177.  move.l ObjectPoints,a0
  6178.  move.w NumObjectPoints,d7
  6179.  move.l #PLR1_ObsInLine,a2
  6180.  move.l #PLR1_ObjDists,a3
  6181.  
  6182. .objpointrotlop:
  6183.  
  6184.  cmp.b #3,16(a4)
  6185.  beq.s .itaux
  6186.  
  6187.  move.w (a0),d0
  6188.  sub.w PLR1_xoff,d0
  6189.  move.w 4(a0),d1
  6190.  addq #8,a0
  6191.  
  6192.  tst.w 12(a4)
  6193.  blt .noworkout
  6194.  
  6195.  moveq #0,d2
  6196.  move.b 16(a4),d2
  6197.  ;move.l #ColBoxTable,a6
  6198.  ;lea (a6,d2.w*8),a6
  6199.  
  6200.  sub.w PLR1_zoff,d1
  6201.  move.w d0,d2
  6202.  muls d6,d2
  6203.  move.w d1,d3
  6204.  muls d5,d3
  6205.  sub.l d3,d2
  6206.  add.l d2,d2
  6207.  
  6208.  bgt.s .okh
  6209.  neg.l d2
  6210. .okh:
  6211.  swap d2
  6212.  
  6213.  muls d5,d0
  6214.  muls d6,d1
  6215.  add.l d0,d1
  6216.  asl.l #2,d1
  6217.  swap d1
  6218.  moveq #0,d3
  6219.  
  6220.  tst.w d1
  6221.  ble.s .notinline
  6222.  asr.w #1,d2
  6223.  cmp.w #80,d2
  6224.  bgt.s .notinline
  6225.  
  6226.  st d3
  6227. .notinline
  6228.  move.b d3,(a2)+
  6229.  
  6230.  move.w d1,(a3)+
  6231.  
  6232.  add.w #64,a4
  6233.  dbra d7,.objpointrotlop
  6234.  
  6235.  rts
  6236.  
  6237. .itaux:
  6238.  add.w #64,a4
  6239.  bra .objpointrotlop
  6240.  
  6241. .noworkout:
  6242.  move.b #0,(a2)+
  6243.  move.w #0,(a3)+
  6244.  add.w #64,a4
  6245.  dbra d7,.objpointrotlop
  6246.  rts
  6247.  
  6248.  
  6249. CalcPLR2InLine:
  6250.  
  6251.  move.w PLR2_sinval,d5
  6252.  move.w PLR2_cosval,d6
  6253.  move.l ObjectData,a4
  6254.  move.l ObjectPoints,a0
  6255.  move.w NumObjectPoints,d7
  6256.  move.l #PLR2_ObsInLine,a2
  6257.  move.l #PLR2_ObjDists,a3
  6258.  
  6259. .objpointrotlop:
  6260.  
  6261.  cmp.b #3,16(a4)
  6262.  beq.s .itaux
  6263.  
  6264.  move.w (a0),d0
  6265.  sub.w PLR2_xoff,d0
  6266.  move.w 4(a0),d1
  6267.  addq #8,a0
  6268.  
  6269.  tst.w 12(a4)
  6270.  blt .noworkout
  6271.  
  6272.  moveq #0,d2
  6273.  move.b 16(a4),d2
  6274. ; move.l #ColBoxTable,a6
  6275. ; lea (a6,d2.w*8),a6
  6276.  
  6277.  sub.w PLR2_zoff,d1
  6278.  move.w d0,d2
  6279.  muls d6,d2
  6280.  move.w d1,d3
  6281.  muls d5,d3
  6282.  sub.l d3,d2
  6283.  add.l d2,d2
  6284.  
  6285.  bgt.s .okh
  6286.  neg.l d2
  6287. .okh:
  6288.  swap d2
  6289.  
  6290.  muls d5,d0
  6291.  muls d6,d1
  6292.  add.l d0,d1
  6293.  asl.l #2,d1
  6294.  swap d1
  6295.  moveq #0,d3
  6296.  
  6297.  tst.w d1
  6298.  ble.s .notinline
  6299.  asr.w #1,d2
  6300.  cmp.w (a6),d2
  6301.  bgt.s .notinline
  6302.  
  6303.  st d3
  6304. .notinline
  6305.  move.b d3,(a2)+
  6306.  
  6307.  move.w d1,(a3)+
  6308.  
  6309.  add.w #64,a4
  6310.  dbra d7,.objpointrotlop
  6311.  
  6312.  rts
  6313.  
  6314. .itaux:
  6315.  add.w #64,a4
  6316.  bra .objpointrotlop
  6317.  
  6318. .noworkout:
  6319.  move.w #0,(a3)+
  6320.  move.b #0,(a2)+
  6321.  add.w #64,a4
  6322.  dbra d7,.objpointrotlop
  6323.  rts
  6324.  
  6325.  
  6326. RotateObjectPts:
  6327.  
  6328.  move.w sinval,d5
  6329.  move.w cosval,d6
  6330.  
  6331.  move.l ObjectData,a4
  6332.  move.l ObjectPoints,a0
  6333.  move.w NumObjectPoints,d7
  6334.  move.l #ObjRotated,a1
  6335.  
  6336.  tst.b FULLSCR
  6337.  bne BIGOBJPTS
  6338.  
  6339.  
  6340. .objpointrotlop:
  6341.  
  6342.  cmp.b #3,16(a4)
  6343.  beq.s .itaux
  6344.  
  6345.  move.w (a0),d0
  6346.  sub.w xoff,d0
  6347.  move.w 4(a0),d1
  6348.  addq #8,a0
  6349.  
  6350.  tst.w 12(a4)
  6351.  blt .noworkout
  6352.  
  6353.  sub.w zoff,d1
  6354.  
  6355.  move.w d0,d2
  6356.  muls d6,d2
  6357.  move.w d1,d3
  6358.  muls d5,d3
  6359.  sub.l d3,d2
  6360.  
  6361.  
  6362.  add.l d2,d2
  6363.  swap d2
  6364.  move.w d2,(a1)+
  6365.  
  6366.  muls d5,d0
  6367.  muls d6,d1
  6368.  add.l d0,d1
  6369.  asl.l #1,d1
  6370.  swap d1
  6371. ; ext.l d1
  6372. ; divs #3,d1
  6373.  moveq #0,d3
  6374.  
  6375.  move.w d1,(a1)+
  6376.  ext.l d2
  6377.  asl.l #7,d2
  6378.  add.l xwobble,d2
  6379.  move.l d2,(a1)+
  6380.  
  6381.  dbra d7,.objpointrotlop
  6382.  
  6383.  rts
  6384.  
  6385. .itaux:
  6386.  add.w #64,a4
  6387.  bra .objpointrotlop
  6388.  
  6389. .noworkout:
  6390.   move.l #0,(a1)+
  6391.   move.l #0,(a1)+
  6392.   add.w #64,a4
  6393.   dbra d7,.objpointrotlop
  6394.   rts
  6395.   
  6396. BIGOBJPTS:
  6397.  
  6398. .objpointrotlop:
  6399.  
  6400.  cmp.b #3,16(a4)
  6401.  beq.s .itaux
  6402.  
  6403.  move.w (a0),d0
  6404.  sub.w xoff,d0
  6405.  move.w 4(a0),d1
  6406.  addq #8,a0
  6407.  
  6408.  tst.w 12(a4)
  6409.  blt .noworkout
  6410.  
  6411.  sub.w zoff,d1
  6412.  move.w d0,d2
  6413.  muls d6,d2
  6414.  move.w d1,d3
  6415.  muls d5,d3
  6416.  sub.l d3,d2
  6417.  
  6418.  
  6419.  add.l d2,d2
  6420.  swap d2
  6421.  move.w d2,(a1)+
  6422.  
  6423.  muls d5,d0
  6424.  muls d6,d1
  6425.  add.l d0,d1
  6426.  asl.l #2,d1
  6427.  swap d1
  6428.  ext.l d1
  6429.  divs #3,d1
  6430.  moveq #0,d3
  6431.  
  6432.  move.w d1,(a1)+
  6433.  ext.l d2
  6434.  asl.l #7,d2
  6435.  add.l xwobble,d2
  6436.  move.l d2,(a1)+
  6437.  sub.l xwobble,d2
  6438.  
  6439.  add.w #64,a4
  6440.  dbra d7,.objpointrotlop
  6441.  
  6442.  rts
  6443.  
  6444. .itaux:
  6445.  add.w #64,a4
  6446.  bra .objpointrotlop
  6447.  
  6448. .noworkout:
  6449.   move.l #0,(a1)+
  6450.   move.l #0,(a1)+
  6451.   add.w #64,a4
  6452.   dbra d7,.objpointrotlop
  6453.   rts
  6454.  
  6455. LightDraw:
  6456.  
  6457.  move.w (a0)+,d0
  6458.  move.w (a0)+,d1
  6459.  move.l #Rotated,a1
  6460.  move.w 6(a1,d0.w*8),d2
  6461.  ble.s oneendbehind
  6462.  move.w 6(a1,d1.w*8),d3
  6463.  bgt.s bothendsinfront
  6464.  
  6465. oneendbehind:
  6466.  rts
  6467. bothendsinfront:
  6468.  
  6469.  move.l #OnScreen,a2
  6470.  move.w (a2,d0.w*2),d0
  6471.  bge.s okleftend
  6472.  moveq #0,d0
  6473. okleftend:
  6474.  move.w (a2,d1.w*2),d1
  6475.  bgt.s somevis
  6476.  rts
  6477. somevis:
  6478.  cmp.w RIGHTX,d0
  6479.  blt.s somevis2
  6480.  rts
  6481. somevis2:
  6482.  cmp.w RIGHTX,d1
  6483.  blt.s okrightend
  6484.  move.w RIGHTX,d1
  6485.  subq #1,d1
  6486. okrightend:
  6487.  
  6488.  sub.w d0,d1
  6489.  blt.s wrongbloodywayround
  6490.  move.l TexturePal,a4
  6491.  move.l #objintocop,a1
  6492.  lea (a1,d0.w*2),a1
  6493.  
  6494.  move.l frompt,a3
  6495.  move.w #104*4,d6
  6496.  move.w #79,d2
  6497. lacross:
  6498.  move.w d2,d3
  6499.  move.l a3,a2
  6500.  adda.w (a1)+,a2
  6501. ldown:
  6502.  add.w d6,a2
  6503.  move.w (a2),d7
  6504.  move.w (a4,d7.w*2),(a2)
  6505.  dbra d3,ldown
  6506.  dbra d1,lacross
  6507.  
  6508. wrongbloodywayround:
  6509.  
  6510.  rts
  6511.  
  6512. FaceToPlace: dc.w 0
  6513.  
  6514. Cheese:
  6515.  dc.w 4,15
  6516.  
  6517. FacesList:
  6518.  dc.w 0,4*4
  6519.  dc.w 1,2*4
  6520.  dc.w 0,2*4
  6521.  dc.w 2,2*4
  6522.  dc.w 0,2*4
  6523.  dc.w 1,3*4
  6524.  dc.w 0,2*4
  6525.  dc.w 2,3*4
  6526.  dc.w 0,5*4
  6527.  dc.w 1,2*4
  6528.  dc.w 0,2*4
  6529.  dc.w 2,2*4
  6530.  dc.w 0,2*4
  6531.  dc.w 1,2*4
  6532.  dc.w 0,2*4
  6533.  dc.w 2,3*4
  6534.  dc.w 0,1*4
  6535.  dc.w 1,3*4
  6536.  dc.w 0,1*4
  6537.  dc.w 2,3*4
  6538.  dc.w 0,1*4
  6539.  
  6540. EndOfFacesList:
  6541.  
  6542. FacesPtr:
  6543.  dc.l FacesList
  6544. FacesCounter:
  6545.  dc.w 0
  6546. Expression:
  6547.  dc.w 0
  6548.  
  6549.  
  6550. Energy:
  6551.  dc.w 191
  6552. OldEnergy:
  6553.  dc.w 191
  6554. Ammo: dc.w 63
  6555. OldAmmo: dc.w 63
  6556.  
  6557. FullEnergy:
  6558. ; move.w #127,Energy
  6559. ; move.w #127,OldEnergy
  6560. ; move.l #health,a0
  6561. ; move.l #borders,a1
  6562. ; add.l #25*8*2+6,a1
  6563. ; lea 2592(a1),a2
  6564. ; move.w #127,d0
  6565. ;PutInFull:
  6566. ; move.b (a0)+,(a1)
  6567. ; move.b (a0)+,8(a1)
  6568. ; add.w #16,a1
  6569. ; move.b (a0)+,(a2)
  6570. ; move.b (a0)+,8(a2)
  6571. ; add.w #16,a2
  6572. ; dbra d0,PutInFull
  6573.  
  6574.  rts
  6575.  
  6576. ;EnergyBar:
  6577.  
  6578.  move.w Energy,d0
  6579.  bgt.s .noeneg
  6580.  move.w #0,d0
  6581. .noeneg:
  6582.  move.w d0,Energy
  6583.  
  6584.  cmp.w OldEnergy,d0
  6585.  bne.s gottochange
  6586.  
  6587. NoChange
  6588.  rts
  6589.  
  6590. gottochange:
  6591.   
  6592.  blt LessEnergy
  6593.  cmp.w #127,Energy
  6594.  blt.s NotMax
  6595.  move.w #127,Energy
  6596. NotMax:
  6597.  
  6598.  move.w Energy,d0
  6599.  move.w OldEnergy,d2
  6600.  sub.w d0,d2
  6601.  beq.s NoChange    
  6602.  neg.w d2
  6603.  
  6604.  move.w #127,d3
  6605.  sub.w d0,d3
  6606.  
  6607.  move.l #health,a0
  6608.  lea (a0,d3.w*4),a0
  6609. ; move.l #borders+25*16+6,a1
  6610.  lsl.w #4,d3
  6611.  add.w d3,a1
  6612.  lea 2592(a1),a2
  6613.  
  6614. EnergyRise:
  6615.  move.b (a0)+,(a1)
  6616.  move.b (a0)+,8(a1)
  6617.  add.w #16,a1
  6618.  move.b (a0)+,(a2)
  6619.  move.b (a0)+,8(a2)
  6620.  add.w #16,a2
  6621.  subq #1,d2
  6622.  bgt.s EnergyRise
  6623.  
  6624.  move.w Energy,OldEnergy
  6625.  
  6626.  rts 
  6627.  
  6628. LessEnergy: 
  6629.  move.w OldEnergy,d2
  6630.  sub.w d0,d2
  6631.  
  6632.  move.w #127,d3
  6633.  sub.w OldEnergy,d3
  6634.  
  6635. ; move.l #borders+25*16+6,a1
  6636.  asl.w #4,d3
  6637.  add.w d3,a1
  6638.  lea 2592(a1),a2
  6639.  
  6640. EnergyDrain:
  6641.  move.b #0,(a1)
  6642.  move.b #0,8(a1)
  6643.  move.b #0,(a2)
  6644.  move.b #0,8(a2)
  6645.  add.w #16,a1
  6646.  add.w #16,a2
  6647.  subq #1,d2
  6648.  bgt.s EnergyDrain
  6649.  
  6650.  move.w Energy,OldEnergy
  6651.  
  6652.  rts 
  6653.  
  6654. firstdigit: dc.b 0
  6655. secdigit: dc.b 0
  6656. thirddigit: dc.b 0
  6657.  
  6658.  even
  6659.  
  6660. gunny: dc.w 0
  6661.  
  6662. AmmoBar:
  6663.  
  6664. * Do guns first.
  6665.  
  6666.  move.l #borderchars,a4
  6667.  move.b p1_gunselected,d0 
  6668.  move.l #PLAYERONEGUNS,a5
  6669.  cmp.b #'s',mors
  6670.  bne.s .notplr2
  6671.  move.l #PLAYERTWOGUNS,a5
  6672.  move.b p2_gunselected,d0
  6673. .notplr2:
  6674.  
  6675.  move.b d0,gunny
  6676.  
  6677.  move.w #9,d2
  6678.  moveq #0,d0
  6679. putingunnums:
  6680.  move.w #4,d1
  6681.  move.l a4,a0
  6682.  cmp.b gunny,d0
  6683.  bne.s .notsel
  6684.  add.l #5*10*8*2,a0
  6685.  addq #2,a5
  6686.  bra.s .donesel
  6687. .notsel:
  6688.  tst.w (a5)+
  6689.  beq.s .donesel
  6690.  add.l #5*10*8,a0
  6691. .donesel:
  6692.  move.l SCRNDRAWPT,a1
  6693.  add.w d0,a1
  6694.  add.l #3+(240*40),a1
  6695.  bsr DRAWDIGIT
  6696.  addq #1,d0
  6697.  dbra d2,putingunnums
  6698.  
  6699.  move.w Ammo,d0
  6700.  ext.l d0
  6701.  divs #10,d0
  6702.  swap d0
  6703.  move.b d0,thirddigit
  6704.  swap d0
  6705.  ext.l d0
  6706.  divs #10,d0
  6707.  move.b d0,firstdigit
  6708.  swap d0
  6709.  move.b d0,secdigit
  6710.  
  6711.  move.l #borderchars+15*8*10,a0
  6712.  cmp.w #10,Ammo
  6713.  blt.s .notsmallamo
  6714.  add.l #7*8*10,a0
  6715. .notsmallamo:
  6716.  
  6717.  move.l SCRNDRAWPT,a1
  6718.  add.l #20+238*40,a1
  6719.  move.b firstdigit,d0
  6720.  move.w #6,d1
  6721.  bsr DRAWDIGIT
  6722.  
  6723.  move.l SCRNDRAWPT,a1
  6724.  add.l #21+238*40,a1
  6725.  move.b secdigit,d0
  6726.  move.w #6,d1
  6727.  bsr DRAWDIGIT
  6728.  
  6729.  move.l SCRNDRAWPT,a1
  6730.  add.l #22+238*40,a1
  6731.  move.b thirddigit,d0
  6732.  move.w #6,d1
  6733.  bsr DRAWDIGIT
  6734.  
  6735.  rts
  6736.  
  6737. EnergyBar:
  6738.  move.w Energy,d0
  6739.  bge.s .okpo
  6740.  moveq #0,d0 
  6741. .okpo:
  6742.  
  6743.  ext.l d0
  6744.  divs #10,d0
  6745.  swap d0
  6746.  move.b d0,thirddigit
  6747.  swap d0
  6748.  ext.l d0
  6749.  divs #10,d0
  6750.  move.b d0,firstdigit
  6751.  swap d0
  6752.  move.b d0,secdigit
  6753.  
  6754.  move.l #borderchars+15*8*10,a0
  6755.  cmp.w #10,Energy
  6756.  blt.s .notsmallamo
  6757.  add.l #7*8*10,a0
  6758. .notsmallamo:
  6759.  
  6760.  move.l SCRNDRAWPT,a1
  6761.  add.l #34+238*40,a1
  6762.  move.b firstdigit,d0
  6763.  move.w #6,d1
  6764.  bsr DRAWDIGIT
  6765.  
  6766.  move.l SCRNDRAWPT,a1
  6767.  add.l #35+238*40,a1
  6768.  move.b secdigit,d0
  6769.  move.w #6,d1
  6770.  bsr DRAWDIGIT
  6771.  
  6772.  move.l SCRNDRAWPT,a1
  6773.  add.l #36+238*40,a1
  6774.  move.b thirddigit,d0
  6775.  move.w #6,d1
  6776.  bsr DRAWDIGIT
  6777.  
  6778.  move.l SCRNSHOWPT,a1
  6779.  add.l #34+238*40,a1
  6780.  move.b firstdigit,d0
  6781.  move.w #6,d1
  6782.  bsr DRAWDIGIT
  6783.  
  6784.  move.l SCRNSHOWPT,a1
  6785.  add.l #35+238*40,a1
  6786.  move.b secdigit,d0
  6787.  move.w #6,d1
  6788.  bsr DRAWDIGIT
  6789.  
  6790.  move.l SCRNSHOWPT,a1
  6791.  add.l #36+238*40,a1
  6792.  move.b thirddigit,d0
  6793.  move.w #6,d1
  6794.  bsr DRAWDIGIT
  6795.  
  6796.  
  6797.  rts
  6798.  
  6799.  
  6800. DRAWDIGIT:
  6801.  ext.w d0
  6802.  lea (a0,d0.w),a2
  6803. charlines:
  6804.  lea 30720(a1),a3 
  6805.  move.b (a2),(a1)
  6806.  move.b 10(a2),10240(a1)
  6807.  move.b 20(a2),20480(a1)
  6808.  move.b 30(a2),(a3)
  6809.  move.b 40(a2),10240(a3)
  6810.  move.b 50(a2),20480(a3)
  6811.  lea 30720(a3),a3
  6812.  move.b 60(a2),(a3)
  6813.  move.b 70(a2),10240(a3)
  6814.  
  6815.  add.w #10*8,a2
  6816.  add.w #40,a1
  6817.  dbra d1,charlines
  6818.  
  6819.  rts
  6820.  
  6821. borderchars: incbin "ab3:includes/bordercharsRAW"
  6822.  
  6823. NARRATOR:
  6824.  
  6825. ; sub.w #1,NARRTIME
  6826. ; bge .NOCHARYET
  6827. ; move.w #3,NARRTIME
  6828.  
  6829.  move.l #SCROLLSCRN,d1
  6830.  move.w d1,scroll
  6831.  swap d1
  6832.  move.w d1,scrolh
  6833.  
  6834.  move.w SCROLLTIMER,d0
  6835.  subq #1,d0
  6836.  move.w d0,SCROLLTIMER
  6837.  cmp.w #40,d0
  6838.  bge .NOCHARYET
  6839.  tst.w d0
  6840.  bge.s .okcha
  6841.  
  6842.  move.w #150,SCROLLTIMER
  6843.  bra .NOCHARYET
  6844.  
  6845. .okcha:
  6846.  
  6847.  move.l #SCROLLSCRN,a0
  6848.  add.w SCROLLXPOS,a0
  6849.  
  6850.  moveq #1,d7
  6851. .doachar: 
  6852.  
  6853.  move.l SCROLLPOINTER,a1
  6854.  moveq #0,d1
  6855.  move.b (a1)+,d1    ; character
  6856.  move.l a1,d2
  6857.  cmp.l ENDSCROLL,d2
  6858.  blt.s .notrestartscroll
  6859.  move.l #BLANKSCROLL,a1
  6860.  move.l #BLANKSCROLL+80,ENDSCROLL
  6861. .notrestartscroll
  6862.  move.l a1,SCROLLPOINTER
  6863.  
  6864.  move.l #SCROLLCHARS,a1
  6865.  asl.w #3,d1
  6866.  add.w d1,a1
  6867.  
  6868.  move.b (a1)+,(a0)
  6869.  move.b (a1)+,80(a0)
  6870.  move.b (a1)+,80*2(a0)
  6871.  move.b (a1)+,80*3(a0)
  6872.  move.b (a1)+,80*4(a0)
  6873.  move.b (a1)+,80*5(a0)
  6874.  move.b (a1)+,80*6(a0)
  6875.  move.b (a1)+,80*7(a0)
  6876.  
  6877.  addq #1,a0
  6878.  dbra d7,.doachar
  6879.  
  6880.  move.w SCROLLXPOS,d0
  6881.  addq #2,d0
  6882.  move.w d0,SCROLLXPOS
  6883.  cmp.w #80,d0
  6884.  blt .NOCHARYET
  6885.  move.w #0,SCROLLXPOS
  6886.  
  6887. .NOCHARYET:
  6888.  rts
  6889.  
  6890. ; cmp.w OldAmmo,d0
  6891. ; bne.s .gottochange
  6892.  
  6893. NARRTIME: dc.w 5
  6894.  
  6895. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6896.  
  6897. .NoChange
  6898.  rts
  6899.  
  6900. .gottochange:
  6901.   
  6902.  blt LessAmmo
  6903.  cmp.w #63,Ammo
  6904.  blt.s .NotMax
  6905.  move.w #63,Ammo
  6906. .NotMax:
  6907.  
  6908.  move.w Ammo,d0
  6909.  move.w OldAmmo,d2
  6910.  sub.w d0,d2
  6911.  beq.s .NoChange
  6912.  neg.w d2
  6913.  
  6914.  move.w #63,d3
  6915.  sub.w d0,d3
  6916.  
  6917.  move.l #Ammunition,a0
  6918.  lea (a0,d3.w*8),a0
  6919. ; move.l #borders+5184+25*16+1,a1
  6920.  lsl.w #5,d3
  6921.  add.w d3,a1
  6922.  lea 2592(a1),a2
  6923.  
  6924. AmmoRise:
  6925.  move.b (a0)+,(a1)
  6926.  move.b (a0)+,8(a1)
  6927.  add.w #16,a1
  6928.  move.b (a0)+,(a2)
  6929.  move.b (a0)+,8(a2)
  6930.  add.w #16,a2
  6931.  move.b (a0)+,(a1)
  6932.  move.b (a0)+,8(a1)
  6933.  add.w #16,a1
  6934.  move.b (a0)+,(a2)
  6935.  move.b (a0)+,8(a2)
  6936.  add.w #16,a2
  6937.  subq #1,d2
  6938.  bgt.s AmmoRise
  6939.  
  6940.  move.w Ammo,OldAmmo
  6941.  
  6942.  rts 
  6943.  
  6944.  
  6945. LessAmmo: 
  6946.  move.w OldAmmo,d2
  6947.  sub.w d0,d2
  6948.  
  6949.  move.w #63,d3
  6950.  sub.w OldAmmo,d3
  6951.  
  6952. ; move.l #borders++5184+25*16+1,a1
  6953.  asl.w #5,d3
  6954.  add.w d3,a1
  6955.  lea 2592(a1),a2
  6956.  
  6957. AmmoDrain:
  6958.  move.b #0,(a1)
  6959.  move.b #0,8(a1)
  6960.  move.b #0,(a2)
  6961.  move.b #0,8(a2)
  6962.  add.w #16,a1
  6963.  add.w #16,a2
  6964.  move.b #0,(a1)
  6965.  move.b #0,8(a1)
  6966.  move.b #0,(a2)
  6967.  move.b #0,8(a2)
  6968.  add.w #16,a1
  6969.  add.w #16,a2
  6970.  subq #1,d2
  6971.  bgt.s AmmoDrain
  6972.  
  6973.  move.w Ammo,OldAmmo
  6974.  
  6975.  rts 
  6976.  
  6977. nulop:
  6978.  move.w #$0010,$dff000+intreq
  6979.  rte
  6980.  
  6981. doanything: dc.w 0
  6982.  
  6983. end:
  6984. ;     _break #0
  6985.  
  6986.  move.l #$dff000,a6
  6987.  move.w #$f,$dff000+dmacon
  6988. waitfortop22:
  6989.  btst.b #0,intreqrl(a6)
  6990.  beq waitfortop22
  6991. waitfortop222:
  6992.  btst.b #0,intreqrl(a6)
  6993.  beq waitfortop222
  6994.  
  6995.  clr.b dosounds
  6996.  clr.b doanything
  6997.  
  6998.  move.w PLAYERONEHEALTH,Energy
  6999.  cmp.b #'s',mors
  7000.  bne.s .notsl
  7001.  move.w PLAYERTWOHEALTH,Energy
  7002. .notsl:
  7003.  
  7004.  move.l drawpt,d0
  7005.  move.l olddrawpt,drawpt
  7006.  move.l d0,olddrawpt
  7007.  
  7008. ; cmp.b #'b',Prefsfile+3
  7009. ; bne.s .noback
  7010. ; jsr mt_end
  7011. ;.noback
  7012.  
  7013.  tst.w Energy
  7014.  bgt.s wevewon
  7015.  move.w #0,Energy
  7016.  bsr EnergyBar
  7017.  
  7018.  move.l #gameover,mt_data
  7019.  st UseAllChannels
  7020.  clr.b reachedend
  7021.  jsr mt_init
  7022. playgameover:
  7023.  move.l #$dff000,a6
  7024. waitfortop2:
  7025.  
  7026.     
  7027.  btst.b #0,intreqrl(a6)
  7028.  beq waitfortop2
  7029.  move.w #$1,intreq(a6)
  7030.  
  7031.     
  7032.  jsr mt_music
  7033.  
  7034.  
  7035.     
  7036.  tst.b reachedend
  7037.  beq.s playgameover
  7038.  
  7039.  bra wevelost
  7040.  
  7041.  
  7042. wevewon:
  7043.  
  7044.  
  7045.  bsr EnergyBar
  7046.  
  7047.  cmp.b #'n',mors
  7048.  bne.s .nonextlev
  7049.  add.w #1,MAXLEVEL
  7050.  st FINISHEDLEVEL
  7051.  
  7052.  cmp.w #16,MAXLEVEL
  7053.  bne .nonextlev
  7054.  
  7055.  jmp ENDGAMESCROLL
  7056. .nonextlev:
  7057.  
  7058.  move.l #welldone,mt_data
  7059.  st UseAllChannels
  7060.  clr.b reachedend
  7061.  
  7062.  jsr mt_init
  7063. playwelldone:
  7064.  move.l #$dff000,a6
  7065. waitfortop3:
  7066.  btst.b #0,intreqrl(a6)
  7067.  beq waitfortop3
  7068.  move.w #$1,intreq(a6)
  7069.  
  7070.  jsr mt_music
  7071.  
  7072.  tst.b reachedend
  7073.  beq.s playwelldone
  7074.  
  7075. wevelost:
  7076.  
  7077.  PROTICHECK a0
  7078.  
  7079.  jmp closeeverything 
  7080.  
  7081. endnomusic
  7082.  clr.b doanything
  7083.  
  7084.  
  7085. ; cmp.b #'b',Prefsfile+3
  7086. ; bne.s .noback
  7087. ; jsr mt_end
  7088. ;.noback
  7089. *******************************
  7090. ; cmp.b #'n',mors
  7091. ; bne.s .nonextlev
  7092. ; cmp.w #15,MAXLEVEL
  7093. ; bge.s .nonextlev
  7094. ; add.w #1,MAXLEVEL
  7095. ; st FINISHEDLEVEL
  7096. ;.nonextlev:
  7097. ******************************
  7098.  
  7099.  jmp closeeverything
  7100.  
  7101. do32:
  7102.  move.w #31,d7
  7103.  move.w #$180,d1
  7104. across:
  7105.  move.w d1,(a1)+
  7106.  move.w d1,(a3)+
  7107.  move.w #0,(a1)+ 
  7108.  move.w #0,(a3)+
  7109.  add.w #2,d1
  7110.  dbra d7,across
  7111.  rts
  7112.  
  7113. ;string:
  7114. ;    dc.b    'credits',0
  7115.  
  7116. ENDGAMESCROLL:
  7117.  
  7118.  move.w #$fff,MIXCOLL
  7119.  
  7120.  move.w #$1cc1,BOTOFTXT
  7121.  
  7122.  jsr CLRTWEENSCRN
  7123.  
  7124.  move.l #TEXTCOP,$dff080
  7125.  
  7126.  move.l #ENDGAMETEXTy,a0
  7127.  
  7128.  
  7129. SCROLLUP16LINES:
  7130.  
  7131.  move.w #15,d0
  7132.  
  7133. do16
  7134.  move.l #$dff000,a6
  7135.  
  7136.  move.w #0,d6
  7137.  move.w #7,d7
  7138.  
  7139.  move.l #SCROLLSHADES,a5
  7140.  
  7141. fadeupp:
  7142.  
  7143.  move.w (a5,d6.w*2),TOPCOLL
  7144.  move.w (a5,d7.w*2),TXTCOLL
  7145.  
  7146.  
  7147. .wtup
  7148.  btst #5,intreqrl(a6)
  7149.  beq.s .wtup
  7150.  move.w #$20,intreq(a6)
  7151.  
  7152.  add.w #1,d6
  7153.  sub.w #1,d7
  7154.  bne fadeupp
  7155.  
  7156. .wtup2
  7157.  btst #5,intreqrl(a6)
  7158.  beq.s .wtup2
  7159.  move.w #$20,intreq(a6)
  7160.  
  7161.  move.w #0,TOPCOLL
  7162.  move.w #$fff,TXTCOLL
  7163.  
  7164.  WB
  7165.  
  7166.  move.l TEXTSCRN,d1
  7167.  move.l d1,bltdpt(a6)
  7168.  add.l #80,d1
  7169.  move.l d1,bltapt(a6)
  7170.  move.w #$09f0,bltcon0(a6)
  7171.  move.w #$0,bltcon1(a6)
  7172.  move.w #0,bltdmod(a6)
  7173.  move.w #0,bltamod(a6)
  7174.  move.l #-1,bltafwm(a6)
  7175.  
  7176.  move.w #255*64+40,bltsize(a6)
  7177.  
  7178.  WB
  7179.  
  7180.  dbra d0,do16
  7181.  
  7182.  move.l TEXTSCRN,a1
  7183.  move.w #15,d0
  7184.  jsr DRAWLINEOFTEXT
  7185.  
  7186.  add.l #82,a0
  7187.  cmp.l #ENDENDGAMETEXT,a0
  7188.  blt SCROLLUP16LINES
  7189.  
  7190.  move.l #ENDGAMETEXTy,a0
  7191.  bra SCROLLUP16LINES
  7192.  
  7193. SCROLLSHADES:
  7194.  dc.w 0
  7195.  dc.w $333
  7196.  dc.w $666
  7197.  dc.w $888
  7198.  dc.w $aaa
  7199.  dc.w $ccc
  7200.  dc.w $ddd
  7201.  dc.w $eee
  7202.  
  7203. ENDGAMETEXTy:
  7204. ;          12345678901234567890123456789012345678901234567890123456789012345678901234567890
  7205.  dc.b 0,0,"                                                                                "
  7206.  dc.b 0,1,"As the beast and its four servants die, a breathless silence falls, broken      "
  7207.  dc.b 0,1,"only by the hammering of my own heart in my chest.                              "
  7208.  dc.b 0,1,"I run to the now open exit, and out into the maze of corridors through which I  "
  7209.  dc.b 0,1,"came. I encounter many, many aliens, lying twitching on the ground, or utterly  "
  7210.  dc.b 0,1,"still with glazed eyes and green froth drying on their lips. Many seem to have  "
  7211.  dc.b 0,1,"turned their weapons on themselves, unable to bear either the pain or the       "
  7212.  dc.b 0,1,"sudden silence in their minds.                                                  "
  7213.  dc.b 0,0,"                                                                                "
  7214.  dc.b 0,1,"It takes me several hours to locate a working teleport to take me back aboard   "
  7215.  dc.b 0,1,"the orbiting alien ship. The scene there is the same; hordes of aliens, either  "
  7216.  dc.b 0,1,"dead or catatonic, I cannot tell.                                               "
  7217.  dc.b 0,1,"I walk slowly, exhausted, back to the INDOMITABLE, averting my eyes from the    "
  7218.  dc.b 0,1,"pitiful scenes around me. I know that my work is not finished yet.              "
  7219.  dc.b 0,1,"Once aboard, I make my way to the bridge. I manage to restart the main power    "
  7220.  dc.b 0,1,"generators and get basic navigation back on-line. Working from the memories     "
  7221.  dc.b 0,1,"implanted by the dying marine, I painstakingly program the computer to deal     "
  7222.  dc.b 0,1,"the killing blow to the enemy. At last the task is finished. The ship hums into "
  7223.  dc.b 0,1,"life, accellerating slowly out of orbit, towing the massive alien craft and     "
  7224.  dc.b 0,1,"its mindless cargo behind it.                                                   "
  7225.  dc.b 0,1,"As the image of the alien sun grows in the viewscreen, I think about what I     "
  7226.  dc.b 0,1,"have seen. Fragments of technology, stolen from civilisations - how long ago?   "
  7227.  dc.b 0,1,"How long since they were exterminated by these parasites? And how many more     "
  7228.  dc.b 0,1,"if they are allowed to continue?                                                "
  7229.  dc.b 0,1,"The sun looms hideously large before me, seeming at the last moment to slip to  "
  7230.  dc.b 0,1,"one side as the cruiser slingshots itself through the immense gravity well,     "
  7231.  dc.b 0,1,"its speed doubling and doubling again. The ship shudders and groans as the      "
  7232.  dc.b 0,1,"ponderous mass of the alien ship tries to tear itself free. I feel a distant    "
  7233.  dc.b 0,1,"twinge of curiosity as to whether it will succeed.                              "
  7234.  dc.b 0,1,"The navigation computer chatters quietly to itself as it makes tiny             "
  7235.  dc.b 0,1,"course corrections, bringing the payload to bear on its target. I only sit,     "
  7236.  dc.b 0,1,"watching blankly as we hurtle back towards the planet. The navicom beeps        "
  7237.  dc.b 0,1,"quietly to signal the blowing of the explosive bolts holding the docking ring.  "
  7238.  dc.b 0,1,"So great is our speed that the alien ship does not receed, but simply vanishes  "
  7239.  dc.b 0,1,"from sight, tracked only on the readouts of the computers in front of me.       "
  7240.  dc.b 0,1,"One readout in particular occupies my attention. Red numbers spin towards zero  "
  7241.  dc.b 0,1,"as my invisible agent of destruction spins towards oblivion. Three digits, now  "
  7242.  dc.b 0,1,"two, and now only one. I shift my attention to the image of the alien world,    "
  7243.  dc.b 0,1,"receeding behind my ship.                                                       "
  7244.  dc.b 0,0,"                                                                                "
  7245.  dc.b 0,1,"Three...                                                                        "
  7246.  dc.b 0,0,"                                                                                "
  7247.  dc.b 0,1,"Two...                                                                          "
  7248.  dc.b 0,0,"                                                                                "
  7249.  dc.b 0,1,"One...                                                                          "
  7250.  dc.b 0,0,"                                                                                "
  7251.  dc.b 0,1,"Zero.                                                                           "
  7252.  dc.b 0,0,"                                                                                "
  7253.  dc.b 0,0,"                                                                                "
  7254.  dc.b 0,0,"                                                                                "
  7255.  dc.b 0,0,"                                                                                "
  7256.  dc.b 0,1,"Travelling at nearly a quarter of the speed of light, the alien ship smashed    "
  7257.  dc.b 0,1,"into the planet, flashing past the useless orbital defences which should have   "
  7258.  dc.b 0,1,"neutralized it millions of miles earlier. It passed through the twenty miles    "
  7259.  dc.b 0,1,"of atmosphere in a little more than one ten-thousandth of a second. The air     "
  7260.  dc.b 0,1,"directly beneath had no time to be pushed out of the way, and in another        "
  7261.  dc.b 0,1,"tenth of a second it was a molecule-thick layer a thousand miles below the      "
  7262.  dc.b 0,1,"planet's surface.                                                               "
  7263.  dc.b 0,1,"Such was the heat and pressure caused by the impact, that part of the molten    "
  7264.  dc.b 0,1,"core of the planet underwent nuclear fusion, vapourising thousands of billions  "
  7265.  dc.b 0,1,"of tonnes of surrounding material. This expanding superhot plasma cloud forced  "
  7266.  dc.b 0,1,"its way up through the mantle and crust, fracturing the surface of the planet,  "
  7267.  dc.b 0,1,"blowing continent-sized chunks into space and heating the tortured atmosphere   "
  7268.  dc.b 0,1,"to ignition point. Within two minutes of impact, the doomed planet was a        "
  7269.  dc.b 0,1,"misshapen, incandescent ball, with burning fragments spinning deceptively       "
  7270.  dc.b 0,1,"slowly in their brief orbits before re-impacting with fantastic, majestic       "
  7271.  dc.b 0,1,"force.                                                                          "
  7272.  dc.b 0,0,"                                                                                "
  7273.  dc.b 0,0,"                                                                                "
  7274.  dc.b 0,0,"                                                                                "
  7275.  dc.b 0,0,"                                                                                "
  7276.  dc.b 0,1,"In a matter of weeks, the small amount of matter which had undergone fusion     "
  7277.  dc.b 0,1,"burned itself out, but the planet still glowed sullenly from a million cracks   "
  7278.  dc.b 0,1,"and holes in the crust, as it would continue to do for millions of years to     "
  7279.  dc.b 0,1,"come. The world was barren and dead, and the creatures who once roamed its      "
  7280.  dc.b 0,1,"surface no more than a memory in the mind of one man, sleeping dreamlessly      "
  7281.  dc.b 0,1,"as the invisible speck of his ship sped silently on, towards home.              "
  7282.  dc.b 0,0,"                                                                                "
  7283.  dc.b 0,0,"                                                                                "
  7284.  dc.b 0,0,"                                                                                "
  7285.  dc.b 0,0,"                                                                                "
  7286.  dc.b 0,0,"                                                                                "
  7287.  dc.b 0,0,"                                                                                "
  7288.  dc.b 0,0,"                                                                                "
  7289.  dc.b 0,0,"                                                                                "
  7290.  dc.b 0,0,"                                                                                "
  7291.  dc.b 0,0,"                                                                                "
  7292.  dc.b 0,0,"                                                                                "
  7293.  dc.b 0,0,"                                                                                "
  7294.  dc.b 0,0,"                                                                                "
  7295.  dc.b 0,0,"                                                                                "
  7296.  dc.b 0,0,"                                                                                "
  7297.  dc.b 0,0,"                                                                                "
  7298.  dc.b 0,1,"ALIEN BREED 3D II                                                               "
  7299.  dc.b 0,1,"THE KILLING GROUNDS                                                             "
  7300.  dc.b 0,0,"                                                                                "
  7301.  dc.b 0,0,"                                                                                "
  7302.  dc.b 0,1,"A Team 17 Game                                                                  "
  7303.  dc.b 0,0,"                                                                                "
  7304.  dc.b 0,1,"Produced in association with OCEAN Software                                     "
  7305.  dc.b 0,0,"                                                                                "
  7306.  dc.b 0,0,"                                                                                "
  7307.  dc.b 0,1,"Game Design, Game Code, Editor Code and In-Game Text                            "
  7308.  dc.b 0,0,"                                                                                "
  7309.  dc.b 0,1,"Andrew Clitheroe                                                                "
  7310.  dc.b 0,0,"                                                                                "
  7311.  dc.b 0,0,"                                                                                "
  7312.  dc.b 0,1,"Graphics                                                                        "
  7313.  dc.b 0,0,"                                                                                "
  7314.  dc.b 0,1,"Michael Green                                                                   "
  7315.  dc.b 0,0,"                                                                                "
  7316.  dc.b 0,0,"                                                                                "
  7317.  dc.b 0,1,"3D Object Designs, 3D Editors, Serial and OS code                               "
  7318.  dc.b 0,0,"                                                                                "
  7319.  dc.b 0,1,"Charles Blessing                                                                "
  7320.  dc.b 0,0,"                                                                                "
  7321.  dc.b 0,0,"                                                                                "
  7322.  dc.b 0,1,"Music                                                                           "
  7323.  dc.b 0,0,"                                                                                "
  7324.  dc.b 0,1,"Ben Chanter                                                                     "
  7325.  dc.b 0,0,"                                                                                "
  7326.  dc.b 0,0,"                                                                                "
  7327.  dc.b 0,1,"Project Manager                                                                 "
  7328.  dc.b 0,0,"                                                                                "
  7329.  dc.b 0,1,"Phil Quirke-Webster                                                             "
  7330.  dc.b 0,0,"                                                                                "
  7331.  dc.b 0,0,"                                                                                "
  7332.  dc.b 0,1,"Playtesting                                                                     "
  7333.  dc.b 0,0,"                                                                                "
  7334.  dc.b 0,1,"Phil and the Wolves                                                             "
  7335.  dc.b 0,0,"                                                                                "
  7336.  dc.b 0,0,"                                                                                "
  7337.  dc.b 0,1,"Additional Graphics                                                             "
  7338.  dc.b 0,0,"                                                                                "
  7339.  dc.b 0,1,"Pete Lyons                                                                      "
  7340.  dc.b 0,0,"                                                                                "
  7341.  dc.b 0,0,"                                                                                "
  7342.  
  7343.  
  7344. ENDENDGAMETEXT:
  7345.  
  7346.  
  7347. ;
  7348. ;    move.l    4.w,a6
  7349. ;    move.l    #string,d1
  7350. ;    moveq    #0,d2
  7351. ;    moveq    #0,d3
  7352. ;    jsr    _LVOExecute(a6)
  7353.  
  7354. ; include "endscroll.s"
  7355.  
  7356. ***********************************
  7357.  include "ab3:source_4000/CD32JOY"
  7358.  
  7359.  
  7360.  
  7361. *************************************
  7362. * Set left and right clip values
  7363. *************************************
  7364.  
  7365.  
  7366.  
  7367. NEWsetlclip:
  7368.  move.l #OnScreen,a1
  7369.  move.l #Rotated,a2
  7370.  move.l CONNECT_TABLE,a3
  7371.  move.l Points,a4
  7372.  
  7373.  move.w (a0),d0
  7374.  bge.s .notignoreleft
  7375.  
  7376. ; move.l #0,(a6)
  7377.  
  7378.  bra .leftnotoktoclip
  7379. .notignoreleft:
  7380.  
  7381.  move.w 6(a2,d0*8),d3    ; left z val
  7382.  bgt.s .leftclipinfront
  7383.  addq #2,a0
  7384.  rts
  7385.  
  7386.  tst.w 6(a2,d0*8)
  7387.  bgt.s .leftnotoktoclip
  7388. .ignoreboth:
  7389. ; move.l #0,(a6)
  7390. ; move.l #96*65536,4(a6)
  7391.  move.w #0,leftclip
  7392.  move.w RIGHTX,rightclip
  7393.  addq #8,a6
  7394.  addq #2,a0
  7395.  rts
  7396.  
  7397. .leftclipinfront:
  7398.  move.w (a1,d0*2),d1    ; left x on screen
  7399.  move.w (a0),d2
  7400.  move.w 2(a3,d2.w*4),d2
  7401.  move.w (a1,d2.w*2),d2
  7402.  cmp.w d1,d2
  7403.  bgt.s .leftnotoktoclip
  7404.  
  7405.  
  7406. *************************************
  7407.  
  7408. ; move.w 2(a3,d0.w*4),d6
  7409. ; move.w (a4,d0.w*4),d2
  7410. ; move.w 2(a4,d0.w*4),d3
  7411. ; move.w (a4,d6.w*4),d4
  7412. ; move.w 2(a4,d6.w*4),d5
  7413. ;
  7414. ; sub.w d2,d4    ;dx
  7415. ; sub.w d3,d5    ;dz
  7416. ; move.w xoff,d0
  7417. ; move.w zoff,d6
  7418. ; sub.w d2,d0
  7419. ; sub.w d3,d6
  7420. ; muls d0,d4
  7421. ; muls d6,d5
  7422. ; add.l d4,d5
  7423. ; bge.s .leftnotoktoclip
  7424.  
  7425. *************************************
  7426.  
  7427.  
  7428.  
  7429. ; move.w d1,(a6)
  7430. ; move.w d3,2(a6)
  7431.  cmp.w leftclip,d1
  7432.  ble.s .leftnotoktoclip
  7433.  move.w d1,leftclip
  7434. .leftnotoktoclip:
  7435.  
  7436.  addq #2,a0
  7437.  
  7438.  rts
  7439.  
  7440. NEWsetrclip
  7441.  move.l #OnScreen,a1
  7442.  move.l #Rotated,a2
  7443.  move.l CONNECT_TABLE,a3
  7444.  move.w (a0),d0
  7445.  bge.s .notignoreright
  7446. ; move.w #96,4(a6)
  7447. ; move.w #0,6(a6)
  7448.  move.w #0,d4
  7449.  bra .rightnotoktoclip
  7450. .notignoreright:
  7451.  move.w 6(a2,d0*8),d4    ; right z val
  7452.  bgt.s .rightclipinfront
  7453. ; move.w #96,4(a6)
  7454. ; move.w #0,6(a6)
  7455.  bra.s .rightnotoktoclip
  7456.  
  7457. .rightclipinfront:
  7458.  move.w (a1,d0*2),d1    ; right x on screen
  7459.  move.w (a0),d2
  7460.  move.w (a3,d2.w*4),d2
  7461.  move.w (a1,d2.w*2),d2
  7462.  cmp.w d1,d2
  7463.  blt.s .rightnotoktoclip
  7464. ; move.w d1,4(a6)
  7465. ; move.w d4,6(a6)
  7466.  
  7467.  
  7468. *************************************
  7469.  
  7470. ; move.w (a3,d0.w*4),d6
  7471. ; move.w (a4,d0.w*4),d2
  7472. ; move.w 2(a4,d0.w*4),d3
  7473. ; move.w (a4,d6.w*4),d4
  7474. ; move.w 2(a4,d6.w*4),d5
  7475. ;
  7476. ; sub.w d2,d4    ;dx
  7477. ; sub.w d3,d5    ;dz
  7478. ; move.w xoff,d0
  7479. ; move.w zoff,d6
  7480. ; sub.w d2,d0
  7481. ; sub.w d3,d6
  7482. ; muls d0,d4
  7483. ; muls d6,d5
  7484. ; add.l d4,d5
  7485. ; ble.s .rightnotoktoclip
  7486.  
  7487. *************************************
  7488.  
  7489.  
  7490.  
  7491.  cmp.w rightclip,d1
  7492.  bge.s .rightnotoktoclip
  7493.  addq #1,d1
  7494.  move.w d1,rightclip
  7495. .rightnotoktoclip:
  7496.  addq #8,a6
  7497.  addq #2,a0
  7498.  rts
  7499.  
  7500. FIRSTsetlrclip:
  7501.  move.l #OnScreen,a1
  7502.  move.l #Rotated,a2
  7503.  
  7504.  move.w (a0)+,d0
  7505.  bge.s .notignoreleft
  7506.  bra .leftnotoktoclip
  7507. .notignoreleft:
  7508.  
  7509.  move.w 6(a2,d0*8),d3    ; left z val
  7510.  bgt.s .leftclipinfront
  7511.  
  7512.  move.w (a0),d0
  7513.  blt.s .ignoreboth
  7514.  tst.w 6(a2,d0*8)
  7515.  bgt.s .leftnotoktoclip
  7516. .ignoreboth
  7517.  move.w RIGHTX,rightclip
  7518.  move.w #0,leftclip
  7519.  addq #2,a0
  7520.  rts
  7521.  
  7522. .leftclipinfront:
  7523.  move.w (a1,d0*2),d1    ; left x on screen
  7524.  cmp.w leftclip,d1
  7525.  ble.s .leftnotoktoclip
  7526.  move.w d1,leftclip
  7527. .leftnotoktoclip:
  7528.  
  7529.  move.w (a0)+,d0
  7530.  bge.s .notignoreright
  7531.  move.w #0,d4
  7532.  bra .rightnotoktoclip
  7533. .notignoreright:
  7534.  move.w 6(a2,d0*8),d4    ; right z val
  7535.  ble.s .rightnotoktoclip
  7536.  
  7537. .rightclipinfront:
  7538.  move.w (a1,d0*2),d1    ; right x on screen
  7539.  addq #1,d1
  7540.  cmp.w rightclip,d1
  7541.  bge.s .rightnotoktoclip
  7542.  move.w d1,rightclip
  7543. .rightnotoktoclip:
  7544.  
  7545. ; move.w leftclip,d0
  7546. ; move.w rightclip,d1
  7547. ; cmp.w d0,d1
  7548. ; bge.s .noswap
  7549. ; move.w #192,rightclip
  7550. ; move.w #0,leftclip
  7551. ;.noswap:
  7552.  
  7553.  rts
  7554.  
  7555.  
  7556. leftclip2: dc.w 0
  7557. rightclip2: dc.w 0
  7558. ZoneBright: dc.w 0
  7559.  
  7560. npolys: dc.w 0
  7561.  
  7562. PLR1_fire: dc.b 0
  7563. PLR2_fire: dc.b 0
  7564.  
  7565. *****************************************************
  7566.  
  7567.  
  7568. pastdata:
  7569. ***********************************
  7570. * This routine animates brightnesses.
  7571.  
  7572.  
  7573. liftpt: dc.l liftanimtab
  7574.  
  7575. brightpt:
  7576.  dc.l brightanimtab
  7577.  
  7578.  
  7579. liftanim:
  7580.  rts
  7581.  
  7582. ******************************
  7583.  include "ab3:source_4000/ObjectMove"
  7584.  include "ab3:source_4000/newAnims"
  7585.  include "ab3:source_4000/airoutine.s"
  7586. ******************************
  7587. startpass:
  7588. ; include "ab3:source_4000/password_reloc.s"
  7589. endpass:
  7590.  
  7591. rotanimpt: dc.w 0
  7592. xradd: dc.w 5
  7593. yradd: dc.w 8
  7594. xrpos: dc.w 320
  7595. yrpos: dc.w 320
  7596.  
  7597. rotanim:
  7598.  rts
  7599.  
  7600. option:
  7601.  dc.l 0,0
  7602.  
  7603. ********** WALL STUFF *******************************
  7604.  
  7605.  include "AB3:source_4000/hireswall.s"
  7606.  include "AB3:source_4000/hiresgourwall.s"
  7607.  
  7608. *****************************************************
  7609.  
  7610. ******************************************
  7611. * floor polygon
  7612.  
  7613. numsidestd: dc.w 0
  7614. bottomline: dc.w 0
  7615.  
  7616. checkforwater:
  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.  move.w (a0)+,d6    ; sides-1
  7629.  add.w d6,d6
  7630.  add.w d6,a0
  7631.  add.w #4+6,a0
  7632.  rts
  7633.  
  7634.  rts
  7635.  
  7636. ;NewCornerBuff:
  7637. ; ds.l 100
  7638. CLRNOFLOOR: dc.w 0
  7639.  
  7640. itsafloordraw:
  7641.  
  7642. * If D0 =1 then its a floor otherwise (=2) it's
  7643. * a roof.
  7644.  
  7645.  move.w #0,above
  7646.  move.w (a0)+,d6    ; ypos of poly
  7647.  
  7648.  tst.b usewater
  7649.  beq.s .oknon
  7650.  tst.b DOANYWATER
  7651.  beq dontdrawreturn
  7652. .oknon
  7653.  
  7654.  move.w d6,d7
  7655.  ext.l d7
  7656.  asl.l #6,d7
  7657.  cmp.l TOPOFROOM,d7
  7658.  blt checkforwater
  7659.  cmp.l BOTOFROOM,d7
  7660.  bgt.s dontdrawreturn
  7661.  
  7662.  move.w leftclip,d7
  7663.  cmp.w rightclip,d7
  7664.  bge.s dontdrawreturn
  7665.  
  7666.  sub.w flooryoff,d6
  7667.  bgt.s below
  7668.  blt.s aboveplayer
  7669.  
  7670.  tst.b usewater
  7671.  beq.s .notwater
  7672.  
  7673.  move.l Roompt,a1
  7674.  move.w (a1),d7
  7675.  cmp.w currzone,d7
  7676.  
  7677.  bne.s .notwater
  7678.  
  7679.  st fillscrnwater
  7680.  
  7681. .notwater:
  7682.  
  7683.  
  7684. dontdrawreturn:
  7685.  move.w (a0)+,d6    ; sides-1
  7686.  add.w d6,d6
  7687.  add.w d6,a0
  7688.  add.w #4+6,a0
  7689.  rts
  7690. aboveplayer:
  7691.  
  7692.  tst.b usewater
  7693.  beq.s .notwater
  7694.  
  7695.  move.l Roompt,a1
  7696.  move.w (a1),d7
  7697.  cmp.w currzone,d7
  7698.  bne.s .notwater
  7699.  
  7700.  move.b #$f,fillscrnwater
  7701.  
  7702. .notwater:
  7703.  
  7704.  btst #1,d0
  7705.  beq.s dontdrawreturn
  7706.  move.w MIDDLEY,d7
  7707.  sub.w topclip,d7 
  7708.  ble.s dontdrawreturn
  7709.  move.w #1,d0
  7710.  move.w d0,above
  7711.  neg.w d6
  7712.  bra.s notbelow
  7713. below:
  7714.  move.w botclip,d7
  7715.  sub.w MIDDLEY,d7
  7716.  ble.s dontdrawreturn
  7717. notbelow:
  7718.  btst #0,d0
  7719.  beq.s dontdrawreturn
  7720.  move.w d6,distaddr
  7721.  muls #64,d6
  7722.  move.l d6,ypos
  7723.  ext.l d7
  7724.  divs.l d7,d6        ; zpos of bottom
  7725.             ; visible line
  7726.  
  7727.  beq dontdrawreturn
  7728.  
  7729.  cmp.l #32767,d6
  7730.  bgt dontdrawreturn
  7731.             
  7732.  move.w d6,minz
  7733.  move.w d7,bottomline
  7734.  
  7735. ; Go round each point finding out
  7736. ; if it should be visible or not.
  7737.  
  7738.  move.l a0,-(a7)
  7739.  
  7740.  move.w (a0)+,d7    ; number of sides
  7741.  move.l #Rotated,a1
  7742.  move.l #OnScreen,a2
  7743. ; move.l #NewCornerBuff,a3
  7744.  moveq #0,d4
  7745.  moveq #0,d5
  7746.  moveq #0,d6
  7747.  clr.b anyclipping
  7748.  
  7749. cornerprocessloop:
  7750.  
  7751.  move.w (a0)+,d0
  7752.  and.w #$fff,d0
  7753.  move.w 6(a1,d0.w*8),d1
  7754.  ble  .canttell
  7755.  
  7756.  move.w (a2,d0.w*2),d3
  7757.  cmp.w leftclip,d3
  7758.  bgt.s .nol
  7759.  st d4
  7760.  st anyclipping
  7761.  bra.s .nos
  7762. .nol:
  7763.  cmp.w rightclip,d3
  7764.  blt.s .nor
  7765.  st d6
  7766.  st anyclipping
  7767.  bra.s .nos
  7768. .nor:
  7769.  st d5
  7770. .nos:
  7771.  bra .cantell
  7772.  
  7773. .canttell:
  7774.  st d5
  7775.  st anyclipping
  7776.  
  7777. .cantell:
  7778.  
  7779.  
  7780.  dbra d7,cornerprocessloop
  7781.  
  7782.  
  7783.  move.l (a7)+,a0
  7784.  tst.b d5
  7785.  bne.s somefloortodraw
  7786.  eor.b d4,d6
  7787.  bne dontdrawreturn
  7788.  
  7789. somefloortodraw:
  7790.  
  7791.  tst.b gourfloor
  7792.  bne goursides
  7793.  
  7794.  move.w #300,top
  7795.  move.w #-1,bottom
  7796.  move.w #0,drawit
  7797.  move.l #Rotated,a1
  7798.  move.l #OnScreen,a2
  7799.  move.w (a0)+,d7    ; no of sides
  7800. sideloop:
  7801.  move.w minz,d6
  7802.  move.w (a0)+,d1
  7803.  move.w (a0),d3
  7804.  and.w #$fff,d1
  7805.  and.w #$fff,d3
  7806.  
  7807.  move.w 6(a1,d1*8),d4    ;first z
  7808.  cmp.w d6,d4
  7809.  bgt firstinfront
  7810.  move.w 6(a1,d3*8),d5    ; sec z
  7811.  cmp.w d6,d5
  7812.  ble bothbehind
  7813. ** line must be on left and partially behind.
  7814.  sub.w d5,d4
  7815.  move.l (a1,d1*8),d0
  7816.  sub.l (a1,d3*8),d0
  7817.  asr.l #7,d0
  7818.  sub.w d5,d6
  7819.  muls d6,d0    ; new x coord
  7820.  divs d4,d0
  7821.  ext.l d0
  7822.  asl.l #7,d0
  7823.  
  7824.  add.l (a1,d3*8),d0
  7825.  move.w minz,d4
  7826.  move.w (a2,d3*2),d2
  7827.  divs d4,d0
  7828.  add.w MIDDLEX,d0
  7829.  move.l ypos,d3
  7830.  divs d5,d3
  7831.  move.w bottomline,d1 
  7832.  bra lineclipped
  7833.  
  7834. firstinfront:
  7835.  move.w 6(a1,d3*8),d5    ; sec z
  7836.  cmp.w d6,d5
  7837.  bgt bothinfront
  7838. ** line must be on right and partially behind.
  7839.  sub.w d4,d5    ; dz
  7840.  move.l (a1,d3*8),d2
  7841.  sub.l (a1,d1*8),d2    ; dx
  7842.  sub.w d4,d6
  7843.  asr.l #7,d2
  7844.  muls d6,d2    ; new x coord
  7845.  divs d5,d2
  7846.  ext.l d2
  7847.  asl.l #7,d2
  7848.  add.l (a1,d1*8),d2
  7849.  move.w minz,d5
  7850.  move.w (a2,d1*2),d0
  7851.  divs d5,d2
  7852.  add.w MIDDLEX,d2
  7853.  move.l ypos,d1
  7854.  divs d4,d1
  7855.  move.w bottomline,d3 
  7856.  bra lineclipped
  7857.  
  7858. bothinfront:
  7859.  
  7860. * Also, usefully enough, both are on-screen
  7861. * so no bottom clipping is needed.
  7862.  
  7863.  move.w (a2,d1*2),d0    ; first x
  7864.  move.w (a2,d3*2),d2    ; second x
  7865.  move.l ypos,d1
  7866.  move.l d1,d3
  7867.  divs d4,d1        ; first y
  7868.  divs d5,d3        ; second y
  7869. lineclipped:
  7870.  move.l #rightsidetab,a3
  7871.  cmp.w d1,d3
  7872.  beq lineflat
  7873.  st drawit
  7874.  bgt lineonright
  7875.  move.l #leftsidetab,a3
  7876.  exg d1,d3
  7877.  exg d0,d2
  7878.  
  7879.  lea (a3,d1*2),a3
  7880.  
  7881.  cmp.w top(pc),d1
  7882.  bge.s .nonewtop
  7883.  move.w d1,top
  7884. .nonewtop:
  7885.  cmp.w bottom(pc),d3
  7886.  ble.s .nonewbot
  7887.  move.w d3,bottom
  7888. .nonewbot:
  7889.  
  7890.  sub.w d1,d3    ; dy
  7891.  sub.w d0,d2    ; dx
  7892.  
  7893.  blt .linegoingleft
  7894.  
  7895.  ext.l d2
  7896.  divs d3,d2
  7897.  move.w d2,d6
  7898.  swap d2
  7899.  
  7900. ; moveq #0,d6
  7901. ; sub.w d3,d2
  7902. ; blt.s .noco
  7903. ;.makeco
  7904. ; addq #1,d6
  7905. ; sub.w d3,d2
  7906. ; bge.s .makeco
  7907. ;.noco
  7908. ; add.w d3,d2
  7909.  
  7910.  move.w d3,d4
  7911.  move.w d3,d5
  7912.  subq #1,d5
  7913.  move.w d6,d1
  7914.  addq #1,d1
  7915.  
  7916. .pixlopright:
  7917.  move.w d0,(a3)+
  7918.  sub.w d2,d4
  7919.  bge.s .nobigstep
  7920.  add.w d1,d0
  7921.  add.w d3,d4
  7922.  dbra d5,.pixlopright
  7923.  bra lineflat
  7924. .nobigstep
  7925.  add.w d6,d0
  7926.  dbra d5,.pixlopright
  7927.  bra lineflat
  7928.  
  7929. .linegoingleft:
  7930.  
  7931.  neg.w d2
  7932.  
  7933.  ext.l d2
  7934.  divs d3,d2
  7935.  move.w d2,d6
  7936.  swap d2
  7937.  
  7938.  
  7939. ; moveq #0,d6
  7940. ; sub.w d3,d2
  7941. ; blt.s .nocol
  7942. ;.makecol
  7943. ; addq #1,d6
  7944. ; sub.w d3,d2
  7945. ; bge.s .makecol
  7946. ;.nocol
  7947. ; add.w d3,d2
  7948.  
  7949.  
  7950.  
  7951.  move.w d3,d4
  7952.  move.w d3,d5
  7953.  subq #1,d5
  7954.  
  7955.  move.w d6,d1
  7956.  addq #1,d1
  7957.  
  7958. .pixlopleft:
  7959.  sub.w d2,d4
  7960.  bge.s .nobigstepl
  7961.  sub.w d1,d0
  7962.  add.w d3,d4
  7963.  move.w d0,(a3)+
  7964.  dbra d5,.pixlopleft
  7965.  bra lineflat
  7966.  
  7967. .nobigstepl
  7968.  sub.w d6,d0
  7969.  move.w d0,(a3)+
  7970.  dbra d5,.pixlopleft
  7971.  bra lineflat
  7972.  
  7973. lineonright:
  7974.  
  7975.  lea (a3,d1*2),a3
  7976.  
  7977.  cmp.w top(pc),d1
  7978.  bge.s .nonewtop
  7979.  move.w d1,top
  7980. .nonewtop:
  7981.  cmp.w bottom(pc),d3
  7982.  ble.s .nonewbot
  7983.  move.w d3,bottom
  7984. .nonewbot:
  7985.  
  7986.  sub.w d1,d3    ; dy
  7987.  sub.w d0,d2    ; dx
  7988.  blt .linegoingleft
  7989. ; addq #1,d0
  7990.  ext.l d2
  7991.  divs d3,d2
  7992.  move.w d2,d6
  7993.  swap d2
  7994.  
  7995. ; moveq #0,d6
  7996. ; sub.w d3,d2
  7997. ; blt.s .noco
  7998. ;.makeco
  7999. ; addq #1,d6
  8000. ; sub.w d3,d2
  8001. ; bge.s .makeco
  8002. ;.noco
  8003. ; add.w d3,d2
  8004.  
  8005.  move.w d3,d4
  8006.  move.w d3,d5
  8007.  subq #1,d5
  8008.  move.w d6,d1
  8009.  addq #1,d1
  8010.  
  8011. .pixlopright:
  8012.  sub.w d2,d4
  8013.  bge.s .nobigstep
  8014.  add.w d1,d0
  8015.  add.w d3,d4
  8016.  move.w d0,(a3)+
  8017.  dbra d5,.pixlopright
  8018.  bra lineflat
  8019.  
  8020. .nobigstep
  8021.  add.w d6,d0
  8022.  move.w d0,(a3)+
  8023.  dbra d5,.pixlopright
  8024.  bra lineflat
  8025.  
  8026. .linegoingleft:
  8027. ; addq #1,d0
  8028.  neg.w d2
  8029.  
  8030.  ext.l d2
  8031.  divs d3,d2
  8032.  move.w d2,d6
  8033.  swap d2
  8034.  
  8035.  
  8036. ; moveq #0,d6
  8037. ; sub.w d3,d2
  8038. ; blt.s .nocol
  8039. ;.makecol
  8040. ; addq #1,d6
  8041. ; sub.w d3,d2
  8042. ; bge.s .makecol
  8043. ;.nocol
  8044. ; add.w d3,d2
  8045.  
  8046.  move.w d3,d4
  8047.  move.w d3,d5
  8048.  subq #1,d5
  8049.  move.w d6,d1
  8050.  addq #1,d1
  8051.  
  8052. .pixlopleft:
  8053.  move.w d0,(a3)+
  8054.  sub.w d2,d4
  8055.  bge.s .nobigstepl
  8056.  sub.w d1,d0
  8057.  add.w d3,d4
  8058.  dbra d5,.pixlopleft
  8059.  bra lineflat
  8060.  
  8061. .nobigstepl
  8062.  sub.w d6,d0
  8063.  dbra d5,.pixlopleft
  8064.  
  8065. lineflat:
  8066.  
  8067. bothbehind:
  8068.  dbra d7,sideloop
  8069.  bra pastsides
  8070.  
  8071. fbr: dc.w 0
  8072. sbr: dc.w 0
  8073. FloorPtBrights: dc.l 0
  8074.  
  8075. goursides:
  8076.  
  8077.  move.w #300,top
  8078.  move.w #-1,bottom
  8079.  move.w #0,drawit
  8080.  move.l #Rotated,a1
  8081.  move.l #OnScreen,a2
  8082.  move.w (a0)+,d7    ; no of sides
  8083. sideloopGOUR:
  8084.  move.w minz,d6
  8085.  move.w (a0)+,d1
  8086.  move.w (a0),d3
  8087.  
  8088.  move.w d1,d4
  8089.  move.w d3,d5
  8090.  and.w #$0fff,d1
  8091.  and.w #$0fff,d3
  8092.  
  8093.  rol.w #4,d4
  8094.  rol.w #4,d5
  8095.  and.w #$f,d4
  8096.  and.w #$f,d5
  8097.  
  8098.  move.l FloorPtBrights,a4
  8099.  move.w (a4,d4.w*8),d4
  8100.  bge.s .okpos1
  8101.  neg.w d4
  8102. .okpos1:
  8103.  sub.w #300,d4
  8104.  move.w d4,fbr
  8105.  move.w (a4,d5.w*8),d4
  8106.  bge.s .okpos2
  8107.  neg.w d4
  8108. .okpos2:
  8109.  sub.w #300,d4
  8110.  move.w d4,sbr
  8111.  
  8112.  move.w 6(a1,d1*8),d4    ;first z
  8113.  cmp.w d6,d4
  8114.  bgt firstinfrontGOUR
  8115.  move.w 6(a1,d3*8),d5    ; sec z
  8116.  cmp.w d6,d5
  8117.  ble bothbehindGOUR
  8118. ** line must be on left and partially behind.
  8119.  sub.w d5,d4
  8120.  
  8121.  move.w fbr,d0
  8122.  sub.w sbr,d0
  8123.  sub.w d5,d6
  8124.  muls d6,d0
  8125.  divs d4,d0
  8126.  add.w sbr,d0
  8127.  move.w d0,fbr
  8128.  
  8129.  move.l (a1,d1*8),d0
  8130.  sub.l (a1,d3*8),d0
  8131.  asr.l #7,d0
  8132.  muls d6,d0    ; new x coord
  8133.  divs d4,d0
  8134.  ext.l d0
  8135.  asl.l #7,d0
  8136.  
  8137.  add.l (a1,d3*8),d0
  8138.  move.w minz,d4
  8139.  move.w (a2,d3*2),d2
  8140.  divs d4,d0
  8141.  add.w MIDDLEX,d0
  8142.  move.l ypos,d3
  8143.  divs d5,d3
  8144.  
  8145.  move.w bottomline,d1 
  8146.  bra lineclippedGOUR
  8147.  
  8148. firstinfrontGOUR:
  8149.  move.w 6(a1,d3*8),d5    ; sec z
  8150.  cmp.w d6,d5
  8151.  bgt bothinfrontGOUR
  8152. ** line must be on right and partially behind.
  8153.  sub.w d4,d5    ; dz
  8154.  
  8155.  move.w sbr,d2
  8156.  sub.w fbr,d2
  8157.  sub.w d4,d6
  8158.  muls d6,d2
  8159.  divs d5,d2
  8160.  add.w fbr,d2
  8161.  move.w d2,sbr
  8162.  
  8163.  move.l (a1,d3*8),d2
  8164.  sub.l (a1,d1*8),d2    ; dx
  8165.  asr.l #7,d2
  8166.  muls d6,d2    ; new x coord
  8167.  divs d5,d2
  8168.  ext.l d2
  8169.  asl.l #7,d2
  8170.  add.l (a1,d1*8),d2
  8171.  move.w minz,d5
  8172.  move.w (a2,d1*2),d0
  8173.  divs d5,d2
  8174.  add.w MIDDLEX,d2
  8175.  move.l ypos,d1
  8176.  divs d4,d1
  8177.  move.w bottomline,d3 
  8178.  bra lineclippedGOUR
  8179.  
  8180. bothinfrontGOUR:
  8181.  
  8182. * Also, usefully enough, both are on-screen
  8183. * so no bottom clipping is needed.
  8184.  
  8185.  move.w (a2,d1*2),d0    ; first x
  8186.  move.w (a2,d3*2),d2    ; second x
  8187.  move.l ypos,d1
  8188.  move.l d1,d3
  8189.  divs d4,d1        ; first y
  8190.  divs d5,d3        ; second y
  8191. lineclippedGOUR:
  8192.  move.l #rightsidetab,a3
  8193.  cmp.w d1,d3
  8194.  bne linenotflatGOUR
  8195.  
  8196. ; move.w fbr,d4
  8197. ; move.w sbr,d5
  8198. ; cmp.w d0,d2
  8199. ; bgt.s .nsw
  8200. ; exg d4,d5
  8201. ;.nsw:
  8202.  
  8203. ; move.l #leftbrighttab,a3
  8204. ; move.w d4,(a3,d3.w)
  8205. ; move.l #rightbrighttab,a3
  8206. ; move.w d5,(a3,d3.w) 
  8207.  bra lineflatGOUR
  8208.  
  8209. linenotflatGOUR
  8210.  st drawit
  8211.  bgt lineonrightGOUR
  8212.  move.l #leftsidetab,a3
  8213.  exg d1,d3
  8214.  exg d0,d2
  8215.  
  8216.  lea (a3,d1*2),a3
  8217.  lea leftbrighttab-leftsidetab(a3),a4
  8218.  
  8219.  cmp.w top(pc),d1
  8220.  bge.s .nonewtop
  8221.  move.w d1,top
  8222. .nonewtop:
  8223.  cmp.w bottom(pc),d3
  8224.  ble.s .nonewbot
  8225.  move.w d3,bottom
  8226. .nonewbot:
  8227.  
  8228.  sub.w d1,d3    ; dy
  8229.  sub.w d0,d2    ; dx
  8230.  
  8231.  blt .linegoingleft
  8232.  
  8233.  ext.l d2
  8234.  divs d3,d2
  8235.  move.w d2,d6
  8236.  swap d2
  8237.  move.w d2,a5
  8238.  
  8239. ; moveq #0,d6
  8240. ; sub.w d3,d2
  8241. ; blt.s .noco
  8242. ;.makeco
  8243. ; addq #1,d6
  8244. ; sub.w d3,d2
  8245. ; bge.s .makeco
  8246. ;.noco
  8247. ; add.w d3,d2
  8248.  
  8249.  move.w d3,d4
  8250.  move.w d3,d5
  8251.  subq #1,d5
  8252.  move.w d6,d1
  8253.  addq #1,d1
  8254.  move.w d1,a6
  8255.  
  8256.  moveq #0,d1
  8257.  move.w sbr,d1
  8258.  move.w fbr,d2
  8259.  sub.w d1,d2
  8260.  ext.l d2
  8261.  asl.w #8,d2
  8262.  asl.w #2,d2
  8263.  divs d3,d2 
  8264.  ext.l d2
  8265.  asl.l #6,d2
  8266.  swap d1
  8267.  
  8268. .pixlopright:
  8269.  move.w d0,(a3)+
  8270.  swap d1
  8271.  move.w d1,(a4)+
  8272.  swap d1
  8273.  add.l d2,d1
  8274.  
  8275.  sub.w a5,d4
  8276.  bge.s .nobigstep
  8277.  add.w a6,d0
  8278.  add.w d3,d4
  8279.  dbra d5,.pixlopright
  8280.  bra lineflatGOUR
  8281. .nobigstep
  8282.  
  8283.  add.w d6,d0
  8284.  dbra d5,.pixlopright
  8285.  bra lineflatGOUR
  8286.  
  8287. .linegoingleft:
  8288.  
  8289.  neg.w d2
  8290.  
  8291.  ext.l d2
  8292.  divs d3,d2
  8293.  move.w d2,d6
  8294.  swap d2
  8295.  
  8296.  
  8297. ; moveq #0,d6
  8298. ; sub.w d3,d2
  8299. ; blt.s .nocol
  8300. ;.makecol
  8301. ; addq #1,d6
  8302. ; sub.w d3,d2
  8303. ; bge.s .makecol
  8304. ;.nocol
  8305. ; add.w d3,d2
  8306.  
  8307.  move.w d3,d4
  8308.  move.w d3,d5
  8309.  subq #1,d5
  8310.  
  8311.  move.w d6,d1
  8312.  addq #1,d1
  8313.  move.w d1,a6
  8314.  move.w d2,a5
  8315.  
  8316.  moveq #0,d1
  8317.  move.w sbr,d1
  8318.  move.w fbr,d2
  8319.  sub.w d1,d2
  8320.  ext.l d2
  8321.  asl.w #8,d2
  8322.  asl.w #2,d2
  8323.  divs d3,d2 
  8324.  ext.l d2
  8325.  asl.l #6,d2
  8326.  swap d1
  8327.  
  8328. .pixlopleft:
  8329.  
  8330.  swap d1
  8331.  move.w d1,(a4)+
  8332.  swap d1
  8333.  add.l d2,d1
  8334.  
  8335.  sub.w a5,d4
  8336.  bge.s .nobigstepl
  8337.  sub.w a6,d0
  8338.  add.w d3,d4
  8339.  move.w d0,(a3)+
  8340.  dbra d5,.pixlopleft
  8341.  bra lineflatGOUR
  8342.  
  8343. .nobigstepl
  8344.  sub.w d6,d0
  8345.  move.w d0,(a3)+
  8346.  dbra d5,.pixlopleft
  8347.  bra lineflatGOUR
  8348.  
  8349. lineonrightGOUR:
  8350.  
  8351.  lea (a3,d1*2),a3
  8352.  
  8353.  lea rightbrighttab-rightsidetab(a3),a4
  8354.  
  8355.  cmp.w top(pc),d1
  8356.  bge.s .nonewtop
  8357.  move.w d1,top
  8358. .nonewtop:
  8359.  cmp.w bottom(pc),d3
  8360.  ble.s .nonewbot
  8361.  move.w d3,bottom
  8362. .nonewbot:
  8363.  
  8364.  sub.w d1,d3    ; dy
  8365.  sub.w d0,d2    ; dx
  8366.  blt .linegoingleft
  8367. ; addq #1,d0
  8368.  ext.l d2
  8369.  divs d3,d2
  8370.  move.w d2,d6
  8371.  swap d2
  8372.  
  8373. ; moveq #0,d6
  8374. ; sub.w d3,d2
  8375. ; blt.s .noco
  8376. ;.makeco
  8377. ; addq #1,d6
  8378. ; sub.w d3,d2
  8379. ; bge.s .makeco
  8380. ;.noco
  8381. ; add.w d3,d2
  8382.  
  8383.  move.w d3,d4
  8384.  move.w d3,d5
  8385.  subq #1,d5
  8386.  move.w d6,d1
  8387.  addq #1,d1
  8388.  
  8389.  move.w d1,a6
  8390.  move.w d2,a5
  8391.  
  8392.  moveq #0,d1
  8393.  move.w fbr,d1
  8394.  move.w sbr,d2
  8395.  sub.w d1,d2
  8396.  ext.l d2
  8397.  asl.w #8,d2
  8398.  asl.w #2,d2
  8399.  divs d3,d2 
  8400.  ext.l d2
  8401.  asl.l #6,d2
  8402.  swap d1
  8403.  
  8404. .pixlopright:
  8405.  
  8406.  swap d1
  8407.  move.w d1,(a4)+
  8408.  swap d1
  8409.  add.l d2,d1
  8410.  
  8411.  sub.w a5,d4
  8412.  bge.s .nobigstep
  8413.  add.w a6,d0
  8414.  add.w d3,d4
  8415.  move.w d0,(a3)+
  8416.  dbra d5,.pixlopright
  8417.  bra lineflatGOUR
  8418.  
  8419. .nobigstep
  8420.  add.w d6,d0
  8421.  move.w d0,(a3)+
  8422.  dbra d5,.pixlopright
  8423.  bra lineflatGOUR
  8424.  
  8425. .linegoingleft:
  8426. ; addq #1,d0
  8427.  neg.w d2
  8428.  
  8429.  ext.l d2
  8430.  divs d3,d2
  8431.  move.w d2,d6
  8432.  swap d2
  8433.  
  8434.  
  8435. ; moveq #0,d6
  8436. ; sub.w d3,d2
  8437. ; blt.s .nocol
  8438. ;.makecol
  8439. ; addq #1,d6
  8440. ; sub.w d3,d2
  8441. ; bge.s .makecol
  8442. ;.nocol
  8443. ; add.w d3,d2
  8444.  
  8445.  move.w d3,d4
  8446.  move.w d3,d5
  8447.  subq #1,d5
  8448.  move.w d6,d1
  8449.  addq #1,d1
  8450.  move.w d1,a6
  8451.  move.w d2,a5
  8452.  
  8453.  moveq #0,d1
  8454.  move.w fbr,d1
  8455.  move.w sbr,d2
  8456.  sub.w d1,d2
  8457.  ext.l d2
  8458.  asl.w #8,d2
  8459.  asl.w #2,d2
  8460.  divs d3,d2 
  8461.  ext.l d2
  8462.  asl.l #6,d2
  8463.  swap d1
  8464.  
  8465. .pixlopleft:
  8466.  
  8467.  swap d1
  8468.  move.w d1,(a4)+
  8469.  swap d1
  8470.  add.l d2,d1
  8471.  
  8472.  move.w d0,(a3)+
  8473.  sub.w a5,d4
  8474.  bge.s .nobigstepl
  8475.  sub.w a6,d0
  8476.  add.w d3,d4
  8477.  dbra d5,.pixlopleft
  8478.  bra lineflatGOUR
  8479.  
  8480. .nobigstepl
  8481.  sub.w d6,d0
  8482.  dbra d5,.pixlopleft
  8483.  
  8484. lineflatGOUR:
  8485.  
  8486. bothbehindGOUR:
  8487.  dbra d7,sideloopGOUR
  8488.  
  8489. pastsides:
  8490.  
  8491.  addq #2,a0
  8492.  
  8493.  move.w #320,linedir
  8494.  
  8495. ; move.l FASTBUFFER2,a6
  8496. ; add.l BIGMIDDLEY,a6
  8497. ; move.l a6,REFPTR
  8498.  
  8499.  move.l FASTBUFFER,a6
  8500.  add.l BIGMIDDLEY,a6
  8501.  move.w (a0)+,d6
  8502.  add.w SMALLIT,d6
  8503.  move.w d6,scaleval
  8504.  move.w (a0)+,d6
  8505.  
  8506.  ifne CHEESEY
  8507.  move.w d6,d7    ; 000000XX000000YY
  8508.  lsr.w #6,d6
  8509.  add.w d6,d7    ; 000000XX0000XXYY
  8510.  
  8511.  and.b #%111,d6    ; 000000XX00000XYY
  8512.  add.b d7,d7    ; 000000XX0000XYY0
  8513.  asl.w #4,d7    ; 00XX0000 XYY00000
  8514.  and.w #%0010000011100000,d7
  8515.  move.w d7,d6
  8516.  endc
  8517.  
  8518.  move.w d6,whichtile
  8519.  move.w (a0)+,d6
  8520.  add.w ZoneBright,d6
  8521.  move.w d6,lighttype
  8522.  move.w above(pc),d6
  8523.  beq groundfloor
  8524. * on ceiling:
  8525.  move.w #-320,linedir
  8526.  suba.w #320,a6
  8527. groundfloor:
  8528.  
  8529.  move.w xoff,d6
  8530.  move.w zoff,d7
  8531.  add.w xwobxoff,d7
  8532.  add.w xwobzoff,d6
  8533.  ext.l d6
  8534.  ext.l d7
  8535.  
  8536.  tst.b FULLSCR
  8537.  beq.s .shiftit
  8538.  
  8539.  asl.l #2,d6
  8540.  asl.l #2,d7
  8541.  divs #3,d6
  8542.  divs #3,d7
  8543.  swap d6
  8544.  swap d7
  8545.  clr.w d6
  8546.  clr.w d7
  8547.  asr.l #2,d6
  8548.  asr.l #2,d7
  8549.  bra.s .donsht
  8550.  
  8551. .shiftit
  8552.  
  8553. ; divs #3,d6
  8554. ; divs #3,d7
  8555.  swap d6
  8556.  swap d7
  8557.  clr.w d6
  8558.  clr.w d7
  8559.  asr.l #1,d6
  8560.  asr.l #1,d7
  8561. .donsht:
  8562.  move.w scaleval(pc),d3
  8563.  beq.s .samescale
  8564.  bgt.s .scaledown
  8565.  neg.w d3
  8566.  asr.l d3,d7
  8567.  asr.l d3,d6
  8568.  bra.s .samescale
  8569. .scaledown:
  8570.  asl.l d3,d6
  8571.  asl.l d3,d7
  8572. .samescale
  8573.  
  8574.  ifne CHEESEY
  8575.  asr.l #1,d6
  8576.  asr.l #1,d7
  8577.  endc
  8578.  
  8579.  move.l d6,sxoff
  8580.  move.l d7,szoff
  8581.  bra pastscale 
  8582.  
  8583.  asr.l #3,d1
  8584.  asr.l #3,d2
  8585.  asr.l #2,d1
  8586.  asr.l #2,d2
  8587.  asr.l #1,d1
  8588.  asr.l #1,d2
  8589. scaleprogfrom
  8590.  nop
  8591.  nop
  8592.  asl.l #1,d1
  8593.  asl.l #1,d2
  8594.  asl.l #2,d1
  8595.  asl.l #2,d2
  8596.  asl.l #3,d1
  8597.  asl.l #3,d2
  8598.  
  8599. top: dc.w 0
  8600. bottom: dc.w 0
  8601. ypos: dc.l 0
  8602. nfloors: dc.w 0
  8603. lighttype: dc.w 0
  8604. above: dc.w 0 
  8605. linedir: dc.w 0
  8606. distaddr: dc.w 0
  8607.  
  8608. minz: dc.l 0
  8609.  
  8610. leftsidetab:
  8611.  ds.w 512*2
  8612. rightsidetab:
  8613.  ds.w 512*2
  8614. leftbrighttab:
  8615.  ds.w 512*2
  8616. rightbrighttab:
  8617.  ds.w 512*2
  8618.  
  8619. PointBrights:
  8620.  dc.l 0
  8621. CurrentPointBrights:
  8622.  ds.l 2*256*10
  8623.  
  8624. movespd: dc.w 0
  8625. largespd: dc.l 0
  8626. disttobot: dc.w 0
  8627.  
  8628. pastscale:
  8629.  
  8630.  
  8631.  tst.b drawit(pc)
  8632.  beq dontdrawfloor
  8633.  
  8634.  tst.b DOUBLEHEIGHT
  8635.  beq pix1h
  8636.  
  8637.  move.l a0,-(a7)
  8638.  move.w linedir,d1
  8639.  add.w d1,linedir
  8640.  
  8641.  move.l #leftsidetab,a4
  8642.  move.w top(pc),d1
  8643.  tst.w above
  8644.  beq.s .clipfloor
  8645.  
  8646.  sub.w #320,a6
  8647.  
  8648.  move.w MIDDLEY,d7
  8649.  subq #1,d7
  8650.  sub.w d1,d7
  8651.  move.w d7,disttobot
  8652.  
  8653.  move.w bottom(pc),d7
  8654.  move.w MIDDLEY,d3
  8655.  move.w d3,d4
  8656.  sub.w topclip,d3
  8657.  sub.w botclip,d4
  8658.  cmp.w d3,d1
  8659.  bge predontdrawfloor
  8660.  cmp.w d4,d7
  8661.  blt predontdrawfloor
  8662.  cmp.w d4,d1
  8663.  bge.s .nocliptoproof
  8664.  move.w d4,d1
  8665. .nocliptoproof
  8666.  cmp.w d3,d7
  8667.  blt .doneclip
  8668.  move.w d3,d7
  8669.  bra .doneclip
  8670.  
  8671. .clipfloor:
  8672.  move.w BOTTOMY,d7
  8673.  sub.w MIDDLEY,d7
  8674.  subq #1,d7
  8675.  sub.w d1,d7
  8676.  move.w d7,disttobot
  8677.  
  8678.  move.w bottom(pc),d7
  8679.  move.w botclip,d4
  8680.  sub.w MIDDLEY,d4
  8681.  cmp.w d4,d1
  8682.  bge predontdrawfloor
  8683.  move.w topclip,d3
  8684.  sub.w MIDDLEY,d3
  8685.  cmp.w d3,d1
  8686.  bge.s .nocliptopfloor
  8687.  move.w d3,d1
  8688. .nocliptopfloor 
  8689.  cmp.w d3,d7
  8690.  ble predontdrawfloor
  8691.  cmp.w d4,d7
  8692.  blt.s .noclipbotfloor
  8693.  move.w d4,d7
  8694. .noclipbotfloor:
  8695.  
  8696. .doneclip:
  8697.  
  8698.  lea (a4,d1*2),a4
  8699.  addq #1,d7
  8700.  sub.w d1,d7
  8701.  
  8702. ;moveq #0,d0
  8703.  asr.w #1,d1
  8704. ; addx d0,d1
  8705.  
  8706. ; move.l #dists,a2
  8707.  move.w distaddr,d0
  8708.  muls #64,d0
  8709.  move.l d0,a2
  8710. ; muls #25,d0
  8711. ; adda.w d0,a2
  8712. ; lea (a2,d1*2),a2
  8713.  asr.w #1,d7
  8714.  ble predontdrawfloor 
  8715.  move.w d1,d0
  8716.  bne.s .notzero
  8717.  moveq #1,d0
  8718. .notzero
  8719.  add.w d0,d0
  8720.  muls linedir,d1
  8721.  add.l d1,a6
  8722. ; sub.l d1,REFPTR
  8723.  move.l TexturePal,a1
  8724.  add.l #256*32,a1
  8725.  move.l LineToUse,a5
  8726.  
  8727.  move.w #4,tonextline
  8728.  
  8729.  bra pix2h
  8730.  
  8731. pix1h:
  8732.  
  8733.  move.l a0,-(a7)
  8734.  
  8735.  move.l #leftsidetab,a4
  8736.  move.w top(pc),d1
  8737.   
  8738.  tst.w above
  8739.  beq.s clipfloor
  8740.  
  8741.  move.w MIDDLEY,d7
  8742.  subq #1,d7
  8743.  sub.w d1,d7
  8744.  move.w d7,disttobot
  8745.  
  8746.  move.w bottom(pc),d7
  8747.  move.w MIDDLEY,d3
  8748.  move.w d3,d4
  8749.  sub.w topclip,d3
  8750.  sub.w botclip,d4
  8751.  cmp.w d3,d1
  8752.  bge predontdrawfloor
  8753.  cmp.w d4,d7
  8754.  blt predontdrawfloor
  8755.  cmp.w d4,d1
  8756.  bge.s .nocliptoproof
  8757.  move.w d4,d1
  8758. .nocliptoproof
  8759.  cmp.w d3,d7
  8760.  blt doneclip
  8761.  move.w d3,d7
  8762.  bra doneclip
  8763.  
  8764. clipfloor:
  8765.  move.w BOTTOMY,d7
  8766.  sub.w MIDDLEY,d7
  8767.  subq #1,d7
  8768.  sub.w d1,d7
  8769.  move.w d7,disttobot
  8770.  
  8771.  move.w bottom(pc),d7
  8772.  move.w botclip,d4
  8773.  sub.w MIDDLEY,d4
  8774.  cmp.w d4,d1
  8775.  bge predontdrawfloor
  8776.  move.w topclip,d3
  8777.  sub.w MIDDLEY,d3
  8778.  cmp.w d3,d1
  8779.  bge.s .nocliptopfloor
  8780.  move.w d3,d1
  8781. .nocliptopfloor 
  8782.  cmp.w d3,d7
  8783.  ble predontdrawfloor
  8784.  cmp.w d4,d7
  8785.  blt.s .noclipbotfloor
  8786.  move.w d4,d7
  8787. .noclipbotfloor:
  8788.  
  8789. doneclip:
  8790.  
  8791.  lea (a4,d1*2),a4
  8792. ; move.l #dists,a2
  8793.  move.w distaddr,d0
  8794.  muls #64,d0
  8795.  move.l d0,a2
  8796. ; muls #25,d0
  8797. ; adda.w d0,a2
  8798. ; lea (a2,d1*2),a2
  8799.  sub.w d1,d7
  8800.  ble predontdrawfloor 
  8801.  move.w d1,d0
  8802.  bne.s .notzero
  8803.  moveq #1,d0
  8804. .notzero
  8805.  muls linedir,d1
  8806.  add.l d1,a6
  8807. ; sub.l d1,REFPTR
  8808.  move.l TexturePal,a1
  8809.  add.l #256*32,a1
  8810.  move.l LineToUse,a5
  8811.  
  8812.  move.w #2,tonextline
  8813.  
  8814. pix2h:
  8815.  
  8816.  tst.b gourfloor
  8817.  bne dogourfloor
  8818.  
  8819.  tst.b anyclipping
  8820.  beq dofloornoclip
  8821.  
  8822. dofloor:
  8823. ; move.w (a2)+,d0
  8824.  move.w leftclip,d3
  8825.  move.w rightclip,d4
  8826.  move.w rightsidetab-leftsidetab(a4),d2
  8827.  
  8828.  addq #1,d2
  8829.  cmp.w d3,d2
  8830.  ble.s nodrawline
  8831.  cmp.w d4,d2
  8832.  ble.s noclipright
  8833.  move.w d4,d2
  8834. noclipright:
  8835.  move.w (a4),d1
  8836.  cmp.w d4,d1
  8837.  bge.s nodrawline
  8838.  cmp.w d3,d1
  8839.  bge.s noclipleft
  8840.  move.w d3,d1
  8841. noclipleft:
  8842.  cmp.w d1,d2
  8843.  ble.s nodrawline
  8844.  
  8845.  move.w d1,leftedge
  8846.  move.w d2,rightedge
  8847.  
  8848. ; moveq #0,d1
  8849. ; moveq #0,d3
  8850. ; move.w leftbrighttab-leftsidetab(a4),d1
  8851. ; bge.s .okbl
  8852. ; moveq #0,d1
  8853. ;.okbl:
  8854.  
  8855. ; move.w rightbrighttab-leftsidetab(a4),d3
  8856. ; bge.s .okbr
  8857. ; moveq #0,d3
  8858. ;.okbr:
  8859.  
  8860. ; sub.w d1,d3
  8861. ; asl.w #8,d1
  8862. ; move.l d1,leftbright
  8863. ; swap d3
  8864. ; asr.l #5,d3
  8865. ; divs d5,d3
  8866. ; move.w d3,d5
  8867. ; muls.w d6,d5
  8868. ; asr.l #3,d5
  8869. ; clr.b d5
  8870. ; add.w d5,leftbright+2
  8871.  
  8872. ; ext.l d3
  8873. ; asl.l #5,d3
  8874. ; swap d3
  8875. ; asl.w #8,d3
  8876. ; move.l d3,brightspd
  8877.  
  8878.  move.l a6,a3
  8879.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8880.  move.l a2,d7
  8881.  asl.l #2,d7
  8882.  ext.l d0
  8883.  divs.l d0,d7
  8884.  move.l d7,d0
  8885.  jsr (a5)
  8886.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8887. nodrawline
  8888.  sub.w #1,disttobot
  8889.  move.w linedir(pc),d3
  8890.  adda.w d3,a6
  8891. ; ext.l d3
  8892. ; sub.l d3,REFPTR
  8893.  move.w tonextline,d3
  8894.  add.w d3,a4
  8895.  asr.w #1,d3
  8896.  add.w d3,d0
  8897.  subq #1,d7
  8898.  bgt dofloor
  8899.  
  8900. predontdrawfloor
  8901.  move.l (a7)+,a0
  8902.  
  8903. dontdrawfloor:
  8904.  
  8905.  rts
  8906.  
  8907. tonextline: dc.w 0
  8908. anyclipping: dc.w 0
  8909.  
  8910. dofloornoclip:
  8911. ; move.w (a2)+,d0
  8912.  move.w rightsidetab-leftsidetab(a4),d2
  8913.  addq #1,d2
  8914.  move.w (a4),d1
  8915.  move.w d1,leftedge
  8916.  move.w d2,rightedge
  8917.  
  8918. ; sub.w d1,d2
  8919.  
  8920. ; moveq #0,d1
  8921. ; moveq #0,d3
  8922. ; move.w leftbrighttab-leftsidetab(a4),d1
  8923. ; bge.s .okbl
  8924. ; moveq #0,d1
  8925. ;.okbl:
  8926.  
  8927. ; move.w rightbrighttab-leftsidetab(a4),d3
  8928. ; bge.s .okbr
  8929. ; moveq #0,d3
  8930. ;.okbr:
  8931.  
  8932. ; sub.w d1,d3
  8933. ; asl.w #8,d1
  8934. ; move.l d1,leftbright
  8935. ; swap d3
  8936. ; asr.l #5,d3
  8937. ; divs d2,d3
  8938. ; ext.l d3
  8939. ; asl.l #5,d3
  8940. ; swap d3
  8941. ; asl.w #8,d3
  8942. ; move.l d3,brightspd
  8943.  
  8944.  move.l a6,a3
  8945.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8946.  move.l a2,d7
  8947.  asl.l #2,d7
  8948.  ext.l d0
  8949.  divs.l d0,d7
  8950.  move.l d7,d0
  8951.  jsr (a5)
  8952.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8953.  sub.w #1,disttobot
  8954.  move.w linedir(pc),d3
  8955.  adda.w d3,a6
  8956. ; ext.l d3
  8957. ; sub.l d3,REFPTR
  8958.  move.w tonextline,d3
  8959.  add.w d3,a4
  8960.  asr.w #1,d3
  8961.  add.w d3,d0
  8962.  subq #1,d7
  8963.  bgt dofloornoclip
  8964.  
  8965.  bra predontdrawfloor
  8966.  
  8967. dogourfloor:
  8968.  tst.b anyclipping
  8969.  beq dofloornoclipGOUR
  8970.  
  8971. dofloorGOUR:
  8972. ; move.w (a2)+,d0
  8973.  move.w leftclip,d3
  8974.  move.w rightclip,d4
  8975.  move.w rightsidetab-leftsidetab(a4),d2
  8976.  
  8977.  move.w d2,d5
  8978.  sub.w (a4),d5
  8979.  addq #1,d5
  8980.  moveq #0,d6
  8981.  
  8982.  addq #1,d2
  8983.  cmp.w d3,d2
  8984.  ble nodrawlineGOUR
  8985.  cmp.w d4,d2
  8986.  ble.s nocliprightGOUR
  8987.  move.w d4,d2
  8988. nocliprightGOUR:
  8989.  move.w (a4),d1
  8990.  cmp.w d4,d1
  8991.  bge nodrawlineGOUR
  8992.  cmp.w d3,d1
  8993.  bge.s noclipleftGOUR
  8994.  move.w d3,d6
  8995.  subq #1,d6
  8996.  sub.w d1,d6
  8997.  move.w d3,d1
  8998. noclipleftGOUR:
  8999.  cmp.w d1,d2
  9000.  ble nodrawlineGOUR
  9001.  
  9002.  move.w d1,leftedge
  9003.  move.w d2,rightedge
  9004.  
  9005.  move.l a2,d2
  9006.  asl.l #2,d2
  9007.  ext.l d0
  9008.  divs.l d0,d2
  9009.  move.l d2,dst
  9010.  asr.l #7,d2
  9011.  asr.l #2,d2
  9012. ; addq #5,d2
  9013. ; add.w lighttype,d2
  9014.  
  9015.  moveq #0,d1
  9016.  moveq #0,d3
  9017.  move.w leftbrighttab-leftsidetab(a4),d1
  9018.  add.w d2,d1
  9019.  bge.s .okbl
  9020.  moveq #0,d1
  9021. .okbl:
  9022. ; asr.w #1,d1
  9023.  cmp.w #30,d1
  9024.  ble.s .okdl
  9025.  move.w #30,d1
  9026. .okdl:
  9027.  
  9028.  move.w rightbrighttab-leftsidetab(a4),d3
  9029.  add.w d2,d3
  9030.  bge.s .okbr
  9031.  moveq #0,d3
  9032. .okbr:
  9033. ; asr.w #1,d3
  9034.  cmp.w #30,d3
  9035.  ble.s .okdr
  9036.  move.w #30,d3
  9037. .okdr:
  9038.  
  9039.  sub.w d1,d3
  9040.  asl.w #8,d1
  9041.  move.w d1,leftbright
  9042.  swap d3
  9043.  tst.l d3
  9044.  bgt.s .OKITSPOSALREADY 
  9045.  neg.l d3
  9046.  asr.l #6,d3
  9047.  divs d5,d3
  9048.  neg.w d3
  9049.  bra.s .OKNOWITSNEG
  9050.  
  9051. .OKITSPOSALREADY
  9052.  asr.l #6,d3
  9053.  divs d5,d3
  9054. .OKNOWITSNEG
  9055.  muls d3,d6
  9056.  add.w #256*4,d6
  9057.  asr.w #2,d6
  9058.  clr.b d6
  9059.  add.w leftbright,d6
  9060.  bge.s .oklbnn
  9061.  moveq #0,d6
  9062. .oklbnn:
  9063.  move.w d6,leftbright
  9064.  
  9065.  ext.l d3
  9066.  asr.l #2,d3
  9067. ; swap d3
  9068. ; asl.w #8,d3
  9069.  move.w d3,brightspd
  9070.  
  9071.  move.l a6,a3
  9072.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9073.  move.l dst,d0
  9074.  move.l TexturePal,a1
  9075.  add.l #256*32,a1
  9076.  move.l floortile,a0
  9077.  adda.w whichtile,a0
  9078.  jsr pastfloorbright
  9079.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9080. nodrawlineGOUR
  9081.  
  9082.  sub.w #1,disttobot
  9083.  
  9084.  move.w linedir(pc),d3
  9085.  adda.w d3,a6
  9086. ; ext.l d3
  9087. ; sub.l d3,REFPTR
  9088.  move.w tonextline,d3
  9089.  add.w d3,a4
  9090.  asr.w #1,d3
  9091.  add.w d3,d0
  9092.  subq #1,d7
  9093.  bgt dofloorGOUR
  9094.  
  9095. predontdrawfloorGOUR
  9096.  move.l (a7)+,a0
  9097.  
  9098. dontdrawfloorGOUR:
  9099.  
  9100.  rts
  9101.  
  9102. REFPTR: dc.l 0
  9103.  
  9104. dofloornoclipGOUR:
  9105. ; move.w (a2)+,d0
  9106.  move.w rightsidetab-leftsidetab(a4),d2
  9107.  addq #1,d2
  9108.  move.w (a4),d1
  9109.  move.w d1,leftedge
  9110.  move.w d2,rightedge
  9111.  
  9112.  sub.w d1,d2
  9113.  
  9114.  move.l a2,d6
  9115.  asl.l #2,d6
  9116.  ext.l d0
  9117.  divs.l d0,d6
  9118.  move.l d6,d5
  9119.  asr.l #7,d5
  9120.  asr.l #2,d5
  9121. ; addq #5,d5
  9122. ; add.w lighttype,d5
  9123.  
  9124.  moveq #0,d1
  9125.  moveq #0,d3
  9126.  move.w leftbrighttab-leftsidetab(a4),d1
  9127.  add.w d5,d1
  9128.  bge.s .okbl
  9129.  moveq #0,d1
  9130. .okbl:
  9131. ; asr.w #1,d1
  9132.  cmp.w #30,d1
  9133.  ble.s .okdl
  9134.  move.w #30,d1
  9135. .okdl:
  9136.  
  9137.  move.w rightbrighttab-leftsidetab(a4),d3
  9138.  add.w d5,d3
  9139.  bge.s .okbr
  9140.  moveq #0,d3
  9141. .okbr:
  9142. ; asr.w #1,d3
  9143.  cmp.w #30,d3
  9144.  ble.s .okdr
  9145.  move.w #30,d3
  9146. .okdr:
  9147.  
  9148. ; sub.w d1,d3
  9149. ; asl.w #8,d1
  9150. ; move.l d1,leftbright
  9151. ; swap d3
  9152. ; asr.l #5,d3
  9153. ; divs d2,d3
  9154. ; ext.l d3
  9155. ; asl.l #5,d3
  9156. ; swap d3
  9157. ; asl.w #8,d3
  9158. ; move.l d3,brightspd
  9159.  
  9160.  sub.w d1,d3
  9161.  asl.w #8,d1
  9162.  move.w d1,leftbright
  9163.  swap d3
  9164.  ext.l d2
  9165.  divs.l d2,d3
  9166.  asr.l #8,d3
  9167.  move.w d3,brightspd
  9168.  
  9169.  move.l a6,a3
  9170.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9171.  move.l d6,d0
  9172.  move.l d0,dst
  9173.  move.l TexturePal,a1
  9174.  add.l #256*32,a1
  9175.  move.l floortile,a0
  9176.  adda.w whichtile,a0
  9177.  jsr pastfloorbright
  9178.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9179.  sub.w #1,disttobot
  9180.  
  9181.  move.w linedir(pc),d3
  9182.  adda.w d3,a6
  9183. ; ext.l d3
  9184. ; sub.l d3,REFPTR
  9185.  
  9186.  move.w tonextline,d3
  9187.  add.w d3,a4
  9188.  asr.w #1,d3
  9189.  add.w d3,d0
  9190.  subq #1,d7
  9191.  bgt dofloornoclipGOUR
  9192.  
  9193.  bra predontdrawfloorGOUR
  9194.  
  9195.  
  9196.  
  9197. dists:
  9198. ; incbin "floordists"
  9199. drawit: dc.w 0
  9200.  
  9201. LineToUse: dc.l 0
  9202.  
  9203. ***************************
  9204. * Right then, time for the floor
  9205. * routine...
  9206. * For test purposes, give it
  9207. * a3 = point to screen
  9208. * d0= z distance away
  9209. * and sinval+cosval must be set up.
  9210. ***************************
  9211.  
  9212. BLACKFLOOR:
  9213.  moveq #0,d0
  9214.  bra.s DOBLACK
  9215.  
  9216. SimpleFloorLine:
  9217.  
  9218.  CACHE_OFF d2
  9219.  
  9220.  move.l #doacrossline,a1
  9221.  move.w leftedge(pc),d1
  9222.  move.w rightedge(pc),d3
  9223.  sub.w d1,d3
  9224.  lea (a1,d1.w*4),a1
  9225.  move.w (a1,d3.w*4),d4
  9226.  move.w #$4e75,(a1,d3.w*4)
  9227.  
  9228.  tst.b CLRNOFLOOR
  9229.  bne.s BLACKFLOOR
  9230.  
  9231.  move.l #PLAINSCALE,a2
  9232.  
  9233.  move.w d0,d2
  9234.  move.w lighttype,d1
  9235.  asr.w #8,d2
  9236.  add.w #5,d1
  9237.  add.w d2,d1
  9238.  bge.s .fixedbright
  9239.  moveq #0,d1
  9240. .fixedbright:
  9241.  cmp.w #28,d1
  9242.  ble.s .smallbright
  9243.  move.w #28,d1
  9244. .smallbright:
  9245.  lea (a2,d1.w*2),a2
  9246.  
  9247.  move.w whichtile,d0
  9248.  move.w d0,d1
  9249.  and.w #$3,d1
  9250.  and.w #$300,d0
  9251.  lsl.b #6,d1
  9252.  move.b d1,d0
  9253.  move.w d0,tstwhich
  9254.  move.w (a2,d0.w),d0
  9255.  
  9256. DOBLACK:
  9257.  jsr (a1)
  9258.  move.w d4,(a1,d3.w*4)
  9259.  
  9260.  CACHE_ON d2
  9261.  
  9262.  rts
  9263.  
  9264. tstwhich: dc.w 0
  9265. whichtile: dc.w 0
  9266.   
  9267. PLAINSCALE: 
  9268. ;incbin "ab3:includes/plainscale"
  9269.   
  9270. storeit: dc.l 0
  9271.  
  9272. doacrossline:
  9273. val SET 0
  9274.  REPT 32
  9275.  move.w d0,val(a3)
  9276. val SET val+4
  9277.  ENDR
  9278. val SET val+4
  9279.  REPT 32
  9280.  move.w d0,val(a3)
  9281. val SET val+4
  9282.  ENDR
  9283. val SET val+4
  9284.  REPT 32
  9285.  move.w d0,val(a3)
  9286. val SET val+4
  9287.  ENDR
  9288.  rts
  9289.  
  9290.  
  9291. leftedge: dc.w 0
  9292. rightedge: dc.w 0
  9293.  
  9294. rndpt: dc.l rndtab
  9295.  
  9296.  
  9297. dst: dc.l 0
  9298.  
  9299. FloorLine:
  9300.  
  9301.  move.l floortile,a0
  9302.  adda.w whichtile,a0
  9303.  move.w lighttype,d1
  9304.  move.l d0,dst    ; *4
  9305.  move.l d0,d2    ; *4
  9306. *********************
  9307. * Old version
  9308.  asr.l #2,d2
  9309.  asr.l #8,d2
  9310.  add.w #5,d1
  9311. *********************
  9312. ; asr.w #3,d2
  9313. ; sub.w #4,d2
  9314. ; cmp.w #6,d2
  9315. ; blt.s flbrbr
  9316. ; move.w #6,d2
  9317. ;flbrbr:
  9318. *********************
  9319.  add.w d2,d1
  9320.  bge.s .fixedbright
  9321.  moveq #0,d1
  9322. .fixedbright:
  9323.  cmp.w #28,d1
  9324.  ble.s .smallbright
  9325.  move.w #28,d1
  9326. .smallbright:
  9327.  move.l TexturePal,a1
  9328.  add.l #256*32,a1
  9329.  add.l floorbright(pc,d1.w*4),a1
  9330.  bra pastfloorbright
  9331.  
  9332. ConstCol: dc.w 0
  9333.  
  9334. BumpLine:
  9335.  
  9336.  tst.b smoothbumps
  9337.  beq.s Chunky
  9338.  
  9339.  move.l #SmoothTile,a0
  9340.  lea Smoothscalecols,a1
  9341.  bra pastast
  9342.  
  9343. Chunky:
  9344.  
  9345.  moveq #0,d2
  9346.  move.l #Bumptile,a0
  9347.  move.w whichtile,d2
  9348.  adda.w d2,a0
  9349.  ror.l #2,d2
  9350.  lsr.w #6,d2
  9351.  rol.l #2,d2
  9352.  and.w #15,d2
  9353.  move.l #ConstCols,a1
  9354.  move.w (a1,d2.w*2),ConstCol
  9355.  lea Bumpscalecols,a1
  9356.  
  9357. pastast:
  9358.  move.w lighttype,d1
  9359.  
  9360.  move.l d0,dst
  9361.  
  9362.  move.l d0,d2
  9363. *********************
  9364. * Old version
  9365.  asr.l #2,d2
  9366.  asr.l #8,d2
  9367.  add.w #5,d1
  9368. *********************
  9369. ; asr.w #3,d2
  9370. ; sub.w #4,d2
  9371. ; cmp.w #6,d2
  9372. ; blt.s flbrbr
  9373. ; move.w #6,d2
  9374. ;flbrbr:
  9375. *********************
  9376.  add.w d2,d1
  9377.  bge.s .fixedbright
  9378.  moveq #0,d1
  9379. .fixedbright:
  9380.  cmp.w #31,d1
  9381.  ble.s .smallbright
  9382.  move.w #31,d1
  9383. .smallbright:
  9384.  add.l floorbright(pc,d1.w*4),a1
  9385.  bra pastfloorbright
  9386.  
  9387.  
  9388. floorbright:
  9389.  dc.l 512*0
  9390.  dc.l 512*1
  9391.  dc.l 512*2
  9392.  dc.l 512*3
  9393.  dc.l 512*4
  9394.  
  9395.  dc.l 512*5
  9396.  dc.l 512*6
  9397.  dc.l 512*7
  9398.  dc.l 512*8
  9399.  dc.l 512*9
  9400.  
  9401.  dc.l 512*10
  9402.  dc.l 512*11
  9403.  dc.l 512*12
  9404.  dc.l 512*13
  9405.  dc.l 512*14
  9406.  
  9407.  dc.l 512*15
  9408.  dc.l 512*16
  9409.  dc.l 512*17
  9410.  dc.l 512*18
  9411.  dc.l 512*19
  9412.  
  9413.  dc.l 512*20
  9414.  dc.l 512*21
  9415.  dc.l 512*22
  9416.  dc.l 512*23
  9417.  dc.l 512*24
  9418.  
  9419.  dc.l 512*25
  9420.  dc.l 512*26
  9421.  dc.l 512*27
  9422.  dc.l 512*28
  9423.  dc.l 512*29
  9424.  
  9425.  dc.l 512*30
  9426.  dc.l 512*31
  9427.  
  9428. widthleft: dc.w 0
  9429. scaleval: dc.w 0
  9430. sxoff: dc.l 0
  9431. szoff: dc.l 0
  9432. xoff34: dc.w 0
  9433. zoff34: dc.w 0
  9434. scosval: dc.w 0
  9435. ssinval: dc.w 0
  9436.  
  9437.  
  9438. floorsetbright:
  9439.  move.l #walltiles,a0
  9440.  
  9441. pastfloorbright:
  9442.  
  9443.  move.l d0,d1
  9444.  muls cosval,d1    ; change in x across whole width
  9445.  move.l d0,d2
  9446.  muls sinval,d2    ; change in z across whole width
  9447.  neg.l d2
  9448.  ifne CHEESEY
  9449.  asr.l #3,d2
  9450.  asr.l #3,d1
  9451.  endc
  9452.  ifeq CHEESEY
  9453.  asr.l #2,d2
  9454.  asr.l #2,d1
  9455.  endc
  9456. scaleprog:
  9457.  move.w scaleval(pc),d3
  9458.  beq.s .samescale
  9459.  bgt.s .scaledown
  9460.  neg.w d3
  9461.  asr.l d3,d1
  9462.  asr.l d3,d2
  9463.  bra.s .samescale
  9464. .scaledown:
  9465.  asl.l d3,d1
  9466.  asl.l d3,d2
  9467. .samescale
  9468.  
  9469.  
  9470.  move.l d1,d3 ;    z cos
  9471.  move.l d3,d6
  9472.  move.l d3,d5
  9473.  asr.l #1,d6
  9474.  add.l d6,d3
  9475.  asr.l #1,d3
  9476.  
  9477.  move.l d2,d4    ; z sin
  9478.  move.l d4,d6
  9479.  asr.l #1,d6
  9480.  add.l d4,d6
  9481.  add.l d3,d4
  9482.  neg.l d4    ; start x
  9483.  
  9484.  asr.l #1,d6    ; zsin/2
  9485.  sub.l d6,d5    ; start z
  9486.  
  9487.  add.l sxoff,d4
  9488.  add.l szoff,d5
  9489.  
  9490.  tst.b FULLSCR
  9491.  beq.s .nob
  9492.  
  9493.  moveq #0,d6
  9494.  move.w leftedge(pc),d6
  9495.  beq.s .nomultleftB
  9496.  
  9497.  add.l d6,d6
  9498.  divs #3,d6
  9499.  ext.l d6
  9500.  
  9501.  move.l d1,a4
  9502.  move.l d2,a5
  9503.  
  9504.  muls.l d6,d1
  9505.  asr.l #7,d1
  9506.  add.l d1,d4
  9507.  
  9508.  muls.l d6,d2
  9509.  asr.l #7,d2
  9510.  add.l d2,d5
  9511.  move.l a4,d1
  9512.  move.l a5,d2
  9513.  
  9514.  move.w leftedge(pc),d6
  9515.  
  9516. .nomultleftB:
  9517.  
  9518.  move.w d4,startsmoothx
  9519.  move.w d5,startsmoothz
  9520.  
  9521.  asr.l #8,d4
  9522.  asl.l #8,d5
  9523. ; add.w szoff,d5
  9524. ; add.w sxoff,d4
  9525. ; and.w #63,d4
  9526. ; and.w #63*256,d5
  9527.  
  9528.  move.w d4,d5
  9529.  
  9530.  asr.l #6,d1
  9531.  asr.l #6,d2
  9532.  divs.l #3,d1
  9533.  divs.l #3,d2
  9534.  
  9535.  bra.s doneallmult
  9536.  
  9537. .nob 
  9538.  
  9539.  moveq #0,d6
  9540.  move.w leftedge(pc),d6
  9541.  beq.s nomultleft
  9542.  
  9543.  move.l d1,a4
  9544.  move.l d2,a5
  9545.  
  9546.  muls.l d6,d1
  9547.  asr.l #7,d1
  9548.  add.l d1,d4
  9549.  
  9550.  muls.l d6,d2
  9551.  asr.l #7,d2
  9552.  add.l d2,d5
  9553.  move.l a4,d1
  9554.  move.l a5,d2
  9555.  
  9556.  move.w leftedge(pc),d6
  9557.  
  9558. nomultleft:
  9559.  
  9560.  move.w d4,startsmoothx
  9561.  move.w d5,startsmoothz
  9562.  
  9563.  asr.l #8,d4
  9564.  asl.l #8,d5
  9565.  
  9566.  
  9567. ; add.w szoff,d5
  9568. ; add.w sxoff,d4
  9569. ; and.w #63,d4
  9570. ; and.w #63*256,d5
  9571.  
  9572.  move.w d4,d5
  9573.  
  9574.  asr.l #7,d1
  9575.  asr.l #7,d2
  9576. ; divs.l #3,d1
  9577. ; divs.l #3,d2
  9578.  
  9579. doneallmult:
  9580.  
  9581.  move.w d1,a4
  9582.  move.w d2,a5
  9583.  asl.l #8,d2
  9584. ; and.w #%0011111100000000,d2
  9585.  asr.l #8,d1
  9586.  move.w d1,d2
  9587.  ifeq CHEESEY
  9588.  move.l #$3fff3fff,d1
  9589.  endc
  9590.  ifne CHEESEY
  9591.  move.l #$1fff1fff,d1
  9592.  endc
  9593.  and.l d1,d5
  9594. ; swap d5
  9595. ; move.w startsmoothz,d5
  9596. ; swap d5
  9597. ; swap d2
  9598. ; move.w a5,d2
  9599. ; swap d2
  9600.  
  9601. ***********************************
  9602.  
  9603.  
  9604.  tst.b DOUBLEWIDTH
  9605.  beq.s .nodoub
  9606.  
  9607.  and.b #$fe,d6
  9608.  
  9609.  move.w d6,a2
  9610.  moveq #0,d0 
  9611.  move.w rightedge(pc),d3 
  9612.  lea (a3,a2.w),a3 
  9613.  move.w d3,d7
  9614.  sub.w a2,d7
  9615.  asr.w #1,d7
  9616.  move.w startsmoothx,d3
  9617.  
  9618.  tst.b usewater
  9619.  bne texturedwaterDOUB
  9620. ; tst.b gourfloor
  9621.  bra gouraudfloorDOUB
  9622.  
  9623. .nodoub:
  9624.  
  9625.  move.w d6,a2
  9626.  moveq #0,d0 
  9627.  move.w rightedge(pc),d3 
  9628.  lea (a3,a2.w),a3 
  9629.  move.w d3,d7
  9630.  sub.w a2,d7
  9631.  
  9632. intofirststrip:
  9633. allintofirst:
  9634.  
  9635.  move.w startsmoothx,d3
  9636.  
  9637. tstwat:
  9638.  
  9639.  tst.b usewater
  9640.  bne texturedwater
  9641. ; tst.b gourfloor
  9642.  bra gouraudfloor
  9643.  
  9644.  
  9645.  
  9646. ******************************
  9647. * BumpMap the floor/ceiling! *
  9648.  tst.b usebumps
  9649.  bne.s BumpMap
  9650. ******************************
  9651.  
  9652. ordinary:
  9653.  moveq #0,d0
  9654.  
  9655.  dbra d7,acrossscrn
  9656.  rts
  9657.  
  9658. usebumps: dc.w $0
  9659. smoothbumps: dc.w $0
  9660. gourfloor: dc.w 0
  9661.  
  9662.  include "ab3:source_4000/bumpmap.s"
  9663.  
  9664.  CNOP 0,4
  9665. backbefore:
  9666.  and.w d1,d5
  9667.  move.b (a0,d5.w*4),d0
  9668.  add.w a4,d3
  9669.  addx.l d6,d5
  9670.  move.w (a1,d0.w*2),(a3)
  9671.  addq #4,a3
  9672.  dbcs d7,acrossscrn
  9673.  dbcc d7,backbefore
  9674.  bra.s past1
  9675.  
  9676. acrossscrn:
  9677.  and.w d1,d5
  9678.  move.b (a0,d5.w*4),d0
  9679.  add.w a4,d3
  9680.  addx.l d2,d5
  9681.  move.w (a1,d0.w*2),(a3)
  9682.  addq #4,a3
  9683.  dbcs d7,acrossscrn
  9684.  dbcc d7,backbefore
  9685. past1:
  9686.  bcc.s gotoacross
  9687.  
  9688.  move.w d4,d7
  9689.  bne.s .notdoneyet
  9690.  rts
  9691. .notdoneyet:
  9692.  
  9693.  cmp.w #32,d7
  9694.  ble.s .notoowide
  9695.  move.w #32,d7
  9696. .notoowide
  9697.  sub.w d7,d4  
  9698.  addq #4,a3
  9699.  
  9700.  dbra d7,backbefore
  9701.  rts
  9702.  
  9703.  
  9704. gotoacross:
  9705.  
  9706.  move.w d4,d7
  9707.  bne.s .notdoneyet
  9708.  rts
  9709. .notdoneyet:
  9710.  
  9711.  cmp.w #32,d7
  9712.  ble.s .notoowide
  9713.  move.w #32,d7
  9714. .notoowide
  9715.  sub.w d7,d4  
  9716.  addq #4,a3
  9717.  
  9718.  dbra d7,acrossscrn
  9719.  rts
  9720.  
  9721. leftbright: dc.l 0
  9722. brightspd: dc.l 0
  9723.  
  9724. gouraudfloor:
  9725.  
  9726.  move.w leftbright,d0
  9727.  move.l d1,d4
  9728.  move.w brightspd,d1
  9729.  
  9730.  move.w d7,d3
  9731.  asr.w #1,d7
  9732.  btst #0,d3
  9733.  beq.s .nosingle1
  9734.  move.w d5,d3
  9735.  move.l d5,d6
  9736.  lsr.w #8,d3
  9737.  swap d6
  9738.  move.b d3,d6
  9739.  move.w d0,d3
  9740.  ifeq CHEESEY
  9741.  move.b (a0,d6.w*4),d3
  9742.  endc
  9743.  ifne CHEESEY
  9744.  move.b (a0,d6.w),d3
  9745.  endc
  9746.  
  9747.  add.w d1,d0
  9748.  add.l d2,d5
  9749.  and.l d4,d5
  9750.  move.b (a1,d3.w),(a3)+
  9751. .nosingle1
  9752.  
  9753.  move.w d7,d3
  9754.  asr.w #1,d7
  9755.  btst #0,d3
  9756.  beq.s .nosingle2
  9757.  move.w d5,d3
  9758.  move.l d5,d6
  9759.  lsr.w #8,d3
  9760.  swap d6
  9761.  move.b d3,d6
  9762.  move.w d0,d3
  9763.  ifeq CHEESEY
  9764.  move.b (a0,d6.w*4),d3
  9765.  endc
  9766.  ifne CHEESEY
  9767.  move.b (a0,d6.w),d3
  9768.  endc
  9769.  add.w d1,d0
  9770.  add.l d2,d5
  9771.  and.l d4,d5
  9772.  move.l d5,d6
  9773.  swap d6
  9774.  move.b (a1,d3.w),(a3)+
  9775.  move.w d5,d3
  9776.  lsr.w #8,d3
  9777.  move.b d3,d6
  9778.  move.w d0,d3
  9779.  ifeq CHEESEY
  9780.  move.b (a0,d6.w*4),d3
  9781.  endc
  9782.  ifne CHEESEY
  9783.  move.b (a0,d6.w),d3
  9784.  endc
  9785.  add.w d1,d0
  9786.  add.l d2,d5
  9787.  and.l d4,d5
  9788.  move.b (a1,d3.w),(a3)+
  9789.  
  9790. .nosingle2
  9791.  
  9792.  move.l d5,d6
  9793.  swap d6
  9794.  
  9795.  dbra d7,acrossscrngour
  9796.  rts
  9797.  
  9798.  CNOP 0,4
  9799.  
  9800. acrossscrngour:
  9801.  move.w d5,d3
  9802.  lsr.w #8,d3
  9803.  move.b d3,d6
  9804.  move.w d0,d3
  9805.  ifeq CHEESEY
  9806.  move.b (a0,d6.w*4),d3
  9807.  endc
  9808.  ifne CHEESEY
  9809.  move.b (a0,d6.w),d3
  9810.  endc
  9811.  add.w d1,d0
  9812.  add.l d2,d5
  9813.  and.l d4,d5
  9814.  move.l d5,d6
  9815.  swap d6
  9816.  move.b (a1,d3.w),(a3)+
  9817.  move.w d5,d3
  9818.  lsr.w #8,d3
  9819.  move.b d3,d6
  9820.  move.w d0,d3
  9821.  ifeq CHEESEY
  9822.  move.b (a0,d6.w*4),d3
  9823.  endc
  9824.  ifne CHEESEY
  9825.  move.b (a0,d6.w),d3
  9826.  endc
  9827.  add.w d1,d0
  9828.  add.l d2,d5
  9829.  and.l d4,d5
  9830.  move.l d5,d6
  9831.  swap d6
  9832.  move.b (a1,d3.w),(a3)+
  9833.  move.w d5,d3
  9834.  lsr.w #8,d3
  9835.  move.b d3,d6
  9836.  move.w d0,d3
  9837.  ifeq CHEESEY
  9838.  move.b (a0,d6.w*4),d3
  9839.  endc
  9840.  ifne CHEESEY
  9841.  move.b (a0,d6.w),d3
  9842.  endc
  9843.  add.w d1,d0
  9844.  add.l d2,d5
  9845.  and.l d4,d5
  9846.  move.l d5,d6
  9847.  swap d6
  9848.  move.b (a1,d3.w),(a3)+
  9849.  move.w d5,d3
  9850.  lsr.w #8,d3
  9851.  move.b d3,d6
  9852.  move.w d0,d3
  9853.  ifeq CHEESEY
  9854.  move.b (a0,d6.w*4),d3
  9855.  endc
  9856.  ifne CHEESEY
  9857.  move.b (a0,d6.w),d3
  9858.  endc
  9859.  add.w d1,d0
  9860.  add.l d2,d5
  9861.  and.l d4,d5
  9862.  move.l d5,d6
  9863.  swap d6
  9864.  move.b (a1,d3.w),(a3)+
  9865.  dbra d7,acrossscrngour
  9866.  
  9867.  rts
  9868.  
  9869.  
  9870. gouraudfloorDOUB:
  9871.  
  9872.  move.w leftbright,d0
  9873.  move.l d1,d4
  9874.  move.w brightspd,d1
  9875.  add.w d1,d1
  9876.  add.l d2,d2
  9877.  
  9878.  move.w d7,d3
  9879.  asr.w #1,d7
  9880.  btst #0,d3
  9881.  beq.s .nosingle1
  9882.  move.w d5,d3
  9883.  move.l d5,d6
  9884.  lsr.w #8,d3
  9885.  swap d6
  9886.  move.b d3,d6
  9887.  move.w d0,d3
  9888.  ifeq CHEESEY
  9889.  move.b (a0,d6.w*4),d3
  9890.  endc
  9891.  ifne CHEESEY
  9892.  move.b (a0,d6.w),d3
  9893.  endc
  9894.  add.w d1,d0
  9895.  add.l d2,d5
  9896.  and.l d4,d5
  9897.  move.w (a1,d3.w),(a3)+
  9898. .nosingle1
  9899.  
  9900.  move.w d7,d3
  9901.  asr.w #1,d7
  9902.  btst #0,d3
  9903.  beq.s .nosingle2
  9904.  move.w d5,d3
  9905.  move.l d5,d6
  9906.  lsr.w #8,d3
  9907.  swap d6
  9908.  move.b d3,d6
  9909.  move.w d0,d3
  9910.  ifeq CHEESEY
  9911.  move.b (a0,d6.w*4),d3
  9912.  endc
  9913.  ifne CHEESEY
  9914.  move.b (a0,d6.w),d3
  9915.  endc
  9916.  add.w d1,d0
  9917.  add.l d2,d5
  9918.  and.l d4,d5
  9919.  move.l d5,d6
  9920.  swap d6
  9921.  move.w (a1,d3.w),(a3)+
  9922.  move.w d5,d3
  9923.  lsr.w #8,d3
  9924.  move.b d3,d6
  9925.  move.w d0,d3
  9926.  ifeq CHEESEY
  9927.  move.b (a0,d6.w*4),d3
  9928.  endc
  9929.  ifne CHEESEY
  9930.  move.b (a0,d6.w),d3
  9931.  endc
  9932.  add.w d1,d0
  9933.  add.l d2,d5
  9934.  and.l d4,d5
  9935.  move.w (a1,d3.w),(a3)+
  9936.  
  9937. .nosingle2
  9938.  
  9939.  move.l d5,d6
  9940.  swap d6
  9941.  
  9942.  dbra d7,acrossscrngourD
  9943.  rts
  9944.  
  9945.  CNOP 0,4
  9946.  
  9947. acrossscrngourD:
  9948.  move.w d5,d3
  9949.  lsr.w #8,d3
  9950.  move.b d3,d6
  9951.  move.w d0,d3
  9952.  ifeq CHEESEY
  9953.  move.b (a0,d6.w*4),d3
  9954.  endc
  9955.  ifne CHEESEY
  9956.  move.b (a0,d6.w),d3
  9957.  endc
  9958.  add.w d1,d0
  9959.  add.l d2,d5
  9960.  and.l d4,d5
  9961.  move.l d5,d6
  9962.  swap d6
  9963.  move.w (a1,d3.w),(a3)+
  9964.  move.w d5,d3
  9965.  lsr.w #8,d3
  9966.  move.b d3,d6
  9967.  move.w d0,d3
  9968.  ifeq CHEESEY
  9969.  move.b (a0,d6.w*4),d3
  9970.  endc
  9971.  ifne CHEESEY
  9972.  move.b (a0,d6.w),d3
  9973.  endc
  9974.  add.w d1,d0
  9975.  add.l d2,d5
  9976.  and.l d4,d5
  9977.  move.l d5,d6
  9978.  swap d6
  9979.  move.w (a1,d3.w),(a3)+
  9980.  move.w d5,d3
  9981.  lsr.w #8,d3
  9982.  move.b d3,d6
  9983.  move.w d0,d3
  9984.  ifeq CHEESEY
  9985.  move.b (a0,d6.w*4),d3
  9986.  endc
  9987.  ifne CHEESEY
  9988.  move.b (a0,d6.w),d3
  9989.  endc
  9990.  add.w d1,d0
  9991.  add.l d2,d5
  9992.  and.l d4,d5
  9993.  move.l d5,d6
  9994.  swap d6
  9995.  move.w (a1,d3.w),(a3)+
  9996.  move.w d5,d3
  9997.  lsr.w #8,d3
  9998.  move.b d3,d6
  9999.  move.w d0,d3
  10000.  ifeq CHEESEY
  10001.  move.b (a0,d6.w*4),d3
  10002.  endc
  10003.  ifne CHEESEY
  10004.  move.b (a0,d6.w),d3
  10005.  endc
  10006.  add.w d1,d0
  10007.  add.l d2,d5
  10008.  and.l d4,d5
  10009.  move.l d5,d6
  10010.  swap d6
  10011.  move.w (a1,d3.w),(a3)+
  10012.  dbra d7,acrossscrngourD
  10013.  
  10014.  rts
  10015.  
  10016.  
  10017. ;backbeforegour:
  10018. ; and.w #63*256+63,d5
  10019. ; move.b (a0,d5.w*4),d0
  10020. ; add.l d1,d0
  10021. ; bcc.s .nomoreb
  10022. ; add.w #256,d0
  10023. ;.nomoreb:
  10024. ; add.w a4,d3
  10025. ; move.w (a1,d0.w*2),(a3)+
  10026. ; addx.l d6,d5
  10027. ; dbcs d7,acrossscrngour
  10028. ; dbcc d7,backbeforegour
  10029. ; rts
  10030. ; bra.s past1gour
  10031.  
  10032. ;acrossscrngour:
  10033. ; and.l #$3f3f,d5 
  10034. ; move.b (a0,d5.w*4),d0
  10035. ; add.l d1,d0
  10036. ; bcc.s .nomoreb
  10037. ; add.w #256,d0
  10038. ;.nomoreb:
  10039. ; add.w a4,d3
  10040. ; move.w (a1,d0.w*2),(a3)+
  10041. ; addx.l d2,d5
  10042. ; dbcs d7,acrossscrngour
  10043. ; dbcc d7,backbeforegour
  10044. ;past1gour:
  10045. ; rts
  10046.  
  10047.  move.w d4,d7
  10048.  bne.s .notdoneyet
  10049.  move.l d0,leftbright
  10050.  
  10051.  rts
  10052. .notdoneyet:
  10053.  
  10054.  cmp.w #32,d7
  10055.  ble.s .notoowide
  10056.  move.w #32,d7
  10057. .notoowide
  10058.  sub.w d7,d4  
  10059.  addq #4,a3
  10060.  
  10061. ; dbra d7,backbeforegour
  10062.  rts
  10063.  
  10064.  
  10065. gotoacrossgour:
  10066.  
  10067.  move.w d4,d7
  10068.  bne.s .notdoneyet
  10069.  rts
  10070. .notdoneyet:
  10071.  
  10072.  cmp.w #32,d7
  10073.  ble.s .notoowide
  10074.  move.w #32,d7
  10075. .notoowide
  10076.  sub.w d7,d4  
  10077.  addq #4,a3
  10078.  
  10079.  dbra d7,acrossscrngour
  10080.  rts
  10081.  
  10082.  
  10083. waterpt: dc.l waterlist
  10084.  
  10085. waterlist:
  10086.  dc.l waterfile
  10087.  dc.l waterfile+2
  10088.  dc.l waterfile+256
  10089.  dc.l waterfile+256+2
  10090.  dc.l waterfile+512
  10091.  dc.l waterfile+512+2
  10092.  dc.l waterfile+768
  10093.  dc.l waterfile+768+2
  10094. ; dc.l waterfile+768
  10095. ; dc.l waterfile+512+2
  10096. ; dc.l waterfile+512
  10097. ; dc.l waterfile+256+2
  10098. ; dc.l waterfile+256
  10099. ; dc.l waterfile+2
  10100. endwaterlist:
  10101.  
  10102. watertouse: dc.l waterfile
  10103.  
  10104. wtan: dc.w 0
  10105. wateroff: dc.l 0
  10106.  
  10107. REFLECTIONWATER:
  10108.  
  10109.  move.l d1,d4
  10110.  
  10111.  add.l wateroff,d5
  10112.  
  10113.  move.l TexturePal,a1
  10114.  add.l #256*16,a1
  10115.  move.l dst,d0
  10116.  clr.b d0
  10117.  
  10118.  add.w d0,d0
  10119.  cmp.w #12*512,d0
  10120.  blt.s .notoowater
  10121.  move.w #12*512,d0
  10122.  
  10123. .notoowater:
  10124.   
  10125.  adda.w d0,a1
  10126.  
  10127.  move.l dst,d0
  10128.  asl.w #7,d0
  10129.  add.w wtan,d0
  10130.  and.w #8191,d0
  10131.  move.l #SineTable,a0
  10132.  move.w (a0,d0.w),d0
  10133.  ext.l d0
  10134.  
  10135.  move.l dst,d3
  10136.  add.w #300,d3
  10137.  divs d3,d0
  10138.  asr.w #5,d0
  10139.  addq #4,d0
  10140.  cmp.w disttobot,d0
  10141.  blt.s oknotoffbotototr
  10142.  
  10143.  move.w disttobot,d0
  10144.  subq #1,d0
  10145.  
  10146. oknotoffbotototr
  10147.  
  10148. ; move.w dst,d3
  10149. ; asr.w #7,d3
  10150. ; add.w d3,d0
  10151.  
  10152.  muls #320,d0
  10153.  tst.w above
  10154.  beq.s nonnnnnegr
  10155.  neg.l d0
  10156.  
  10157. nonnnnnegr:
  10158.  
  10159.  move.l d0,a6
  10160.  
  10161.  move.l watertouse,a0
  10162.  
  10163. ; move.l #mixtab,a5
  10164.  
  10165.  moveq #0,d1
  10166.  
  10167.  move.w startsmoothx,d3
  10168.  dbra d7,acrossscrnwr
  10169.  rts
  10170.  
  10171. backbeforewr:
  10172.  and.w d1,d5 
  10173.  move.w (a0,d5.w*4),d0
  10174.  move.b (a3,a6.w),d0
  10175.  move.w (a1,d0.w),(a3)+
  10176.  add.w a4,d3
  10177.  addx.l d6,d5
  10178.  dbcs d7,acrossscrnwr
  10179.  dbcc d7,backbeforewr
  10180.  rts
  10181.  
  10182. acrossscrnwr:
  10183.  move.w d5,d3
  10184.  move.l d5,d6
  10185.  lsr.w #8,d3
  10186.  swap d6
  10187.  move.b d3,d6
  10188.  move.w (a0,d6.w*4),d0
  10189.  add.l d2,d5
  10190.  move.w (a4,a6.w),d1
  10191.  addq #2,a4
  10192.  move.b (a3,a6.w),d1
  10193.  move.b (a5,d1.l),d0
  10194.  and.l d4,d5
  10195.  move.w (a1,d0.w),(a3)+
  10196.  dbra d7,acrossscrnwr
  10197.  rts
  10198.  
  10199. texturedwater:
  10200.  
  10201.  move.l d1,d4
  10202.  
  10203.  add.l wateroff,d5
  10204.  
  10205.  move.l TexturePal,a1
  10206.  add.l #256*16,a1
  10207.  move.l dst,d0
  10208.  asr.l #2,d0
  10209.  clr.b d0
  10210.  
  10211.  add.w d0,d0
  10212.  cmp.w #9*512,d0
  10213.  blt.s .notoowater
  10214.  move.w #9*512,d0
  10215. .notoowater:
  10216.   
  10217.  adda.w d0,a1
  10218.  
  10219.  move.l dst,d0
  10220.  asl.w #7,d0
  10221.  add.w wtan,d0
  10222.  and.w #8191,d0
  10223.  move.l #SineTable,a0
  10224.  move.w (a0,d0.w),d0
  10225.  ext.l d0
  10226.  
  10227.  move.l dst,d3
  10228.  add.w #300,d3
  10229.  divs d3,d0
  10230.  asr.w #5,d0
  10231.  addq #4,d0
  10232.  cmp.w disttobot,d0
  10233.  blt.s oknotoffbototot
  10234.  
  10235.  move.w disttobot,d0
  10236.  subq #1,d0
  10237.  
  10238. oknotoffbototot
  10239.  
  10240. ; move.w dst,d3
  10241. ; asr.w #7,d3
  10242. ; add.w d3,d0
  10243.  
  10244.  tst.b DOUBLEHEIGHT
  10245.  beq.s .nodoub
  10246.  and.b #$fe,d0
  10247. .nodoub:
  10248.  
  10249.  muls #320,d0
  10250.  tst.w above
  10251.  beq.s nonnnnneg
  10252.  neg.l d0
  10253.  
  10254. nonnnnneg:
  10255.  
  10256.  move.l d0,a6
  10257.  
  10258.  move.l watertouse,a0
  10259.  
  10260.  move.w startsmoothx,d3
  10261.  dbra d7,acrossscrnw
  10262.  rts
  10263.  
  10264. backbeforew:
  10265.  and.w d1,d5
  10266.  move.w (a0,d5.w*4),d0
  10267.  add.w d0,d0
  10268.  move.b (a3,a6.w),d0
  10269.  move.b (a1,d0.w),(a3)+
  10270.  add.w a4,d3
  10271.  addx.l d6,d5
  10272.  dbcs d7,acrossscrnw
  10273.  dbcc d7,backbeforew
  10274.  rts
  10275.  
  10276. acrossscrnw:
  10277.  move.w d5,d3
  10278.  move.l d5,d6
  10279.  lsr.w #8,d3
  10280.  swap d6
  10281.  move.b d3,d6
  10282.  move.w (a0,d6.w*4),d0
  10283.  add.w d0,d0
  10284.  add.l d2,d5
  10285.  move.b (a3,a6.w),d0
  10286.  and.l d4,d5
  10287.  move.b (a1,d0.w),(a3)+
  10288.  dbra d7,acrossscrnw
  10289.  rts
  10290.  
  10291.  
  10292. texturedwaterDOUB:
  10293.  
  10294.  move.l d1,d4
  10295.  
  10296.  add.l wateroff,d5
  10297.  
  10298.  move.l TexturePal,a1
  10299.  add.l #256*16,a1
  10300.  move.l dst,d0
  10301.  asr.l #2,d0
  10302.  clr.b d0
  10303.  
  10304.  add.w d0,d0
  10305.  cmp.w #9*512,d0
  10306.  blt.s .notoowater
  10307.  move.w #9*512,d0
  10308. .notoowater:
  10309.   
  10310.  adda.w d0,a1
  10311.  
  10312.  move.l dst,d0
  10313.  asl.w #7,d0
  10314.  add.w wtan,d0
  10315.  and.w #8191,d0
  10316.  move.l #SineTable,a0
  10317.  move.w (a0,d0.w),d0
  10318.  ext.l d0
  10319.  
  10320.  move.l dst,d3
  10321.  add.w #300,d3
  10322.  divs d3,d0
  10323.  asr.w #5,d0
  10324.  addq #4,d0
  10325.  cmp.w disttobot,d0
  10326.  blt.s .oknotoffbototot
  10327.  
  10328.  move.w disttobot,d0
  10329.  subq #1,d0
  10330.  
  10331. .oknotoffbototot
  10332.  
  10333. ; move.w dst,d3
  10334. ; asr.w #7,d3
  10335. ; add.w d3,d0
  10336.  
  10337.  tst.b DOUBLEHEIGHT
  10338.  beq.s .nodoub
  10339.  and.b #$fe,d0
  10340. .nodoub:
  10341.  
  10342.  muls #320,d0
  10343.  tst.w above
  10344.  beq.s .nonnnnneg
  10345.  neg.l d0
  10346.  
  10347. .nonnnnneg:
  10348.  
  10349.  move.l d0,a6
  10350.  
  10351.  move.l watertouse,a0
  10352.  
  10353.  add.l d2,d2
  10354.  
  10355.  move.w startsmoothx,d3
  10356.  dbra d7,acrossscrnwD
  10357.  rts
  10358.  
  10359.  
  10360. acrossscrnwD:
  10361.  move.w d5,d3
  10362.  move.l d5,d6
  10363.  lsr.w #8,d3
  10364.  swap d6
  10365.  move.b d3,d6
  10366.  move.w (a0,d6.w*4),d0
  10367.  add.w d0,d0
  10368.  add.l d2,d5
  10369.  move.b (a3,a6.w),d0
  10370.  and.l d4,d5
  10371.  move.w (a1,d0.w),(a3)+
  10372.  dbra d7,acrossscrnwD
  10373.  rts
  10374.  
  10375.  
  10376. usewater: dc.w 0
  10377.  dc.w 0
  10378. startsmoothx: dc.w 0
  10379.  dc.w 0
  10380. startsmoothz: dc.w 0
  10381.  
  10382. ********************************
  10383. *
  10384.  include "AB3:source_4000/ObjDrawHIRES.s"
  10385. *
  10386. ********************************
  10387.  
  10388. numframes:
  10389.  dc.w 0
  10390.  
  10391. alframe: dc.l 0
  10392.  
  10393. alan:
  10394.  dcb.l 8,0
  10395.  dcb.l 8,1
  10396.  dcb.l 8,2
  10397.  dcb.l 8,3
  10398. endalan:
  10399.  
  10400. alanptr: dc.l alan
  10401.  
  10402. Time2: dc.l 0
  10403. dispco:
  10404.  dc.w 0
  10405.  
  10406.  
  10407. key_interrupt:
  10408.         movem.l    d0-d7/a0-a6,-(sp)
  10409.  
  10410. ;        move.w    INTREQR,d0
  10411. ;        btst    #3,d0
  10412. ;        beq    .not_key
  10413.  
  10414.         move.b    $bfdd00,d0
  10415.         btst    #0,d0
  10416.         bne    .key_cont
  10417. ;        move.b    $bfed01,d0
  10418. ;        btst    #0,d0
  10419. ;        bne    .key_cont
  10420.     
  10421. ;        btst    #3,d0
  10422. ;        beq    .key_cont
  10423.  
  10424.         move.b    $bfec01,d0
  10425.         clr.b    $bfec01
  10426.  
  10427.         tst.b    d0
  10428.         beq    .key_cont
  10429.  
  10430. ;        bset    #6,$bfee01
  10431. ;        move.b    #$f0,$bfe401
  10432. ;        move.b    #$00,$bfe501
  10433. ;        bset    #0,$bfee01
  10434.  
  10435.  
  10436.         not.b    d0
  10437.         ror.b    #1,d0
  10438.         lea.l    KeyMap,a0
  10439.         tst.b    d0
  10440.         bmi.b    .key_up
  10441.         and.w    #$7f,d0
  10442. ;        add.w    #1,d0
  10443.         move.b    #$ff,(a0,d0.w)
  10444.         move.b    d0,lastpressed
  10445.  
  10446.         bra.b    .key_cont2
  10447. .key_up:
  10448.         and.w    #$7f,d0
  10449. ;        add.w    #1,d0
  10450.         move.b    #$00,(a0,d0.w)
  10451.  
  10452. .key_cont2
  10453. ;        btst    #0,$bfed01
  10454. ;        beq    .key_cont2
  10455. ;        move.b    #%00000000,$bfee01
  10456. ;        move.b    #%10001000,$bfed01
  10457.  
  10458. ;alt keys should not be independent so overlay ralt on lalt
  10459.  
  10460.         
  10461. .key_cont
  10462.  
  10463. ;        move.w    #$0008,INTREQ
  10464. .not_key:    ;lea.l    $dff000,a5
  10465.  
  10466. ;        lea.l    _keypressed(pc),a0
  10467. ;        move.b    101(a0),d0    ;read LALT
  10468. ;        or.b    102(a0),d0    ;blend it with RALT
  10469. ;        move.b    d0,127(a0)    ;save in combined position
  10470.  
  10471.         movem.l    (sp)+,d0-d7/a0-a6
  10472.  
  10473.         rts
  10474.  
  10475. lastpressed:    dc.b 0
  10476. KInt_CCode    Ds.b    1
  10477. KInt_Askey    Ds.b    1
  10478. KInt_OCode    Ds.w    1
  10479.  
  10480.  
  10481. OldSpace: dc.b 0
  10482. SpaceTapped: dc.b 0
  10483. PLR1_SPCTAP: dc.b 0
  10484. PLR2_SPCTAP: dc.b 0
  10485. PLR1_Ducked: dc.b 0
  10486. PLR2_Ducked: dc.b 0
  10487.  even
  10488.  
  10489.  include "ab3:source_4000/PLR1CONTROL.s"
  10490.  include "ab3:source_4000/PLR2CONTROL.s"
  10491.  include "ab3:source_4000/FALL.s"
  10492.  
  10493.  
  10494.  
  10495. *******************************************8
  10496.  
  10497. SENDMESSAGE:
  10498.  
  10499.  move.l a1,-(a7)
  10500.  
  10501.  move.l MESSPTR,a1
  10502.  move.l d0,(a1)+
  10503.  cmp.l #ENDMESSBUFF,a1
  10504.  blt.s .okinbuff
  10505.  move.l #MESSAGEBUFFER,a1
  10506. .okinbuff:
  10507.  move.l a1,MESSPTR
  10508.  move.l a1,LASTMESSPTR
  10509.  
  10510.  move.l d0,SCROLLPOINTER
  10511.  move.w #0,SCROLLXPOS
  10512.  add.l #160,d0
  10513.  move.l d0,ENDSCROLL
  10514.  move.w #40,SCROLLTIMER
  10515.  
  10516.  move.l (a7)+,a1
  10517.  rts
  10518.  
  10519. RETRIEVEPREVMESSAGE:
  10520.  
  10521.  move.l LASTMESSPTR,a1
  10522.  cmp.l #MESSAGEBUFFER,a1
  10523.  bgt.s .okinbuff
  10524.  
  10525.  move.l #ENDMESSBUFF,a1
  10526.  
  10527. .okinbuff:
  10528.  
  10529.  move.l -(a1),d0
  10530.  beq.s .nomessage
  10531.  
  10532.  move.l d0,SCROLLPOINTER
  10533.  move.w #0,SCROLLXPOS
  10534.  add.l #160,d0
  10535.  move.l d0,ENDSCROLL
  10536.  move.w #40,SCROLLTIMER
  10537.  
  10538. .nomessage:
  10539.  
  10540.  rts
  10541.  
  10542. MESSAGEBUFFER:
  10543.  ds.l 20
  10544. ENDMESSBUFF:
  10545.  
  10546. MESSPTR: dc.l MESSAGEBUFFER
  10547. LASTMESSPTR: dc.l MESSAGEBUFFER
  10548.  
  10549. **********************************************
  10550.  
  10551.  
  10552.  
  10553. prot7: dc.w 0
  10554.  
  10555. GOTTOSEND: dc.w 0
  10556.  
  10557. COUNTER: dc.w 0
  10558. COUNTER2: dc.w 0
  10559. COUNTSPACE: ds.b 160
  10560.  
  10561. OtherInter:
  10562.  move.w #$0010,$dff000+intreq
  10563.  movem.l d0-d7/a0-a6,-(a7)
  10564.  bra justshake
  10565.  
  10566.     cnop 0,4
  10567.  
  10568. Chan0inter:
  10569.  
  10570.     SAVEREGS
  10571.     jsr    .routine
  10572.     GETREGS
  10573.  
  10574. ;    move.w    #1024+'.',$dff030
  10575.     
  10576.     moveq #1,d0
  10577.     rts
  10578.  
  10579. .routine
  10580.  
  10581.     
  10582. ;w move.w #$0010,$dff000+intreq
  10583.  
  10584.  tst.b doanything
  10585.  bne dosomething
  10586.  
  10587.  movem.l d0-d7/a0-a6,-(a7)
  10588.  bra JUSTSOUNDS
  10589.  
  10590.  rts
  10591.  
  10592. tabheld: dc.w 0
  10593. ObjWork: ds.l 512
  10594. WORKPTR: dc.l 0
  10595. thistime: dc.w 0
  10596.  
  10597. DOALLANIMS:
  10598.  
  10599.  sub.b #1,thistime
  10600.  ble.s .okdosome
  10601.  rts
  10602.  
  10603. .okdosome:
  10604.  move.b #5,thistime
  10605.  
  10606.  
  10607.  move.l #ObjWork,a5
  10608.  move.l ObjectData,a0
  10609. Objectloop2:
  10610.  tst.w (a0)
  10611.  blt doneallobj2
  10612.  move.w 12(a0),d0
  10613.  blt doneobj2
  10614.  move.w d0,GraphicRoom(a0)
  10615.  tst.b worry(a0)
  10616.  beq.s doneobj2
  10617.  
  10618.  move.b 16(a0),d0
  10619.  cmp.b #1,d0
  10620.  blt JUMPALIENANIM
  10621. ; beq JUMPOBJECTANIM
  10622. ; cmp.b #2,d0
  10623. ; beq JUMPBULLET
  10624.  
  10625. doneobj2:
  10626.  
  10627.  adda.w #64,a0
  10628.  addq #8,a5
  10629.  bra Objectloop2
  10630.  
  10631. doneallobj2:
  10632.  rts
  10633.  
  10634. JUMPALIENANIM:
  10635.  
  10636.  moveq #0,d0
  10637.  move.b WhichAnim(a0),d0
  10638. ; 0=walking
  10639. ; 1=attacking
  10640. ; 2=getting hit
  10641. ; 3=dying
  10642.  
  10643.  cmp.b #1,d0
  10644.  blt.s ALWALK
  10645.  beq.s ALATTACK
  10646.  
  10647.  cmp.b #3,d0
  10648.  blt ALGETHIT
  10649.  beq ALDIE
  10650.  
  10651.  bra doneobj2
  10652.  
  10653. ALDIE
  10654.  move.l #10,d0
  10655.  bra intowalk
  10656.  
  10657. ALGETHIT:
  10658.  move.l #9,d0
  10659.  bra intowalk
  10660.  
  10661. ALATTACK:
  10662.  move.l #8,d0
  10663.  bra intowalk
  10664.  
  10665. AUXOBJ: dc.w 0
  10666.  
  10667. ALWALK:
  10668.  
  10669. ; jsr ViewpointToDraw
  10670. ; add.l d0,d0
  10671. ; move.l LINKFILE,a6
  10672. ; add.l #AlienStats,a6
  10673. ; moveq #0,d1
  10674. ; move.b TypeOfThing(a0),d1
  10675. ; muls #AlienStatLen,d1
  10676. ; add.l d1,a6
  10677. ; cmp.w #1,A_GFXType(a6)
  10678. ; bne.s NOSIDES2
  10679.  
  10680.  moveq #0,d0
  10681. intowalk:
  10682.  
  10683. NOSIDES2:
  10684.  
  10685.  move.b d0,2(a5)
  10686.  move.l LINKFILE,a6
  10687.  
  10688.  add.l #AlienAnimData,a6
  10689.  
  10690.  moveq #0,d1
  10691.  move.b TypeOfThing(a0),d1
  10692.  move.w .valtables+4(pc,d1.w*8),d1
  10693. ; muls #A_AnimLen,d1
  10694.  add.l d1,a6
  10695.  
  10696. ; move.l ANIMPOINTER,a6
  10697.  
  10698. ; muls #A_OptLen,d0
  10699.  move.w .valtables+2(pc,d0.w*8),d0
  10700.  add.w d0,a6
  10701.  
  10702.  move.w SecTimer(a0),d1
  10703.  move.w d1,d2
  10704. ; muls #A_FrameLen,d1
  10705.  move.w .valtables(pc,d1.w*8),d1
  10706.  
  10707.  moveq #0,d0
  10708.  move.b 5(a6,d1.w),d0
  10709.  beq.s .nosoundmake
  10710.  
  10711.  movem.l d0-d7/a0-a6,-(a7)
  10712.  subq #1,d0
  10713.  move.w d0,Samplenum
  10714.  clr.b notifplaying
  10715.  move.b 1(a0),IDNUM
  10716.  move.w #80,Noisevol
  10717.  move.l #ObjRotated,a1
  10718.  move.w (a0),d0
  10719.  lea (a1,d0.w*8),a1
  10720.  move.l (a1),Noisex
  10721.  jsr MakeSomeNoise
  10722.  movem.l (a7)+,d0-d7/a0-a6
  10723. .nosoundmake
  10724.  
  10725.  move.b 6(a6,d1.w),d0
  10726.  beq.s .noaction
  10727.  add.b #1,(a5)
  10728.  move.b d2,1(a5)
  10729. .noaction
  10730.  
  10731.  addq #1,d2
  10732.  
  10733.  moveq #0,d0
  10734.  move.b 7(a6,d1.w),d0
  10735.  beq .nospecial
  10736.  bra .special
  10737.  
  10738. .valtables:
  10739. val SET 0
  10740.  REPT 20
  10741.  dc.w A_FrameLen*val,A_OptLen*val
  10742.  dc.w A_AnimLen*val,0
  10743. val SET val+1
  10744.  ENDR
  10745.  
  10746. .special
  10747.  move.b d0,d3
  10748.  and.w #63,d3
  10749.  lsr.w #6,d0
  10750.  cmp.w #2,d0
  10751.  blt.s .storeval
  10752.  beq.s .randval
  10753.  
  10754.  sub.b #1,4(a5)
  10755.  beq.s .nospecial
  10756.  
  10757.  move.w d3,d2
  10758.  bra.s .nospecial
  10759.  
  10760. .randval:
  10761.  jsr GetRand
  10762.  divs d3,d0
  10763.  swap d0
  10764.  move.w d0,d3
  10765.  
  10766. .storeval:
  10767.  move.b d3,4(a5)
  10768. .nospecial:
  10769.  
  10770. ; move.w d2,d3
  10771.  move.w .valtables2(pc,d2.w*8),d3
  10772. ; muls #A_FrameLen,d3
  10773.  tst.b (a6,d3.w)
  10774.  bge.s .noendanim
  10775.  st 3(a5)
  10776.  move.w #0,d2
  10777. .noendanim
  10778.  move.w d2,SecTimer(a0)
  10779.  
  10780.  bra doneobj2
  10781.  
  10782. .valtables2:
  10783. val SET 0
  10784.  REPT 20
  10785.  dc.w A_FrameLen*val,A_OptLen*val
  10786.  dc.w A_AnimLen*val,0
  10787. val SET val+1
  10788.  ENDR
  10789.  
  10790.  
  10791. JUMPOBJECTANIM:
  10792.  bra doneobj2
  10793.  
  10794. timetodamage: dc.w 0
  10795. SAVESAVE: dc.w 0
  10796.  
  10797. dosomething:
  10798.  
  10799.  
  10800.  
  10801.  addq.w #1,FramesToDraw
  10802.  movem.l d0-d7/a0-a6,-(a7)
  10803.  
  10804.  jsr NARRATOR
  10805.  
  10806.  bsr DOALLANIMS
  10807.  
  10808.  sub.w #1,timetodamage
  10809.  bgt.s .nodam
  10810.  
  10811.  move.w #100,timetodamage
  10812.  
  10813.  move.l PLR1_Roompt,a0
  10814.  move.w ToFloorNoise(a0),d0
  10815.  tst.b PLR1_StoodInTop
  10816.  beq.s .okinbot
  10817.  move.w ToUpperFloorNoise(a0),d0
  10818. .okinbot:
  10819.  
  10820.  move.l LINKFILE,a0
  10821.  add.l #FloorData,a0
  10822.  move.w (a0,d0.w*4),d0    ; damage. 
  10823.  move.l PLR1_Obj,a0
  10824.  add.b d0,damagetaken(a0)
  10825.  
  10826.  move.l PLR2_Roompt,a0
  10827.  move.w ToFloorNoise(a0),d0
  10828.  tst.b PLR2_StoodInTop
  10829.  beq.s .okinbot2
  10830.  move.w ToUpperFloorNoise(a0),d0
  10831. .okinbot2:
  10832.  
  10833.  move.l LINKFILE,a0
  10834.  add.l #FloorData,a0
  10835.  move.w (a0,d0.w*4),d0    ; damage. 
  10836.  
  10837.  move.l PLR2_Obj,a0
  10838.  add.b d0,damagetaken(a0)
  10839.  
  10840. .nodam:
  10841.  
  10842.  move.l #KeyMap,a5
  10843.  
  10844.  tst.b 82(a5)    ;f3
  10845.  beq notogglesound
  10846.  
  10847.  tst.b lasttogsound
  10848.  bne notogglesound2
  10849.  
  10850.  st lasttogsound
  10851.  
  10852.  move.w TOPPOPT,d0
  10853.  addq #1,d0
  10854.  and.w #3,d0
  10855.  move.w d0,TOPPOPT
  10856.  move.b STEROPT(pc,d0.w*2),STEREO
  10857.  
  10858.  
  10859.  move.b STEROPT+1(pc,d0.w*2),d1
  10860.  muls #160,d0
  10861.  add.l #SOUNDOPTSTEXT,d0
  10862.  jsr SENDMESSAGE
  10863.  
  10864.  
  10865.  move.b d1,Prefsfile+1
  10866.  
  10867.  bra pastster
  10868.  
  10869.  STEROPT:
  10870.  dc.b 0,4
  10871.  dc.b $FF,4
  10872.  dc.b 0,8
  10873.  dc.b $ff,8
  10874.  
  10875. lasttogsound: dc.w 0
  10876.  
  10877. SOUNDOPTSTEXT:
  10878. ;      1234567890123456789012345678901234567890
  10879.  dc.b "Four Channel Mono Selected              "
  10880.  dc.b "                                        "
  10881.  dc.b "                                        "
  10882.  dc.b "                                        "
  10883.  
  10884.  dc.b "Four Channel Stereo Selected            "
  10885.  dc.b "                                        "
  10886.  dc.b "                                        "
  10887.  dc.b "                                        "
  10888.  
  10889.  dc.b "Eight Channel Mono Selected             "
  10890.  dc.b "                                        "
  10891.  dc.b "                                        "
  10892.  dc.b "                                        "
  10893.  
  10894.  dc.b "Eight Channel Stereo Selected           "
  10895.  dc.b "                                        "
  10896.  dc.b "                                        "
  10897.  dc.b "                                        "
  10898.  
  10899. LIGHTING: dc.w $FFff
  10900. OLDLTOG: dc.w 0
  10901.  
  10902. pastster:
  10903.  
  10904.  cmp.b #'4',d1
  10905.  seq.s CHANNELDATA+8
  10906.  seq.s CHANNELDATA+12
  10907.  seq.s CHANNELDATA+24
  10908.  seq.s CHANNELDATA+28
  10909.  
  10910.  move.w #$f,$dff000+dmacon
  10911.  move.l #null,$dff0a0
  10912.  move.w #100,$dff0a4
  10913.  move.w #443,$dff0a6
  10914.  move.w #63,$dff0a8
  10915.  
  10916.  move.l #null2,$dff0b0
  10917.  move.w #100,$dff0b4
  10918.  move.w #443,$dff0b6
  10919.  move.w #63,$dff0b8
  10920.  
  10921.  move.l #null4,$dff0c0
  10922.  move.w #100,$dff0c4
  10923.  move.w #443,$dff0c6
  10924.  move.w #63,$dff0c8
  10925.  
  10926.  move.l #null3,$dff0d0
  10927.  move.w #100,$dff0d4
  10928.  move.w #443,$dff0d6
  10929.  move.w #63,$dff0d8
  10930.  
  10931.  move.w #$820f,$dff000+dmacon
  10932.  
  10933.  bra notogglesound2
  10934.  
  10935. Prefsfile:
  10936.  dc.b 'k4nx'
  10937.  
  10938. notogglesound:
  10939.  clr.b lasttogsound
  10940. notogglesound2:
  10941.  
  10942.  
  10943.  tst.b 83(a5)
  10944.  beq nolighttoggle
  10945.  tst.b OLDLTOG
  10946.  bne nolighttoggle2
  10947.  st OLDLTOG
  10948.  
  10949.  move.l #LIGHTINGTEXT,d0
  10950.  not.b LIGHTING
  10951.  beq.s .noon
  10952.  add.l #160,d0
  10953. .noon:
  10954.  bra pastlighttext
  10955.  
  10956. LIGHTINGTEXT:
  10957.  dc.b "Lighting Effects Deactivated            "
  10958.  dc.b "                                        "
  10959.  dc.b "                                        "
  10960.  dc.b "                                        "
  10961.  
  10962.  dc.b "Lighting Effects Activated              "
  10963.  dc.b "                                        "
  10964.  dc.b "                                        "
  10965.  dc.b "                                        "
  10966.  
  10967. OLDRET: dc.w 0
  10968. OLDCENT: dc.w 0
  10969. OLDGOOD: dc.w 0
  10970.  
  10971. GOODRENDERTXT:
  10972.  dc.b "Rendering Quality : High                "
  10973.  dc.b "                                        "
  10974.  dc.b "                                        "
  10975.  dc.b "                                        "
  10976. BADRENDERTXT:
  10977.  dc.b "Rendering Quality : Reduced             "
  10978.  dc.b "                                        "
  10979.  dc.b "                                        "
  10980.  dc.b "                                        "
  10981.  
  10982. pastlighttext:
  10983.  
  10984.  jsr SENDMESSAGE
  10985.  
  10986. ; move.l d0,SCROLLPOINTER
  10987. ; move.w #0,SCROLLXPOS
  10988. ; add.l #160,d0
  10989. ; move.l d0,ENDSCROLL
  10990. ; move.w #40,SCROLLTIMER 
  10991.  
  10992.  bra nolighttoggle2
  10993.  
  10994. nolighttoggle:
  10995.  clr.b OLDLTOG
  10996. nolighttoggle2:
  10997.  
  10998.  
  10999.  tst.b 84(a5)
  11000.  beq.s noret
  11001.  tst.b OLDRET
  11002.  bne.s noret2
  11003.  st OLDRET
  11004.  
  11005.  jsr RETRIEVEPREVMESSAGE
  11006.  
  11007.  bra noret2
  11008.  
  11009. noret
  11010.  clr.b OLDRET
  11011. noret2:
  11012.  
  11013.  tst.b 85(a5)
  11014.  beq.s .nogood
  11015.  tst.b OLDGOOD
  11016.  bne.s .nogood2
  11017.  st OLDGOOD
  11018.  
  11019.  move.l #GOODRENDERTXT,d0
  11020.  not.b GOODRENDER
  11021.  bne.s .okgood
  11022.  move.l #BADRENDERTXT,d0
  11023. .okgood:
  11024.  
  11025.  jsr SENDMESSAGE
  11026.  
  11027.  bra .nogood2
  11028.  
  11029. .nogood
  11030.  clr.b OLDGOOD
  11031. .nogood2:
  11032.  
  11033.  
  11034.  tst.b $42(a5)
  11035.  bne.s .tabprsd
  11036.  clr.b tabheld
  11037.  bra.s .noswitch
  11038.  
  11039. .tabprsd:
  11040.  tst.b tabheld
  11041.  bne.s .noswitch
  11042.  not.b MAPON
  11043.  st tabheld
  11044. .noswitch
  11045.  
  11046.  tst.b $3e(a5)
  11047.  sne d0
  11048.  tst.b $1e(a5)
  11049.  sne d1
  11050.  tst.b $2d(a5)
  11051.  sne d2
  11052.  tst.b $2f(a5)
  11053.  sne d3
  11054.  
  11055.  tst.b $3d(a5)
  11056.  sne d4
  11057.  tst.b $3f(a5)
  11058.  sne d5
  11059.  tst.b $1d(a5)
  11060.  sne d6
  11061.  tst.b $1f(a5)
  11062.  sne d7
  11063.  
  11064.  or.b d4,d0
  11065.  or.b d5,d0
  11066.  or.b d6,d1
  11067.  or.b d7,d1
  11068.  or.b d4,d2
  11069.  or.b d6,d2
  11070.  or.b d7,d3
  11071.  or.b d5,d3
  11072.  
  11073.  move.w MAPBRIGHT,d4
  11074.  add.w #2,d4
  11075.  clr.l d5
  11076.  bset d4,d5
  11077.  
  11078.  tst.b d0
  11079.  beq.s .nomapup
  11080.  sub.w d5,mapzoff
  11081. .nomapup 
  11082.  
  11083.  tst.b d1
  11084.  beq.s .nomapdown
  11085.  add.w d5,mapzoff
  11086. .nomapdown 
  11087.  
  11088.  tst.b d2
  11089.  beq.s .nomapleft
  11090.  add.w d5,mapxoff
  11091. .nomapleft 
  11092.  
  11093.  tst.b d3
  11094.  beq.s .nomapright
  11095.  sub.w d5,mapxoff
  11096. .nomapright 
  11097.  
  11098.  tst.b $2e(a5)
  11099.  beq.s .nomapcentre
  11100.  
  11101.  move.w #0,mapxoff
  11102.  move.w #0,mapzoff
  11103.  
  11104. .nomapcentre
  11105.  
  11106. ; move.w STOPOFFSET,d0
  11107. ; tst.b 27(a5)
  11108. ; beq.s .nolookup
  11109. ; sub.w #5,d0
  11110. ; cmp.w #-80,d0
  11111. ; bgt.s .nolookup
  11112. ; move.w #-80,d0
  11113. ;.nolookup:
  11114. ; tst.b 42(a5)
  11115. ; beq.s .nolookdown
  11116. ; add.w #5,d0
  11117. ; cmp.w #80,d0
  11118. ; blt.s .nolookdown
  11119. ; move.w #80,d0
  11120. ;.nolookdown:
  11121. ;
  11122. ; move.w d0,STOPOFFSET
  11123. ; neg.w d0
  11124. ; add.w #120,d0
  11125. ; move.w d0,SMIDDLEY
  11126. ; muls #320*2,d0
  11127. ; move.l d0,SBIGMIDDLEY
  11128.  
  11129.  
  11130. ; jsr INITREC
  11131. ; jsr RECEIVE
  11132.  
  11133. ; tst.l BUFFER
  11134. ; beq.s justshake
  11135. ; st GOTTOSEND
  11136. ; move.l #OtherInter,$6c
  11137.  
  11138. justshake:
  11139.  
  11140.  cmp.b #'b',Prefsfile+3
  11141.  bne.s .noback
  11142.  jsr mt_music
  11143. .noback:
  11144.  
  11145.  bra dontshowtime
  11146.  
  11147.  tst.b oktodisplay
  11148.  beq dontshowtime
  11149.  clr.b oktodisplay
  11150.  subq.w #1,dispco
  11151.  bgt dontshowtime
  11152.  move.w #10,dispco
  11153.  
  11154.  move.l #TimerScr+10,a0
  11155.  move.l TimeCount,d0
  11156.  bge.s timenotneg
  11157.  move.l #1111*256,d0
  11158. timenotneg:
  11159.  asr.l #8,d0
  11160.  move.l #digits,a1
  11161.  move.w #7,d2
  11162. digitlop
  11163.  divs #10,d0
  11164.  swap d0
  11165.  lea (a1,d0.w*8),a2
  11166.  move.b (a2)+,(a0)
  11167.  move.b (a2)+,24(a0)
  11168.  move.b (a2)+,24*2(a0)
  11169.  move.b (a2)+,24*3(a0)
  11170.  move.b (a2)+,24*4(a0)
  11171.  move.b (a2)+,24*5(a0)
  11172.  move.b (a2)+,24*6(a0)
  11173.  move.b (a2)+,24*7(a0)
  11174.  subq #1,a0
  11175.  swap d0
  11176.  ext.l d0
  11177.  dbra d2,digitlop
  11178.  
  11179.  move.l #TimerScr+10+24*10,a0
  11180.  move.l NumTimes,d0
  11181.  move.l #digits,a1
  11182.  move.w #3,d2
  11183. digitlop2
  11184.  divs #10,d0
  11185.  swap d0
  11186.  lea (a1,d0.w*8),a2
  11187.  move.b (a2)+,(a0)
  11188.  move.b (a2)+,24(a0)
  11189.  move.b (a2)+,24*2(a0)
  11190.  move.b (a2)+,24*3(a0)
  11191.  move.b (a2)+,24*4(a0)
  11192.  move.b (a2)+,24*5(a0)
  11193.  move.b (a2)+,24*6(a0)
  11194.  move.b (a2)+,24*7(a0)
  11195.  subq #1,a0
  11196.  swap d0
  11197.  ext.l d0
  11198.  dbra d2,digitlop2
  11199.  
  11200.  move.l #TimerScr+10+24*20,a0
  11201.  moveq #0,d0
  11202.  move.w FramesToDraw,d0
  11203.  move.l #digits,a1
  11204.  move.w #2,d2
  11205. digitlop3
  11206.  divs #10,d0
  11207.  swap d0
  11208.  lea (a1,d0.w*8),a2
  11209.  move.b (a2)+,(a0)
  11210.  move.b (a2)+,24(a0)
  11211.  move.b (a2)+,24*2(a0)
  11212.  move.b (a2)+,24*3(a0)
  11213.  move.b (a2)+,24*4(a0)
  11214.  move.b (a2)+,24*5(a0)
  11215.  move.b (a2)+,24*6(a0)
  11216.  move.b (a2)+,24*7(a0)
  11217.  subq #1,a0
  11218.  swap d0
  11219.  ext.l d0
  11220.  dbra d2,digitlop3
  11221.  
  11222. dontshowtime:
  11223.  
  11224.  
  11225.  move.l alanptr,a0
  11226.  move.l (a0)+,alframe
  11227.  cmp.l #endalan,a0
  11228.  blt.s nostartalan
  11229.  move.l #alan,a0
  11230. nostartalan:
  11231.  move.l a0,alanptr
  11232.  
  11233.  
  11234.  tst.b READCONTROLS
  11235.  beq nocontrols
  11236.  
  11237.  cmp.b #'s',mors
  11238.  beq control2
  11239.  
  11240.  tst.w PLAYERONEHEALTH
  11241.  bgt .propercontrol
  11242.  
  11243.  move.l #7*2116,hitcol
  11244.  move.l #PLR1_Obj,a0
  11245.  move.w #-1,12+128(a0)
  11246.  
  11247.  clr.b PLR1_fire
  11248.  clr.b PLR1_clicked
  11249.  move.w #0,ADDTOBOBBLE
  11250.  move.l #playercrouched,PLR1s_height
  11251.  move.w #-80,d0
  11252.  move.w d0,STOPOFFSET
  11253.  neg.w d0
  11254.  add.w TOTHEMIDDLE,d0
  11255.  move.w d0,SMIDDLEY
  11256.  muls #320,d0
  11257.  move.l d0,SBIGMIDDLEY
  11258.  jsr PLR1_fall
  11259.  
  11260.  move.l PLR1s_xspdval,d6
  11261.  move.l PLR1s_zspdval,d7
  11262.  
  11263.  tst.b SLOWDOWN
  11264.  beq.s .nofriction
  11265.  
  11266.  neg.l d6
  11267.  ble.s .nobug1
  11268.  asr.l #3,d6
  11269.  add.l #1,d6
  11270.  bra.s .bug1
  11271. .nobug1
  11272.  asr.l #3,d6
  11273. .bug1:
  11274.  
  11275.  neg.l d7
  11276.  ble.s .nobug2
  11277.  asr.l #3,d7
  11278.  add.l #1,d7
  11279.  bra.s .bug2
  11280. .nobug2
  11281.  asr.l #3,d7
  11282. .bug2: 
  11283.  
  11284.  add.l d6,PLR1s_xspdval
  11285.  add.l d7,PLR1s_zspdval
  11286.  
  11287. .nofriction:
  11288.  move.l PLR1s_xspdval,d6
  11289.  move.l PLR1s_zspdval,d7
  11290.  add.l d6,PLR1s_xoff
  11291.  add.l d7,PLR1s_zoff
  11292.  
  11293.  move.w PLR1s_angspd,d3
  11294.  tst.b SLOWDOWN
  11295.  beq.s .nofric
  11296.  asr.w #2,d3
  11297.  bge.s .nneg
  11298.  addq #1,d3
  11299. .nneg:
  11300. .nofric:
  11301.  
  11302.  move.w d3,PLR1s_angspd
  11303.  add.w d3,PLR1s_angpos
  11304.  add.w d3,PLR1s_angpos
  11305.  and.w #8190,PLR1s_angpos
  11306.  
  11307.  bra nocontrols
  11308.  
  11309. .propercontrol:
  11310.  
  11311.  tst.b PLR1MOUSE
  11312.  beq.s PLR1_nomouse
  11313.  bsr PLR1_mouse_control
  11314. PLR1_nomouse:
  11315.  tst.b PLR1KEYS
  11316.  beq.s PLR1_nokeys
  11317.  bsr PLR1_keyboard_control
  11318. PLR1_nokeys:
  11319. ; tst.b PLR1PATH
  11320. ; beq.s PLR1_nopath
  11321. ; bsr PLR1_follow_path
  11322. ;PLR1_nopath:
  11323.  tst.b PLR1JOY
  11324.  beq.s PLR1_nojoy
  11325.  bsr PLR1_JoyStick_control
  11326. PLR1_nojoy: 
  11327.  bra nocontrols
  11328.  
  11329. control2:
  11330.  
  11331.  tst.w PLAYERTWOHEALTH
  11332.  bgt .propercontrol
  11333.  
  11334.  move.l #7*2116,hitcol
  11335.  move.l #PLR1_Obj,a0
  11336.  move.w #-1,12+128(a0)
  11337.  clr.b PLR2_fire
  11338.  move.w #0,ADDTOBOBBLE
  11339.  move.l #playercrouched,PLR2s_height
  11340.  move.w #-80,d0
  11341.  move.w d0,STOPOFFSET
  11342.  neg.w d0
  11343.  add.w TOTHEMIDDLE,d0
  11344.  move.w d0,SMIDDLEY
  11345.  muls #320,d0
  11346.  move.l d0,SBIGMIDDLEY
  11347.  jsr PLR2_fall
  11348.  
  11349.  move.l PLR2s_xspdval,d6
  11350.  move.l PLR2s_zspdval,d7
  11351.  
  11352.  tst.b SLOWDOWN
  11353.  beq.s .nofriction
  11354.  
  11355.  neg.l d6
  11356.  ble.s .nobug1
  11357.  asr.l #3,d6
  11358.  add.l #1,d6
  11359.  bra.s .bug1
  11360. .nobug1
  11361.  asr.l #3,d6
  11362. .bug1:
  11363.  
  11364.  neg.l d7
  11365.  ble.s .nobug2
  11366.  asr.l #3,d7
  11367.  add.l #1,d7
  11368.  bra.s .bug2
  11369. .nobug2
  11370.  asr.l #3,d7
  11371. .bug2: 
  11372.  
  11373.  add.l d6,PLR2s_xspdval
  11374.  add.l d7,PLR2s_zspdval
  11375.  
  11376. .nofriction:
  11377.  move.l PLR2s_xspdval,d6
  11378.  move.l PLR2s_zspdval,d7
  11379.  add.l d6,PLR2s_xoff
  11380.  add.l d7,PLR2s_zoff
  11381.  
  11382.  move.w PLR2s_angspd,d3
  11383.  tst.b SLOWDOWN
  11384.  beq.s .nofric
  11385.  asr.w #2,d3
  11386.  bge.s .nneg
  11387.  addq #1,d3
  11388. .nneg:
  11389. .nofric:
  11390.  
  11391.  move.w d3,PLR2s_angspd
  11392.  add.w d3,PLR2s_angpos
  11393.  add.w d3,PLR2s_angpos
  11394.  and.w #8190,PLR2s_angpos
  11395.  
  11396.  bra.s nocontrols
  11397.  
  11398. .propercontrol:
  11399.  tst.b PLR2MOUSE
  11400.  beq.s PLR2_nomouse
  11401.  bsr PLR2_mouse_control
  11402. PLR2_nomouse:
  11403.  tst.b PLR2KEYS
  11404.  beq.s PLR2_nokeys
  11405.  bsr PLR2_keyboard_control
  11406. PLR2_nokeys:
  11407. ; tst.b PLR2PATH
  11408. ; beq.s PLR2_nopath
  11409. ; bsr PLR1_follow_path
  11410. ;PLR2_nopath:
  11411.  tst.b PLR2JOY
  11412.  beq.s PLR2_nojoy
  11413.  bsr PLR2_JoyStick_control
  11414. PLR2_nojoy: 
  11415.  
  11416.  
  11417. nocontrols:
  11418.  
  11419.  move.l #$dff000,a6
  11420.  
  11421.  cmp.b #'4',Prefsfile+1
  11422.  bne.s nomuckabout
  11423.  
  11424.  move.w #$0,d0 
  11425.  tst.b NoiseMade0LEFT
  11426.  beq.s noturnoff0
  11427.  move.w #1,d0
  11428. noturnoff0:
  11429.  tst.b NoiseMade0RIGHT
  11430.  beq.s noturnoff1
  11431.  or.w #2,d0
  11432. noturnoff1:
  11433.  tst.b NoiseMade1RIGHT
  11434.  beq.s noturnoff2
  11435.  or.w #4,d0
  11436. noturnoff2:
  11437.  tst.b NoiseMade1LEFT
  11438.  beq.s noturnoff3
  11439.  or.w #8,d0
  11440. noturnoff3:
  11441.     move.w d0,dmacon(a6)
  11442.  
  11443. nomuckabout:
  11444.  
  11445.  
  11446. ; tst.b PLR2_fire
  11447. ; beq.s firenotpressed2
  11448. ; fire was pressed last time.
  11449. ; btst #7,$bfe001
  11450. ; bne.s firenownotpressed2
  11451. ; fire is still pressed this time.
  11452. ; st PLR2_fire
  11453. ; bra dointer
  11454.  
  11455. firenownotpressed2:
  11456. ; fire has been released.
  11457. ; clr.b PLR2_fire
  11458. ; bra dointer
  11459.  
  11460. firenotpressed2
  11461.  
  11462. ; fire was not pressed last frame...
  11463.  
  11464. ; btst #7,$bfe001
  11465. ; if it has still not been pressed, go back above
  11466. ; bne.s firenownotpressed2
  11467. ; fire was not pressed last time, and was this time, so has
  11468. ; been clicked.
  11469. ; st PLR2_clicked
  11470. ; st PLR2_fire
  11471.  
  11472. dointer
  11473.  
  11474. JUSTSOUNDS:
  11475.  
  11476.  tst.b dosounds
  11477.  beq.s .notthing
  11478.  
  11479.  cmp.b #'4',Prefsfile+1
  11480.     beq fourchannel
  11481.  
  11482.  btst #1,$dff000+intreqr
  11483.     bne.s newsampbitl
  11484.  
  11485. .notthing:
  11486.  
  11487.  movem.l (a7)+,d0-d7/a0-a6
  11488.  
  11489.  moveq #0,d0
  11490.  rts
  11491.  
  11492.  
  11493. dosounds: dc.w 0
  11494.  
  11495. swappedem: dc.w 0
  11496.  
  11497. newsampbitl:
  11498.  
  11499.  move.w #$820f,$dff000+dmacon
  11500.  
  11501.  move.w #$200,$dff000+intreq
  11502.  
  11503. ; tst.b CHANNELDATA
  11504. ; bne nochannel0
  11505.  
  11506.  move.l pos0LEFT,a0
  11507.  move.l pos2LEFT,a1
  11508.  
  11509.  move.l #tab,a2
  11510.  
  11511.  moveq #0,d0
  11512.  moveq #0,d1
  11513.  move.b vol0left,d0
  11514.  move.b vol2left,d1
  11515.  cmp.b d1,d0
  11516.  slt swappedem
  11517.  bge.s fbig0
  11518.  
  11519. ; d1 is bigger so scale d0 and use d1
  11520. ; as audiochannel volume.
  11521.  
  11522.  exg a0,a1
  11523.  asl.w #6,d0
  11524.  divs d1,d0
  11525.  lsl.w #8,d0
  11526.  adda.w d0,a2
  11527.  move.w d1,$dff0a8
  11528.  bra.s donechan0
  11529.  
  11530. fbig0:
  11531.  tst.w d0
  11532.  beq.s donechan0
  11533.  asl.w #6,d1
  11534.  divs d0,d1
  11535.  lsl.w #8,d1
  11536.  adda.w d1,a2
  11537.  move.w d0,$dff0a8
  11538.  
  11539. donechan0:
  11540.  
  11541.  move.l Aupt0,a3
  11542.  move.l a3,$dff0a0
  11543.  move.l Auback0,Aupt0
  11544.  move.l a3,Auback0
  11545.  
  11546.  move.l Auback0,a3
  11547.  
  11548.  moveq #0,d0
  11549.  moveq #0,d1
  11550.  moveq #0,d2
  11551.  moveq #0,d3
  11552.  moveq #0,d4
  11553.  moveq #0,d5
  11554.  move.w #49,d7
  11555. loop:
  11556.  move.l (a0)+,d0
  11557.  move.b (a1)+,d1
  11558.  move.b (a1)+,d2
  11559.  move.b (a1)+,d3
  11560.  move.b (a1)+,d4
  11561.  move.b (a2,d3.w),d5
  11562.  swap d5
  11563.  move.b (a2,d1.w),d5
  11564.  asl.l #8,d5
  11565.  move.b (a2,d2.w),d5
  11566.  swap d5
  11567.  move.b (a2,d4.w),d5
  11568.  add.l d5,d0
  11569.  move.l d0,(a3)+
  11570.  dbra d7,loop
  11571.  
  11572.  tst.b swappedem
  11573.  beq.s .ok23
  11574.  exg a0,a1
  11575. .ok23:
  11576.  
  11577.  cmp.l Samp0endLEFT,a0
  11578.  blt.s .notoffendsamp1
  11579.  move.l #empty,a0
  11580.  move.l #emptyend,Samp0endLEFT
  11581.  move.b #0,vol0left
  11582.  st LEFTCHANDATA+1
  11583.  move.w #0,LEFTCHANDATA+2
  11584. .notoffendsamp1:
  11585.  
  11586.  cmp.l Samp2endLEFT,a1
  11587.  blt.s .notoffendsamp2
  11588.  move.l #empty,a1
  11589.  move.l #emptyend,Samp2endLEFT
  11590.  move.b #0,vol2left
  11591.  st LEFTCHANDATA+1+8
  11592.  move.w #0,LEFTCHANDATA+2+8
  11593. .notoffendsamp2:
  11594.  
  11595.  move.l a0,pos0LEFT
  11596.  move.l a1,pos2LEFT
  11597.  
  11598. nochannel0:
  11599.  
  11600.  tst.b CHANNELDATA+16
  11601.  bne nochannel1
  11602.  
  11603.  
  11604.  move.l pos0RIGHT,a0
  11605.  move.l pos2RIGHT,a1
  11606.  
  11607.  move.l Aupt1,a3
  11608.  move.l a3,$dff0b0
  11609.  move.l Auback1,Aupt1
  11610.  move.l a3,Auback1
  11611.  
  11612.  move.l #tab,a2
  11613.  
  11614.  moveq #0,d0
  11615.  moveq #0,d1
  11616.  move.b vol0right,d0
  11617.  move.b vol2right,d1
  11618.  cmp.b d1,d0
  11619.  slt swappedem
  11620.  bge.s fbig1
  11621.  
  11622. ; d1 is bigger so scale d0 and use d1
  11623. ; as audiochannel volume.
  11624.  
  11625.  exg a0,a1
  11626.  asl.w #6,d0
  11627.  divs d1,d0
  11628.  lsl.w #8,d0
  11629.  adda.w d0,a2
  11630.  move.w d1,$dff0b8
  11631.  bra.s donechan1
  11632.  
  11633. fbig1:
  11634.  tst.w d0
  11635.  beq.s donechan1
  11636.  asl.w #6,d1
  11637.  divs d0,d1
  11638.  lsl.w #8,d1
  11639.  adda.w d1,a2
  11640.  move.w d0,$dff0b8
  11641.  
  11642. donechan1:
  11643.  moveq #0,d0
  11644.  moveq #0,d1
  11645.  moveq #0,d2
  11646.  moveq #0,d3
  11647.  moveq #0,d4
  11648.  moveq #0,d5
  11649.  move.w #49,d7
  11650. loop2:
  11651.  move.l (a0)+,d0
  11652.  move.b (a1)+,d1
  11653.  move.b (a1)+,d2
  11654.  move.b (a1)+,d3
  11655.  move.b (a1)+,d4
  11656.  move.b (a2,d3.w),d5
  11657.  swap d5
  11658.  move.b (a2,d1.w),d5
  11659.  asl.l #8,d5
  11660.  move.b (a2,d2.w),d5
  11661.  swap d5
  11662.  move.b (a2,d4.w),d5
  11663.  add.l d5,d0
  11664.  move.l d0,(a3)+
  11665.  dbra d7,loop2
  11666.  
  11667.  tst.b swappedem
  11668.  beq.s ok01
  11669.  exg a0,a1
  11670. ok01:
  11671.  
  11672.  cmp.l Samp0endRIGHT,a0
  11673.  blt.s .notoffendsamp1
  11674.  move.l #empty,a0
  11675.  move.l #emptyend,Samp0endRIGHT
  11676.  move.b #0,vol0right
  11677.  st RIGHTCHANDATA+1
  11678.  move.w #0,RIGHTCHANDATA+2
  11679. .notoffendsamp1:
  11680.  
  11681.  cmp.l Samp2endRIGHT,a1
  11682.  blt.s .notoffendsamp2
  11683.  move.l #empty,a1
  11684.  move.l #emptyend,Samp2endRIGHT
  11685.  move.b #0,vol2right
  11686.  st RIGHTCHANDATA+1+8
  11687.  move.w #0,RIGHTCHANDATA+2+8
  11688. .notoffendsamp2:
  11689.  
  11690.  move.l a0,pos0RIGHT
  11691.  move.l a1,pos2RIGHT
  11692.  
  11693. nochannel1:
  11694.  
  11695. ******************* Other two channels
  11696.  
  11697.  move.l pos1LEFT,a0
  11698.  move.l pos3LEFT,a1
  11699.  
  11700.  move.l #tab,a2
  11701.  
  11702.  moveq #0,d0
  11703.  moveq #0,d1
  11704.  move.b vol1left,d0
  11705.  move.b vol3left,d1
  11706.  cmp.b d1,d0
  11707.  slt swappedem
  11708.  bge.s fbig2
  11709.  
  11710. ; d1 is bigger so scale d0 and use d1
  11711. ; as audiochannel volume.
  11712.  
  11713.  exg a0,a1
  11714.  asl.w #6,d0
  11715.  divs d1,d0
  11716.  lsl.w #8,d0
  11717.  adda.w d0,a2
  11718.  move.w d1,$dff0d8
  11719.  bra.s donechan2
  11720.  
  11721. fbig2:
  11722.  tst.w d0
  11723.  beq.s donechan2
  11724.  asl.w #6,d1
  11725.  divs d0,d1
  11726.  lsl.w #8,d1
  11727.  adda.w d1,a2
  11728.  move.w d0,$dff0d8
  11729.  
  11730. donechan2:
  11731.  
  11732.  move.l Aupt2,a3
  11733.  move.l a3,$dff0d0
  11734.  move.l Auback2,Aupt2
  11735.  move.l a3,Auback2
  11736.  
  11737.  moveq #0,d0
  11738.  moveq #0,d1
  11739.  moveq #0,d2
  11740.  moveq #0,d3
  11741.  moveq #0,d4
  11742.  moveq #0,d5
  11743.  move.w #49,d7
  11744. loop3:
  11745.  move.l (a0)+,d0
  11746.  move.b (a1)+,d1
  11747.  move.b (a1)+,d2
  11748.  move.b (a1)+,d3
  11749.  move.b (a1)+,d4
  11750.  move.b (a2,d3.w),d5
  11751.  swap d5
  11752.  move.b (a2,d1.w),d5
  11753.  asl.l #8,d5
  11754.  move.b (a2,d2.w),d5
  11755.  swap d5
  11756.  move.b (a2,d4.w),d5
  11757.  add.l d5,d0
  11758.  move.l d0,(a3)+
  11759.  dbra d7,loop3
  11760.  
  11761.  tst.b swappedem
  11762.  beq.s .ok23
  11763.  exg a0,a1
  11764. .ok23:
  11765.  
  11766.  cmp.l Samp1endLEFT,a0
  11767.  blt.s .notoffendsamp3
  11768.  move.l #empty,a0
  11769.  move.l #emptyend,Samp1endLEFT
  11770.  move.b #0,vol1left
  11771.  st LEFTCHANDATA+1+4
  11772.  move.w #0,LEFTCHANDATA+2+4
  11773. .notoffendsamp3:
  11774.  
  11775.  cmp.l Samp3endLEFT,a1
  11776.  blt.s .notoffendsamp4
  11777.  move.l #empty,a1
  11778.  move.l #emptyend,Samp3endLEFT
  11779.  move.b #0,vol3left
  11780.  st LEFTCHANDATA+1+12
  11781.  move.w #0,LEFTCHANDATA+2+12
  11782. .notoffendsamp4:
  11783.  
  11784.  move.l a0,pos1LEFT
  11785.  move.l a1,pos3LEFT
  11786.  
  11787.  move.l pos1RIGHT,a0
  11788.  move.l pos3RIGHT,a1
  11789.  
  11790.  move.l Aupt3,a3
  11791.  move.l a3,$dff0c0
  11792.  move.l Auback3,Aupt3
  11793.  move.l a3,Auback3
  11794.  
  11795.  move.l #tab,a2
  11796.  
  11797.  moveq #0,d0
  11798.  moveq #0,d1
  11799.  move.b vol1right,d0
  11800.  move.b vol3right,d1
  11801.  cmp.b d1,d0
  11802.  slt.s swappedem
  11803.  bge.s fbig3
  11804.  
  11805.  exg a0,a1
  11806.  asl.w #6,d0
  11807.  divs d1,d0
  11808.  lsl.w #8,d0
  11809.  adda.w d0,a2
  11810.  move.w d1,$dff0c8
  11811.  bra.s donechan3
  11812.  
  11813. fbig3:
  11814.  tst.w d0
  11815.  beq.s donechan3
  11816.  asl.w #6,d1
  11817.  divs d0,d1
  11818.  lsl.w #8,d1
  11819.  adda.w d1,a2
  11820.  move.w d0,$dff0c8
  11821. donechan3:
  11822.  
  11823.  moveq #0,d0
  11824.  moveq #0,d1
  11825.  moveq #0,d2
  11826.  moveq #0,d3
  11827.  moveq #0,d4
  11828.  moveq #0,d5
  11829.  move.w #49,d7
  11830. loop4:
  11831.  move.l (a0)+,d0
  11832.  move.b (a1)+,d1
  11833.  move.b (a1)+,d2
  11834.  move.b (a1)+,d3
  11835.  move.b (a1)+,d4
  11836.  move.b (a2,d3.w),d5
  11837.  swap d5
  11838.  move.b (a2,d1.w),d5
  11839.  asl.l #8,d5
  11840.  move.b (a2,d2.w),d5
  11841.  swap d5
  11842.  move.b (a2,d4.w),d5
  11843.  add.l d5,d0
  11844.  move.l d0,(a3)+
  11845.  dbra d7,loop4
  11846.  
  11847.  tst.b swappedem
  11848.  beq.s .ok23
  11849.  exg a0,a1
  11850. .ok23:
  11851.  
  11852.  cmp.l Samp1endRIGHT,a0
  11853.  blt.s notoffendsamp3
  11854.  move.l #empty,a0
  11855.  move.l #emptyend,Samp1endRIGHT
  11856.  move.b #0,vol1right
  11857.  st RIGHTCHANDATA+1+4
  11858.  move.w #0,RIGHTCHANDATA+2+4
  11859. notoffendsamp3:
  11860.  
  11861.  cmp.l Samp3endRIGHT,a1
  11862.  blt.s notoffendsamp4
  11863.  move.l #empty,a1
  11864.  move.l #emptyend,Samp3endRIGHT
  11865.  move.b #0,vol3right
  11866.  st RIGHTCHANDATA+1+12
  11867.  move.w #0,RIGHTCHANDATA+2+12
  11868. notoffendsamp4:
  11869.  
  11870.  move.l a0,pos1RIGHT
  11871.  move.l a1,pos3RIGHT
  11872.  
  11873.  movem.l (a7)+,d0-d7/a0-a6
  11874.  tst.b counting
  11875.  beq .nostartcounter
  11876.  JSR STARTCOUNT
  11877. .nostartcounter:
  11878.  
  11879.  moveq #0,d0
  11880.  rts
  11881.  
  11882. ***********************************
  11883. * 4 channel sound routine
  11884. ***********************************
  11885.  
  11886. fourchannel:
  11887.  
  11888.  move.l #$dff000,a6
  11889.  
  11890.  btst #7,intreqrl(a6)
  11891.  beq.s nofinish0
  11892. ; move.w #0,LEFTCHANDATA+2
  11893. ; st LEFTCHANDATA+1
  11894.  move.l #null,$a0(a6)
  11895.  move.w #100,$a4(a6) 
  11896.  move.w #$0080,intreq(a6)
  11897. nofinish0:
  11898.  
  11899.  tst.b NoiseMade0pLEFT
  11900.  beq.s NoChan0sound
  11901.  
  11902.  move.l Samp0endLEFT,d0
  11903.  move.l pos0LEFT,d1
  11904.  sub.l d1,d0
  11905.  lsr.l #1,d0
  11906.  move.w d0,$a4(a6)
  11907.  move.l d1,$a0(a6)
  11908.  ext.l d0
  11909.  divs #100,d0
  11910.  move.w d0,playnull0
  11911.  move.w #$8201,dmacon(a6)
  11912.  moveq #0,d0
  11913.  move.b vol0left,d0
  11914.  move.w d0,$a8(a6)
  11915.  
  11916. NoChan0sound:
  11917.  
  11918. *****************************************
  11919. *****************************************
  11920.  
  11921.  btst #0,intreqr(a6)
  11922.  beq.s nofinish1
  11923.  move.l #null,$b0(a6)
  11924.  move.w #100,$b4(a6)
  11925.  move.w #$0100,intreq(a6)
  11926. nofinish1:
  11927.  
  11928.  tst.b NoiseMade0pRIGHT
  11929.  beq.s NoChan1sound
  11930.  
  11931.  move.l Samp0endRIGHT,d0
  11932.  move.l pos0RIGHT,d1
  11933.  sub.l d1,d0
  11934.  lsr.l #1,d0
  11935.  move.w d0,$b4(a6)
  11936.  move.l d1,$b0(a6)
  11937.  ext.l d0
  11938.  divs #100,d0
  11939.  move.w d0,playnull1
  11940.  move.w #$8202,dmacon(a6)
  11941.  moveq #0,d0
  11942.  move.b vol0right,d0
  11943.  move.w d0,$b8(a6)
  11944.  
  11945. NoChan1sound:
  11946.  
  11947. *****************************************
  11948. *****************************************
  11949.  
  11950.  btst #1,intreqr(a6)
  11951.  beq.s nofinish2
  11952.  move.l #null,$c0(a6)
  11953.  move.w #100,$c4(a6)
  11954.  move.w #$0200,intreq(a6)
  11955. nofinish2:
  11956.  
  11957.  tst.b NoiseMade1pRIGHT
  11958.  beq.s NoChan2sound
  11959.  
  11960.  move.l Samp1endRIGHT,d0
  11961.  move.l pos1RIGHT,d1
  11962.  sub.l d1,d0
  11963.  lsr.l #1,d0
  11964.  move.w d0,$c4(a6)
  11965.  ext.l d0
  11966.  divs #100,d0
  11967.  move.w d0,playnull2
  11968.  
  11969.  move.l d1,$c0(a6)
  11970.  move.w #$8204,dmacon(a6)
  11971.  moveq #0,d0
  11972.  move.b vol1right,d0
  11973.  move.w d0,$c8(a6)
  11974.  
  11975. NoChan2sound:
  11976.  
  11977. *****************************************
  11978. *****************************************
  11979.  
  11980.  btst #2,intreqr(a6)
  11981.  beq.s nofinish3
  11982.  move.l #null,$d0(a6)
  11983.  move.w #100,$d4(a6)
  11984.  move.w #$0400,intreq(a6)
  11985. nofinish3:
  11986.  
  11987.  tst.b NoiseMade1pLEFT
  11988.  beq.s NoChan3sound
  11989.  
  11990.  move.l Samp1endLEFT,d0
  11991.  move.l pos1LEFT,d1
  11992.  sub.l d1,d0
  11993.  lsr.l #1,d0
  11994.  move.w d0,$d4(a6)
  11995.  ext.l d0
  11996.  divs #100,d0
  11997.  move.w d0,playnull3
  11998.  move.l d1,$d0(a6)
  11999.  move.w #$8208,dmacon(a6)
  12000.  moveq #0,d0
  12001.  move.b vol1left,d0
  12002.  move.w d0,$d8(a6)
  12003.  
  12004. NoChan3sound:
  12005.  
  12006. nomorechannels:
  12007.  
  12008.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  12009.  move.l #0,NoiseMade0LEFT
  12010.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  12011.  move.l #0,NoiseMade0RIGHT
  12012.  
  12013. ; tst.b playnull0
  12014. ; beq.s .nnul
  12015. ; sub.b #1,playnull0
  12016. ; bra.s chan0still
  12017. ;.nnul:
  12018. ;chan0still:
  12019.  
  12020.  tst.b NoiseMade0pLEFT
  12021.  bne.s chan0still
  12022.  tst.w playnull0
  12023.  beq.s nnul0
  12024.  sub.w #1,playnull0
  12025.  bra.s chan0still
  12026. nnul0:
  12027.  move.w #0,LEFTCHANDATA+2
  12028.  st LEFTCHANDATA+1
  12029. chan0still:
  12030.  
  12031.  tst.b NoiseMade0pRIGHT
  12032.  bne.s chan1still    ;it'll never work
  12033.  tst.w playnull1
  12034.  beq.s nnul1
  12035.  sub.w #1,playnull1
  12036.  bra.s chan1still
  12037. nnul1:
  12038.  move.w #0,RIGHTCHANDATA+2
  12039.  st RIGHTCHANDATA+1
  12040. chan1still:
  12041.  
  12042.  tst.b NoiseMade1pRIGHT
  12043.  bne.s chan2still
  12044.  tst.w playnull2
  12045.  beq.s nnul2
  12046.  sub.w #1,playnull2
  12047.  bra.s chan2still
  12048. nnul2:
  12049.  move.w #0,RIGHTCHANDATA+2+4
  12050.  st RIGHTCHANDATA+1+4
  12051. chan2still:
  12052.  
  12053.  tst.b NoiseMade1pLEFT
  12054.  bne.s chan3still
  12055.  tst.w playnull3
  12056.  beq.s nnul3
  12057.  sub.w #1,playnull3
  12058.  bra.s chan3still
  12059. nnul3:
  12060.  move.w #0,LEFTCHANDATA+2+4
  12061.  st LEFTCHANDATA+1+4
  12062.  
  12063. chan3still:
  12064.  
  12065.  
  12066.  movem.l (a7)+,d0-d7/a0-a6
  12067.  
  12068.  moveq #0,d0
  12069.  rts
  12070.  
  12071. backbeat: dc.w 0
  12072.  
  12073. playnull0: dc.w 0
  12074. playnull1: dc.w 0
  12075. playnull2: dc.w 0
  12076. playnull3: dc.w 0
  12077.  
  12078. Samp0endRIGHT: dc.l emptyend
  12079. Samp1endRIGHT: dc.l emptyend
  12080. Samp2endRIGHT: dc.l emptyend
  12081. Samp3endRIGHT: dc.l emptyend
  12082. Samp0endLEFT: dc.l emptyend
  12083. Samp1endLEFT: dc.l emptyend
  12084. Samp2endLEFT: dc.l emptyend
  12085. Samp3endLEFT: dc.l emptyend
  12086.  
  12087. Aupt0: dc.l null
  12088. Auback0: dc.l null+500
  12089. Aupt2: dc.l null3
  12090. Auback2: dc.l null3+500
  12091. Aupt3: dc.l null4
  12092. Auback3: dc.l null4+500
  12093. Aupt1: dc.l null2
  12094. Auback1: dc.l null2+500
  12095.  
  12096. NoiseMade0LEFT: dc.b 0
  12097. NoiseMade1LEFT: dc.b 0
  12098. NoiseMade2LEFT: dc.b 0
  12099. NoiseMade3LEFT: dc.b 0
  12100. NoiseMade0pLEFT: dc.b 0
  12101. NoiseMade1pLEFT: dc.b 0
  12102. NoiseMade2pLEFT: dc.b 0
  12103. NoiseMade3pLEFT: dc.b 0
  12104. NoiseMade0RIGHT: dc.b 0
  12105. NoiseMade1RIGHT: dc.b 0
  12106. NoiseMade2RIGHT: dc.b 0
  12107. NoiseMade3RIGHT: dc.b 0
  12108. NoiseMade0pRIGHT: dc.b 0
  12109. NoiseMade1pRIGHT: dc.b 0
  12110. NoiseMade2pRIGHT: dc.b 0
  12111. NoiseMade3pRIGHT: dc.b 0
  12112.  
  12113. empty: ds.l 100
  12114. emptyend:
  12115.  
  12116. **************************************
  12117. * I want a routine to calculate all the
  12118. * info needed for the sound player to
  12119. * work, given say position of noise, volume
  12120. * and sample number.
  12121.  
  12122. Samplenum: dc.w 0
  12123. Noisex: dc.w 0
  12124. Noisez: dc.w 0
  12125. Noisevol: dc.w 0
  12126. chanpick: dc.w 0
  12127. IDNUM: dc.w 0
  12128. needleft: dc.b 0
  12129. needright: dc.b 0
  12130. STEREO: dc.b $0
  12131. even
  12132. prot6: dc.w 0
  12133.  
  12134.  even
  12135.  
  12136. CHANNELDATA:
  12137. LEFTCHANDATA:
  12138.  dc.l $00000000
  12139.  dc.l $00000000
  12140.  dc.l $FF000000
  12141.  dc.l $FF000000
  12142. RIGHTCHANDATA:
  12143.  dc.l $00000000
  12144.  dc.l $00000000
  12145.  dc.l $FF000000
  12146.  dc.l $FF000000
  12147.  
  12148. RIGHTPLAYEDTAB: ds.l 20
  12149. LEFTPLAYEDTAB: ds.l 20
  12150.  
  12151. MakeSomeNoise:
  12152.  
  12153. ; Plan for new sound handler:
  12154. ; It is sent a sample number,
  12155. ; a position relative to the
  12156. ; player, an id number and a volume.
  12157. ; Also notifplaying.
  12158.  
  12159. ; indirect inputs are the available
  12160. ; channel flags and whether or not
  12161. ; stereo sound is selected.
  12162.  
  12163. ; the algorithm must decide
  12164. ; whether the new sound is more
  12165. ; important than the ones already
  12166. ; playing. Thus an 'importance'
  12167. ; must be calculated, probably
  12168. ; using volume.
  12169.  
  12170. ; The output needs to be:
  12171.  
  12172. ; Write the pointers and volumes of
  12173. ; the sound channels
  12174.  
  12175.  
  12176.  tst.b notifplaying
  12177.  beq.s dontworry
  12178.  
  12179. ; find if we are already playing
  12180.  
  12181.  move.b IDNUM,d0
  12182.  move.w #7,d1
  12183.  lea CHANNELDATA,a3
  12184. findsameasme
  12185.  tst.b (a3)
  12186.  bne.s notavail
  12187.  cmp.b 1(a3),d0
  12188.  beq SameAsMe
  12189. notavail:
  12190.  add.w #4,a3
  12191.  dbra d1,findsameasme
  12192.  bra dontworry
  12193. SameAsMe
  12194.  rts
  12195.  
  12196. noiseloud: dc.w 0
  12197.  
  12198. dontworry:
  12199.  
  12200. ; Ok its fine for us to play a sound.
  12201. ; So calculate left/right volume.
  12202.  
  12203.  move.w Noisex,d1
  12204.  muls d1,d1
  12205.  move.w Noisez,d2
  12206.  muls d2,d2
  12207.  move.w #64,d3
  12208.  move.w #32767,noiseloud
  12209.  moveq #1,d0
  12210.  add.l d1,d2
  12211.  beq pastcalc
  12212.  
  12213.  move.w #31,d0
  12214. .findhigh
  12215.  btst d0,d2
  12216.  bne .foundhigh
  12217.  dbra d0,.findhigh
  12218. .foundhigh
  12219.  asr.w #1,d0
  12220.  clr.l d3
  12221.  bset d0,d3
  12222.  move.l d3,d0
  12223.  
  12224.  move.w d0,d3
  12225.  muls d3,d3    ; x*x
  12226.  sub.l d2,d3    ; x*x-a
  12227.  asr.l #1,d3    ; (x*x-a)/2
  12228.  divs d0,d3    ; (x*x-a)/2x
  12229.  sub.w d3,d0    ; second approx
  12230.  bgt .stillnot0
  12231.  move.w #1,d0
  12232. .stillnot0
  12233.  
  12234.  move.w d0,d3
  12235.  muls d3,d3
  12236.  sub.l d2,d3
  12237.  asr.l #1,d3
  12238.  divs d0,d3
  12239.  sub.w d3,d0    ; second approx
  12240.  bgt .stillnot02
  12241.  move.w #1,d0
  12242. .stillnot02
  12243.  
  12244.  move.w Noisevol,d3
  12245.  ext.l d3
  12246.  asl.l #6,d3
  12247.  cmp.l #32767,d3
  12248.  ble.s .nnnn
  12249.  move.l #32767,d3
  12250. .nnnn
  12251.  
  12252.  asr.w #2,d0
  12253.  addq #1,d0
  12254.  divs d0,d3
  12255.  
  12256.  move.w d3,noiseloud
  12257.  
  12258.  cmp.w #64,d3
  12259.  ble.s notooloud
  12260.  move.w #64,d3
  12261. notooloud:
  12262.  
  12263. pastcalc:
  12264.  
  12265.     ; d3 contains volume of noise.
  12266.     
  12267.  move.w d3,d4
  12268.  tst.b STEREO
  12269.  beq NOSTEREO
  12270.  
  12271.  move.w d3,d2
  12272.  muls Noisex,d2
  12273.  asl.w #2,d0
  12274.  divs d0,d2
  12275.  
  12276.  bgt.s quietleft
  12277.  add.w d2,d4
  12278.  bge.s donequiet
  12279.  move.w #0,d4
  12280.  bra.s donequiet
  12281. quietleft:
  12282.  sub.w d2,d3
  12283.  bge.s donequiet
  12284.  move.w #0,d3
  12285. donequiet:
  12286.  
  12287. ; d3=leftvol?
  12288. ; d4=rightvol?
  12289.  
  12290.  clr.w needleft
  12291.  
  12292.  cmp.b d3,d4
  12293.  bgt.s RightLouder
  12294.  
  12295. ; Left is louder; is it MUCH louder?
  12296.  
  12297.  st needleft
  12298.  move.w d3,d2
  12299.  sub.w d4,d2
  12300.  cmp.w #32,d2
  12301.  slt needright
  12302.  bra aboutsame
  12303.  
  12304. RightLouder:
  12305.  st needright
  12306.  move.w d4,d2
  12307.  sub.w d3,d2
  12308.  cmp.w #32,d2
  12309.  slt needleft
  12310.  
  12311. aboutsame:
  12312.  
  12313.  
  12314. ; Find least important sound on left
  12315.  
  12316.  move.l #0,a2
  12317.  move.l #0,d5
  12318.  move.w #32767,d2
  12319.  move.b IDNUM,d0
  12320.  lea LEFTCHANDATA,a3
  12321.  move.w #3,d1
  12322. FindLeftChannel
  12323.  tst.b (a3)
  12324.  bne.s .notactive
  12325.  cmp.b 1(a3),d0
  12326.  beq.s FOUNDLEFT
  12327.  cmp.w 2(a3),d2
  12328.  blt.s .notactive
  12329.  move.w 2(a3),d2
  12330.  move.l a3,a2
  12331.  move.w d5,d6
  12332.  
  12333. .notactive:
  12334.  add.w #4,a3
  12335.  add.w #1,d5
  12336.  dbra d1,FindLeftChannel
  12337.  move.l a2,a3
  12338.  bra.s gopastleft
  12339. FOUNDLEFT:
  12340.  move.w d5,d6
  12341. gopastleft:
  12342.  tst.l a3
  12343.  bne.s FOUNDALEFT
  12344. NONOISE:
  12345.  rts
  12346. FOUNDALEFT:
  12347.  
  12348.  cmp.w noiseloud,d3
  12349.  bge.s NONOISE
  12350.  
  12351. ; d6 = channel number
  12352.  move.b d0,1(a3)
  12353.  move.w d3,2(a3)
  12354.  
  12355.  move.w Samplenum,d5
  12356.  move.l #SampleList,a3
  12357.  move.l (a3,d5.w*8),a1
  12358.  move.l 4(a3,d5.w*8),a2
  12359.  
  12360.  tst.b d6
  12361.  seq NoiseMade0LEFT
  12362.  beq.s .chan0
  12363.  cmp.b #2,d6
  12364.  slt NoiseMade1LEFT
  12365.  blt .chan1
  12366.  seq NoiseMade2LEFT
  12367.  beq .chan2
  12368.  st NoiseMade3LEFT
  12369.  
  12370.  move.b d5,LEFTPLAYEDTAB+9
  12371.  move.b d3,LEFTPLAYEDTAB+1+9
  12372.  move.b d4,LEFTPLAYEDTAB+2+9
  12373.  move.b d3,vol3left
  12374.  move.l a1,pos3LEFT
  12375.  move.l a2,Samp3endLEFT
  12376.  bra dorightchan
  12377.  
  12378. .chan0: 
  12379.  move.b d5,LEFTPLAYEDTAB
  12380.  move.b d3,LEFTPLAYEDTAB+1
  12381.  move.b d4,LEFTPLAYEDTAB+2
  12382.  move.l a1,pos0LEFT
  12383.  move.l a2,Samp0endLEFT
  12384.  move.b d3,vol0left
  12385.  bra dorightchan
  12386.  
  12387. .chan1:
  12388.  move.b d5,LEFTPLAYEDTAB+3
  12389.  move.b d3,LEFTPLAYEDTAB+1+3
  12390.  move.b d4,LEFTPLAYEDTAB+2+3
  12391.  move.b d3,vol1left
  12392.  move.l a1,pos1LEFT
  12393.  move.l a2,Samp1endLEFT
  12394.  bra dorightchan
  12395.  
  12396. .chan2: 
  12397.  move.b d5,LEFTPLAYEDTAB+6
  12398.  move.b d3,LEFTPLAYEDTAB+1+6
  12399.  move.b d4,LEFTPLAYEDTAB+2+6
  12400.  move.l a1,pos2LEFT
  12401.  move.l a2,Samp2endLEFT
  12402.  move.b d3,vol2left
  12403.  
  12404. dorightchan:
  12405.  
  12406. ; Find least important sound on right
  12407.  
  12408.  move.l #0,a2
  12409.  move.l #0,d5
  12410.  move.w #10000,d2
  12411.  move.b IDNUM,d0
  12412.  lea RIGHTCHANDATA,a3
  12413.  move.w #3,d1
  12414. FindRightChannel
  12415.  tst.b (a3)
  12416.  bne.s .notactive
  12417.  cmp.b 1(a3),d0
  12418.  beq.s FOUNDRIGHT
  12419.  cmp.w 2(a3),d2
  12420.  blt.s .notactive
  12421.  move.w 2(a3),d2
  12422.  move.l a3,a2
  12423.  move.w d5,d6
  12424.  
  12425. .notactive:
  12426.  add.w #4,a3
  12427.  add.w #1,d5
  12428.  dbra d1,FindRightChannel
  12429.  move.l a2,a3
  12430.  bra.s gopastright
  12431. FOUNDRIGHT:
  12432.  move.w d5,d6
  12433. gopastright:
  12434.  tst.l a3
  12435.  bne.s FOUNDARIGHT
  12436.  rts
  12437. FOUNDARIGHT:
  12438.  
  12439. ; d6 = channel number
  12440.  move.b d0,1(a3)
  12441.  move.w d3,2(a3)
  12442.  
  12443.  move.w Samplenum,d5
  12444.  move.l #SampleList,a3
  12445.  move.l (a3,d5.w*8),a1
  12446.  move.l 4(a3,d5.w*8),a2
  12447.  
  12448.  tst.b d6
  12449.  seq NoiseMade0RIGHT
  12450.  beq.s .chan0
  12451.  cmp.b #2,d6
  12452.  slt NoiseMade1RIGHT
  12453.  blt .chan1
  12454.  seq NoiseMade2RIGHT
  12455.  beq .chan2
  12456.  st NoiseMade3RIGHT
  12457.  
  12458.  move.b d5,RIGHTPLAYEDTAB+9
  12459.  move.b d3,RIGHTPLAYEDTAB+1+9
  12460.  move.b d4,RIGHTPLAYEDTAB+2+9
  12461.  move.b d4,vol3right
  12462.  move.l a1,pos3RIGHT
  12463.  move.l a2,Samp3endRIGHT
  12464.  rts
  12465.  
  12466. .chan0: 
  12467.  move.b d5,RIGHTPLAYEDTAB
  12468.  move.b d3,RIGHTPLAYEDTAB+1
  12469.  move.b d4,RIGHTPLAYEDTAB+2
  12470.  move.l a1,pos0RIGHT
  12471.  move.l a2,Samp0endRIGHT
  12472.  move.b d4,vol0right
  12473.  rts
  12474.  
  12475. .chan1:
  12476.  move.b d5,RIGHTPLAYEDTAB+3
  12477.  move.b d3,RIGHTPLAYEDTAB+1+3
  12478.  move.b d4,RIGHTPLAYEDTAB+2+3
  12479.  move.b d3,vol1right
  12480.  move.l a1,pos1RIGHT
  12481.  move.l a2,Samp1endRIGHT
  12482.  rts
  12483.  
  12484. .chan2: 
  12485.  move.b d5,RIGHTPLAYEDTAB+6
  12486.  move.b d3,RIGHTPLAYEDTAB+1+6
  12487.  move.b d4,RIGHTPLAYEDTAB+2+6
  12488.  move.l a1,pos2RIGHT
  12489.  move.l a2,Samp2endRIGHT
  12490.  move.b d3,vol2right
  12491.  rts
  12492.  
  12493. NOSTEREO:
  12494.  move.l #0,a2
  12495.  move.l #-1,d5
  12496.  move.w #32767,d2
  12497.  move.b IDNUM,d0
  12498.  lea CHANNELDATA,a3
  12499.  move.w #7,d1
  12500. FindChannel
  12501.  tst.b (a3)
  12502.  bne.s .notactive
  12503.  cmp.b 1(a3),d0
  12504.  beq.s FOUNDMYCHAN
  12505.  cmp.w 2(a3),d2
  12506.  blt.s .notactive
  12507.  move.w 2(a3),d2
  12508.  move.l a3,a2
  12509.  move.w d5,d6
  12510.  add.w #1,d6
  12511.  
  12512. .notactive:
  12513.  add.w #4,a3
  12514.  add.w #1,d5
  12515.  dbra d1,FindChannel
  12516.  
  12517.  move.l a2,a3
  12518.  bra.s gopastchan
  12519.  
  12520. FOUNDMYCHAN:
  12521.  move.w 2(a3),d2
  12522.  
  12523. FOUNDCHAN:
  12524.  move.w d5,d6
  12525.  add.w #1,d6
  12526. gopastchan:
  12527.  tst.w d6
  12528.  bge.s FOUNDACHAN
  12529. tooquiet:
  12530.  rts
  12531. FOUNDACHAN:
  12532.  
  12533. ; d6 = channel number
  12534.  
  12535.  cmp.w noiseloud,d2
  12536.  bgt.s tooquiet
  12537.  
  12538.  move.b d0,1(a3)
  12539.  move.w noiseloud,2(a3)
  12540.  
  12541.  move.w Samplenum,d5
  12542.  move.l #SampleList,a3
  12543.  move.l (a3,d5.w*8),a1
  12544.  move.l 4(a3,d5.w*8),a2
  12545.  
  12546.  tst.b d6
  12547.  beq .chan0
  12548.  cmp.b #2,d6
  12549.  blt .chan1
  12550.  beq .chan2
  12551.  cmp.b #4,d6
  12552.  blt .chan3
  12553.  beq .chan4
  12554.  cmp.b #6,d6
  12555.  blt .chan5
  12556.  beq .chan6
  12557.  st NoiseMade3RIGHT
  12558.  
  12559.  move.b d5,RIGHTPLAYEDTAB+9
  12560.  move.b d3,RIGHTPLAYEDTAB+1+9
  12561.  move.b d4,RIGHTPLAYEDTAB+2+9
  12562.  move.b d4,vol3right
  12563.  move.l a1,pos3RIGHT
  12564.  move.l a2,Samp3endRIGHT
  12565.  rts
  12566.  
  12567. .chan3:
  12568.  st NoiseMade3LEFT
  12569.  move.b d5,LEFTPLAYEDTAB+9
  12570.  move.b d3,LEFTPLAYEDTAB+1+9
  12571.  move.b d4,LEFTPLAYEDTAB+2+9
  12572.  move.b d3,vol3left
  12573.  move.l a1,pos3LEFT
  12574.  move.l a2,Samp3endLEFT
  12575.  bra dorightchan
  12576.  
  12577. .chan0: 
  12578.  st NoiseMade0LEFT
  12579.  move.b d5,LEFTPLAYEDTAB
  12580.  move.b d3,LEFTPLAYEDTAB+1
  12581.  move.b d4,LEFTPLAYEDTAB+2
  12582.  move.l a1,pos0LEFT
  12583.  move.l a2,Samp0endLEFT
  12584.  move.b d3,vol0left
  12585.  rts
  12586.  
  12587. .chan1:
  12588.  st NoiseMade1LEFT
  12589.  move.b d5,LEFTPLAYEDTAB+3
  12590.  move.b d3,LEFTPLAYEDTAB+1+3
  12591.  move.b d4,LEFTPLAYEDTAB+2+3
  12592.  move.b d3,vol1left
  12593.  move.l a1,pos1LEFT
  12594.  move.l a2,Samp1endLEFT
  12595.  rts
  12596.  
  12597. .chan2: 
  12598.  st NoiseMade2LEFT
  12599.  move.b d5,LEFTPLAYEDTAB+6
  12600.  move.b d3,LEFTPLAYEDTAB+1+6
  12601.  move.b d4,LEFTPLAYEDTAB+2+6
  12602.  move.l a1,pos2LEFT
  12603.  move.l a2,Samp2endLEFT
  12604.  move.b d3,vol2left
  12605.  rts
  12606.  
  12607. .chan4: 
  12608.  st NoiseMade0RIGHT
  12609.  move.b d5,RIGHTPLAYEDTAB
  12610.  move.b d3,RIGHTPLAYEDTAB+1
  12611.  move.b d4,RIGHTPLAYEDTAB+2
  12612.  move.l a1,pos0RIGHT
  12613.  move.l a2,Samp0endRIGHT
  12614.  move.b d4,vol0right
  12615.  rts
  12616.  
  12617. .chan5:
  12618.  st NoiseMade1RIGHT
  12619.  move.b d5,RIGHTPLAYEDTAB+3
  12620.  move.b d3,RIGHTPLAYEDTAB+1+3
  12621.  move.b d4,RIGHTPLAYEDTAB+2+3
  12622.  move.b d3,vol1right
  12623.  move.l a1,pos1RIGHT
  12624.  move.l a2,Samp1endRIGHT
  12625.  rts
  12626.  
  12627. .chan6: 
  12628.  st NoiseMade2RIGHT
  12629.  move.b d5,RIGHTPLAYEDTAB+6
  12630.  move.b d3,RIGHTPLAYEDTAB+1+6
  12631.  move.b d4,RIGHTPLAYEDTAB+2+6
  12632.  move.l a1,pos2RIGHT
  12633.  move.l a2,Samp2endRIGHT
  12634.  move.b d3,vol2right
  12635.  rts
  12636.  
  12637. SampleList:
  12638.  dc.l Scream,EndScream
  12639.  dc.l Shoot,EndShoot
  12640.  dc.l Munch,EndMunch
  12641.  dc.l PooGun,EndPooGun
  12642.  dc.l Collect,EndCollect
  12643. ;5
  12644.  dc.l DoorNoise,EndDoorNoise
  12645.  dc.l 0,0
  12646.  dc.l Stomp,EndStomp
  12647.  dc.l LowScream,EndLowScream
  12648.  dc.l BaddieGun,EndBaddieGun
  12649. ;10
  12650.  dc.l SwitchNoise,EndSwitch
  12651.  dc.l Reload,EndReload
  12652.  dc.l NoAmmo,EndNoAmmo
  12653.  dc.l Splotch,EndSplotch
  12654.  dc.l SplatPop,EndSplatPop
  12655. ;15
  12656.  dc.l Boom,EndBoom
  12657.  dc.l Hiss,EndHiss
  12658.  dc.l Howl1,EndHowl1
  12659.  dc.l Howl2,EndHowl2
  12660.  dc.l Pant,EndPant
  12661. ;20
  12662.  dc.l Whoosh,EndWhoosh
  12663.  dc.l ROAR,EndROAR
  12664.  dc.l whoosh,Endwhoosh
  12665.  dc.l 0,0
  12666.  dc.l 0,0
  12667.  dc.l 0,0
  12668.  dc.l 0,0
  12669.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12670.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12671.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12672.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  12673.  
  12674.  dc.l 0
  12675.  
  12676. storeval: dc.w 0
  12677.  
  12678.  include "ab3:source_4000/wallchunk.s"
  12679.  include "ab3:source_4000/newloadfromdisk.s"
  12680.  include "ab3:source_4000/screensetup.s"
  12681.  include "ab3:source_4000/CONTROLLOOP.s"
  12682.  
  12683.  
  12684.  
  12685.  
  12686. saveinters:  
  12687.  dc.w 0
  12688.  
  12689. z: dc.w 10
  12690.  
  12691. notifplaying:
  12692.  dc.w 0
  12693.  
  12694. audpos1: dc.w 0
  12695. audpos1b: dc.w 0
  12696. audpos2: dc.w 0
  12697. audpos2b: dc.w 0
  12698. audpos3: dc.w 0
  12699. audpos3b: dc.w 0
  12700. audpos4: dc.w 0
  12701. audpos4b: dc.w 0
  12702.  
  12703. vol0left: dc.w 0
  12704. vol0right: dc.w 0
  12705. vol1left: dc.w 0
  12706. vol1right: dc.w 0
  12707. vol2left: dc.w 0
  12708. vol2right: dc.w 0
  12709. vol3left: dc.w 0
  12710. vol3right: dc.w 0
  12711.  
  12712. pos: dc.l 0
  12713.  
  12714. pos0LEFT: dc.l empty
  12715. pos1LEFT: dc.l empty
  12716. pos2LEFT: dc.l empty
  12717. pos3LEFT: dc.l empty
  12718. pos0RIGHT: dc.l empty
  12719. pos1RIGHT: dc.l empty
  12720. pos2RIGHT: dc.l empty
  12721. pos3RIGHT: dc.l empty
  12722.  
  12723. numtodo dc.w 0
  12724.  
  12725. npt: dc.w 0
  12726.  
  12727. pretab:
  12728. val SET 0
  12729.  REPT 128
  12730.  dc.b val
  12731. val SET val+1
  12732.  ENDR
  12733. val SET -128
  12734.  REPT 128
  12735.  dc.b val
  12736. val SET val+1
  12737.  ENDR 
  12738.  
  12739. tab:
  12740.  ifeq CHEESEY
  12741.  ds.b 256*65
  12742.  endc
  12743.  
  12744. test: dc.l 0
  12745.  ds.l 30
  12746.  
  12747.  
  12748.  even
  12749. ConstCols:
  12750. ; incbin "ConstCols"
  12751.  even
  12752. Smoothscalecols:
  12753. ; incbin "smoothbumppalscaled"
  12754.  even
  12755. SmoothTile:
  12756. ; incbin "smoothbumptile"
  12757.  even
  12758. Bumpscalecols:
  12759. ; incbin "Bumppalscaled"
  12760.  even
  12761. Bumptile:
  12762. ; incbin "bumptile"
  12763.  even
  12764. scalecols: ;incbin "bytepixpalscaled"
  12765.  even
  12766. ;floorscalecols:
  12767. ; incbin "floor256pal"
  12768. ; ds.w 256*4
  12769.  
  12770.  even
  12771. PaletteAddr: dc.l 0
  12772. ChunkAddr: dc.l 0
  12773. ;walltiles:
  12774. ; dc.l GreenMechanicWALL
  12775. ; dc.l BlueGreyMetalWALL
  12776. ; dc.l TechnoDetailWALL
  12777. ; dc.l BlueStoneWALL
  12778. ; dc.l RedAlertWALL
  12779. ; dc.l RockWALL
  12780. ;
  12781. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  12782. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  12783. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  12784. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  12785. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  12786. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  12787.  
  12788. floortile:
  12789.  dc.l 0
  12790. ; incbin "floortile" 
  12791.  even
  12792. wallrouts:
  12793. ; incbin "2x2WallDraw" 
  12794.  CNOP 0,64
  12795.  
  12796.  ifeq CHEESEY 
  12797. BackPicture:
  12798.  dc.l 0
  12799. ; incbin "rawback"
  12800. EndBackPicture:
  12801.  endc
  12802.  
  12803. drawpt: dc.l 0
  12804. olddrawpt: dc.l 0
  12805. frompt: dc.l 0 
  12806.  
  12807. SineTable:
  12808.  incbin "bigsine"
  12809.  
  12810. angspd: dc.w 0
  12811. flooryoff: dc.w 0
  12812. xoff: dc.l 0
  12813. yoff: dc.l 0
  12814. yvel: dc.l 0
  12815. zoff: dc.l 0
  12816. tyoff: dc.l 0
  12817. xspdval: dc.l 0
  12818. zspdval: dc.l 0
  12819. Zone: dc.w 0
  12820.  
  12821. PLR1: dc.b $ff
  12822.  even
  12823. PLR1_energy: dc.w 191
  12824. PLR1_GunSelected: dc.w 0
  12825. PLR1_cosval: dc.w 0
  12826. PLR1_sinval: dc.w 0
  12827. PLR1_angpos: dc.w 0
  12828. PLR1_angspd: dc.w 0
  12829. PLR1_xoff: dc.l 0
  12830. PLR1_yoff: dc.l 0
  12831. PLR1_yvel: dc.l 0
  12832. PLR1_zoff: dc.l 0
  12833. PLR1_tyoff: dc.l 0
  12834. PLR1_xspdval: dc.l 0
  12835. PLR1_zspdval: dc.l 0
  12836. PLR1_Zone: dc.w 0
  12837. PLR1_Roompt: dc.l 0
  12838. PLR1_FloorSpd: dc.l 0
  12839. PLR2_FloorSpd: dc.l 0
  12840. PLR1_OldRoompt: dc.l 0
  12841. PLR1_PointsToRotatePtr: dc.l 0
  12842. PLR1_ListOfGraphRooms: dc.l 0
  12843. PLR1_oldxoff: dc.l 0
  12844. PLR1_oldzoff: dc.l 0
  12845. PLR1_StoodInTop: dc.b 0
  12846.  even
  12847. PLR1_height: dc.l 0
  12848. PLR1_RoomBright: dc.w 0
  12849.  
  12850. DOUBLEWIDTH: dc.b $0,0
  12851. DOUBLEHEIGHT: dc.b 0,0
  12852. PLR1_TELEPORTED: dc.w 0
  12853. PLR2_TELEPORTED: dc.w 0
  12854.  
  12855.  ds.w 4
  12856.  
  12857. OLDX1: dc.l 0
  12858. OLDX2: dc.l 0
  12859. OLDZ1: dc.l 0
  12860. OLDZ2: dc.l 0
  12861.  
  12862. XDIFF1: dc.l 0
  12863. ZDIFF1: dc.l 0
  12864. XDIFF2: dc.l 0
  12865. ZDIFF2: dc.l 0
  12866.  
  12867. PLR1s_cosval: dc.w 0
  12868. PLR1s_sinval: dc.w 0
  12869. PLR1s_angpos: dc.w 0
  12870. PLR1s_angspd: dc.w 0
  12871. PLR1s_xoff: dc.l 0
  12872. PLR1s_yoff: dc.l 0
  12873. PLR1s_yvel: dc.l 0
  12874. PLR1s_zoff: dc.l 0
  12875. PLR1s_tyoff: dc.l 0
  12876. PLR1s_xspdval: dc.l 0
  12877. PLR1s_zspdval: dc.l 0
  12878. PLR1s_Zone: dc.w 0
  12879. PLR1s_Roompt: dc.l 0
  12880. PLR1s_OldRoompt: dc.l 0
  12881. PLR1s_PointsToRotatePtr: dc.l 0
  12882. PLR1s_ListOfGraphRooms: dc.l 0
  12883. PLR1s_oldxoff: dc.l 0
  12884. PLR1s_oldzoff: dc.l 0
  12885. PLR1s_height: dc.l 0
  12886. PLR1s_targheight: dc.l 0
  12887.  
  12888. p1_xoff: dc.l 0
  12889. p1_zoff: dc.l 0
  12890. p1_yoff: dc.l 0
  12891. p1_height: dc.l 0
  12892. p1_angpos: dc.w 0
  12893. p1_bobble: dc.w 0
  12894. p1_clicked: dc.b 0
  12895. p1_spctap: dc.b 0
  12896. p1_ducked: dc.b 0
  12897. p1_gunselected: dc.b 0
  12898. p1_fire: dc.b 0
  12899.  even
  12900. p1_holddown: dc.w 0
  12901.  
  12902.  ds.w 4
  12903.  
  12904. PLR2: dc.b $ff
  12905.  even
  12906. PLR2_GunSelected: dc.w 0
  12907. PLR2_energy: dc.w 191
  12908. PLR2_cosval: dc.w 0
  12909. PLR2_sinval: dc.w 0
  12910. PLR2_angpos: dc.w 0
  12911. PLR2_angspd: dc.w 0
  12912. PLR2_xoff: dc.l 0
  12913. PLR2_yoff: dc.l 0
  12914. PLR2_yvel: dc.l 0
  12915. PLR2_zoff: dc.l 0
  12916. PLR2_tyoff: dc.l 0
  12917. PLR2_xspdval: dc.l 0
  12918. PLR2_zspdval: dc.l 0
  12919. PLR2_Zone: dc.w 0
  12920. PLR2_Roompt: dc.l 0
  12921. PLR2_OldRoompt: dc.l 0
  12922. PLR2_PointsToRotatePtr: dc.l 0
  12923. PLR2_ListOfGraphRooms: dc.l 0
  12924. PLR2_oldxoff: dc.l 0
  12925. PLR2_oldzoff: dc.l 0
  12926. PLR2_StoodInTop: dc.b 0
  12927.  even
  12928. PLR2_height: dc.l 0
  12929.  
  12930.  ds.w 4
  12931.  
  12932. PLR2s_cosval: dc.w 0
  12933. PLR2s_sinval: dc.w 0
  12934. PLR2s_angpos: dc.w 0
  12935. PLR2s_angspd: dc.w 0
  12936. PLR2s_xoff: dc.l 0
  12937. PLR2s_yoff: dc.l 0
  12938. PLR2s_yvel: dc.l 0
  12939. PLR2s_zoff: dc.l 0
  12940. PLR2s_tyoff: dc.l 0
  12941. PLR2s_xspdval: dc.l 0
  12942. PLR2s_zspdval: dc.l 0
  12943. PLR2s_Zone: dc.w 0
  12944. PLR2s_Roompt: dc.l 0
  12945. PLR2s_OldRoompt: dc.l 0
  12946. PLR2s_PointsToRotatePtr: dc.l 0
  12947. PLR2s_ListOfGraphRooms: dc.l 0
  12948. PLR2s_oldxoff: dc.l 0
  12949. PLR2s_oldzoff: dc.l 0
  12950. PLR2s_height: dc.l 0
  12951. PLR2s_targheight: dc.l 0
  12952.  
  12953.  ds.w 4
  12954.  
  12955. p2_xoff: dc.l 0
  12956. p2_zoff: dc.l 0
  12957. p2_yoff: dc.l 0
  12958. p2_height: dc.l 0
  12959. p2_angpos: dc.w 0
  12960. p2_bobble: dc.w 0
  12961. p2_clicked: dc.b 0
  12962. p2_spctap: dc.b 0
  12963. p2_ducked: dc.b 0
  12964. p2_gunselected: dc.b 0
  12965. p2_fire: dc.b 0
  12966.  even
  12967. p2_holddown: dc.w 0
  12968.  
  12969. liftanimtab:
  12970.  
  12971. endliftanimtab:
  12972.  
  12973. glassball:
  12974. ; incbin "glassball.inc"
  12975.  
  12976. endglass
  12977. glassballpt: dc.l glassball
  12978.  
  12979. rndtab: ; incbin "randfile"
  12980. endrnd: 
  12981.  
  12982. brightanimtab:
  12983. ; dcb.w 200,20
  12984. ; dc.w 5
  12985. ; dc.w 10,20
  12986. ; dc.w 5
  12987. ; dcb.w 30,20
  12988. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  12989. ; dcb.w 40,0
  12990. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  12991. ; dcb.w 300,0
  12992. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  12993. ; dc.w -1
  12994.  
  12995. Roompt: dc.l 0
  12996. OldRoompt: dc.l 0
  12997.  
  12998. *****************************************************************
  12999.  *
  13000.  include "AB3:source_4000/LevelData2"
  13001.  *
  13002. *****************************************************************
  13003.  
  13004.  
  13005. wallpt: dc.l 0
  13006. floorpt: dc.l 0
  13007.  
  13008. Rotated:
  13009.  ds.l 2*800 
  13010. ObjRotated:
  13011.  ds.l 2*500
  13012.  
  13013. OnScreen:
  13014.  ds.l 2*800 
  13015.  
  13016. startwait: dc.w 0
  13017. endwait: dc.w 0
  13018.  
  13019. ;Faces:
  13020. ; incbin "faces2raw"
  13021.  
  13022. LINKS: dc.l 0
  13023. FLYLINKS: dc.l 0
  13024. *************************************************************
  13025.  
  13026. consttab:
  13027.  ds.b 65536
  13028.  
  13029. ; incbin "constantfile"
  13030.  
  13031. *******************************************************************
  13032.  
  13033.  
  13034.  
  13035. *********************************
  13036.  
  13037. ; include "ab3:source_4000/loadmod.a"
  13038. ; include "ab3:source_4000/proplayer.a"
  13039.  
  13040.  
  13041. darkentab: 
  13042. ;val SET 0
  13043. ; REPT 256
  13044. ; dc.b val
  13045. ;val SET val+1
  13046. ; ENDR
  13047. ; incbin "darkenfile"
  13048.  
  13049.     dc.w 0
  13050. MIDDLEX: dc.w 0
  13051. RIGHTX: dc.w 192
  13052. FULLSCR: dc.w 0
  13053.  
  13054. ;SHADINGTABLE: incbin "SHADEFILE" 
  13055.  
  13056. ******************************************
  13057. * Link file !*****************************
  13058. ******************************************
  13059.  
  13060. LINKSPACE:
  13061. ; ds.l 22500
  13062. ; incbin "ab3:includes/test.lnk"
  13063.  
  13064. LINKname:
  13065.  dc.b "TKG1:includes/test.lnk",0
  13066.  even
  13067.  
  13068. LINKFILE:
  13069.  dc.l LINKSPACE
  13070.  
  13071. ******************************************
  13072.  
  13073.  
  13074. ;brightentab:
  13075. ; incbin "brightenfile"
  13076. WorkSpace:
  13077.  ds.l 8192 
  13078. waterfile:
  13079.  incbin "waterfile"
  13080.  
  13081.  SECTION ffff,CODE_C
  13082.  
  13083. nullspr: dc.l 0
  13084.  
  13085.  cnop 0,8
  13086. ;borders:
  13087. ; incbin "newleftbord"
  13088. ; incbin "newrightbord"
  13089.  
  13090. health: 
  13091. ;incbin "healthstrip"
  13092. Ammunition: 
  13093. ;incbin "ammostrip"
  13094. healthpal: 
  13095. ;incbin "healthpal"
  13096. PanelKeys: 
  13097. ;incbin "greenkey"
  13098. ; incbin "redkey"
  13099. ; incbin "yellowkey"
  13100. ; incbin "bluekey"
  13101.  
  13102. null: ds.w 500
  13103. null2: ds.w 500
  13104. null3: ds.w 500
  13105. null4: ds.w 500
  13106.  
  13107.  
  13108. Blurbfield:
  13109.  
  13110.  dc.w bpl1ptl
  13111. bl1l: dc.w 0
  13112.  dc.w bpl1pth
  13113. bl1h: dc.w 0
  13114.  
  13115.  dc.w diwstart,$2c81
  13116.  dc.w diwstop,$1cc1
  13117.  dc.w ddfstart,$38
  13118.  dc.w ddfstop,$b8
  13119.  dc.w bplcon0,$9201
  13120.  dc.w bplcon1,0
  13121.  dc.w $106,$c40
  13122. blcols:
  13123.  dc.w col0,0
  13124.  dc.w col1,$fff
  13125.  
  13126.  dc.w $108,0
  13127.  dc.w $10a,0
  13128.  
  13129.  dc.w $ffff,$fffe
  13130.  dc.w $ffff,$fffe
  13131.  
  13132. nullline:
  13133.  ds.b 80    
  13134.  
  13135.  include "ab3:source_4000/titlecop.s"
  13136.  
  13137. bigfield:    
  13138.                 ; Start of our copper list.
  13139.  dc.w dmacon,$8020
  13140.  dc.w intreq,$8011
  13141.  dc.w $1fc,$f
  13142.  dc.w diwstart
  13143. winstart: dc.w $2c81
  13144.  dc.w diwstop
  13145. winstop: dc.w $2cc1
  13146.  dc.w ddfstart
  13147. fetchstart: dc.w $38
  13148.  dc.w ddfstop
  13149. fetchstop: dc.w $b8
  13150.  
  13151. bordercols:
  13152.  incbin "borderpal"
  13153.  
  13154.  dc.w spr0ptl
  13155. s0l:
  13156.  dc.w 0
  13157.  dc.w spr0pth
  13158. s0h:
  13159.  dc.w 0
  13160.  dc.w spr1ptl
  13161. s1l:
  13162.  dc.w 0
  13163.  dc.w spr1pth
  13164. s1h:
  13165.  dc.w 0
  13166.  dc.w spr2ptl
  13167. s2l:
  13168.  dc.w 0
  13169.  dc.w spr2pth
  13170. s2h:
  13171.  dc.w 0
  13172.  dc.w spr3ptl
  13173. s3l:
  13174.  dc.w 0
  13175.  dc.w spr3pth
  13176. s3h:
  13177.  dc.w 0
  13178.  dc.w spr4ptl
  13179. s4l:
  13180.  dc.w 0
  13181.  dc.w spr4pth
  13182. s4h:
  13183.  dc.w 0
  13184.  dc.w spr5ptl
  13185. s5l:
  13186.  dc.w 0
  13187.  dc.w spr5pth
  13188. s5h:
  13189.  dc.w 0
  13190.  dc.w spr6ptl
  13191. s6l:
  13192.  dc.w 0
  13193.  dc.w spr6pth
  13194. s6h:
  13195.  dc.w 0
  13196.  dc.w spr7ptl
  13197. s7l:
  13198.  dc.w 0
  13199.  dc.w spr7pth
  13200. s7h:
  13201.  dc.w 0
  13202.  
  13203. ; dc.w $106,$c42
  13204. ; incbin "borderpal"
  13205.  
  13206.  dc.w $106,$c42
  13207.  
  13208.  dc.w bplcon0,$0211
  13209.  dc.w bplcon1
  13210. smoff:
  13211.  dc.w $0
  13212.  
  13213.  dc.w $108
  13214. modulo: dc.w 0
  13215.  dc.w $10a,0
  13216.  
  13217.  dc.w $1001,$ff00
  13218.  dc.w intreq,$11
  13219.  
  13220. PALETTESPACE:
  13221.  dcb.l 528,$1fe0000
  13222.  
  13223.  dc.w $2001,$ff00
  13224.  
  13225.  dc.w bpl1pth
  13226. pl1h
  13227.  dc.w 0
  13228.  
  13229.  dc.w bpl1ptl
  13230. pl1l
  13231.  dc.w 0
  13232.  
  13233.  dc.w bpl2pth
  13234. pl2h
  13235.  dc.w 0
  13236.  
  13237.  dc.w bpl2ptl
  13238. pl2l
  13239.  dc.w 0
  13240.  
  13241.  dc.w bpl3pth
  13242. pl3h
  13243.  dc.w 0
  13244.  
  13245.  dc.w bpl3ptl
  13246. pl3l
  13247.  dc.w 0
  13248.  
  13249.  dc.w bpl4pth
  13250. pl4h
  13251.  dc.w 0
  13252.  
  13253.  dc.w bpl4ptl
  13254. pl4l
  13255.  dc.w 0
  13256.  
  13257.  dc.w bpl5pth
  13258. pl5h
  13259.  dc.w 0
  13260.  
  13261.  dc.w bpl5ptl
  13262. pl5l
  13263.  dc.w 0
  13264.  
  13265.  dc.w bpl6pth
  13266. pl6h
  13267.  dc.w 0
  13268.  
  13269.  dc.w bpl6ptl
  13270. pl6l
  13271.  dc.w 0
  13272.  
  13273.  dc.w bpl7pth
  13274. pl7h
  13275.  dc.w 0
  13276.  
  13277.  dc.w bpl7ptl
  13278. pl7l
  13279.  dc.w 0
  13280.  
  13281.  dc.w bpl8pth
  13282. pl8h
  13283.  dc.w 0
  13284.  
  13285.  dc.w bpl8ptl
  13286. pl8l
  13287.  dc.w 0
  13288.  
  13289.  
  13290. val SET $2c
  13291. SCRMODULOS:
  13292.  REPT 232
  13293.  dc.b val,1,$ff,$fe
  13294.  dc.w $108,0
  13295.  dc.w $10a,0
  13296.  dc.b val,$df,$ff,$fe
  13297. val SET (val+1)&$ff
  13298.  ENDR
  13299.  
  13300.  dc.w $108,0,$10a,0
  13301.  dc.w $2401,$ff00
  13302.  dc.w ddfstop,$c8
  13303.  dc.w bplcon0,$9201
  13304.  dc.w bpl1ptl
  13305. scroll:
  13306.  dc.w 0
  13307.  dc.w bpl1pth
  13308. scrolh:
  13309.  dc.w 0
  13310.  
  13311.  dc.w $106,$c40
  13312.  dc.w $180,0
  13313.  dc.w $182,$f0
  13314. ; dc.w $108,40
  13315. ; dc.w $10a,40
  13316.  
  13317. ; dc.w $80
  13318. ;JUMPBACKH:
  13319. ; dc.w 0
  13320. ; dc.w $82
  13321. ;JUMPBACKL:
  13322. ; dc.w 0
  13323.  
  13324. ; dc.w $8a,0
  13325.  
  13326.  dc.w $ffff,$fffe
  13327.  dc.w $ffff,$fffe
  13328.  
  13329. PALETTEBIT:
  13330.  incbin "256palette"
  13331.  dc.w $ffff,$fffe
  13332.  
  13333. yposcop:
  13334. ; dc.w $2a11,$fffe
  13335. ; dc.w $8a,0
  13336.  
  13337. ; ds.l 104*12
  13338.  
  13339. ;colbars:
  13340. ;val SET $2a
  13341. ; dcb.l 104*80,$1fe0000
  13342. ; dc.w $106,$c42
  13343. ; dc.w $80
  13344. ;pch1:
  13345. ; dc.w 0
  13346. ; dc.w $82
  13347. ;pcl1:
  13348. ; dc.w 0 
  13349. ; dc.w $88,0
  13350. ; dc.w $ffff,$fffe       ; End copper list.
  13351.  
  13352. ; ds.l 104*12
  13353.  
  13354.  
  13355. ;colbars2:
  13356. ;val SET $2a
  13357. ; dcb.l 104*80,$1fe0000
  13358. ; dc.w $106,$c42
  13359. ; dc.w $80
  13360. ;pch2:
  13361. ; dc.w 0
  13362. ; dc.w $82
  13363. ;pcl2:
  13364. ; dc.w 0
  13365. ; dc.w $88,0
  13366. ; dc.w $ffff,$fffe       ; End copper list.
  13367.  
  13368. ; ds.l 104*10
  13369.  
  13370. NullCopper:
  13371.  dc.w $ffff,$fffe
  13372.  
  13373. hitcol: dc.l 0
  13374.  
  13375. old: dc.l 0
  13376.  
  13377.  CNOP 0,64
  13378. SCROLLSCRN: ds.l 20*16
  13379.  
  13380. SCROLLOFFSET: dc.w 0
  13381. SCROLLTIMER: dc.w 100
  13382. SCROLLDIRECTION: dc.w 1
  13383. SCROLLXPOS: dc.w 0
  13384. SCROLLPOINTER: dc.l testscroll
  13385. ENDSCROLL: dc.l endtestscroll
  13386.  
  13387. testscroll:
  13388. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  13389. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13390. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  13391. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13392.  
  13393. BLANKSCROLL:
  13394.  dc.b "                                                                                "
  13395. endtestscroll: 
  13396.  
  13397. prot5: dc.w 0
  13398. PanelCop:
  13399.  
  13400.  dc.w $80
  13401. och:
  13402.  dc.w 0
  13403.  dc.w $82
  13404. ocl:
  13405.  dc.w 0
  13406.  
  13407. statskip:
  13408.  dc.w $1fe,0
  13409.  dc.w $1fe,0
  13410.  
  13411.  dc.w $10c,0
  13412.  dc.w bplcon0,$1201
  13413.  dc.w bpl1ptl
  13414. n1l:
  13415.  dc.w 0
  13416.  dc.w bpl1pth
  13417. n1h:
  13418.  dc.w 0
  13419.  dc.w $108,-24
  13420. ; incbin "Panelpal"
  13421.  
  13422.  dc.w bpl2pth
  13423. p2h
  13424.  dc.w 0
  13425.  
  13426.  dc.w bpl2ptl
  13427. p2l
  13428.  dc.w 0
  13429.  
  13430.  dc.w bpl3pth
  13431. p3h
  13432.  dc.w 0
  13433.  
  13434.  dc.w bpl3ptl
  13435. p3l
  13436.  dc.w 0
  13437.  
  13438.  dc.w bpl4pth
  13439. p4h
  13440.  dc.w 0
  13441.  dc.w bpl4ptl
  13442. p4l
  13443.  dc.w 0
  13444.  dc.w bpl5pth
  13445. p5h
  13446.  dc.w 0
  13447.  dc.w bpl5ptl
  13448. p5l
  13449.  dc.w 0
  13450.  dc.w bpl6pth
  13451. p6h
  13452.  dc.w 0
  13453.  dc.w bpl6ptl
  13454. p6l
  13455.  dc.w 0
  13456.  dc.w bpl7pth
  13457. p7h
  13458.  dc.w 0
  13459.  dc.w bpl7ptl
  13460. p7l
  13461.  dc.w 0
  13462.  dc.w bpl8pth
  13463. p8h
  13464.  dc.w 0
  13465.  dc.w bpl8ptl
  13466. p8l
  13467.  dc.w 0
  13468.  
  13469.  
  13470.  dc.w ddfstart,$38
  13471.  dc.w ddfstop,$b8
  13472.  dc.w diwstart,$2c81
  13473.  dc.w diwstop,$2cc1
  13474.  
  13475.  dc.w bplcon0
  13476. Panelcon: dc.w $0211
  13477.  dc.w bpl1pth
  13478. p1h
  13479.  dc.w 0
  13480.  
  13481.  dc.w bpl1ptl
  13482. p1l
  13483.  dc.w 0
  13484.  
  13485.  
  13486.  dc.w $108,40*7
  13487.  dc.w $10a,40*7
  13488.  
  13489.  dc.w $ffff,$fffe
  13490.  
  13491.  dc.w $180,$fff
  13492.  
  13493.  
  13494.  dc.w $f801,$ff00
  13495.  dc.w col1,$50
  13496.  dc.w $f901,$ff00
  13497.  dc.w col1,$90
  13498.  dc.w $fa01,$ff00
  13499.  dc.w col1,$f0
  13500.  dc.w $fb01,$ff00
  13501.  dc.w col1,$f0
  13502.  dc.w $fc01,$ff00
  13503.  dc.w col1,$90
  13504.  dc.w $fd01,$ff00
  13505.  dc.w col1,$50
  13506.  
  13507.  dc.w $fe01,$ff00
  13508.  dc.w col1,$fff
  13509.  
  13510.  dc.w $ffdf,$fffe
  13511.  dc.w $a01,$ff00
  13512.  dc.w bplcon0,$201
  13513.  
  13514. ; incbin "faces2cols"
  13515.  dc.w bpl1pth
  13516. f1h
  13517.  dc.w 0
  13518.  
  13519.  dc.w bpl1ptl
  13520. f1l
  13521.  dc.w 0
  13522.  
  13523.  dc.w bpl2pth
  13524. f2h
  13525.  dc.w 0
  13526.  
  13527.  dc.w bpl2ptl
  13528. f2l
  13529.  dc.w 0
  13530.  
  13531.  dc.w bpl3pth
  13532. f3h
  13533.  dc.w 0
  13534.  
  13535.  dc.w bpl3ptl
  13536. f3l
  13537.  dc.w 0
  13538.  
  13539.  dc.w bpl4pth
  13540. f4h
  13541.  dc.w 0
  13542.  dc.w bpl4ptl
  13543. f4l
  13544.  dc.w 0
  13545.  
  13546.  dc.w bpl5pth
  13547. f5h
  13548.  dc.w 0
  13549.  dc.w bpl5ptl
  13550. f5l
  13551.  dc.w 0
  13552.  
  13553.  dc.w $0c01,$ff00
  13554.  dc.w bplcon0,$5201
  13555.   
  13556.  dc.w $ffff,$fffe
  13557.  
  13558.  cnop 0,64
  13559. FacePlace:
  13560. ; ds.l 6*32*5
  13561.  
  13562. TEXTSCRN: dc.l 0
  13563.  
  13564. TEXTCOP:
  13565.  dc.w intreq,$8030
  13566.  
  13567.  dc.w spr0ptl
  13568. txs0l:
  13569.  dc.w 0
  13570.  dc.w spr0pth
  13571. txs0h:
  13572.  dc.w 0
  13573.  dc.w spr1ptl
  13574. txs1l:
  13575.  dc.w 0
  13576.  dc.w spr1pth
  13577. txs1h:
  13578.  dc.w 0
  13579.  dc.w spr2ptl
  13580. txs2l:
  13581.  dc.w 0
  13582.  dc.w spr2pth
  13583. txs2h:
  13584.  dc.w 0
  13585.  dc.w spr3ptl
  13586. txs3l:
  13587.  dc.w 0
  13588.  dc.w spr3pth
  13589. txs3h:
  13590.  dc.w 0
  13591.  dc.w spr4ptl
  13592. txs4l:
  13593.  dc.w 0
  13594.  dc.w spr4pth
  13595. txs4h:
  13596.  dc.w 0
  13597.  dc.w spr5ptl
  13598. txs5l:
  13599.  dc.w 0
  13600.  dc.w spr5pth
  13601. txs5h:
  13602.  dc.w 0
  13603.  dc.w spr6ptl
  13604. txs6l:
  13605.  dc.w 0
  13606.  dc.w spr6pth
  13607. txs6h:
  13608.  dc.w 0
  13609.  dc.w spr7ptl
  13610. txs7l:
  13611.  dc.w 0
  13612.  dc.w spr7pth
  13613. txs7h:
  13614.  dc.w 0
  13615.  
  13616.  
  13617.  dc.w $10c,$0088
  13618.  
  13619.  dc.w $1fc,$f
  13620.  dc.w diwstart,$2c81    ; Top left corner of screen.
  13621.  dc.w diwstop
  13622. BOTOFTXT:
  13623.  dc.w $2cc1     ; Bottom right corner of screen.
  13624.  dc.w ddfstart,$38      ; Data fetch start.
  13625.  dc.w ddfstop,$c8       ; Data fetch stop.
  13626.  
  13627.  dc.w bplcon0
  13628. TSCP:
  13629.  dc.w $a201
  13630.  
  13631.  dc.w $106,$c40
  13632.  
  13633.  dc.w $2a01,$ff00
  13634.  
  13635.  dc.w col0,0
  13636.  dc.w col1
  13637. TOPLET:
  13638. TXTCOLL:
  13639.  dc.w 0
  13640.   dc.w col2
  13641. BOTLET:
  13642. TOPCOLL:
  13643.  dc.w 0
  13644.  dc.w col3
  13645. ALLTEXT:
  13646. MIXCOLL:
  13647.  dc.w $fff
  13648.  dc.w $106,$e40
  13649.  dc.w col3
  13650. ALLTEXTLOW:
  13651.  dc.w $0
  13652.  
  13653.  
  13654.  dc.w bpl1pth
  13655. TSPTh:
  13656.  dc.w 0
  13657.  dc.w bpl1ptl
  13658. TSPTl:
  13659.  dc.w 0
  13660.  
  13661.  dc.w bpl2pth
  13662. TSPTh2:
  13663.  dc.w 0
  13664.  dc.w bpl2ptl
  13665. TSPTl2:
  13666.  dc.w 0
  13667.  
  13668.  
  13669.  dc.w $108,0
  13670.  dc.w $10a,0
  13671.  
  13672.  dc.w $ffff,$fffe
  13673.  
  13674. ********************************************
  13675. * Stuff you don't have to worry about yet. *
  13676. ********************************************
  13677.  
  13678. closeeverything:
  13679.  
  13680. ; jsr mt_end
  13681.  
  13682.  move.l #nullcop,d0
  13683. ; move.l old,d0
  13684.  
  13685.  
  13686. ;charlie  
  13687.  move.l d0,$dff080     ; Restore old copper list.
  13688.  move.w d0,ocl
  13689.  swap d0
  13690.  move.w d0,och
  13691.  
  13692. ; move.l doslib,a6
  13693. ; move.l #4,d1
  13694. ; jsr -198(a6)
  13695.  
  13696. ; move.l doslib,d0
  13697. ; move.l d0,a1
  13698. ; move.l 4.w,a6
  13699. ; jsr CloseLib(a6)
  13700.  
  13701.  move.l #$dff000,a6
  13702.  move.w #$8020,dmacon(a6)
  13703.  move.w #$f,dmacon(a6)
  13704.  
  13705. ; move.l 4.w,a6
  13706. ; lea VBLANKInt,a1
  13707. ; moveq #INTB_COPER,d0
  13708. ; jsr _LVORemIntServer(a6)
  13709.  
  13710. ; IFEQ CD32VER
  13711. ; move.l OLDKINT,$68.w
  13712. ; ENDC
  13713. ; move.w saveinters,d0
  13714. ; or.w #$c000,d0
  13715. ; move.w d0,intena(a6)
  13716.  clr.w $dff0a8
  13717.  clr.w $dff0b8
  13718.  clr.w $dff0c8
  13719.  clr.w $dff0d8
  13720.  
  13721.  
  13722. ; move.l oldview,a1
  13723. ; move.l a1,d0
  13724. ; move.l gfxbase,a6
  13725. ; jsr -$de(a6)
  13726.  
  13727. ; cmp.b #'s',mors
  13728. ; beq.s leaveold
  13729. ; move.w #$f8e,$dff1dc
  13730. ;leaveold:
  13731.  
  13732.  jsr RELEASELEVELMEM
  13733.  jsr RELEASESCRNMEM
  13734.  
  13735.  move.l #0,d0
  13736.  
  13737.  rts
  13738.  
  13739.  
  13740.  
  13741. intbase: dc.l 0
  13742. gfxbase: dc.l 0
  13743. oldview: dc.l 0
  13744.  
  13745. stuff:
  13746.  
  13747.     PRSDL
  13748.     Lea    gfxname(pc),a1    
  13749.     Moveq.l    #0,d0
  13750.     Move.l    $4.w,a6    
  13751.     Jsr    -$228(a6)
  13752.     add.w d1,RVAL1
  13753.     Move.l     d0,gfxbase
  13754.     Move.l    d0,a6                Use As Base Reg
  13755.     Move.l    34(a6),oldview
  13756.     move.l 38(a6),old
  13757.     rts
  13758.  
  13759. gfxname dc.b "graphics.library",0
  13760.  even
  13761. INTUNAME    dc.b    "intuition.library",0
  13762.  
  13763.  even
  13764.  
  13765.  
  13766.  cnop 0,64
  13767.  
  13768. Panel:
  13769.  dc.l 0
  13770.  
  13771. TimerScr: 
  13772. ;ds.b 40*64
  13773.  
  13774. scrntab:
  13775.  ds.b 16
  13776. val SET 32
  13777.  REPT 96
  13778.  dc.b val,val,val
  13779. val SET val+1
  13780.  ENDR
  13781.  ds.b 16
  13782.  
  13783. smallscrntab:
  13784. val SET 32
  13785.  REPT 96
  13786.  dc.b val,val
  13787. val SET val+1
  13788.  ENDR
  13789.  
  13790.  cnop 0,64
  13791. scrn:
  13792.  dc.l 0
  13793. ; incbin "ab3:includes/newborderRAW"
  13794. ; ds.b 80
  13795. scrn2:
  13796.  dc.l 0
  13797.  
  13798. ;flib:
  13799. ; incbin "ab3:includes/newborderRAW"
  13800. ; ds.b 80
  13801. ;flib2:
  13802. ; incbin "ab3:includes/newborderRAW"
  13803. ; ds.b 80
  13804.  
  13805. ; incbin "ab3:includes/newborderRAW"
  13806. ; ds.b 80
  13807.  
  13808. SCRNDRAWPT: dc.l 0
  13809. SCRNSHOWPT: dc.l 0
  13810.  
  13811. ; dcb.l 8,$33333333
  13812. ; dc.l 0
  13813. ; dc.l 0
  13814. ; dcb.l 8,$0f0f0f0f
  13815. ; dc.l 0
  13816. ; dc.l 0
  13817. ;
  13818. ; dcb.l 8,$00ff00ff
  13819. ; dc.l 0
  13820. ; dc.l 0
  13821. ; dcb.l 8,$0000ffff
  13822. ; dc.l 0
  13823. ; dc.l 0
  13824. ; dc.l 0,-1,0,-1,0,-1,0,-1
  13825. ; dc.l 0
  13826. ; dc.l 0
  13827. ; dc.l -1,-1,0,0,-1,-1,0,0
  13828. ; dc.l 0
  13829. ; dc.l 0
  13830. ; dc.l 0,0,-1,-1,-1,-1,-1,-1
  13831. ; dc.l 0
  13832. ; dc.l 0
  13833.  
  13834. NumTimes: dc.l 0
  13835. TimeCount: dc.l 0
  13836. oldtime: dc.l 0
  13837. counting: dc.b 0
  13838. oktodisplay: dc.b 0
  13839.  
  13840. INITTIMER:
  13841.  move.l #0,TimeCount
  13842.  move.l #0,NumTimes
  13843.  rts
  13844.  
  13845. STARTCOUNT:
  13846.  move.l d0,-(a7)
  13847.  move.l $dff004,d0
  13848.  and.l #$1ffff,d0
  13849.  move.l d0,oldtime
  13850.  st counting
  13851.  move.l (a7)+,d0
  13852.  rts
  13853.  
  13854. STOPCOUNT:
  13855.  move.l d0,-(a7)
  13856.  move.l $dff004,d0
  13857.  and.l #$1ffff,d0
  13858.  
  13859.  sub.l oldtime,d0
  13860.  cmp.l #-256,d0
  13861.  bge.s okcount
  13862.  add.l #313*256,d0
  13863. okcount:
  13864.  add.l d0,TimeCount
  13865.  addq.l #1,NumTimes
  13866.  clr.b counting
  13867.  move.l (a7)+,d0
  13868.  rts
  13869.  
  13870. STOPCOUNTNOADD:
  13871.  move.l d0,-(a7)
  13872.  move.l $dff004,d0
  13873.  and.l #$1ffff,d0
  13874.  
  13875.  sub.l oldtime,d0
  13876.  cmp.l #-256,d0
  13877.  bge.s okcount2
  13878.  add.l #313*256,d0
  13879. okcount2:
  13880.  add.l d0,TimeCount
  13881.  clr.b counting
  13882.  move.l (a7)+,d0
  13883.  rts
  13884.  
  13885. maxbot: dc.w 0
  13886. tstneg: dc.l 0
  13887.  
  13888. STOPTIMER:
  13889.  st oktodisplay
  13890.  rts
  13891.  
  13892. digits: incbin "numbers.inc"
  13893.  
  13894. COMPACTMAP: ds.l 257
  13895.  
  13896. BIGMAP: ds.l 256*10
  13897.  
  13898.  Section Sounds,CODE_C
  13899.  
  13900. nullcop:
  13901.  dc.w $106,$c40
  13902.  dc.w $180,0 
  13903.  dc.w $100,$0
  13904.  dc.w $ffff,$fffe
  13905.  
  13906. Scream:
  13907. ; incbin "ab3:sounds/Scream"
  13908. ; ds.w 100
  13909. EndScream:
  13910. LowScream:
  13911. ; incbin "ab3:sounds/LowScream"
  13912. ; ds.w 100
  13913. EndLowScream:
  13914. BaddieGun:
  13915. ; incbin "ab3:sounds/BaddieGun"
  13916. EndBaddieGun:
  13917. bass:
  13918. ; incbin "ab3:sounds/backbass+drum"
  13919. bassend:
  13920. Shoot:
  13921. ; incbin "ab3:sounds/fire!"
  13922. EndShoot:
  13923. Munch:
  13924. ; incbin "ab3:sounds/munch"
  13925. EndMunch:
  13926. PooGun:
  13927. ; incbin "ab3:sounds/shoot.dm"
  13928. EndPooGun:
  13929. Collect:
  13930. ; incbin "ab3:sounds/collect"
  13931. EndCollect:
  13932. DoorNoise:
  13933. ; incbin "ab3:sounds/newdoor"
  13934. EndDoorNoise:
  13935. Stomp:
  13936. ; incbin "ab3:sounds/footstep3"
  13937. EndStomp:
  13938. SwitchNoise:
  13939. ; incbin "ab3:sounds/switch"
  13940. EndSwitch:
  13941. Reload:
  13942. ; incbin "ab3:sounds/switch1.SFX"
  13943. EndReload:
  13944.  
  13945. CHEATFRAME:
  13946.  dc.b 26,20,33,27,17,12
  13947. ENDCHEAT:
  13948.  
  13949. NoAmmo:
  13950. ; incbin "ab3:sounds/noammo"
  13951. EndNoAmmo:
  13952. Splotch:
  13953. ; incbin "ab3:sounds/splotch"
  13954. EndSplotch:
  13955. SplatPop:
  13956. ; incbin "ab3:sounds/splatpop"
  13957. EndSplatPop:
  13958. Boom:
  13959. ; incbin "ab3:sounds/boom"
  13960. EndBoom:
  13961. Hiss:
  13962. ; incbin "ab3:sounds/newhiss"
  13963. EndHiss:
  13964. Howl1:
  13965. ; incbin "ab3:sounds/howl1"
  13966. EndHowl1:
  13967. Howl2:
  13968. ; incbin "ab3:sounds/howl2"
  13969. EndHowl2:
  13970. Pant:
  13971. ; incbin "ab3:sounds/pant"
  13972. EndPant:
  13973. Whoosh:
  13974. ; incbin "ab3:sounds/whoosh"
  13975. EndWhoosh:
  13976. ROAR:
  13977. ; incbin "ab3:sounds/bigscream"
  13978. EndROAR
  13979. whoosh:
  13980. ; incbin "ab3:sounds/flame"
  13981. Endwhoosh:
  13982.  SECTION music,code_c
  13983.  
  13984. UseAllChannels: dc.w 0
  13985.  
  13986. mt_init:
  13987.  
  13988.  
  13989.     move.l    mt_data,a0
  13990.     move.l    a0,a1
  13991.     add.l    #$3b8,a1
  13992.     moveq    #$7f,d0
  13993.     moveq    #0,d1
  13994. mt_loop:move.l    d1,d2
  13995.     subq.w    #1,d0
  13996. mt_lop2:move.b    (a1)+,d1
  13997.     cmp.b    d2,d1
  13998.     bgt.s    mt_loop
  13999.     dbf    d0,mt_lop2
  14000.     addq.b    #1,d2
  14001.  
  14002.     lea    mt_samplestarts(pc),a1
  14003.     asl.l    #8,d2
  14004.     asl.l    #2,d2
  14005.     add.l    #$43c,d2
  14006.     add.l    a0,d2
  14007.     move.l    d2,a2
  14008.     moveq    #$1e,d0
  14009. mt_lop3:
  14010.     clr.l    (a2)
  14011.     move.l    a2,(a1)+
  14012.     moveq    #0,d1
  14013.     move.w    42(a0),d1
  14014.     asl.l    #1,d1
  14015.     add.l    d1,a2
  14016.     add.l    #$1e,a0
  14017.     dbf    d0,mt_lop3
  14018.  
  14019.     or.b    #$2,$bfe001
  14020.     move.b    #$6,mt_speed
  14021.     clr.w    $dff0a8
  14022.     clr.w    $dff0b8
  14023.     clr.w    $dff0c8
  14024.     clr.w    $dff0d8
  14025.     clr.b    mt_songpos
  14026.     clr.b    mt_counter
  14027.     clr.w    mt_pattpos
  14028.     rts
  14029.  
  14030. mt_end:    clr.w    $dff0a8
  14031.     clr.w    $dff0b8
  14032.     clr.w    $dff0c8
  14033.     clr.w    $dff0d8
  14034.     move.w    #$f,$dff096
  14035.     rts
  14036.  
  14037. mt_music:
  14038.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  14039.     move.l    mt_data,a0
  14040.     addq.b    #$1,mt_counter
  14041.     move.b    mt_counter,D0
  14042.     cmp.b    mt_speed,D0
  14043.     blt.s    mt_nonew
  14044.     clr.b    mt_counter
  14045.     bra    mt_getnew
  14046.  
  14047. mt_nonew:
  14048.     lea    mt_voice1(pc),a6
  14049.     lea    $dff0a0,a5
  14050.     bsr    mt_checkcom
  14051.     lea    mt_voice2(pc),a6
  14052.     lea    $dff0b0,a5
  14053.     bsr    mt_checkcom
  14054. ;    tst.b UseAllChannels
  14055. ;    beq mt_endr
  14056.      lea    mt_voice3(pc),a6
  14057.     lea    $dff0c0,a5
  14058.     bsr    mt_checkcom
  14059.     lea    mt_voice4(pc),a6
  14060.     lea    $dff0d0,a5
  14061.     bsr    mt_checkcom
  14062.     bra    mt_endr
  14063.  
  14064. mt_arpeggio:
  14065.     moveq    #0,d0
  14066.     move.b    mt_counter,d0
  14067.     divs    #$3,d0
  14068.     swap    d0
  14069.     cmp.w    #$0,d0
  14070.     beq.s    mt_arp2
  14071.     cmp.w    #$2,d0
  14072.     beq.s    mt_arp1
  14073.  
  14074.     moveq    #0,d0
  14075.     move.b    $3(a6),d0
  14076.     lsr.b    #4,d0
  14077.     bra.s    mt_arp3
  14078. mt_arp1:moveq    #0,d0
  14079.     move.b    $3(a6),d0
  14080.     and.b    #$f,d0
  14081.     bra.s    mt_arp3
  14082. mt_arp2:move.w    $10(a6),d2
  14083.     bra.s    mt_arp4
  14084. mt_arp3:asl.w    #1,d0
  14085.     moveq    #0,d1
  14086.     move.w    $10(a6),d1
  14087.     lea    mt_periods(pc),a0
  14088.     moveq    #$24,d7
  14089. mt_arploop:
  14090.     move.w    (a0,d0.w),d2
  14091.     cmp.w    (a0),d1
  14092.     bge.s    mt_arp4
  14093.     addq.l    #2,a0
  14094.     dbf    d7,mt_arploop
  14095.     rts
  14096. mt_arp4:move.w    d2,$6(a5)
  14097.     rts
  14098.  
  14099. mt_getnew:
  14100.     move.l    mt_data,a0
  14101.     move.l    a0,a3
  14102.     move.l    a0,a2
  14103.     add.l    #$c,a3
  14104.     add.l    #$3b8,a2
  14105.     add.l    #$43c,a0
  14106.  
  14107.     moveq    #0,d0
  14108.     move.l    d0,d1
  14109.     move.b    mt_songpos,d0
  14110.     move.b    (a2,d0.w),d1
  14111.     asl.l    #8,d1
  14112.     asl.l    #2,d1
  14113.     add.w    mt_pattpos,d1
  14114.     clr.w    mt_dmacon
  14115.  
  14116.     lea    $dff0a0,a5
  14117.     lea    mt_voice1(pc),a6
  14118.     bsr    mt_playvoice
  14119.     lea    $dff0b0,a5
  14120.     lea    mt_voice2(pc),a6
  14121.     bsr    mt_playvoice
  14122. ;    tst.b UseAllChannels
  14123. ;    beq mt_setdma
  14124.     lea    $dff0c0,a5
  14125.     lea    mt_voice3(pc),a6
  14126.     bsr    mt_playvoice
  14127.     lea    $dff0d0,a5
  14128.     lea    mt_voice4(pc),a6
  14129.     bsr    mt_playvoice
  14130.     bra    mt_setdma
  14131.  
  14132. PROTCALC:
  14133. ;    include "ab3:source_4000/protcalc.s"
  14134.     incbin "ab3:includes/protcalc.bin"
  14135. ENDPROTCALC:
  14136.  
  14137. mt_playvoice:
  14138.     move.l    (a0,d1.l),(a6)
  14139.     addq.l    #4,d1
  14140.     moveq    #0,d2
  14141.     move.b    $2(a6),d2
  14142.     and.b    #$f0,d2
  14143.     lsr.b    #4,d2
  14144.     move.b    (a6),d0
  14145.     and.b    #$f0,d0
  14146.     or.b    d0,d2
  14147.     tst.b    d2
  14148.     beq.s    mt_setregs
  14149.     moveq    #0,d3
  14150.     lea    mt_samplestarts(pc),a1
  14151.     move.l    d2,d4
  14152.     subq.l    #$1,d2
  14153.     asl.l    #2,d2
  14154.     mulu    #$1e,d4
  14155.     move.l    (a1,d2.l),$4(a6)
  14156.     move.w    (a3,d4.l),$8(a6)
  14157.     move.w    $2(a3,d4.l),$12(a6)
  14158.     move.w    $4(a3,d4.l),d3
  14159.     tst.w    d3
  14160.     beq.s    mt_noloop
  14161.     move.l    $4(a6),d2
  14162.     asl.w    #1,d3
  14163.     add.l    d3,d2
  14164.     move.l    d2,$a(a6)
  14165.     move.w    $4(a3,d4.l),d0
  14166.     add.w    $6(a3,d4.l),d0
  14167.     move.w    d0,8(a6)
  14168.     move.w    $6(a3,d4.l),$e(a6)
  14169.     move.w    $12(a6),d0
  14170.     asr.w #2,d0
  14171.     move.w d0,$8(a5)
  14172.     bra.s    mt_setregs
  14173. mt_noloop:
  14174.     move.l    $4(a6),d2
  14175.     add.l    d3,d2
  14176.     move.l    d2,$a(a6)
  14177.     move.w    $6(a3,d4.l),$e(a6)
  14178.     move.w    $12(a6),d0
  14179.     asr.w #2,d0
  14180.     move.w d0,$8(a5)
  14181. mt_setregs:
  14182.     move.w    (a6),d0
  14183.     and.w    #$fff,d0
  14184.     beq    mt_checkcom2
  14185.     move.b    $2(a6),d0
  14186.     and.b    #$F,d0
  14187.     cmp.b    #$3,d0
  14188.     bne.s    mt_setperiod
  14189.     bsr    mt_setmyport
  14190.     bra    mt_checkcom2
  14191. mt_setperiod:
  14192.     move.w    (a6),$10(a6)
  14193.     and.w    #$fff,$10(a6)
  14194.     move.w    $14(a6),d0
  14195.     move.w    d0,$dff096
  14196.     clr.b    $1b(a6)
  14197.  
  14198.     move.l    $4(a6),(a5)
  14199.     move.w    $8(a6),$4(a5)
  14200.     move.w    $10(a6),d0
  14201.     and.w    #$fff,d0
  14202.     move.w    d0,$6(a5)
  14203.     move.w    $14(a6),d0
  14204.     or.w    d0,mt_dmacon
  14205.     bra    mt_checkcom2
  14206.  
  14207. mt_setdma:
  14208.      move.w #250,d0
  14209. mt_wait:
  14210.      add.w #1,testchip
  14211.      dbra d0,mt_wait
  14212.     move.w    mt_dmacon,d0
  14213.     or.w    #$8000,d0
  14214.     and.w #%1111111111110011,d0
  14215.     move.w    d0,$dff096
  14216.     move.w #250,d0
  14217. mt_wait2:
  14218.     add.w #1,testchip
  14219.     dbra    d0,mt_wait2
  14220.     lea    $dff000,a5
  14221.     tst.b UseAllChannels
  14222.     beq.s noall
  14223.     lea    mt_voice4(pc),a6
  14224.     move.l    $a(a6),$d0(a5)
  14225.     move.w    $e(a6),$d4(a5)
  14226.     lea    mt_voice3(pc),a6
  14227.     move.l    $a(a6),$c0(a5)
  14228.     move.w    $e(a6),$c4(a5)
  14229. noall:
  14230.     lea    mt_voice2(pc),a6
  14231.     move.l    $a(a6),$b0(a5)
  14232.     move.w    $e(a6),$b4(a5)
  14233.     lea    mt_voice1(pc),a6
  14234.     move.l    $a(a6),$a0(a5)
  14235.     move.w    $e(a6),$a4(a5)
  14236.  
  14237.     add.w    #$10,mt_pattpos
  14238.     cmp.w    #$400,mt_pattpos
  14239.     bne.s    mt_endr
  14240. mt_nex:    clr.w    mt_pattpos
  14241.     clr.b    mt_break
  14242.     addq.b    #1,mt_songpos
  14243.     and.b    #$7f,mt_songpos
  14244.     move.b    mt_songpos,d1
  14245. ;    cmp.b    mt_data+$3b6,d1
  14246. ;    bne.s    mt_endr
  14247. ;    move.b    mt_data+$3b7,mt_songpos
  14248. mt_endr:tst.b    mt_break
  14249.     bne.s    mt_nex
  14250.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  14251.     rts
  14252.  
  14253. mt_setmyport:
  14254.     move.w    (a6),d2
  14255.     and.w    #$fff,d2
  14256.     move.w    d2,$18(a6)
  14257.     move.w    $10(a6),d0
  14258.     clr.b    $16(a6)
  14259.     cmp.w    d0,d2
  14260.     beq.s    mt_clrport
  14261.     bge.s    mt_rt
  14262.     move.b    #$1,$16(a6)
  14263.     rts
  14264. mt_clrport:
  14265.     clr.w    $18(a6)
  14266. mt_rt:    rts
  14267.  
  14268. CODESTORE: dc.l 0
  14269.  
  14270. mt_myport:
  14271.     move.b    $3(a6),d0
  14272.     beq.s    mt_myslide
  14273.     move.b    d0,$17(a6)
  14274.     clr.b    $3(a6)
  14275. mt_myslide:
  14276.     tst.w    $18(a6)
  14277.     beq.s    mt_rt
  14278.     moveq    #0,d0
  14279.     move.b    $17(a6),d0
  14280.     tst.b    $16(a6)
  14281.     bne.s    mt_mysub
  14282.     add.w    d0,$10(a6)
  14283.     move.w    $18(a6),d0
  14284.     cmp.w    $10(a6),d0
  14285.     bgt.s    mt_myok
  14286.     move.w    $18(a6),$10(a6)
  14287.     clr.w    $18(a6)
  14288. mt_myok:move.w    $10(a6),$6(a5)
  14289.     rts
  14290. mt_mysub:
  14291.     sub.w    d0,$10(a6)
  14292.     move.w    $18(a6),d0
  14293.     cmp.w    $10(a6),d0
  14294.     blt.s    mt_myok
  14295.     move.w    $18(a6),$10(a6)
  14296.     clr.w    $18(a6)
  14297.     move.w    $10(a6),$6(a5)
  14298.     rts
  14299.  
  14300. mt_vib:    move.b    $3(a6),d0
  14301.     beq.s    mt_vi
  14302.     move.b    d0,$1a(a6)
  14303.  
  14304. mt_vi:    move.b    $1b(a6),d0
  14305.     lea    mt_sin(pc),a4
  14306.     lsr.w    #$2,d0
  14307.     and.w    #$1f,d0
  14308.     moveq    #0,d2
  14309.     move.b    (a4,d0.w),d2
  14310.     move.b    $1a(a6),d0
  14311.     and.w    #$f,d0
  14312.     mulu    d0,d2
  14313.     lsr.w    #$6,d2
  14314.     move.w    $10(a6),d0
  14315.     tst.b    $1b(a6)
  14316.     bmi.s    mt_vibmin
  14317.     add.w    d2,d0
  14318.     bra.s    mt_vib2
  14319. mt_vibmin:
  14320.     sub.w    d2,d0
  14321. mt_vib2:move.w    d0,$6(a5)
  14322.     move.b    $1a(a6),d0
  14323.     lsr.w    #$2,d0
  14324.     and.w    #$3c,d0
  14325.     add.b    d0,$1b(a6)
  14326.     rts
  14327.  
  14328. mt_nop:    move.w    $10(a6),$6(a5)
  14329.     rts
  14330.  
  14331.  
  14332. mt_checkcom:
  14333.     move.w    $2(a6),d0
  14334.     and.w    #$fff,d0
  14335.     beq.s    mt_nop
  14336.     move.b    $2(a6),d0
  14337.     and.b    #$f,d0
  14338.     tst.b    d0
  14339.     beq    mt_arpeggio
  14340.     cmp.b    #$1,d0
  14341.     beq.s    mt_portup
  14342.     cmp.b    #$2,d0
  14343.     beq    mt_portdown
  14344.     cmp.b    #$3,d0
  14345.     beq    mt_myport
  14346.     cmp.b    #$4,d0
  14347.     beq    mt_vib
  14348.     move.w    $10(a6),$6(a5)
  14349.     cmp.b    #$a,d0
  14350.     beq.s    mt_volslide
  14351.     rts
  14352.  
  14353. mt_volslide:
  14354.     moveq    #0,d0
  14355.     move.b    $3(a6),d0
  14356.     lsr.b    #4,d0
  14357.     tst.b    d0
  14358.     beq.s    mt_voldown
  14359.     add.w    d0,$12(a6)
  14360.     cmp.w    #$40,$12(a6)
  14361.     bmi.s    mt_vol2
  14362.     move.w    #$40,$12(a6)
  14363. mt_vol2:move.w    $12(a6),d0
  14364.     asr.w #2,d0
  14365.     move.w d0,$8(a5)
  14366.     rts
  14367.  
  14368. mt_voldown:
  14369.     moveq    #0,d0
  14370.     move.b    $3(a6),d0
  14371.     and.b    #$f,d0
  14372.     sub.w    d0,$12(a6)
  14373.     bpl.s    mt_vol3
  14374.     clr.w    $12(a6)
  14375. mt_vol3:move.w    $12(a6),d0
  14376.     asr.w #2,d0
  14377.     move.w d0,$8(a5)
  14378.     rts
  14379.  
  14380. mt_portup:
  14381.     moveq    #0,d0
  14382.     move.b    $3(a6),d0
  14383.     sub.w    d0,$10(a6)
  14384.     move.w    $10(a6),d0
  14385.     and.w    #$fff,d0
  14386.     cmp.w    #$71,d0
  14387.     bpl.s    mt_por2
  14388.     and.w    #$f000,$10(a6)
  14389.     or.w    #$71,$10(a6)
  14390. mt_por2:move.w    $10(a6),d0
  14391.     and.w    #$fff,d0
  14392.     move.w    d0,$6(a5)
  14393.     rts
  14394.  
  14395. mt_portdown:
  14396.     clr.w    d0
  14397.     move.b    $3(a6),d0
  14398.     add.w    d0,$10(a6)
  14399.     move.w    $10(a6),d0
  14400.     and.w    #$fff,d0
  14401.     cmp.w    #$358,d0
  14402.     bmi.s    mt_por3
  14403.     and.w    #$f000,$10(a6)
  14404.     or.w    #$358,$10(a6)
  14405. mt_por3:move.w    $10(a6),d0
  14406.     and.w    #$fff,d0
  14407.     move.w    d0,$6(a5)
  14408.     rts
  14409.  
  14410. mt_checkcom2:
  14411.     move.b    $2(a6),d0
  14412.     and.b    #$f,d0
  14413.     cmp.b    #$e,d0
  14414.     beq.s    mt_setfilt
  14415.     cmp.b    #$d,d0
  14416.     beq.s    mt_pattbreak
  14417.     cmp.b    #$b,d0
  14418.     beq.s    mt_posjmp
  14419.     cmp.b    #$c,d0
  14420.     beq.s    mt_setvol
  14421.     cmp.b    #$f,d0
  14422.     beq.s    mt_setspeed
  14423.     rts
  14424.  
  14425. mt_setfilt:
  14426.     move.b    $3(a6),d0
  14427.     and.b    #$1,d0
  14428.     asl.b    #$1,d0
  14429.     and.b    #$fd,$bfe001
  14430.     or.b    d0,$bfe001
  14431.     rts
  14432. mt_pattbreak:
  14433.     not.b    mt_break
  14434.     rts
  14435. mt_posjmp:
  14436.     st reachedend
  14437.     move.b    $3(a6),d0
  14438.     subq.b    #$1,d0
  14439.     move.b    d0,mt_songpos
  14440.     not.b    mt_break
  14441.     rts
  14442. mt_setvol:
  14443.     cmp.b    #$40,$3(a6)
  14444.     ble.s    mt_vol4
  14445.     move.b    #$40,$3(a6)
  14446. mt_vol4:move.b    $3(a6),d0
  14447.     asr.w #2,d0
  14448.     move.w d0,$8(a5)
  14449.     rts
  14450. mt_setspeed:
  14451.     cmp.b    #$1f,$3(a6)
  14452.     ble.s    mt_sets
  14453.     move.b    #$1f,$3(a6)
  14454. mt_sets:move.b    $3(a6),d0
  14455.     beq.s    mt_rts2
  14456.     move.b    d0,mt_speed
  14457.     clr.b    mt_counter
  14458. mt_rts2:rts
  14459.  
  14460. mt_sin:
  14461.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  14462.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  14463.  
  14464. mt_periods:
  14465.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  14466.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  14467.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  14468.  DC.w $007f,$0078,$0071,$0000,$0000
  14469.  
  14470. reachedend: dc.b 0
  14471. mt_speed:    DC.b    6
  14472. mt_songpos:    DC.b    0
  14473. mt_pattpos:    DC.w    0
  14474. mt_counter:    DC.b    0
  14475.  
  14476. mt_break:    DC.b    0
  14477. mt_dmacon:    DC.w    0
  14478. mt_samplestarts:DS.L    $1f
  14479. mt_voice1:    DS.w    10
  14480.         DC.w    1
  14481.         DS.w    3
  14482. mt_voice2:    DS.w    10
  14483.         DC.w    2
  14484.         DS.w    3
  14485. mt_voice3:    DS.w    10
  14486.         DC.w    4
  14487.         DS.w    3
  14488. mt_voice4:    DS.w    10
  14489.         DC.w    8
  14490.         DS.w    3
  14491.  
  14492. CHEATPTR: dc.l 0
  14493. CHEATNUM: dc.l 0
  14494.  
  14495. testchip: dc.w 0
  14496.  
  14497. ;/* End of File */
  14498. mt_data: dc.l 0
  14499. tstchip: dc.l 0
  14500.  include "SERIAL_NIGHTMARE"
  14501.  
  14502. ingame:
  14503. ; incbin "ab3:includes/ingame"
  14504. gameover: 
  14505. ;incbin "ab3:includes/gameover"
  14506. welldone: incbin "ab3:includes/newwelldone"
  14507.  
  14508.  
  14509.