SHARE
TWEET

Blaze (Amiga 500) Source Code

keithbugeja Nov 17th, 2015 (edited) 492 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *****************************************************************
  2. * Blaze.S                                                       *
  3. *****************************************************************
  4. * DISCLAIMER: This source code is ancient and was written       *
  5. *       when I had very little programming experience! Please   *
  6. *       consider it an example of how things ought *NOT* to be  *
  7. *       done.                                   -- Keith Bugeja *
  8. *****************************************************************
  9.  
  10.  Section Blaze_Code                    
  11.  opt o+                        
  12.  
  13. ***** Constants **************
  14. Old_Mode        = 1005
  15. Open            = -30
  16. Close           = -36
  17. Read            = -42
  18. Write           = -48
  19. Output          = -60
  20. Forbid          = -132
  21. IoErr           = -132
  22. Permit          = -138
  23. SetSR          = -144
  24. AllocMem        = -198
  25. AllocRaster = -492
  26. FreeRaster      = -498
  27. Openlib    = -552
  28.  
  29. **** Comp. Int. Adap. *********
  30. Error           = $fffffffe
  31. Mousekey        = $bfe001
  32. Keys       = $bfec01
  33.  
  34. **** Chip Registers ***********
  35. Cop1lch = $dff080
  36. Cop1lcl = $dff082
  37. Cop2lch = $dff084
  38. Cop2lcl = $dff086
  39. Copjmp2 = $dff08a
  40. Colours = $dff180
  41. Bltsize = $dff058
  42. Bltapth = $dff050
  43. Bltbpth = $dff04c
  44. Bltcpth = $dff048
  45. Bltdpth = $dff054
  46. Bltcon0 = $dff040
  47. Bltcon1 = $dff042
  48. Bltafwm = $dff044
  49. Bltalwm = $dff046
  50. Bltamod = $dff064
  51. Bltbmod = $dff062
  52. Bltcmod = $dff060
  53. Bltdmod = $dff066
  54. Bplcon1 = $dff102
  55. Dmacon  = $dff096
  56. Joydat = $dff00c
  57. Vposr   = $dff004
  58. Intena  = $dff09a
  59. Intreqr = $dff01e
  60. Intreq  = $dff09c
  61.  
  62. **** Disk Errors **************
  63. Object_Not_Found     =  205
  64. Disk_Not_Validated   =  213
  65. Disk_Write_Protected =  214
  66. Device_Not_Mounted   =  218
  67. Disk_Full            =  221
  68. Not_A_Dos_Disk       =  225
  69. No_Disk              =  226
  70.  
  71. **** Macros *******************
  72. TIME_UPDATE MACRO
  73.         Lea     Panel_Vals,a0
  74.  
  75.         Tst.b   In_Game_Timer
  76.         Bne     \@0
  77.        
  78.         Move.l  #' OFF',2(a0)
  79.         Bra     \@3
  80.  
  81. \@0:
  82.         Subi.w  #1,TDelay
  83.         Bpl     \@1
  84.  
  85.         Move.w  #25,TDelay
  86.         Subi.w  #1,Time
  87.  
  88. \@1:           
  89.         Cmpi.w  #99,Time
  90.         Bhi     \@2
  91.  
  92.         Tst.w   Flick_Ctr
  93.         Beq     \@2
  94.  
  95.         Move.l  #$006A6A6A,2(a0)
  96.         Bra     \@3
  97. \@2:   
  98.         Move.w  Time,d1
  99.        
  100.         Move.w  d1,d0
  101.         Divu    #10,d0
  102.         Swap    d0
  103.         Andi.l  #$FF,d0
  104.         Addi.b  #48,d0
  105.         Move.b  d0,5(a0)
  106.        
  107.         Move.w  d1,d0
  108.         Divu    #10,d0
  109.         Andi.l  #$FF,d0
  110.         Divu    #10,d0
  111.         Swap    d0
  112.         Andi.l  #$FF,d0
  113.         Addi.b  #48,d0
  114.         Move.b  d0,4(a0)
  115.        
  116.         Move.w  d1,d0
  117.         Divu    #100,d0
  118.         Andi.l  #$FF,d0
  119.         Addi.b  #48,d0
  120.         Move.b  d0,3(a0)
  121. \@3:
  122.         Nop
  123.         ENDM
  124.  
  125. LIVES_UPDATE    MACRO
  126.         Lea     Panel_Vals,a0
  127.         Move.b  Lives,d0
  128.         Addi.b  #48,d0
  129.         Move.b  d0,11(a0)
  130.  
  131.         ENDM
  132.  
  133. JEWELS_UPDATE   MACRO
  134.         Lea     Panel_Vals,a0
  135.  
  136.         Move.w  Emeralds,d1
  137.  
  138.         Move.w  d1,d0
  139.         Divu    #10,d0
  140.         Swap    d0
  141.         Andi.l  #$FF,d0
  142.         Addi.b  #48,d0
  143.         Move.b  d0,16(a0)
  144.        
  145.         Move.w  d1,d0
  146.         Divu    #10,d0
  147.         Andi.l  #$FF,d0
  148.         Divu    #10,d0
  149.         Swap    d0
  150.         Andi.l  #$FF,d0
  151.         Addi.b  #48,d0
  152.         Move.b  d0,15(a0)
  153.        
  154.         Move.w  d1,d0
  155.         Divu    #100,d0
  156.         Andi.l  #$FF,d0
  157.         Addi.b  #48,d0
  158.         Move.b  d0,14(a0)
  159.  
  160.         ENDM
  161.  
  162. ENERGY_UPDATE   MACRO
  163.         Lea     Panel_Vals,a0
  164.         Move.b  #$65,d0
  165.         Sub.b   Energy,d0
  166.  
  167.         Cmpi.b  #$65,d0
  168.         Blo     \@1
  169.         Moveq.l #106,d0
  170. \@1:           
  171.         Move.b  d0,8(a0)
  172.         ENDM
  173.  
  174. SETDUMMYCOP MACRO
  175.         Move.l  #Cop_Dummy,$dff080
  176.         ENDM
  177.  
  178. ENSIZE MACRO
  179.         Move.w  \1,NFrames      ; Default 10
  180.         Move.w  \2,XBytes       ; Default 4
  181.         Move.w  \3,YBytes       ; Default $500
  182.         Move.w  \4,Enmsize      ; Default $803
  183.         Move.w  \5,Emod         ; Default 34
  184.         ENDM
  185.  
  186. COLSIZE MACRO
  187.         Move.l  \1,Coll_X1      ; Default 112
  188.         Move.l  \2,Coll_X2      ; Default 176 (Strt + Size*2)
  189.         Move.l  \3,Coll_Y1      ; Default 96
  190.         Move.l  \4,Coll_Y2      ; Default 160 (Strt + Size*2)
  191.         ENDM
  192.        
  193. SETCOPJMP MACRO
  194.         Move.l  #Cop_Pan,$dff084
  195.  
  196.         Lea     Cop_Pan2,a0
  197.         Move.l  Panel,d0
  198.         Addi.l  #2,d0
  199.  
  200.         Move.w  d0,6(a0)
  201.         Swap    d0
  202.         Move.w  d0,2(a0)
  203.  
  204.         ENDM
  205.  
  206. SETERRCOP MACRO
  207.         Lea     Error_Cop2,a0
  208.         Move.l  Buffer1,d0
  209.        
  210.         Move.w  d0,6(a0)
  211.         Swap    d0
  212.         Move.w  d0,2(a0)
  213.         ENDM
  214.  
  215. HOLD_FIRE MACRO
  216. \@1:
  217.         Btst    #7,Mousekey
  218.         Beq     \@1
  219.         ENDM
  220.  
  221. WAIT_FIRE MACRO
  222. \@1:
  223.         Btst    #7,Mousekey
  224.         Bne     \@1
  225.         ENDM
  226.  
  227. LOADPIC MACRO  
  228.         Bsr     Clear_Buffers
  229.         Bsr     Flip_Screen
  230.  
  231.         OPENF   \1,#Old_Mode            ; Load Picture
  232.         READF   Handle,Currbuffer,\2
  233.         CLOSEF  Handle
  234.        
  235.         Bsr     Flip_Screen
  236.         ENDM
  237.  
  238. PRINTAT MACRO
  239.         Move.l  \1,Dest
  240.         LOCATE  \2,\3,Dest
  241.         Add.l   \6,Dest
  242.         PRINT   \4,\5,Dest
  243.         ENDM
  244.  
  245. PRINTAM MACRO
  246.         Move.l  \1,Dest
  247.         LOCATE  \2,\3,Dest
  248.         PRINTM  \4,\5,Dest
  249.         ENDM
  250.  
  251. LOCATE  MACRO
  252.         Move.l  \1,d0
  253.         Move.l  \2,d1
  254.         Mulu    #640,d1
  255.         Mulu    #2,d0
  256.         Add.l   d0,d1
  257.         Add.l   d1,Dest
  258.         ENDM
  259.        
  260. COPY    MACRO
  261.         Move.l  \1,a0
  262.         Move.l  \2,a1
  263.         Move.l  \3,d0
  264.        
  265. \@:
  266.         Move.b  (a0)+,(a1)+
  267.         Dbra    d0,\@  
  268.         ENDM
  269.  
  270. PRINTM  MACRO
  271.         Move.l  \1,a0
  272.         Move.l  \2,d0
  273.         Move.l  \3,d3
  274.        
  275. \@1:
  276.         Move.l  Font,d4
  277.  
  278.         Move.l  #0,d1
  279.         Move.l  #0,d2
  280.        
  281.         Move.b  (a0)+,d1
  282.  
  283.         Cmp.b   #255,d1
  284.         Bne     \@3
  285.         Addi.l  #(40*16),d3
  286.         Bra     \@2
  287. \@3:   
  288.  
  289.         Subi.b  #48,d1
  290.         Bmi     \@2
  291.        
  292.         Ext.w   d1
  293.         Divu    #20,d1
  294.  
  295.         Move.w  d1,d2
  296.         Mulu    #640,d2
  297.  
  298.         Swap    d1
  299.         Andi.l  #$FF,d1
  300.         Mulu    #2,d1
  301.        
  302.         Add.l   d1,d2
  303.         Add.l   d2,d4
  304.        
  305.         Move.l  d3,d5
  306.         Move.l  #4,d6
  307.  
  308. \@4:
  309.         BLITM   d4,d5,#$401,#38,#38,#0,#$FFFF,#$FFFF,d4
  310.         Addi.l  #10240,d5
  311.         Dbra    d6,\@4
  312.  
  313. \@2:
  314.         Addi.l  #2,d3
  315.         Dbra    d0,\@1
  316.         ENDM
  317.  
  318. PRINT   MACRO
  319.         Move.l  \1,a0
  320.         Move.l  \2,d0
  321.         Move.l  \3,d3
  322.        
  323. \@1:
  324.         Move.l  Font,d4
  325.  
  326.         Move.l  #0,d1
  327.         Move.l  #0,d2
  328.        
  329.         Move.b  (a0)+,d1
  330.  
  331.         Cmp.b   #255,d1
  332.         Bne     \@3
  333.         Addi.l  #(40*16),d3
  334.         Bra     \@2
  335. \@3:   
  336.  
  337.         Subi.b  #48,d1
  338.         Bmi     \@2
  339.        
  340.         Ext.w   d1
  341.         Divu    #20,d1
  342.  
  343.         Move.w  d1,d2
  344.         Mulu    #640,d2
  345.  
  346.         Swap    d1
  347.         Andi.l  #$FF,d1
  348.         Mulu    #2,d1
  349.        
  350.         Add.l   d1,d2
  351.         Add.l   d2,d4
  352.        
  353.         BLIT    d4,d3,#$401,#38,#38,#0,#$FFFF,#$FFFF
  354. \@2:
  355.         Addi.l  #2,d3
  356.         Dbra    d0,\@1
  357.         ENDM
  358.  
  359. OPENF   MACRO
  360. \@0:
  361.         Move.l  Dosbase,a6
  362.         Move.l  \1,d1   ; Filename
  363.         Move.l  \2,d2   ; Mode
  364.         Jsr     Open(a6)
  365.         Tst.l   d0
  366.         Beq     \@1    
  367.         Move.l  d0,Handle       ; Global handle for disk I/O
  368.         Bra     \@2            
  369. \@1:
  370.         Movem.l d0-d7/a0-a7,-(sp)
  371.         Jsr     Disk_Error
  372.         Movem.l (sp)+,d0-d7/a0-a7
  373.         Bra     \@0
  374. \@2:
  375.         ENDM
  376.        
  377. CLOSEF  MACRO  
  378.         Move.l  Dosbase,a6
  379.         Move.l  \1,d1   ; Handle
  380.         Jsr     Close(a6)
  381.         ENDM
  382.        
  383. WRITEF  MACRO  
  384.         Move.l  Dosbase,a6
  385.         Move.l  \1,d1   ; Handle
  386.         Move.l  \2,d2   ; #Data
  387.         Move.l  \3,d3   ; #Length
  388.         Jsr     Write(a6)
  389.         ENDM
  390.        
  391. READF   MACRO
  392.         Move.l  Dosbase,a6
  393.         Move.l  \1,d1   ; Handle
  394.         Move.l  \2,d2   ; Buffer
  395.         Move.l  \3,d3   ; #Length
  396.         Jsr     Read(a6)       
  397.         ENDM
  398.  
  399. COLOUR MACRO
  400.         Move.w  \1,d0
  401.         Move.w  \2,d1
  402.         Lea     $dff000,a0
  403.         Mulu    #2,d0
  404.         Move.w  d1,(a0,d0)
  405.         ENDM
  406.        
  407. BLIT MACRO
  408.         Move    \7,Bltafwm      ; First word mask
  409.         Move    \8,Bltalwm      ; Last word mask
  410.         Move.w  d0,-(sp)       
  411.         Move.w  \6,d0           ; Shifting
  412.  
  413.         Rol.w   #6,d0
  414.         Rol.w   #6,d0
  415.  
  416.         Andi.w  #$f000,d0
  417.         Addi.w  #%0000100111110000,d0
  418.         Move.w  d0,Bltcon0
  419.         Move.w  (sp)+,d0
  420.         Move    #0,Bltcon1
  421.         Move    \4,Bltamod      ; Modulo
  422.         Move    \5,Bltdmod     
  423.         Move.l  \1,Bltapth      ; Source A
  424.         Move.l  \2,Bltdpth      ; Combined D
  425.         Move    \3,Bltsize      ; Size
  426.         ENDM
  427.  
  428. BLITM MACRO
  429.         Move    \7,Bltafwm      ; First word mask
  430.         Move    \8,Bltalwm      ; Last word mask
  431.         Move.w  d0,-(sp)
  432.         Move.w  \6,d0           ; Shifting
  433.  
  434.         Rol.w   #6,d0
  435.         Rol.w   #6,d0
  436.  
  437.         Andi.w  #$f000,d0
  438.         Move.w  d0,Bltcon1
  439.         Addi.w  #%0000111111001010,d0
  440.         Move.w  d0,Bltcon0
  441.         Move    \4,Bltamod      ; Modulo
  442.         Move    \4,Bltbmod
  443.         Move    \5,Bltcmod
  444.         Move    \5,Bltdmod     
  445.         Move.l  \9,Bltapth      ; Source A
  446.         Move.l  \1,Bltbpth
  447.         Move.l  \2,Bltcpth
  448.         Move.l  \2,Bltdpth      ; Combined D
  449.         Move    \3,Bltsize      ; Size
  450.         Move.w  (sp)+,d0
  451.         ENDM
  452.  
  453. INTBLIT MACRO
  454.         Move    #$FFFF,Bltafwm 
  455.         Move    #$FFFF,Bltalwm
  456.         Move.w  #%0000100111110000,Bltcon0
  457.         Move    #0,Bltcon1
  458.         Move    \1,Bltamod
  459.         Move    \1,Bltdmod
  460.         ENDM
  461.  
  462. INTBLITM MACRO
  463.         Move    #$FFFF,Bltafwm 
  464.         Move    #$FFFF,Bltalwm
  465.         Move.w  #%0000111111001010,Bltcon0
  466.         Move    #0,Bltcon1
  467.         Move    \1,Bltamod
  468.         Move    \1,Bltbmod
  469.         Move    \1,Bltcmod
  470.         Move    \1,Bltdmod
  471.         ENDM
  472.        
  473. FBLIT   MACRO
  474.         Move.l  \1,Bltapth
  475.         Move.l  \2,Bltdpth
  476.         Move    \3,Bltsize
  477.         ENDM   
  478.  
  479. FBLITM  MACRO
  480.         Move.l  \1,Bltapth
  481.         Move.l  \2,Bltbpth
  482.         Move.l  \3,Bltcpth
  483.         Move.l  \3,Bltdpth
  484.         Move    \4,Bltsize
  485.         ENDM   
  486.  
  487.        
  488. BLOCK MACRO
  489.         Move.l  \1,d0
  490.         Mulu    #4,d0
  491.         Move.l  \2,d1
  492.         Mulu    #1280,d1
  493.         Add.l   d1,d0
  494.         Add.l   \3,d0
  495.         Move.l  \4,d1
  496.         Mulu    #4,d1
  497.         Move.l  \5,d2
  498.         Mulu    #1280,d2
  499.         Add.l   d2,d1
  500.         Add.l   \6,d1
  501.        
  502.         Cmpi.w  #6,d3
  503.         Bne     \@4
  504.        
  505.         Movem.w d3-d4,-(SP)
  506.  
  507.         Move.w  Yoff,d3
  508.         Move.w  #32,d4
  509.         Sub.w   d3,d4
  510.         Bmi     \@4
  511.        
  512.         Lsl.w   #6,d4
  513.        
  514.         Tst.w   d4
  515.         Beq     \@5
  516.        
  517.         Bset    #1,d4
  518.  
  519.         FBLIT   d0,d1,d4
  520.  
  521.         Add.l   #$8200,d0
  522.         Add.l   #10240,d1
  523.         FBLIT   d0,d1,d4
  524.        
  525.         Add.l   #$8200,d0
  526.         Add.l   #10240,d1
  527.         FBLIT   d0,d1,d4
  528.        
  529.         Add.l   #$8200,d0
  530.         Add.l   #10240,d1
  531.         FBLIT   d0,d1,d4
  532.        
  533.         Add.l   #$8200,d0
  534.         Add.l   #10240,d1
  535.         FBLIT   d0,d1,d4
  536.  
  537. \@5:
  538.         Movem.w (SP)+,d3-d4
  539.         Bra     \@2    
  540.        
  541. \@4:
  542.         Tst.w   d3
  543.         Bne     \@1
  544.        
  545.         Movem.w d3-d4,-(SP)
  546.  
  547.         Move.w  #32,d3
  548.         Move.w  Yoff,d4
  549.         Sub.w   d4,d3
  550.         Bmi     \@3
  551.        
  552.         Lsl.w   #6,d4
  553.        
  554.         Tst.w   d4
  555.         Beq     \@3
  556.        
  557.         Bset    #1,d4
  558.  
  559.         Mulu    #40,d3
  560.         Add.l   d3,d0
  561.         Add.l   d3,d1
  562.  
  563.         FBLIT   d0,d1,d4
  564.  
  565.         Add.l   #$8200,d0
  566.         Add.l   #10240,d1
  567.         FBLIT   d0,d1,d4
  568.        
  569.         Add.l   #$8200,d0
  570.         Add.l   #10240,d1
  571.         FBLIT   d0,d1,d4
  572.        
  573.         Add.l   #$8200,d0
  574.         Add.l   #10240,d1
  575.         FBLIT   d0,d1,d4
  576.        
  577.         Add.l   #$8200,d0
  578.         Add.l   #10240,d1
  579.         FBLIT   d0,d1,d4
  580.  
  581. \@3:
  582.         Movem.w (SP)+,d3-d4
  583.         Bra     \@2    
  584.  
  585. \@1:   
  586.         FBLIT   d0,d1,#$802
  587.  
  588.         Add.l   #$8200,d0
  589.         Add.l   #10240,d1
  590.         FBLIT   d0,d1,#$802
  591.        
  592.         Add.l   #$8200,d0
  593.         Add.l   #10240,d1
  594.         FBLIT   d0,d1,#$802
  595.        
  596.         Add.l   #$8200,d0
  597.         Add.l   #10240,d1
  598.         FBLIT   d0,d1,#$802
  599.        
  600.         Add.l   #$8200,d0
  601.         Add.l   #10240,d1
  602.         FBLIT   d0,d1,#$802
  603. \@2:
  604.         ENDM
  605.  
  606. BLOCKM MACRO
  607.         Move.l  \1,d0           ; X
  608.         Mulu    #4,d0
  609.        
  610.         Move.l  \2,d1
  611.         Mulu    #1280,d1        ; Y
  612.        
  613.         Add.l   d1,d0           ; Final Pos
  614.  
  615.         Move.l  \7,d5
  616.         Add.l   d0,d5           ; Mask Pos
  617.        
  618.         Add.l   \3,d0           ; Source Pos
  619.        
  620.         Move.l  \4,d1           ; Dest X
  621.         Mulu    #4,d1
  622.        
  623.         Move.l  \5,d2
  624.         Mulu    #1280,d2        ; Dest Y
  625.        
  626.         Add.l   d2,d1
  627.         Add.l   \6,d1  
  628.        
  629.         FBLITM  d5,d0,d1,#$802
  630.  
  631.         Add.l   #$8200,d0
  632.         Add.l   #10240,d1
  633.         FBLITM  d5,d0,d1,#$802
  634.        
  635.         Add.l   #$8200,d0
  636.         Add.l   #10240,d1
  637.         FBLITM  d5,d0,d1,#$802
  638.        
  639.         Add.l   #$8200,d0
  640.         Add.l   #10240,d1
  641.         FBLITM  d5,d0,d1,#$802
  642.        
  643.         Add.l   #$8200,d0
  644.         Add.l   #10240,d1
  645.         FBLITM  d5,d0,d1,#$802
  646.         ENDM
  647.  
  648. SINE   MACRO
  649.         Movem.l d0/a0,-(SP)
  650.  
  651.         Cmpi.w  #360,d0
  652.         Blo     \@1
  653.         Subi.w  #359,d0
  654. \@1:   
  655.         Lea     Sine_Data,a0
  656.         Mulu    #2,d0
  657.         Move.w  0(a0,d0.w),d1
  658.  
  659.         Movem.l (SP)+,d0/a0
  660.         ENDM
  661.  
  662. COSINE MACRO
  663.         Movem.l d0/a0,-(SP)
  664.  
  665.         Cmpi.w  #360,d0
  666.         Blo     \@1
  667.         Subi.w  #359,d0
  668. \@1:   
  669.         Lea     Cosine_Data,a0
  670.         Mulu    #2,d0
  671.         Move.w  0(a0,d0.w),d1
  672.         Movem.l (SP)+,d0/a0
  673.         ENDM
  674.  
  675. SQROOT  MACRO
  676.         Clr.l   d2
  677.         Move.w  \1,d2
  678.         Clr.l   d1
  679.         Clr.l   d0
  680. \@
  681.         Addi.w  #2,d1
  682.         Addi.w  #1,d0
  683.         Sub.w   d1,d2
  684.         Bpl.s   \@
  685.         ENDM
  686.                
  687. PLOT MACRO
  688.         Clr.l   d0
  689.         Clr.l   d1
  690.         Clr.l   d2
  691.         Move.w  \4,d2   ; Plane
  692.         Mulu    #10240,d2      
  693.        
  694.         Move.l  \3,a0   ; Raster Bmap
  695.         Add.l   a0,d2
  696.  
  697.         Move    \2,d0   ; Y Pos
  698.         Mulu    #320,d0
  699.  
  700.         Add     \1,d0   ; X Pos
  701.         Divu    #8,d0
  702.         Add     d0,a0
  703.         Swap    d0
  704.         Sub     #7,d0
  705.         Neg     d0
  706.         Bset    d0,(a0)
  707.         ENDM   
  708.  
  709.                
  710. SPLOT MACRO
  711.         Clr.l   d0
  712.         Move.l  \3,a0   ; Raster Bmap
  713.        
  714.         Move    \2,d0   ; Y Pos
  715.         Mulu    #320,d0
  716.  
  717.         Add     \1,d0   ; X Pos
  718.         Divu    #8,d0
  719.         Add     d0,a0
  720.         Swap    d0
  721.         Sub     #7,d0
  722.         Neg     d0
  723.        
  724.         Move.l  a0,a5
  725.  
  726.         Btst    d0,(a5)
  727.         Bne     No_Plot
  728.  
  729.         Adda.l  #10240,a5
  730.         Btst    d0,(a5)
  731.         Bne     No_Plot
  732.  
  733.         Adda.l  #10240,a5
  734.         Btst    d0,(a5)
  735.         Bne     No_Plot
  736.  
  737.         Adda.l  #10240,a5      
  738.         Btst    d0,(a5)
  739.         Bne     No_Plot
  740.  
  741.         Adda.l  #10240,a5
  742.         Btst    d0,(a5)
  743.         Bne     No_Plot
  744.  
  745.         Bset    d0,(a0)         ; White
  746. No_Plot:       
  747.         ENDM  
  748.        
  749.  
  750. INSCOP MACRO
  751.         Move.l  \1,d0
  752.         Add.l   \3,d0
  753.         Move.l  \2,a0
  754.  
  755.         COPPER  d0,10(a0),6(a0)
  756.         Swap    d0
  757.         Add.l   #10240,d0
  758.         COPPER  d0,18(a0),14(a0)
  759.         Swap    d0
  760.         Add.l   #10240,d0
  761.         COPPER  d0,26(a0),22(a0)
  762.         Swap    d0
  763.         Add.l   #10240,d0
  764.         COPPER  d0,34(a0),30(a0)
  765.         Swap    d0
  766.         Add.l   #10240,d0
  767.         COPPER  d0,42(a0),38(a0)
  768.         ENDM
  769.        
  770. SPRCOP  MACRO
  771.         Move.l  \1,a0
  772.         Move.l  \2,d0
  773.         COPPER  d0,94(a0),90(a0)
  774.         Move.l  \3,d0
  775.         COPPER  d0,102(a0),98(a0)
  776.         Move.l  \4,d0
  777.         COPPER  d0,110(a0),106(a0)
  778.         Move.l  \5,d0
  779.         COPPER  d0,118(a0),114(a0)
  780.         Move.l  \6,d0
  781.         COPPER  d0,126(a0),122(a0)
  782.         Move.l  \7,d0
  783.         COPPER  d0,134(a0),130(a0)
  784.         Move.l  \8,d0
  785.         COPPER  d0,142(a0),138(a0)
  786.         Move.l  \9,d0
  787.         COPPER  d0,150(a0),146(a0)
  788.         ENDM   
  789.  
  790. COPPER MACRO
  791.         Move.w  \1,\2
  792.         Swap    \1
  793.         Move.w  \1,\3
  794.         ENDM
  795.  
  796. COPIN   MACRO
  797.         Move.l  \1,Cop1lch
  798.         ENDM
  799.        
  800. COPON   MACRO
  801.         Bsr     Wait_VBL
  802.         Move.l  \1,Cop1lch
  803.         Move.w  #%1000011111110000,$dff096  ; Turn on almost everything
  804.         ENDM
  805.  
  806. SPRITESOFF MACRO
  807.         Move.w  #%0000000000100000,$dff096
  808.         ENDM
  809.                
  810. SAMPLAY MACRO                                   ; start,Length,Volume,Period
  811.         Move.l  \1,$dff0a0                      ; start
  812.         Move.w  \2,$dff0a4                      ; length
  813.         Move.w  \3,$dff0a8                      ; volume
  814.         Move.w  \4,$dff0a6                      ; period 1Khz = 447 clock ticks
  815.         Move.w  #$8001,$dff096
  816.         ENDM
  817.  
  818. MTSKOFF MACRO
  819.         Move.l  $4.w,a6
  820.         Jsr     Forbid(a6)
  821.         ENDM
  822.        
  823. MTSKON  MACRO
  824.         Move.l  $4.w,a6
  825.         Jsr     Permit(a6)
  826.         ENDM   
  827.  
  828. INTON   MACRO
  829.         Move.w  #$C028,Intena
  830.         ENDM
  831.        
  832. INTOFF  MACRO
  833.         Move.w  #$7fff,Intena
  834.         ENDM   
  835.        
  836. KEYSON  MACRO
  837.         Move.w  #$C028,Intena  
  838.         ENDM
  839.        
  840. OLDINT  MACRO
  841.         Move.l  Old_Int,$6c
  842.         ENDM
  843.  
  844. WAITDBF MACRO
  845.         ENDM
  846.        
  847. TURNOFFDMA MACRO
  848.         Jsr     Wait_VBL
  849.         Jsr     Fade
  850.         Move.w  #$0080,Dmacon
  851.         ENDM
  852.  
  853. TURNONDMA MACRO
  854.         Jsr     Wait_VBL
  855.         Move.w  #$8080,Dmacon
  856.         ENDM   
  857.  
  858. TURNOFFAUDIO MACRO
  859.         Bsr     Wait_VBL
  860.         Move.w  #%1111,Dmacon
  861.         ENDM
  862.  
  863. TESTENHANCED MACRO
  864.         ENDM
  865.  
  866. *************************************************
  867. *       Open Libraries                          *
  868. *************************************************
  869.         Move.l  $4.w,a6
  870.  
  871.         Lea     Gfxname,a1
  872.         Moveq.l #0,d0
  873.         Jsr     Openlib(a6)
  874.         Move.l  d0,Gfxbase
  875.  
  876.         Lea     Dosname,a1
  877.         Move.l  #0,d0
  878.         Jsr     Openlib(a6)
  879.         Move.l  d0,Dosbase
  880.  
  881.         Move.l  d0,a6
  882.         Jsr     Output(a6)
  883.         Move.l  d0,Doshandle
  884.  
  885.         CLOSEF  Doshandle
  886.        
  887. *************************************************
  888. *       Allocate Memory Needed                  *
  889. *************************************************
  890.  
  891. ;       Move.l  #Program_Code,$20       ; No supervisor
  892. ;       Move.w  #$2000,SR               ; until we keep
  893.                                         ; using the DOS
  894. ;Program_Code:                          ; disk routines
  895. ;       Move.w  #$2000,SR                      
  896.  
  897.         Move.l  #CPU_Trap,$C
  898.         Move.l  #CPU_Trap,$10
  899.         Move.l  #CPU_Trap,$14
  900.         Move.l  #CPU_Trap,$28
  901.         Move.l  #CPU_Trap,$2C
  902.  
  903.         MTSKOFF
  904.         INTOFF
  905.         INTON
  906.        
  907.         Jsr Allocate_Raster             ; bitmap allocation
  908.         Jsr     Allocate_Fast
  909.  
  910. *************************************************
  911. *       Load Data                               *
  912. *************************************************
  913.         Jsr     Load_Logo      
  914.         Jsr     Load_Sprites
  915.         Jsr     Fade
  916.  
  917. Main_Game_Start:
  918.         Jsr     Title_Screen
  919.  
  920.         *>
  921. ;       Jsr     Hi_Score_Table
  922.         *>
  923.  
  924.         Jsr     Init_New_Addr
  925.         Jsr     Show_Zone
  926.  
  927.         Move.b  Level,d0
  928.         Cmp.b   Current_Level,d0
  929.         Beq     New_Map
  930.        
  931.         Jsr     Load_Blocks
  932.  
  933. New_Map:
  934.         Jsr     Init_Addr
  935.  
  936.         *>
  937. ;       Jsr     Load_Music
  938. ;       Jsr     mt_init
  939.         *>
  940.  
  941.         Jsr     Load_Map
  942.         Jsr     Fade
  943.  
  944. Retry_Another_Life:
  945.         TURNOFFDMA
  946.  
  947.         Jsr     Clear_Buffers
  948.         Jsr     Recopy_Map_Data
  949.  
  950.         *>
  951.         Jsr     Set_Int3
  952.         *>
  953.  
  954.         PRINT   #Panel_Data,#Panel_Data_End-Panel_Data,Panel
  955.         PRINT   #Panel_Vals,#Panel_Vals_End-Panel_Vals,Panel
  956.  
  957.         JEWELS_UPDATE
  958.         TIME_UPDATE
  959.         ENERGY_UPDATE
  960.         LIVES_UPDATE
  961.        
  962. *************************************************
  963. *       Initialise                              *
  964. *************************************************
  965.         Bsr     Copper_Setup
  966.  
  967.         SPRCOP  Copper1,#Back0,#Back1,#Back2,#Back3,#Back4,#Back5,#Back6,#Back7
  968.         SPRCOP  Copper2,#Back0,#Back1,#Back2,#Back3,#Back4,#Back5,#Back6,#Back7
  969.  
  970.         Move.l  Buffer1,Currbuffer      ; Initialise variables for double buffering
  971.         Move.l  Buffer1,Showbuffer     
  972.  
  973.         COPIN   Copper1
  974.  
  975.         SETCOPJMP
  976.         TURNONDMA
  977.  
  978.         Jsr     Flip_Screen             ; Flip buffers
  979.         Jsr     Wait_VBL                ; Wait VBL
  980.  
  981. *************************************************
  982. *       Main Loop (Game Loop)                   *
  983. *************************************************
  984. Loop:
  985.         Cmpi.b  #2,Energy
  986.         Bls     Not_Dead
  987.         Jsr     Dead_Cat
  988.         Jsr     Restart_Loading                
  989.         Bra     Retry_Another_Life
  990.  
  991. Not_Dead:
  992.         Cmpi.b  #$df,Keys               ; Abort Game
  993.         Beq     Quit_Game                      
  994.  
  995. Test_Bonus:
  996.         Cmpi.b  #$95,Keys               ; Test Bonus
  997.         Bne     Test_Next_Level                
  998.         Bsr     Bonus_Checks
  999.                                                
  1000. Test_Next_Level:                               
  1001.         Tst.w   Level_Complete                 
  1002.         Bne     Next_Level                     
  1003.                                                
  1004.         Cmpi.b  #$bf,Keys               ; Next Level   
  1005.         Bne     Check_Pause                    
  1006.  
  1007. Next_Level:                                    
  1008.         Jsr Level_Complete_Run         
  1009.         Jsr     Restart_Loading                
  1010.         Jsr     Give_Bonus                     
  1011.         Jsr     Increase_File_Names            
  1012.         Bra     New_Map                        
  1013.                                                
  1014. Check_Pause:                                   
  1015.         Cmpi.b  #$CD,Keys               ; Pause        
  1016.         Bne     No_Pause                       
  1017.         Jmp     Pause_Game                     
  1018.  
  1019. No_Pause:      
  1020.         Cmp.b   #$b3,Keys               ; Debug jump key 'j' allows
  1021.         Bne     No_Jump                 ; us to jump when in the air
  1022.         Move.w  #16,Vely                ; for test purposes
  1023.  
  1024. No_Jump:       
  1025.         Bsr     Check_Hit
  1026.         Bsr     Diagonal_Stuff          ; Handle plain diagonal surfaces
  1027.                                                        
  1028.         Tst.w   NMCtr  
  1029.         Bne     No_Check                ; check if player was ejected from curve/surface
  1030.         Bsr     Check_Horizontal_Controls      
  1031.  
  1032. No_Check:
  1033.         Bsr     Get_Max_Jump
  1034.         Bsr     Check_Vertical_Controls         ; Check jump and fast descend
  1035.         Bsr     Increase_Vel
  1036.         Bsr     Change_Vectors          ; Handle switching of major axes (x<->y)
  1037.         Bsr     Dec_NMCtr               ; Manage counters
  1038.  
  1039.         Tst.w   Standpfrm
  1040.         Bne     No_Vert_Eval
  1041.         Bsr     Vertical_Evaluation     ; Handle vertical movement
  1042.  
  1043. No_Vert_Eval:
  1044.         Cmpi.w  #2,Standpfrm
  1045.         Beq     No_Execute_B
  1046.  
  1047.         Tst.w   Inc_Vel
  1048.         Bne     No_Execute
  1049.         Bsr     Horizontal_Evaluation   ; Handle horizontal movement
  1050.  
  1051. No_Execute:
  1052.         Bsr     Set_SPtile_Middle
  1053.  
  1054. No_Execute_B:
  1055.         Bsr     Restore_Vectors         ; Restore axes (x<->y)
  1056.         Bsr     Get_Final_Velocity      ; Get player direction
  1057.         Bsr     Check_Brake             ; Check if we are currently braking
  1058.  
  1059.         Tst.w   Standpfrm
  1060.         Bne     No_Surface_Check
  1061.         Bsr     Set_SPtile_Down         ; Test for surface tiles
  1062.         Bsr     Check_Near_Tiles
  1063.  
  1064. No_Surface_Check:      
  1065.         Bsr     Draw_Blocks             ; Draw background blocks (behind player)
  1066.         Bsr     Dust_Routine
  1067.         Bsr     Eval_Dir                ; Determine player sprite direction (where player faces)
  1068.         Bsr     Rotate_Hero             ; Determine player angle
  1069.         Bsr     Draw_Hero               ; Draw player bob
  1070.  
  1071.         Tst.b   Do_Mask_Routine
  1072.         Beq     No_Draw_FG_Blocks
  1073.         Bsr     Draw_FG_Blocks          ; Draw foreground blocks (cover player)
  1074.  
  1075. No_Draw_FG_Blocks:
  1076.         Tst.w   Enemy_Check
  1077.         Bne     No_Enemy_Check
  1078.         Bsr     Start_Enemies           ; Handle enemies
  1079.  
  1080. No_Enemy_Check:
  1081.         Jsr     Update_Panel
  1082.         Jsr     Scroll_Copper
  1083.  
  1084.         Bsr     Flip_Screen             ; Double buffering
  1085.         Bsr     Wait_VBL                ; Wait VBL
  1086.         Bra     Loop   
  1087.  
  1088. *************************************************
  1089. *       Subroutines                             *
  1090. *************************************************
  1091. *************************************************
  1092. *       Bonus Checks                            *
  1093. *************************************************
  1094. Bonus_Checks:
  1095.         Move.l  #Bonus_Messages,d7
  1096.  
  1097.         PRINTAM Showbuffer,#0,#3,d7,#80
  1098.         WAIT_FIRE
  1099.         Rts
  1100.  
  1101. *************************************************
  1102. *************************************************
  1103. Get_Max_Jump:
  1104.         Move.w  Xjump,d0
  1105.         Move.w  Yjump,d1
  1106.        
  1107.         Cmpi.w  #$7fff,d0
  1108.         Bls     Now_YJump
  1109.         Neg.w   d0
  1110.  
  1111. Now_YJump:     
  1112.         Cmpi.w  #$7fff,d1
  1113.         Bls     Now_PJump
  1114.         Neg.w   d1
  1115.  
  1116. Now_PJump:     
  1117.         Cmp.w   d0,d1
  1118.         Bne     PJump_2
  1119.         Move.w  #0,Max_Jump
  1120.         Rts
  1121.  
  1122. PJump_2:
  1123.         Tst.w   d0
  1124.         Beq     Set_Max
  1125.        
  1126.         Tst.w   d1
  1127.         Beq     Set_Max
  1128.        
  1129.         Move.w  #1,Max_Jump
  1130.         Rts
  1131.  
  1132. Set_Max:
  1133.         Move.w  #2,Max_Jump
  1134.         Rts    
  1135.        
  1136. *************************************************
  1137. *       Abort game in progress                  *
  1138. *************************************************
  1139. Quit_Game:
  1140.         PRINT   #Quit_Text,#Quit_Text_End-Quit_Text,Panel
  1141.         Bsr     Restart_Loading
  1142.         Bra     Main_Game_Start
  1143.  
  1144. *************************************************
  1145. *       Handles death sequence (lose a life)    *
  1146. *************************************************
  1147. Dead_Cat:
  1148.         Move.w  #$FFF0,d0
  1149.         Move.w  #$FFFF,Vely
  1150.  
  1151.         Clr.b   Spin
  1152.         Clr.b   Slide
  1153.         Clr.b   Braking
  1154.         Clr.b   Super_Run
  1155.         Clr.b   Invulnerable   
  1156.         Clr.b   Whoopie
  1157.         Clr.b   Ext_Whoopie
  1158.  
  1159.         Clr.w   Velx
  1160.         Clr.w   YFlip
  1161.         Clr.w   Surface
  1162.         Clr.w   XORFrame
  1163.         Clr.w   Left_Blocked
  1164.         Clr.w   Right_Blocked
  1165.        
  1166. Die_Loop:
  1167.         Addi.w  #1,d0
  1168.         Add.w   d0,YChar
  1169.         Move.w  #1,Hit
  1170.  
  1171.         Move.w  d0,-(SP)
  1172.         Jsr     Draw_Blocks             ; Draw blocks
  1173.         Jsr     Draw_Hero               ; Draw player
  1174.         Jsr     Start_Enemies           ; Handle enemies
  1175.  
  1176.         Jsr     Scroll_Copper
  1177.         Jsr     Flip_Screen             ; Double buffering
  1178.         Jsr     Wait_VBL                ; VBL
  1179.  
  1180.         Move.w  (SP)+,d0
  1181.  
  1182.         Cmpi.w  #224,YChar
  1183.         Blo     Die_Loop
  1184.  
  1185.         Subi.b  #1,Lives
  1186.         Move.b  Start_Energy,Energy
  1187.  
  1188.         Move.w  #1,Stand
  1189.         Move.w  #999,Time
  1190.         Move.w  #127,YChar
  1191.        
  1192.         Move.w  XStartb,Xoff
  1193.         Move.w  YStartb,Yoff
  1194.         Move.l  XStart,Xmap
  1195.         Move.l  YStart,Ymap
  1196.  
  1197.         Jsr     Life_Lost_Reset
  1198.         Rts    
  1199.  
  1200. *************************************************
  1201. *       Animation on level complete (player     *
  1202. *       exits screen from right hand side)      *
  1203. *************************************************
  1204. Level_Complete_Run:
  1205.         Clr.b   Invulnerable
  1206.         Clr.b   Slide
  1207.         Clr.b   Spin
  1208.         Clr.b   Braking
  1209.         Clr.b   Super_Run
  1210.         Clr.w   Surface
  1211.         Move.w  #$FFF8,Velx
  1212.         Move.w  #1,Dir
  1213.  
  1214. Level_Complete_Loop:   
  1215.         Bsr     Draw_Blocks             ; Draw blocks
  1216.         Bsr     Draw_Hero               ; Draw player
  1217.  
  1218.         Jsr     Scroll_Copper
  1219.         Bsr     Flip_Screen             ; Double buffer
  1220.         Bsr     Wait_VBL                ; VBL
  1221.  
  1222.         Addi.w  #8,XChar
  1223.         Cmpi.w  #288,XChar
  1224.         Bls     Level_Complete_Loop
  1225.  
  1226.         Move.w  #144,XChar
  1227.         Rts
  1228.  
  1229. *************************************************
  1230. *       Rewards for slick play                  *
  1231. *************************************************
  1232. Give_Bonus:
  1233.         OPENF   #Copper3_Name,#Old_Mode
  1234.         READF   Handle,Copper1,#3380
  1235.         CLOSEF  Handle
  1236.  
  1237.         OPENF   #Copper3_Name,#Old_Mode
  1238.         READF   Handle,Copper2,#3380
  1239.         CLOSEF  Handle
  1240.  
  1241.         Move.l  Buffer1,Currbuffer
  1242.         Move.l  Buffer2,Showbuffer
  1243.  
  1244.         INSCOP  Buffer1,Copper1,#0
  1245.         INSCOP  Buffer2,Copper2,#0
  1246.         COPON   Copper1
  1247.        
  1248.         Jsr     Wait_VBL
  1249.  
  1250.         TURNONDMA
  1251.         LOADPIC #Overview_Name,#40960
  1252.  
  1253.         Jsr     Clear_Text_Buffers
  1254.         PRINTAT Showbuffer,#0,#5,#Bonus,#Bonus_End-Bonus,#40960
  1255.         Jsr     Copy_Buffers
  1256.         Moveq.l #0,d7
  1257.        
  1258. Bonus_Loop:
  1259.         Jsr     Parallax_Scroll
  1260.         Jsr     Sin_Title
  1261.         Jsr     Flip_Screen
  1262.         Jsr     Wait_VBL
  1263.        
  1264.         Btst    #7,Mousekey
  1265.         Bne     Bonus_Loop
  1266.  
  1267.         Move.l  Copper1,Fading_Copper
  1268.         Bsr     Copper_Fade
  1269.  
  1270.         Move.l  Copper2,Fading_Copper
  1271.         Bsr     Copper_Fade
  1272.        
  1273.         Bsr     Clear_Buffers
  1274.         Rts
  1275.  
  1276. *************************************************
  1277. *       Fade out and restart loading            *
  1278. *************************************************
  1279. Restart_Loading:
  1280.         Move.l  Copper1,Fading_Copper
  1281.         Jsr     Copper_Fade
  1282.  
  1283.         Move.l  Copper2,Fading_Copper
  1284.         Jsr     Copper_Fade
  1285.  
  1286.         Jsr     Clear_Buffers
  1287.  
  1288.         TURNOFFDMA
  1289.         TURNOFFAUDIO
  1290.         SETDUMMYCOP    
  1291.  
  1292.         INTOFF
  1293.         OLDINT
  1294.         INTON
  1295.  
  1296.         Rts
  1297.  
  1298. *************************************************
  1299. *       Player collision test                   *
  1300. *************************************************
  1301. Check_Hit:
  1302.         Cmpi.w  #1,Hit
  1303.         Beq     Hit_Player_Character
  1304.         Rts    
  1305.  
  1306. Hit_Player_Character:
  1307.         Move.w  #1,Jump
  1308.         Move.w  #1,IJump
  1309.         Move.w  #4,NMCtr2
  1310.         Move.w  #25,NMCtr
  1311.         Move.w  Cf_Hit_Vely,Vely
  1312.         Move.w  #2,Hit
  1313.         Move.b  #100,Invulnerable
  1314.         Subi.b  #1,Energy
  1315.  
  1316.         Clr.b   Slide
  1317.         Clr.b   Spin
  1318.         Clr.b   Spring
  1319.         Clr.b   Crouch
  1320.         Clr.w   Inc_Vel
  1321.         Clr.w   XORFrame
  1322.         Clr.w   YFlip
  1323.  
  1324.         ENERGY_UPDATE
  1325.  
  1326.         Tst.w   Dir
  1327.         Beq     Fly_Opp
  1328.         Move.w  Cf_Hit_Velx_Lt,Velx
  1329.         Rts
  1330. Fly_Opp:       
  1331.         Move.w  Cf_Hit_Velx_Rt,Velx
  1332.         Rts
  1333.  
  1334. *************************************************
  1335. *       Handle enemy animation counters         *
  1336. *************************************************
  1337. Start_Enemies:
  1338.         Addi.w  #1,Enemy_Anim_Ctr       ; Compute enemy animations
  1339.         Cmpi.w  #11,Enemy_Anim_Ctr      ; and update frame counters
  1340.         Bls     Next_Function                          
  1341.         Clr.w   Enemy_Anim_Ctr
  1342.  
  1343. Next_Function:
  1344.         Clr.w   Standpploop
  1345.        
  1346.         Moveq.w #4,d7
  1347.         Move.w  Estart,d6
  1348.         Mulu    #4,d6
  1349.  
  1350.         Lea     Enmx,a0
  1351.         Lea     0(a0,d6.w),a0
  1352.        
  1353.         Lea     Enmy,a1
  1354.         Lea     0(a1,d6.w),a1
  1355.  
  1356.         Divu    #2,d6
  1357.  
  1358.         Lea     Enmt,a2
  1359.         Lea     0(a2,d6.w),a2
  1360.        
  1361.         Lea     Enmvx,a3
  1362.         Lea     0(a3,d6.w),a3
  1363.        
  1364.         Lea     Enmvy,a4
  1365.         Lea     0(a4,d6.w),a4
  1366.  
  1367.         Lea     Enmpfrm,a5
  1368.         Lea     0(a5,d6.w),a5
  1369.  
  1370. Draw_Enemies:
  1371.         Move.l  (a0)+,Cenmx
  1372.         Move.l  (a1)+,Cenmy
  1373.         Move.w  (a2)+,Cenmt
  1374.         Move.w  (a3)+,Cenmvx
  1375.         Move.w  (a4)+,Cenmvy
  1376.         Move.w  (a5)+,Cenmpfrm
  1377.  
  1378. *************************************************
  1379. *       Determine enemy type and function       *
  1380. *************************************************
  1381. Type_And_Function:
  1382.         Moveq.l #0,d0
  1383.         Moveq.l #0,d1
  1384.         Moveq.l #0,d2
  1385.         Moveq.l #0,d3
  1386.         Moveq.l #0,d4
  1387.         Moveq.l #0,d5
  1388.  
  1389.         Clr.b   Pend_Bob
  1390.         Clr.b   Destructable
  1391.         Clr.b   Enemy_Fire_Pause
  1392.  
  1393.         Clr.l   Savecx
  1394.         Clr.l   Savecy
  1395.        
  1396.         Cmpi.w  #$FFFE,Cenmt
  1397.         Bhs     Last_Type
  1398.        
  1399. *************************************************
  1400. *       $01 - Lava fish                         *
  1401. *************************************************
  1402.         Tst.w   Cenmt
  1403.         Bne     Type_2
  1404.  
  1405.         ENSIZE  #20,#2,#$500,#$802,#36          ; Size
  1406.         COLSIZE #136,#168,#96,#158              ; Collision size, detection
  1407.  
  1408.         Move.w  #9,Hit_Vely                     ; Collision response
  1409.         Move.w  #7,Hit_Velx_Lt                  ; when player collides
  1410.         Move.w  #$FFF9,Hit_Velx_Rt              ; with enemy
  1411.  
  1412.         Lea     Enemy_Anim,a6                   ; Animation
  1413.         Move.w  Enemy_Anim_Ctr,d5
  1414.         Move.b  72(a6,d5),d5
  1415.         Move.w  d5,Enemy_Frame
  1416.  
  1417.         Bsr     Get_Enemy_Mpos                  ; Map position
  1418.         Bsr     Give_Enemy_Offsets              ; Offset from screen origin
  1419.         Bsr     Draw_Bob
  1420.         Bsr     Check_Coll
  1421.  
  1422.         ENSIZE  #20,#2,#$280,#$402,#36
  1423.  
  1424.         Subi.l  #$F,Offey                                      
  1425.         Move.w  #$D1,Enemy_Frame
  1426.         Bsr     Draw_Bob
  1427.  
  1428. ****> Calculations For Motion
  1429.  
  1430.         Addi.w  #1,Cenmvy                       ; Position
  1431.  
  1432.         Cmpi.b  #177,d1                         ; Test collision with map
  1433.         Bne     Set_Enemy1_Velocity
  1434.  
  1435.         Move.w  Cenmvx,Cenmvy  
  1436.  
  1437. Set_Enemy1_Velocity:
  1438.         Move.w  Cenmvy,d0
  1439.         Move.w  d0,-(a4)
  1440.         Ext.l   d0
  1441.         Add.l   d0,-(a1)
  1442.  
  1443.         Adda.l  #4,a1
  1444.         Adda.l  #2,a4
  1445.         Bra     All_Work_Over
  1446.  
  1447. ****> Calc. For Motion
  1448.  
  1449. *************************************************
  1450. *       $02 - Pendulum                          *
  1451. *************************************************
  1452. Type_2:
  1453.         Cmpi.w  #1,Cenmt
  1454.         Bne     Type_3
  1455.  
  1456.         ENSIZE  #20,#2,#$280,#$402,#36          ; Enemy size
  1457.  
  1458.         Move.w  #10,Enemy_Frame                 ; Animation frame
  1459.         Move.w  #6,Hit_Vely                     ; Collision response
  1460.         Move.w  #5,Hit_Velx_Lt
  1461.         Move.w  #$FFFB,Hit_Velx_Rt
  1462.  
  1463. ****> Calculation For Motion
  1464.  
  1465.         Lea     Velocities,a6
  1466.         Move.w  d7,d1
  1467.         Add.w   Estart,d1
  1468.        
  1469.         Mulu    #2,d1
  1470.         Move.w  0(a6,d1.w),d0
  1471.  
  1472.         Add.w   d0,-(a4)
  1473.        
  1474.         Cmpi.w  #180,(a4)
  1475.         Bhi     Dec_Velocity
  1476.  
  1477.         Addi.w  #1,d0
  1478.         Bra     No_Angle_Calc
  1479.  
  1480. Dec_Velocity:
  1481.         Subi.w  #1,d0
  1482.  
  1483. No_Angle_Calc:
  1484.         Move.w  d0,0(a6,d1.w)                   ; Restore velocity
  1485.  
  1486. ****> Calc. For Motion
  1487.  
  1488.         Move.w  (a4)+,Angle                                    
  1489.         Move.w  Cenmvx,d6                                      
  1490.         Move.l  #8,Savecy                                      
  1491.         Move.w  #4,Bob_Frame                           
  1492.         Move.w  #20,CSize                                      
  1493.        
  1494.         Bsr     Do_Pendulum
  1495.         Bsr     Check_Coll
  1496.         Bra     Position_Work_Over
  1497.  
  1498. *************************************************
  1499. *       $03 - Moving platform                   *
  1500. *************************************************
  1501. Type_3:
  1502.         Cmpi.w  #2,Cenmt
  1503.         Bne     Type_4
  1504.  
  1505.         ENSIZE  #10,#4,#$500,#$803,#34
  1506.         Move.w  #7,Enemy_Frame         
  1507.  
  1508.         Bsr     Get_Enemy_Mpos         
  1509.         Bsr     Check_Enemy_Tiles      
  1510.         Bsr     Give_Enemy_Offsets     
  1511.         Bsr     Draw_Bob               
  1512.         Bsr     Work_Early_Position
  1513.  
  1514.         Move.w  #8,Enemy_Frame         
  1515.         Addi.l  #32,Offex
  1516.         Bsr     Draw_Bob               
  1517.         Subi.l  #32,Offex
  1518.        
  1519.         Move.w  #1,d6                  
  1520.         Bsr     Check_Lifts
  1521.  
  1522.         Bra     Position_Work_Over     
  1523.  
  1524. *************************************************
  1525. *       $04 - Enemy                             *
  1526. *************************************************
  1527. Type_4:
  1528.         Cmpi.w  #3,Cenmt
  1529.         Bne     Type_5
  1530.  
  1531. ****> Enemy Fire Routine
  1532.         Move.l  Cenmx,d2
  1533.         Move.l  Cenmy,d3
  1534.  
  1535.         Move.w  Cenmvx,d0
  1536.         Ext.l   d0
  1537.  
  1538.         Mulu.w  #3,d0
  1539.         Move.w  d0,Enemy_Fire_Dirx
  1540.         Clr.w   Enemy_Fire_Diry
  1541.  
  1542.         Bsr     Enemy_Fire              ; Is enemy going to fire?
  1543.  
  1544.         Move.l  d2,Cenmx
  1545.         Move.l  d3,Cenmy
  1546.  
  1547. ****> Enemy Fire Routine
  1548.  
  1549.         ENSIZE  #10,#4,#$500,#$803,#34
  1550.         COLSIZE #118,#170,#102,#154
  1551.        
  1552.         Move.w  #6,Hit_Vely                    
  1553.         Move.w  #5,Hit_Velx_Lt         
  1554.         Move.w  #$FFFB,Hit_Velx_Rt     
  1555.  
  1556.         Lea     Enemy_Anim,a6          
  1557.         Move.w  Enemy_Anim_Ctr,d5      
  1558.         Move.b  (a6,d5),d5
  1559.         Move.w  d5,Enemy_Frame
  1560.         Move.b  #1,Destructable
  1561.  
  1562.         Bsr     Get_Enemy_Mpos
  1563.         Bsr     Check_Enemy_Tiles      
  1564.         Bsr     Give_Enemy_Offsets     
  1565.         Bsr     Draw_Bob               
  1566.         Bsr     Check_Coll
  1567.  
  1568.         Tst.b   Enemy_Fire_Pause        ; Show that enemy is about to fire     
  1569.         Bne     All_Work_Over          
  1570.  
  1571.         Bra     Work_New_Position      
  1572.  
  1573. *************************************************
  1574. *       $05 - Water platforms                   *
  1575. *************************************************
  1576. Type_5:
  1577.         Cmpi.w  #4,Cenmt
  1578.         Bne     Type_6
  1579.  
  1580.         ENSIZE  #10,#4,#$500,#$803,#34 
  1581.        
  1582.         Lea     Enemy_Anim,a6          
  1583.         Move.w  Enemy_Anim_Ctr,d5      
  1584.         Lea     12(a6),a6              
  1585.         Move.b  (a6,d5),d5
  1586.         Ext.w   d5
  1587.         Move.w  d5,Enemy_Frame
  1588.  
  1589.         Bsr     Get_Enemy_Mpos
  1590.         Bsr     Check_Enemy_Tiles      
  1591.         Bsr     Give_Enemy_Offsets     
  1592.         Bsr     Draw_Bob               
  1593.         Bsr     Work_Early_Position
  1594.         Bsr     Lifts
  1595.         Bra     Position_Work_Over
  1596.  
  1597. *************************************************
  1598. *       $05 - Fish                              *
  1599. *************************************************
  1600. Type_6:
  1601.         Cmpi.w  #5,Cenmt
  1602.         Bne     Type_7
  1603.  
  1604.         ENSIZE  #10,#4,#$500,#$803,#34         
  1605.         COLSIZE #118,#170,#102,#154                    
  1606.        
  1607.         Move.w  #6,Hit_Vely                                    
  1608.         Move.w  #5,Hit_Velx_Lt         
  1609.         Move.w  #$FFFB,Hit_Velx_Rt
  1610.  
  1611.         Move.b  #1,Destructable                        
  1612.         Clr.w   Cenmpfrm                                       
  1613.  
  1614.         Move.w  -(a5),d5                                       
  1615.         Addi.w  #1,d5
  1616.         Move.w  d5,(a5)+
  1617.        
  1618.         Lea     Enemy_Anim,a6                                  
  1619.         Move.b  84(a6,d5),d5
  1620.         Move.w  d5,Enemy_Frame
  1621.  
  1622.         Bsr     Get_Enemy_Mpos
  1623.         Bsr     Give_Enemy_Offsets
  1624.         Bsr     Draw_Bob
  1625.         Bsr     Check_Coll
  1626.  
  1627. ****> Calculations For Motion
  1628.  
  1629.         Addi.w  #1,Cenmvy                                      
  1630.         Cmpi.b  #177,d1                                        
  1631.         Bne     Set_Enemy2_Velocity
  1632.  
  1633.         Move.w  Cenmvx,Cenmvy  
  1634.         Clr.w   -(a5)
  1635.         Adda.l  #2,a5
  1636.  
  1637. Set_Enemy2_Velocity:
  1638.         Move.w  Cenmvy,d0
  1639.         Move.w  d0,-(a4)
  1640.         Ext.l   d0
  1641.         Add.l   d0,-(a1)
  1642.  
  1643.         Adda.l  #4,a1
  1644.         Adda.l  #2,a4
  1645.         Bra     All_Work_Over
  1646.  
  1647. **** Calc. For Motion
  1648.  
  1649. *************************************************
  1650. *       $06 - Pendulum                          *
  1651. *************************************************
  1652. Type_7:
  1653.         Cmpi.w  #6,Cenmt
  1654.         Bne     Type_8
  1655.  
  1656.         ENSIZE  #20,#2,#$280,#$402,#36 
  1657.        
  1658.         Move.w  #10,Enemy_Frame        
  1659.         Move.w  #6,Hit_Vely            
  1660.         Move.w  #5,Hit_Velx_Lt
  1661.         Move.w  #$FFFB,Hit_Velx_Rt
  1662.  
  1663.         Lea     Angles,a6               ; Load angle table 1 -> a6
  1664.         Move.w  d7,d1                   ; Get word offset
  1665.         Add.w   Estart,d1
  1666.        
  1667.         Mulu    #2,d1                  
  1668.         Move.w  0(a6,d1.w),d0           ; Push angle in d0
  1669.  
  1670.         Add.w   Cenmvy,d0              
  1671.  
  1672.         Cmpi.w  #359,d0                
  1673.         Bls     No_Revolution          
  1674.         Subi.w  #360,d0                
  1675.  
  1676. No_Revolution: 
  1677.         Move.w  d0,0(a6,d1.w)  
  1678.  
  1679.         Move.l  #8,Savecy              
  1680.         Move.w  #4,Bob_Frame   
  1681.         Move.w  #20,CSize              
  1682.         Move.w  Cenmvx,d6              
  1683.         Move.w  d0,Angle               
  1684.  
  1685.         Bsr     Do_Pendulum
  1686.         Bsr     Check_Coll
  1687.         Bra     Position_Work_Over
  1688.  
  1689. *************************************************
  1690. *       $07 - Bird                              *
  1691. *************************************************
  1692. Type_8:
  1693.         Cmpi.w  #7,Cenmt
  1694.         Bne     Type_9
  1695.  
  1696. ***> For Fire Routine
  1697.         Move.l  Cenmx,d2
  1698.         Move.l  Cenmy,d3
  1699.  
  1700.         Move.w  Cenmvx,Enemy_Fire_Dirx
  1701.         Move.w  #2,Enemy_Fire_Diry
  1702.  
  1703.         Bsr     Enemy_Fire             
  1704.  
  1705.         Move.l  d2,Cenmx
  1706.         Move.l  d3,Cenmy
  1707.  
  1708. ***> For Fire Routine
  1709.  
  1710.         ENSIZE  #10,#4,#$500,#$803,#34
  1711.         COLSIZE #134,#182,#102,#154
  1712.        
  1713.         Move.w  #6,Hit_Vely            
  1714.         Move.w  #5,Hit_Velx_Lt
  1715.         Move.w  #$FFFB,Hit_Velx_Rt
  1716.        
  1717.         Lea     Enemy_Anim,a6          
  1718.         Move.w  Enemy_Anim_Ctr,d5
  1719.         Lea     36(a6),a6
  1720.         Move.b  (a6,d5),d5
  1721.         Move.w  d5,Enemy_Frame
  1722.  
  1723.         Cmpi.w  #$7fff,Cenmvx  
  1724.         Bhi     Right_Dir_A
  1725.         Addi.w  #8,Enemy_Frame
  1726.  
  1727. Right_Dir_A:
  1728.         Bsr     Get_Enemy_Mpos
  1729.         Bsr     Check_Enemy_Tiles      
  1730.         Bsr     Give_Enemy_Offsets     
  1731.         Bsr     Draw_Bob               
  1732.  
  1733.         Move.b  #1,Destructable
  1734.         Addi.w  #1,Enemy_Frame
  1735.         Addi.l  #32,Offex
  1736.  
  1737.         Bsr     Draw_Bob               
  1738.         Bsr     Check_Coll
  1739.  
  1740.         Tst.b   Enemy_Fire_Pause
  1741.         Bne     All_Work_Over
  1742.         Bra     Work_New_Position      
  1743.  
  1744. *************************************************
  1745. *       $08 - Bee                               *
  1746. *************************************************
  1747. Type_9:
  1748.         Cmpi.w  #8,Cenmt
  1749.         Bne     Type_10
  1750.  
  1751. ***> For Fire Routine
  1752.         Move.l  Cenmx,d2
  1753.         Move.l  Cenmy,d3
  1754.  
  1755.         Move.w  Cenmvx,d0
  1756.         Ext.l   d0
  1757.        
  1758.         Muls.w  #3,d0
  1759.         Move.w  d0,Enemy_Fire_Dirx
  1760.         Move.w  #3,Enemy_Fire_Diry
  1761.  
  1762.         Bsr     Enemy_Fire
  1763.  
  1764.         Move.l  d2,Cenmx
  1765.         Move.l  d3,Cenmy
  1766.  
  1767. ***> For Fire Routine
  1768.  
  1769.         ENSIZE  #10,#4,#$500,#$803,#34
  1770.         COLSIZE #118,#170,#102,#154
  1771.        
  1772.         Move.w  #6,Hit_Vely
  1773.         Move.w  #5,Hit_Velx_Lt
  1774.         Move.w  #$FFFB,Hit_Velx_Rt
  1775.         Move.b  #1,Destructable        
  1776.        
  1777.         Move.w  #34,Enemy_Frame
  1778.         Move.w  Flick_Ctr,d0
  1779.         Add.w   d0,Enemy_Frame
  1780.  
  1781.         Tst.w   Cenmvx
  1782.         Bne     Enemy_Not_Still_A
  1783.  
  1784.         Addi.w  #23,Enemy_Frame
  1785.         Bra     Right_Dir_B
  1786.  
  1787. Enemy_Not_Still_A:
  1788.         Cmpi.w  #$7fff,Cenmvx
  1789.         Bhi     Right_Dir_B
  1790.         Addi.w  #2,Enemy_Frame
  1791.  
  1792. Right_Dir_B:   
  1793.         Bsr     Get_Enemy_Mpos
  1794.         Bsr     Check_Enemy_Tiles
  1795.         Bsr     Give_Enemy_Offsets
  1796.         Bsr     Draw_Bob
  1797.         Bsr     Check_Coll
  1798.  
  1799.         Tst.b   Enemy_Fire_Pause
  1800.         Bne     All_Work_Over
  1801.         Bra     Work_New_Position
  1802.  
  1803. *************************************************
  1804. *       $09 - Crusher                           *
  1805. *************************************************
  1806. Type_10:
  1807.         Cmpi.w  #9,Cenmt
  1808.         Bne     Type_11
  1809.  
  1810.         Bsr     Give_Enemy_Offsets     
  1811.         ENSIZE  #20,#2,#$500,#$402,#36 
  1812.         Move.w  #108,Enemy_Frame
  1813.        
  1814.         Move.w  -(a3),d0               
  1815.         Move.w  -(a4),d1               
  1816.         Ext.l   d0                     
  1817.         Ext.l   d1                     
  1818.  
  1819.         Cmp.l   d0,d1
  1820.         Bgt     Crusher_Limit_A
  1821.  
  1822.         Move.l  d1,d2
  1823.         Bra     Crusher_Limit_B
  1824.  
  1825. Crusher_Limit_A:
  1826.         Move.l  d0,d2
  1827.  
  1828. Crusher_Limit_B:
  1829.         Divu    #16,d2
  1830.         Ext.l   d2
  1831.         Move.l  Offey,d3
  1832.        
  1833. Crusher_Loop:  
  1834.         Bsr     Draw_Bob
  1835.         Addi.l  #16,Offey
  1836.         Dbra    d2,Crusher_Loop
  1837.  
  1838.         ENSIZE  #10,#4,#$280,#$403,#34 
  1839.         Move.l  d3,Offey
  1840.  
  1841.         Cmp.l   d0,d1                  
  1842.         Bgt     No_Return_Up           
  1843.  
  1844.         Add.l   d1,Offey               
  1845.         Subi.w  #4,d1                  
  1846.         Bpl     Crusher_Calc_Ready     
  1847.  
  1848.         Move.w  d0,d1            
  1849.         Moveq.l #0,d0
  1850.         Bra     Crusher_Calc_Ready
  1851.  
  1852. No_Return_Up:          
  1853.         Tst.l   d0
  1854.         Bne     Not_Top_Pos
  1855.        
  1856.         Move.w  Game_Timer_A,d2
  1857.         Andi.w  #$7F,d2
  1858.         Cmpi.w  #$70,d2
  1859.         Blo     Crusher_Calc_Ready
  1860.  
  1861. Not_Top_Pos:           
  1862. ;       COLSIZE #120,#168,#112,#160
  1863.  
  1864.         Add.l   d0,Offey               
  1865.         Addi.w  #4,d0                  
  1866.        
  1867. Crusher_Calc_Ready:    
  1868.         Move.w  d0,(a3)+
  1869.         Move.w  d1,(a4)+
  1870.  
  1871.         Subi.l  #8,Offex
  1872.         Move.w  #115,Enemy_Frame
  1873.         Bsr     Draw_Bob
  1874.        
  1875.         Bra     All_Work_Over
  1876.  
  1877. *************************************************
  1878. *       $0A - Pendulum platform                 *
  1879. *************************************************
  1880. Type_11:
  1881.         Cmpi.w  #10,Cenmt
  1882.         Bne     Type_12
  1883.  
  1884.         ENSIZE  #20,#2,#$280,#$402,#36
  1885.         Move.w  #1,Cenmpfrm
  1886.  
  1887.         Lea     Velocities,a6
  1888.         Move.w  d7,d1
  1889.         Add.w   Estart,d1
  1890.        
  1891.         Mulu    #2,d1
  1892.         Move.w  0(a6,d1.w),d0
  1893.  
  1894.         Add.w   d0,-(a4)
  1895.        
  1896.         Cmpi.w  #180,(a4)
  1897.         Bhi     Dec_Velocity_B
  1898.  
  1899.         Addi.w  #1,d0
  1900.         Bra     No_Angle_Calc_B
  1901.  
  1902. Dec_Velocity_B:
  1903.         Subi.w  #1,d0
  1904.  
  1905. No_Angle_Calc_B:
  1906.         Move.w  d0,0(a6,d1.w)                  
  1907.  
  1908.         Move.w  (a4)+,Angle                    
  1909.         Move.w  Cenmvx,d6                      
  1910.         Move.w  #11,Enemy_Frame
  1911.         Move.w  #20,CSize
  1912.         Move.w  #62,Bob_Frame
  1913.         Bsr     Do_Pendulum
  1914.  
  1915.         Move.w  Angle,Dummy_Angle
  1916.         Move.w  d0,Dummy_Velocity
  1917.         Bsr     Get_Lift_Velocities
  1918.         Bsr     Velocity_Lifts
  1919.         Bra     Position_Work_Over
  1920.  
  1921. *************************************************
  1922. *       $0B - Dino spring                       *
  1923. *************************************************
  1924. Type_12:
  1925.         Cmpi.w  #11,Cenmt
  1926.         Bne     Type_13
  1927.  
  1928.         ENSIZE  #20,#2,#$280,#$402,#36
  1929.         Move.w  #228,Enemy_Frame
  1930.  
  1931.         Move.w  #66,Bob_Frame          
  1932.         Move.w  #16,CSize              
  1933.         Move.w  Cenmvx,d6              
  1934.         Move.w  #0,Angle
  1935.        
  1936.         Bsr     Do_Pendulum
  1937.  
  1938.         Move.w  #0,Dummy_Angle         
  1939.         Move.w  Cenmvy,Dummy_Velocity  
  1940.         Bsr     Get_Lift_Velocities
  1941.         Bsr     Velocity_Lifts
  1942.  
  1943.         Tst.w   Standpfrm
  1944.         Beq     Position_Work_Over     
  1945.  
  1946.         Cmp.w   Platform_Number,d7
  1947.         Bne     Position_Work_Over     
  1948.  
  1949.         Tst.w   Standpfrmon
  1950.         Bne     Position_Work_Over     
  1951.  
  1952.         Bra     Position_Work_Over     
  1953.  
  1954. *************************************************
  1955. *       $0C - Crumbling platforms               *
  1956. *************************************************
  1957. Type_13:
  1958.         Cmpi.w  #12,Cenmt
  1959.         Bne     Type_14
  1960.  
  1961.         ENSIZE  #10,#4,#$280,#$403,#34 
  1962.         Move.w  #2,Enemy_Frame
  1963.  
  1964.         Lea     Enemy_Anim,a6
  1965.         Move.w  Cenmvy,d5
  1966.         Lea     120(a6),a6
  1967.         Move.b  (a6,d5),d5
  1968.         Move.w  d5,Enemy_Frame
  1969.  
  1970.         Bsr     Give_Enemy_Offsets     
  1971.         Bsr     Draw_Bob               
  1972.  
  1973.         Move.w  Cenmvy,d0
  1974.         Move.w  d0,-(a4)
  1975.         Ext.l   d0
  1976.         Add.l   d0,-(a1)
  1977.         Move.l  (a1),Cenmy
  1978.  
  1979.         Clr.w   Cenmvx
  1980.         Bsr     Lifts
  1981.  
  1982.         Tst.w   Cenmvy
  1983.         Bne     Now_Go_On_Falling
  1984.  
  1985.         Tst.w   Standpfrm
  1986.         Beq     Position_Work_Over
  1987.        
  1988.         Cmp.w   Platform_Number,d7
  1989.         Bne     Position_Work_Over
  1990.        
  1991. Now_Go_On_Falling:
  1992.         Tst.w   -(a3)
  1993.         Beq     Platform_Fall_A
  1994.  
  1995.         Subi.w  #1,(a3)
  1996.         Suba.l  #2,a0
  1997.         Bra     Position_Work_Over     
  1998.  
  1999. Platform_Fall_A:
  2000.         Suba.l  #2,a0
  2001.         Addi.w  #1,(a4)
  2002.         Move.w  #3,(a3)
  2003.  
  2004.         Cmpi.w  #11,(a4)
  2005.         Bls     Position_Work_Over
  2006.  
  2007.         Move.w  #$FFFF,-(a2)
  2008.         Adda.l  #2,a2
  2009.         Bra     Position_Work_Over     
  2010.  
  2011. *************************************************
  2012. *       $0D - Rolling boulders                  *
  2013. *************************************************
  2014. Type_14:
  2015.         Cmpi.w  #13,Cenmt
  2016.         Bne     Type_15
  2017.  
  2018.         ENSIZE  #10,#4,#$500,#$803,#34
  2019.         COLSIZE #118,#170,#102,#154
  2020.         Move.w  #6,Hit_Vely
  2021.         Move.w  #5,Hit_Velx_Lt
  2022.         Move.w  #$FFFB,Hit_Velx_Rt
  2023.  
  2024.  
  2025.         Move.w  Flick_Ctr,Enemy_Frame
  2026.        
  2027.         Tst.b   d1
  2028.         Beq     Nothing_Beneath
  2029.  
  2030.         Cmpi.b  #1,d1
  2031.         Bne     Nothing_Beneath
  2032.        
  2033.         Cmpi.w  #$7FFF,Cenmvy
  2034.         Blo     Nothing_Beneath
  2035.        
  2036.         Neg.w   Cenmvy
  2037.         Ori.w   #%111,Cenmvy
  2038.        
  2039. Nothing_Beneath:
  2040.         Addi.w  #1,Cenmvy
  2041.  
  2042.         Bsr     Get_Enemy_Mpos
  2043.         Bsr     Check_Enemy_Tiles      
  2044.         Bsr     Give_Enemy_Offsets     
  2045.  
  2046.         Subi.l  #32,Offey
  2047.         Bsr     Draw_Bob               
  2048.         Bsr     Check_Coll
  2049.        
  2050.         Bra     Work_New_Position
  2051.  
  2052. *************************************************
  2053. *       $0E - Rotating lift                     *
  2054. *************************************************
  2055. Type_15:       
  2056.         Cmpi.w  #14,Cenmt
  2057.         Bne     Type_16
  2058.  
  2059.         ENSIZE  #20,#2,#$280,#$402,#36
  2060.         Move.w  #11,Enemy_Frame
  2061.  
  2062.         Lea     Angles,a6                      
  2063.         Move.w  d7,d1                  
  2064.         Add.w   Estart,d1
  2065.        
  2066.         Mulu    #2,d1                  
  2067.         Move.w  0(a6,d1.w),d0  
  2068.  
  2069.         Add.w   Cenmvy,d0              
  2070.  
  2071.         Cmpi.w  #360,d0                
  2072.         Blo     No_Revolution_C        
  2073.         Subi.w  #359,d0                
  2074.        
  2075. No_Revolution_C:
  2076.         Move.w  d0,0(a6,d1.w)  
  2077.  
  2078.         Move.w  #62,Bob_Frame  
  2079.         Move.w  #20,CSize              
  2080.         Move.w  Cenmvx,d6              
  2081.         Move.w  d0,Angle
  2082.        
  2083.         Bsr     Do_Pendulum
  2084.  
  2085.         Move.w  d0,Dummy_Angle 
  2086.         Move.w  Cenmvy,Dummy_Velocity  
  2087.         Bsr     Get_Lift_Velocities
  2088.         Bsr     Velocity_Lifts
  2089.         Bra     Position_Work_Over     
  2090.  
  2091. *************************************************
  2092. *       $10 - Lava flow                         *
  2093. *************************************************
  2094. Type_16:
  2095.         Cmpi.w  #15,Cenmt
  2096.         Bne     Type_17
  2097.  
  2098.         ENSIZE  #10,#4,#$280,#$403,#34
  2099.         COLSIZE #112,#170,#112,#160
  2100.  
  2101.         Move.w  #6,Hit_Vely
  2102.         Move.w  #$FFF9,Hit_Velx_Lt
  2103.         Move.w  #$FFF9,Hit_Velx_Rt
  2104.  
  2105.         Bsr     Give_Enemy_Offsets     
  2106.         Addi.l  #16,Offey      
  2107.         Addi.l  #16,Offex
  2108.  
  2109.         Clr.w   Cenmpfrm
  2110.         Move.w  Cenmvy,d2
  2111.  
  2112.         Cmpi.w  #1,-(a5)                ; Has lava already started flowing?
  2113.         Beq     Scroll_Lava             ; Yes
  2114.         Bhi     Lava_Frame_Update
  2115.        
  2116.         Move.l  Xmap,d0                 ; No, but can it start?
  2117.         Mulu    #32,d0
  2118.        
  2119.         Cmp.l   Cenmx,d0                ; No!
  2120.         Blo     Lava_Frame_Update
  2121.         Move.w  #1,(a5)                 ; Fry him!
  2122.        
  2123. Scroll_Lava:
  2124.         Addi.l  #4,-(a0)
  2125.         Subi.w  #4,-(a3)
  2126.         Bpl     Lava_Update
  2127.  
  2128.         Clr.w   (a3)
  2129.         Move.w  #2,(a5)
  2130.        
  2131. Lava_Update:   
  2132.         Move.l  (a0)+,Lava_Anim_X
  2133.         Move.l  Cenmy,Lava_Anim_Y
  2134.         Addi.l  #16,Lava_Anim_Y
  2135.         Adda.l  #2,a3
  2136.  
  2137. Lava_Frame_Update:     
  2138.         Lea     Enemy_Anim,a6
  2139.         Move.w  Enemy_Anim_Ctr,d5
  2140.         Lea     132(a6),a6
  2141.         Move.b  (a6,d5),d5
  2142.  
  2143. Lava_Loop:     
  2144.         Move.w  d5,Enemy_Frame
  2145.         Bsr     Draw_Bob
  2146.  
  2147.         Bsr     Check_Coll
  2148.         Subi.l  #32,Offex
  2149.         Move.w  #123,Enemy_Frame
  2150.         Bsr     Draw_Bob
  2151.  
  2152.         Addi.l  #16,Offex
  2153.         Subi.l  #16,Offey
  2154.         Dbra    d2,Lava_Loop
  2155.  
  2156. Do_No_Lava:
  2157.         Adda.l  #2,a5
  2158.         Bra     All_Work_Over
  2159.  
  2160. Type_17:
  2161. *************************************************
  2162. *       Explosion/Enemy Death                   *
  2163. *************************************************
  2164. Last_Type:
  2165.         Cmpi.w  #$FFFE,Cenmt
  2166.         Beq     Dying_Enemy
  2167.         Bsr     Dead_Enemy_Fire
  2168.         Bra     All_Work_Over
  2169.        
  2170. Dying_Enemy:
  2171.         ENSIZE  #10,#4,#$500,#$803,#34
  2172.        
  2173.         Move.w  -(a5),d0
  2174.         Addi.w  #1,d0
  2175.         Move.w  d0,(a5)+
  2176.  
  2177.         Lea     Enemy_Anim,a6
  2178.         Lea     48(a6),a6
  2179.         Move.b  (a6,d0),d1
  2180.         Ext.w   d1
  2181.         Move.w  d1,Enemy_Frame
  2182.  
  2183.         Bsr     Give_Enemy_Offsets     
  2184.         Bsr     Draw_Bob               
  2185.  
  2186.         Cmpi.w  #22,d0
  2187.         Bls     Dead_Enemy
  2188.         Move.w  #$FFFF,-(a2)
  2189.         Adda.l  #2,a2
  2190.        
  2191. Dead_Enemy:
  2192.         Bsr     Dead_Enemy_Fire
  2193.         Bra     All_Work_Over
  2194.  
  2195. *************************************************
  2196. *       Work Out New Enemy Postion              *
  2197. *************************************************
  2198. Work_New_Position:
  2199.         Move.w  Cenmvx,d0
  2200.         Move.w  d0,-(a3)
  2201.         Ext.l   d0
  2202.         Add.l   d0,-(a0)
  2203.  
  2204. Work_New_Position_Y:
  2205.         Move.w  Cenmvy,d0
  2206.         Move.w  d0,-(a4)
  2207.         Ext.l   d0
  2208.         Add.l   d0,-(a1)
  2209.  
  2210. *************************************************
  2211. *       Terminate Enemy Loop Here               *
  2212. *************************************************
  2213. Position_Work_Over:    
  2214.         Adda.l  #4,a0
  2215.         Adda.l  #4,a1
  2216.         Adda.l  #2,a3
  2217.         Adda.l  #2,a4
  2218.        
  2219. All_Work_Over: 
  2220.         Dbra    d7,Draw_Enemies
  2221.         Rts
  2222.  
  2223. *************************************************
  2224. *       Get Enemy Position Relative To Map      *
  2225. *************************************************
  2226. Get_Enemy_Mpos:
  2227.         Move.l  Cenmx,d0
  2228.         Divu    #32,d0
  2229.         Andi.l  #$ffff,d0      
  2230.  
  2231.         Cmp.l   Xmax,d0
  2232.         Bls     Not_GMX
  2233.         Move.l  Xmax,d0
  2234.  
  2235. Not_GMX:       
  2236.         Move.l  Cenmy,d1
  2237.         Divu    #32,d1
  2238.         Andi.l  #$ffff,d1
  2239.        
  2240.         Cmp.l   Ymax,d1
  2241.         Bls     Not_GMY
  2242.         Move.l  Ymax,d1
  2243.  
  2244. Not_GMY:       
  2245.         Mulu    Xmax,d1
  2246.         Add.l   d1,d0
  2247.        
  2248.         Moveq.l #0,d1
  2249.  
  2250.         Move.l  Map,a6
  2251.         Move.l  SMap,d2
  2252.  
  2253.         Lea     8(a6,d2.l),a6
  2254.         Move.b  0(a6,d0.l),d1
  2255.         Rts
  2256.  
  2257. *************************************************
  2258. *       Enemy firing logic                      *
  2259. *************************************************
  2260. Dead_Enemy_Fire:
  2261.         Movem.l d0-d6/a0-a4,-(SP)
  2262.         Lea     Fire_Toggle,a0
  2263.         Lea     Enemy_Fire_X,a1
  2264.         Lea     Enemy_Fire_Y,a2
  2265.         Lea     Enemy_Fire_VX,a3
  2266.         Lea     Enemy_Fire_VY,a4
  2267.  
  2268.         Move.l  d7,d2                   ; d7 -> d2
  2269.         Mulu    #2,d2                   ; d7 * 2
  2270.        
  2271.         Move.l  d7,d3                   ; d7 -> d3
  2272.         Mulu    #4,d3                   ; d7 * 4
  2273.  
  2274.         Cmpi.b  #1,0(a0,d7)
  2275.         Bne     Forget_Fire
  2276.        
  2277.         Move.w  0(a3,d2),d0             ; BVX
  2278.         Ext.l   d0
  2279.        
  2280.         Move.w  0(a4,d2),d1             ; BVY
  2281.         Ext.l   d1
  2282.  
  2283.         Add.l   d0,0(a1,d3)             ; BVX + BX
  2284.         Bmi     Forget_Fire             ; BX<0?
  2285.  
  2286.         Add.l   d1,0(a2,d3)             ; BVY + BY
  2287.         Bmi     Forget_Fire             ; BY<0?
  2288.  
  2289.         Move.l  0(a1,d3),Cenmx
  2290.         Move.l  0(a2,d3),Cenmy
  2291.         Bsr     Give_Enemy_Offsets
  2292.  
  2293.         Cmpi.l  #304,Offex
  2294.         Bhi     Forget_Fire
  2295.  
  2296.         Cmpi.l  #240,Offey
  2297.         Bhi     Forget_Fire
  2298.  
  2299.         ENSIZE  #20,#2,#$280,#$402,#36
  2300.         COLSIZE #136,#168,#114,#154     * Collision Size, Detection
  2301.        
  2302.         Move.w  #30,Enemy_Frame
  2303.         Move.w  Flick_Ctr,d0
  2304.         Add.w   d0,Enemy_Frame
  2305.  
  2306.         Bsr     Draw_Bob
  2307.         Bsr     Check_Coll
  2308.         Movem.l (SP)+,d0-d6/a0-a4
  2309.         Rts
  2310.  
  2311. Forget_Fire:
  2312.         Clr.b   0(a0,d7)
  2313.         Movem.l (SP)+,d0-d6/a0-a4      
  2314.         Rts
  2315.  
  2316. *************************************************
  2317. *       Enemy firing logic                      *
  2318. *************************************************
  2319. Enemy_Fire:
  2320.         Movem.l d0-d6/a0-a4,-(SP)
  2321.         Lea     Fire_Toggle,a0
  2322.         Lea     Enemy_Fire_X,a1
  2323.         Lea     Enemy_Fire_Y,a2
  2324.         Lea     Enemy_Fire_VX,a3
  2325.         Lea     Enemy_Fire_VY,a4
  2326.  
  2327.         Move.l  d7,d2           ; d7 -> d2
  2328.         Mulu    #2,d2           ; d7 * 2
  2329.        
  2330.         Move.l  d7,d3           ; d7 -> d3
  2331.         Mulu    #4,d3           ; d7 * 4
  2332.  
  2333.         Tst.b   0(a0,d7)
  2334.         Beq     No_Fire
  2335.  
  2336.         Cmpi.b  #1,0(a0,d7)
  2337.         Bhi     Going_To_Fire
  2338.        
  2339.         Move.w  0(a3,d2),d0     * BVX
  2340.         Ext.l   d0
  2341.        
  2342.         Move.w  0(a4,d2),d1     * BVY
  2343.         Ext.l   d1
  2344.  
  2345.         Add.l   d0,0(a1,d3)     * BVX + BX
  2346.         Bmi     Untoggle_Fire   * BX<0?
  2347.  
  2348.         Add.l   d1,0(a2,d3)     * BVY + BY
  2349.         Bmi     Untoggle_Fire   * BY<0?
  2350.  
  2351.         Move.l  0(a1,d3),Cenmx
  2352.         Move.l  0(a2,d3),Cenmy
  2353.         Bsr     Give_Enemy_Offsets
  2354.  
  2355.         Cmpi.l  #304,Offex
  2356.         Bhi     Untoggle_Fire
  2357.  
  2358.         Cmpi.l  #240,Offey
  2359.         Bhi     Untoggle_Fire
  2360.  
  2361.         ENSIZE  #20,#2,#$280,#$402,#36
  2362.         COLSIZE #136,#168,#114,#154     * Collision Size, Detection
  2363.        
  2364.         Move.w  #30,Enemy_Frame
  2365.         Move.w  Flick_Ctr,d0
  2366.         Add.w   d0,Enemy_Frame
  2367.  
  2368.         Bsr     Draw_Bob
  2369.         Bsr     Check_Coll
  2370.         Movem.l (SP)+,d0-d6/a0-a4
  2371.         Rts
  2372.        
  2373. No_Fire:
  2374.         Move.w  Game_Timer_A,d0
  2375.         Cmpi.b  #$F0,d0
  2376.         Blo     Untoggle_Fire
  2377.  
  2378.         Move.b  #10,0(a0,d7)   
  2379.  
  2380.         Move.l  Cenmx,d0
  2381.         Add.l   #8,d0
  2382.  
  2383.         Move.l  Cenmy,d1
  2384.         Add.l   #8,d1
  2385.  
  2386.         Move.l  d0,0(a1,d3)
  2387.         Move.l  d1,0(a2,d3)
  2388.        
  2389.         Move.w  Enemy_Fire_Dirx,0(a3,d2)
  2390.         Move.w  Enemy_Fire_Diry,0(a4,d2)
  2391.         Movem.l (SP)+,d0-d6/a0-a4
  2392.         Rts
  2393.  
  2394. Untoggle_Fire:
  2395.         Clr.b   0(a0,d7)
  2396.         Movem.l (SP)+,d0-d6/a0-a4      
  2397.         Rts
  2398.  
  2399. Going_To_Fire:
  2400.         Subi.b  #1,0(a0,d7)
  2401.         Move.b  #1,Enemy_Fire_Pause
  2402.         Movem.l (SP)+,d0-d6/a0-a4
  2403.         Rts
  2404.                
  2405. *************************************************
  2406. *       Useful helper for pendulums!            *
  2407. *************************************************
  2408. Get_Lift_Velocities:   
  2409.         Move.w  Cenmvx,d2
  2410.         Addi.w  #1,d2
  2411.         Move.w  Dummy_Angle,d0
  2412.         Add.w   Dummy_Velocity,d0
  2413.  
  2414.         SINE
  2415.  
  2416.         Muls.w  CSize,d1       
  2417.         Muls.w  d2,d1          
  2418.        
  2419.         Divs.w  #1000,d1       
  2420.         Ext.l   d1                     
  2421.         Add.l   (a0),d1        
  2422.         Sub.l   Cenmx,d1
  2423.         Move.w  d1,Cenmvx
  2424.  
  2425.         COSINE
  2426.  
  2427.         Muls.w  CSize,d1       
  2428.         Muls.w  d2,d1          
  2429.        
  2430.         Divs.w  #1000,d1       
  2431.         Ext.l   d1                     
  2432.         Add.l   (a1),d1        
  2433.         Sub.l   Cenmy,d1
  2434.         Move.w  d1,Cenmvy
  2435.         Rts
  2436.        
  2437. *************************************************
  2438. *       Handling for lifts                      *
  2439. *************************************************
  2440. Check_Lifts:
  2441.         Tst.w   Standpploop     * Number of lift segments
  2442.         Bne     Already_Found   * in d6 (32x32)
  2443.         Clr.w   Standpfrm      
  2444.                                                
  2445. Lift_Loop:
  2446.         Tst.w   Standpfrm
  2447.         Bne     Already_Found
  2448.  
  2449.         Bsr     Lifts  
  2450.         Addi.l  #32,Offex
  2451.         Dbra    d6,Lift_Loop   
  2452.  
  2453. Already_Found:
  2454.         Rts
  2455.  
  2456. *************************************************
  2457. *       Handling of pendulums                   *
  2458. *************************************************
  2459. Do_Pendulum:   
  2460.         Movem.l d0-d4,-(SP)
  2461.  
  2462.         Subq.l  #4,a0
  2463.         Subq.l  #4,a1
  2464.  
  2465.         Cmpi.w  #$FE98,Angle
  2466.         Blo     Angle_Ok_A
  2467.         Addi.w  #360,Angle
  2468.         Bra     Angle_Ok_B
  2469.  
  2470. Angle_Ok_A:
  2471.         Cmpi.w  #360,Angle
  2472.         Blo     Angle_Ok_B
  2473.         Subi.w  #360,Angle
  2474.  
  2475. Angle_Ok_B:    
  2476.         Move.w  Angle,d0
  2477.         Move.l  d6,Max_Segments
  2478.        
  2479.         SINE
  2480.         Move.w  d1,Sine_Read
  2481.  
  2482.         COSINE
  2483.         Move.w  d1,Cosine_Read
  2484.  
  2485. Pend_Loop:
  2486.         Move.l  Max_Segments,d5
  2487.         Sub.l   d6,d5
  2488.         Addi.l  #1,d5
  2489.        
  2490.         Move.w  Sine_Read,d2
  2491.         Move.w  Cosine_Read,d3
  2492.        
  2493.         Muls    CSize,d2                               
  2494.         Muls    d5,d2                                  
  2495.        
  2496.         Divs    #1000,d2                               
  2497.         Ext.l   d2                                             
  2498.         Add.l   (a0),d2                                
  2499.  
  2500.         Muls    CSize,d3                               
  2501.         Muls    d5,d3                                  
  2502.        
  2503.         Divs    #1000,d3                               
  2504.         Ext.l   d3                                             
  2505.         Add.l   (a1),d3                                
  2506.  
  2507.         Move.l  d2,Cenmx
  2508.         Move.l  d3,Cenmy
  2509.        
  2510.         Bsr     Give_Enemy_Offsets
  2511.  
  2512.         Cmp.b   Pend_Bob,d6                            
  2513.         Bne     Not_End                                        
  2514.        
  2515.         Move.l  Savecy,d2
  2516.         Subi.l  #8,Offex               
  2517.         Sub.l   d2,Offey
  2518.  
  2519.         ENSIZE  #10,#4,#$500,#$803,#34  
  2520.         Move.w  Bob_Frame,Enemy_Frame  
  2521.         Bsr     Draw_Bob
  2522.        
  2523.         ENSIZE  #20,#2,#$280,#$402,#36
  2524.         Move.w  #229,Enemy_Frame
  2525.  
  2526.         Dbra    d6,Pend_Loop
  2527.         Suba.l  #2,a3
  2528.         Suba.l  #2,a4
  2529.  
  2530.         Movem.l (SP)+,d0-d4
  2531.         Rts
  2532.        
  2533. Not_End:
  2534.         Bsr     Draw_Bob
  2535.         Dbra    d6,Pend_Loop
  2536.        
  2537.         Suba.l  #2,a3
  2538.         Suba.l  #2,a4
  2539.  
  2540.         Movem.l (SP)+,d0-d4
  2541.         Rts
  2542.  
  2543. *************************************************
  2544. *       Retrieve data from enemy bank           *
  2545. *************************************************
  2546. Ret_Enemy_Data:
  2547.         Movem.l d5/d7,-(SP)
  2548.         Move.w  #4,d5
  2549.         Sub.w   d7,d5
  2550.         Add.w   Estart,d5
  2551.         Mulu    #4,d5
  2552.        
  2553.         Lea     Enmdata,a6
  2554.         Lea     (a6,d5),a6
  2555.  
  2556.         Move.w  0(a6),d0
  2557.         Move.w  2(a6),d1
  2558.         Movem.l (SP)+,d5/d7
  2559.         Rts
  2560.  
  2561. Put_Enemy_Data:
  2562.         Movem.l d5/d7,-(SP)
  2563.         Move.w  #4,d5
  2564.         Sub.w   d7,d5
  2565.         Add.w   Estart,d5
  2566.         Mulu    #4,d5
  2567.        
  2568.         Lea     Enmdata,a6
  2569.         Lea     (a6,d5),a6
  2570.  
  2571.         Move.w  d0,0(a6)
  2572.         Move.w  d1,2(a6)
  2573.         Movem.l d5/d7,-(SP)
  2574.         Rts
  2575.  
  2576. *************************************************
  2577. *       Work out new platform position          *
  2578. *************************************************
  2579. Work_Early_Position:
  2580.         Move.l  d0,-(SP)
  2581.  
  2582.         Moveq.l #0,d0
  2583.         Move.w  Cenmvy,d0
  2584.         Move.w  d0,-(a4)
  2585.         Ext.l   d0
  2586.         Add.l   d0,-(a1)
  2587.         Move.l  (a1),Cenmy
  2588.  
  2589.         Moveq.l #0,d0
  2590.         Move.w  Cenmvx,d0
  2591.         Move.w  d0,-(a3)
  2592.         Ext.l   d0
  2593.         Add.l   d0,-(a0)
  2594.         Move.l  (a0),Cenmx
  2595.  
  2596.         Move.l  (SP)+,d0
  2597.         Rts
  2598.        
  2599. *************************************************
  2600. *       Check enemy direction tiles             *
  2601. *************************************************
  2602. Check_Enemy_Tiles:
  2603.         Cmpi.b  #$F0,d1
  2604.         Bhs     Check_Enemy_Tiles_B
  2605.         Rts
  2606.        
  2607. Check_Enemy_Tiles_B:
  2608.         Cmpi.b  #$F0,d1
  2609.         Bne     Enemy_Tile_2
  2610.         Move.w  #1,Cenmvx
  2611.         Move.w  #1,Cenmvy
  2612.         Rts
  2613.  
  2614. Enemy_Tile_2:
  2615.         Cmpi.b  #$F1,d1
  2616.         Bne     Enemy_Tile_3
  2617.         Move.w  #$FFFF,Cenmvx
  2618.         Move.w  #$FFFF,Cenmvy
  2619.         Rts
  2620.  
  2621. Enemy_Tile_3:
  2622.         Cmpi.b  #$F2,d1
  2623.         Bne     Enemy_Tile_4
  2624.         Move.w  #$FFFF,Cenmvx
  2625.         Move.w  #1,Cenmvy
  2626.         Rts
  2627.  
  2628. Enemy_Tile_4:
  2629.         Cmpi.b  #$F3,d1
  2630.         Bne     Enemy_Tile_5
  2631.         Move.w  #1,Cenmvx
  2632.         Move.w  #$FFFF,Cenmvy
  2633.         Rts
  2634.  
  2635. Enemy_Tile_5:
  2636.         Cmpi.b  #$F8,d1
  2637.         Bne     Enemy_Tile_6
  2638.         Move.w  #1,Cenmvx
  2639.         Clr.w   Cenmvy
  2640.         Rts
  2641.  
  2642. Enemy_Tile_6:
  2643.         Cmpi.b  #$F9,d1
  2644.         Bne     Enemy_Tile_7
  2645.         Move.w  #$FFFF,Cenmvx
  2646.         Clr.w   Cenmvy
  2647.         Rts
  2648.  
  2649. Enemy_Tile_7:
  2650.         Cmpi.b  #$FA,d1
  2651.         Bne     Enemy_Tile_8
  2652.         Move.w  #$FFFF,Cenmvy
  2653.         Clr.w   Cenmvx
  2654.         Rts
  2655.  
  2656. Enemy_Tile_8:
  2657.         Cmpi.b  #$FB,d1
  2658.         Bne     Enemy_Tile_9   
  2659.         Move.w  #1,Cenmvy
  2660.         Clr.w   Cenmvx
  2661.         Rts
  2662.        
  2663. Enemy_Tile_9:
  2664.         Cmpi.b  #$F4,d1
  2665.         Bne     Enemy_Tile_10
  2666.         Addi.w  #1,Cenmvx
  2667.         Addi.w  #1,Cenmvy
  2668.         Rts
  2669.  
  2670. Enemy_Tile_10:
  2671.         Cmpi.b  #$F5,d1
  2672.         Bne     Enemy_Tile_11
  2673.         Subi.w  #1,Cenmvx
  2674.         Subi.w  #1,Cenmvy
  2675.         Rts
  2676.  
  2677. Enemy_Tile_11:
  2678.         Cmpi.b  #$F6,d1
  2679.         Bne     Enemy_Tile_12
  2680.         Subi.w  #1,Cenmvx
  2681.         Addi.w  #1,Cenmvy
  2682.         Rts
  2683.  
  2684. Enemy_Tile_12:
  2685.         Cmpi.b  #$F7,d1
  2686.         Bne     Enemy_Tile_13
  2687.         Addi.w  #1,Cenmvx
  2688.         Subi.w  #1,Cenmvy
  2689.         Rts
  2690.  
  2691. Enemy_Tile_13:
  2692.         Cmpi.b  #$FC,d1
  2693.         Bne     Enemy_Tile_14
  2694.         Addi.w  #1,Cenmvx
  2695.         Rts
  2696.  
  2697. Enemy_Tile_14:
  2698.         Cmpi.b  #$FD,d1
  2699.         Bne     Enemy_Tile_15
  2700.         Subi.w  #1,Cenmvx
  2701.         Rts
  2702.  
  2703. Enemy_Tile_15:
  2704.         Cmpi.b  #$FE,d1
  2705.         Bne     Enemy_Tile_16
  2706.         Subi.w  #1,Cenmvy
  2707.         Rts
  2708.  
  2709. Enemy_Tile_16:
  2710.         Cmpi.b  #$FF,d1
  2711.         Bne     Enemy_Tile_17
  2712.         Addi.w  #1,Cenmvy
  2713.         Rts
  2714.        
  2715. Enemy_Tile_17:
  2716.         Rts    
  2717.  
  2718. *************************************************
  2719. *       Convert map coordinates to offsets from *
  2720. *       screen origin used for rendering        *
  2721. *************************************************
  2722. Give_Enemy_Offsets:
  2723.         Movem.l d0-d2,-(SP)
  2724.  
  2725.         Move.l  Cenmx,Offex
  2726.         Move.l  Cenmy,Offey
  2727.  
  2728.         Addi.l  #32,Offex
  2729.         Addi.l  #32,Offey
  2730.        
  2731.         Move.w  Xoff,d1
  2732.         Moveq.l #32,d2
  2733.         Sub.l   d1,d2
  2734.        
  2735.         Move.l  Xmap,d0
  2736.         Mulu    #32,d0
  2737.         Add.l   d2,d0
  2738.                
  2739.         Sub.l   d0,Offex
  2740.        
  2741.         Move.w  Yoff,d1
  2742.         Moveq.l #32,d2
  2743.         Sub.l   d1,d2
  2744.        
  2745.         Move.l  Ymap,d0
  2746.         Mulu    #32,d0
  2747.         Add.l   d2,d0
  2748.        
  2749.         Sub.l   d0,Offey       
  2750.  
  2751.         Movem.l (SP)+,d0-d2
  2752.         Rts
  2753.  
  2754. *************************************************
  2755. *       Check lifts                             *
  2756. *************************************************
  2757. Lifts:
  2758.         Movem.l d0-d7,-(SP)
  2759.         Tst.w   Standpploop
  2760.         Bne     Lift_Standing
  2761.  
  2762.         Clr.w   Standpfrm       ; Clear flag [player standing on lift]
  2763.         Clr.w   Platform_Number
  2764.  
  2765.         Move.w  Vely,d0
  2766.         Sub.w   Cenmvy,d0
  2767.         Addi.w  #96,d0
  2768.         Ext.l   d0
  2769.        
  2770.         Move.l  Offex,d1
  2771.         Move.l  Offey,d2
  2772.  
  2773.         Cmpi.l  #126,d1         ; True 112
  2774.         Blo     Off_Lift
  2775.        
  2776.         Cmpi.l  #158,d1         ; True 172
  2777.         Bhi     Off_Lift
  2778.        
  2779.         Cmp.l   d0,d2           ; True 96
  2780.         Blo     Off_Lift
  2781.        
  2782.         Cmpi.l  #160,d2         ; True 160
  2783.         Bhi     Off_Lift
  2784.        
  2785.         Tst.w   Cenmpfrm        ; Is this a lift?
  2786.         Beq     Off_Lift       
  2787.  
  2788.         Tst.w   Standpfrmon     ; Was player already standing on a lift?
  2789.         Bne     Now_Check_Coll 
  2790.  
  2791.         Tst.w   Vely   
  2792.         Beq     Now_Check_Coll
  2793.  
  2794.         Cmpi.w  #$7fff,Vely    
  2795.         Bls     Off_Lift        ; Try to avoid jittering seen in Zool lifts
  2796.  
  2797. Now_Check_Coll:
  2798.         Addi.l  #40,d0
  2799.         Cmp.l   d0,d2
  2800.         Blt     Off_Lift
  2801.  
  2802.         Move.w  #1,Standpploop
  2803.  
  2804.         Tst.w   Cenmvx
  2805.         Beq     Start_Cenmvy_Eval
  2806.  
  2807.         Move.w  Cenmvx,d0
  2808.         Neg.w   d0
  2809.        
  2810.         Cmpi.w  #$7FFF,d0
  2811.         Bhi     Cenmvx_Negative
  2812.  
  2813.         Add.w   d0,Xoff        
  2814.         Cmpi.w  #31,Xoff
  2815.         Bls     Start_Cenmvy_Eval
  2816.  
  2817.         Subi.w  #32,Xoff
  2818.         Subi.l  #1,Xmap
  2819.         Bra     Start_Cenmvy_Eval
  2820.        
  2821. Cenmvx_Negative:
  2822.         Neg.w   d0
  2823.         Sub.w   d0,Xoff        
  2824.         Bpl     Start_Cenmvy_Eval
  2825.  
  2826.         Addi.w  #32,Xoff
  2827.         Addi.l  #1,Xmap
  2828.  
  2829. Start_Cenmvy_Eval:
  2830.         Move.l  Cenmy,d0
  2831.         Addi.l  #1,d0
  2832.         Divu    #32,d0
  2833.         Move.w  d0,d1
  2834.         Subi.w  #4,d1
  2835.         Ext.l   d1
  2836.         Move.l  d1,Ymap
  2837.        
  2838.         Swap    d0
  2839.         Move.l  #32,d1
  2840.         Sub.w   d0,d1
  2841.  
  2842.         Move.w  d1,Yoff
  2843.        
  2844.         Move.w  Cenmvx,Momentum_X
  2845.         Neg.w   Momentum_X
  2846.  
  2847.         Move.w  Cenmvy,Momentum_Y
  2848.         Neg.w   Momentum_Y
  2849.  
  2850.         Clr.w   Left_Blocked
  2851.         Clr.w   Right_Blocked
  2852.         Clr.w   VChange
  2853.         Clr.w   AuxVelx
  2854.         Clr.w   AuxVely
  2855.         Clr.w   Surface
  2856.         Clr.w   Sidewalk
  2857.         Clr.b   Whoopie
  2858.         Clr.b   Ext_Whoopie
  2859.         Clr.w   Vely
  2860.         Clr.w   Jump
  2861.         Clr.b   Spring
  2862.         Clr.b   Spin
  2863.         Clr.w   Hit
  2864.  
  2865.         Move.w  d7,Platform_Number
  2866.         Move.w  #1,Standpfrm
  2867.         Move.w  #1,Standpfrmon
  2868.         Move.w  #1,Stand
  2869.  
  2870. Lift_Standing:
  2871.         Movem.l (SP)+,d0-d7
  2872.         Rts
  2873.  
  2874. Off_Lift:      
  2875.         Clr.w   Standpfrmon
  2876.         Movem.l (SP)+,d0-d7
  2877.         Rts
  2878.  
  2879. *************************************************
  2880. *       Player-lift interaction handling        *
  2881. *************************************************
  2882. Velocity_Lifts:
  2883.         Movem.l d0-d7,-(SP)
  2884.         Tst.w   Standpploop
  2885.         Bne     Lift_Standing_B
  2886.  
  2887.         Clr.w   Standpfrm       ; Clear flag [player standing on lift]
  2888.         Clr.w   Platform_Number
  2889.  
  2890.         Move.w  Vely,d0
  2891.         Sub.w   Cenmvy,d0
  2892.         Addi.w  #96,d0
  2893.         Ext.l   d0
  2894.        
  2895.         Move.l  Offex,d1
  2896.         Move.l  Offey,d2
  2897.  
  2898.         Cmpi.l  #126,d1         ; True 112
  2899.         Blo     Off_Lift_B
  2900.        
  2901.         Cmpi.l  #158,d1         ; True 172
  2902.         Bhi     Off_Lift_B
  2903.        
  2904.         Cmp.l   d0,d2           ; True 96
  2905.         Blo     Off_Lift_B
  2906.        
  2907.         Cmpi.l  #160,d2         ; True 160
  2908.         Bhi     Off_Lift_B
  2909.        
  2910.         Tst.w   Cenmpfrm       
  2911.         Beq     Off_Lift_B     
  2912.  
  2913.         Tst.w   Standpfrmon    
  2914.         Beq     Now_Check_Coll_B
  2915.  
  2916.         Tst.w   Vely   
  2917.         Beq     Now_Check_Coll_B
  2918.  
  2919.         Cmpi.w  #$7fff,Vely    
  2920.         Bls     Off_Lift_B             
  2921.  
  2922. Now_Check_Coll_B:
  2923.         Addi.l  #40,d0
  2924.         Cmp.l   d0,d2
  2925.         Blt     Off_Lift_B
  2926.  
  2927.         Move.w  #1,Standpploop
  2928.  
  2929.         Tst.w   Cenmvx
  2930.         Beq     Start_Cenmvy_Eval_B
  2931.  
  2932.         Move.w  Cenmvx,d0
  2933.         Neg.w   d0
  2934.        
  2935.         Cmpi.w  #$7FFF,d0
  2936.         Bhi     Cenmvx_Negative_B
  2937.  
  2938.         Add.w   d0,Xoff        
  2939.         Cmpi.w  #31,Xoff
  2940.         Bls     Start_Cenmvy_Eval_B
  2941.  
  2942.         Subi.w  #32,Xoff
  2943.         Subi.l  #1,Xmap
  2944.         Bra     Start_Cenmvy_Eval_B
  2945.        
  2946. Cenmvx_Negative_B:
  2947.         Neg.w   d0
  2948.         Sub.w   d0,Xoff        
  2949.         Bpl     Start_Cenmvy_Eval_B
  2950.  
  2951.         Addi.w  #32,Xoff
  2952.         Addi.l  #1,Xmap
  2953.  
  2954. Start_Cenmvy_Eval_B:
  2955.         Tst.w   Standpfrmon
  2956.         Bne     Velocity_Lift_Eval
  2957.  
  2958.         Move.l  Cenmy,d0
  2959.         Addi.l  #1,d0
  2960.         Divu    #32,d0
  2961.         Move.w  d0,d1
  2962.         Subi.w  #4,d1
  2963.         Ext.l   d1
  2964.         Move.l  d1,Ymap
  2965.        
  2966.         Swap    d0
  2967.         Move.l  #32,d1
  2968.         Sub.w   d0,d1
  2969.         Move.w  d1,Yoff
  2970.        
  2971. Velocity_Lift_Eval:    
  2972.         Move.w  Cenmvy,d0
  2973.         Neg.w   d0
  2974.        
  2975.         Cmpi.w  #$7FFF,d0
  2976.         Bhi     Cenmvy_Negative
  2977.  
  2978.         Add.w   d0,Yoff        
  2979.         Cmpi.w  #31,Yoff
  2980.         Bls     End_Velocity_Eval
  2981.  
  2982.         Subi.w  #32,Yoff
  2983.         Subi.l  #1,Ymap
  2984.         Bra     End_Velocity_Eval
  2985.  
  2986. Cenmvy_Negative:
  2987.         Neg.w   d0
  2988.         Sub.w   d0,Yoff        
  2989.         Bpl     End_Velocity_Eval
  2990.  
  2991.         Addi.w  #32,Yoff
  2992.         Addi.l  #1,Ymap
  2993.  
  2994. End_Velocity_Eval:
  2995.         Move.w  Cenmvx,Momentum_X
  2996.         Neg.w   Momentum_X
  2997.  
  2998.         Move.w  Cenmvy,Momentum_Y
  2999.         Neg.w   Momentum_Y
  3000.  
  3001.         Clr.w   Left_Blocked
  3002.         Clr.w   Right_Blocked
  3003.         Clr.w   VChange
  3004.         Clr.w   AuxVelx
  3005.         Clr.w   AuxVely
  3006.         Clr.w   Surface
  3007.         Clr.w   Sidewalk
  3008.         Clr.b   Whoopie
  3009.         Clr.b   Ext_Whoopie
  3010.         Clr.w   Vely
  3011.         Clr.w   Jump
  3012.         Clr.b   Spring
  3013.         Clr.b   Spin
  3014.         Clr.w   Hit
  3015.  
  3016.         Move.w  d7,Platform_Number
  3017.         Move.w  #1,Standpfrm
  3018.         Move.w  #1,Standpfrmon
  3019.         Move.w  #1,Stand
  3020.  
  3021. Lift_Standing_B:
  3022.         Movem.l (SP)+,d0-d7
  3023.         Rts
  3024.  
  3025. Off_Lift_B:    
  3026.         Clr.w   Standpfrmon
  3027.         Movem.l (SP)+,d0-d7
  3028.         Rts
  3029.  
  3030. *************************************************
  3031. *       Check collosion                         *
  3032. *************************************************
  3033. Check_Coll:
  3034.         Movem.l d0-d1,-(SP)
  3035.  
  3036.         Tst.b   Cover_Cat
  3037.         Bne     No_Coll
  3038.  
  3039.         Move.l  Offex,d0
  3040.         Move.l  Offey,d1
  3041.  
  3042.         Cmp.l   Coll_X1,d0      ; True 112      (32x32)
  3043.         Blo     No_Coll
  3044.        
  3045.         Cmp.l   Coll_X2,d0      ; True 172
  3046.         Bhi     No_Coll
  3047.        
  3048.         Cmp.l   Coll_Y1,d1      ; True 96
  3049.         Blo     No_Coll
  3050.        
  3051.         Cmp.l   Coll_Y2,d1      ; True 160
  3052.         Bhi     No_Coll
  3053.        
  3054.         Tst.w   Cenmpfrm       
  3055.         Bne     No_Coll
  3056.  
  3057.         Tst.b   Destructable
  3058.         Beq     Undestructable
  3059.        
  3060.         Tst.b   Slide
  3061.         Bne     Vely_Just_Right
  3062.  
  3063.         Tst.b   Spin
  3064.         Beq     Undestructable
  3065.  
  3066.         Cmpi.w  #$7FFF,Vely
  3067.         Bls     Vely_Just_Right
  3068.         Neg.w   Vely   
  3069.  
  3070. Vely_Just_Right:
  3071.         Clr.b   Destructable
  3072.         Addi.l  #100,Score
  3073.        
  3074.         Move.w  #$FFFE,-(a2)
  3075.         Move.w  #0,-(a3)
  3076.         Move.w  #0,-(a4)
  3077.         Move.w  #0,-(a5)
  3078.        
  3079.         Adda.l  #2,a2
  3080.         Adda.l  #2,a3
  3081.         Adda.l  #2,a4
  3082.         Adda.l  #2,a5
  3083.         Bra     No_Coll
  3084.  
  3085. Undestructable:
  3086.         Tst.w   Hit                             ; Check if player hit flag is set to avoid
  3087.         Bne     No_Coll                         ; going into a punishing hit loop
  3088.  
  3089.         Tst.b   Invulnerable
  3090.         Bne     No_Coll
  3091.  
  3092.         Move.w  #1,Hit                          ; Gotcha!
  3093.         Move.w  Hit_Vely,Cf_Hit_Vely
  3094.         Move.w  Hit_Velx_Lt,Cf_Hit_Velx_Lt
  3095.         Move.w  Hit_Velx_Rt,Cf_Hit_Velx_Rt
  3096.         Bra     No_Coll        
  3097.        
  3098. No_Coll:
  3099.         Movem.l (SP)+,d0-d1
  3100.         Rts
  3101.                
  3102. *************************************************
  3103. *       Draw a 32x32 blitter object on screen   *
  3104. *************************************************
  3105. Draw_Bob:
  3106.         Movem.l d0-d7,-(SP)
  3107.        
  3108.         Cmpi.l  #224,Offey      ; Check enemy against screen boundary
  3109.         Bhi     No_Enemies
  3110.  
  3111.         Cmpi.l  #288,Offex      ; Check enemy against screen boundary
  3112.         Bhi     No_Enemies
  3113.        
  3114. *************************************************
  3115. *       Draw enemy sprites on screen            *
  3116. *************************************************
  3117. Go_On_Enemies:
  3118.         Moveq.l #0,d0
  3119.         Moveq.l #0,d1
  3120.  
  3121.         Move.l  Enemies,Src
  3122.         Move.l  MKEnemies,SrcMask
  3123.         Move.l  Currbuffer,Dest
  3124.  
  3125.         Move.w  Enemy_Frame,d0
  3126.         Divu    NFrames,d0
  3127.         Move.w  d0,d1
  3128.         Swap    d0
  3129.  
  3130.         Andi.l  #$FFFF,d0
  3131.         Andi.l  #$FFFF,d1
  3132.  
  3133.         Mulu    XBytes,d0
  3134.         Mulu    YBytes,d1
  3135.  
  3136.         Add.w   d1,d0
  3137.        
  3138.         Add.l   d0,Src
  3139.         Add.l   d0,SrcMask
  3140.  
  3141.         Move.l  Offey,d0
  3142.         Mulu    #40,d0
  3143.  
  3144.         Move.l  Offex,d1
  3145.         Divu    #16,d1
  3146.         Swap    d1
  3147.         Move.w  d1,d2
  3148.         Swap    d1
  3149.         Andi.l  #$ffff,d1
  3150.         Mulu    #2,d1
  3151.  
  3152.         Move.w  Offx,d3
  3153.         Andi.w  #$F,d3
  3154.         Sub.w   d3,d2
  3155.  
  3156.         Bpl     Shift_All_Right
  3157.         Addi.w  #16,d2
  3158.         Subi.l  #2,d1
  3159.  
  3160.         Bpl     Shift_All_Right
  3161.         Moveq.l #0,d0
  3162.  
  3163. Shift_All_Right:
  3164.         Move.w  d2,Rten
  3165.  
  3166.         Add.l   d1,d0
  3167.         Add.l   d0,Dest
  3168.         Move.w  Enmsize,d3
  3169.         Move.w  Emod,d4
  3170.  
  3171.         BLITM   Src,Dest,d3,d4,d4,Rten,#$FFFF,#0,SrcMask
  3172.         Addi.l  #10240,Src
  3173.         Addi.l  #10240,Dest
  3174.         FBLITM  SrcMask,Src,Dest,d3
  3175.         Addi.l  #10240,Src
  3176.         Addi.l  #10240,Dest
  3177.         FBLITM  SrcMask,Src,Dest,d3
  3178.         Addi.l  #10240,Src
  3179.         Addi.l  #10240,Dest
  3180.         FBLITM  SrcMask,Src,Dest,d3
  3181.         Addi.l  #10240,Src
  3182.         Addi.l  #10240,Dest
  3183.         FBLITM  SrcMask,Src,Dest,d3
  3184.  
  3185. No_Enemies:    
  3186.         Movem.l (SP)+,d0-d7
  3187.         Rts
  3188.  
  3189. *************************************************
  3190. *       Determine angle of rotation of player   *
  3191. *************************************************
  3192. Rotate_Hero:
  3193.         Subi.w  #1,RDelay
  3194.         Bpl     No_Rotate_Hero
  3195.         Move.w  #8,RDelay
  3196.  
  3197.         Tst.w   Stand
  3198.         Beq     RCheck8
  3199.         Rts
  3200.  
  3201. RCheck8:       
  3202.         Cmpi.w  #8,FrDir
  3203.         Bne     RCheck7
  3204.         Move.w  #1,FrDir
  3205.         Rts
  3206.        
  3207. RCheck7:       
  3208.         Cmpi.w  #7,FrDir
  3209.         Bne     RCheck6
  3210.         Move.w  #8,FrDir
  3211.         Rts
  3212.        
  3213. RCheck6:               
  3214.         Cmpi.w  #6,FrDir
  3215.         Bne     RCheck5
  3216.         Move.w  #7,FrDir
  3217.         Rts
  3218.        
  3219. RCheck5:               
  3220.         Cmpi.w  #5,FrDir
  3221.         Bne     RCheck4
  3222.         Move.w  #6,FrDir
  3223.         Rts
  3224.        
  3225. RCheck4:               
  3226.         Cmpi.w  #4,FrDir
  3227.         Bne     RCheck3
  3228.         Move.w  #3,FrDir
  3229.         Rts
  3230.        
  3231. RCheck3:               
  3232.         Cmpi.w  #3,FrDir
  3233.         Bne     RCheck2
  3234.         Move.w  #2,FrDir
  3235.         Rts
  3236.        
  3237. RCheck2:               
  3238.         Cmpi.w  #2,FrDir
  3239.         Bne     No_Rotate_Hero
  3240.         Move.w  #1,FrDir
  3241. No_Rotate_Hero:
  3242.         Rts    
  3243.  
  3244. *************************************************
  3245. *       Update snow particles                   *
  3246. *************************************************
  3247. Snow_Routine:
  3248.         Move.w  Xoff,d5
  3249.         Andi.w  #%1111,d5
  3250.         Move.w  d5,Obx
  3251.         Move.w  #16,d5
  3252.         Sub.w   Obx,d5
  3253.         Move.w  d5,Obx
  3254.        
  3255.         Lea     Snowy,a1
  3256.         Lea     Snowx,a2
  3257.         Lea     Snows,a3
  3258.         Move.w  #19,d6
  3259.  
  3260. Snow_Loop:     
  3261.         Move.w  (a1),d4
  3262.         Move.w  (a3)+,d7
  3263.         Add.w   d7,d4
  3264.         Cmpi.w  #232,d4
  3265.         Blo     Snow_In_Range
  3266.         Moveq.w #32,d4
  3267.        
  3268. Snow_In_Range:
  3269.         Move.w  d4,(a1)+
  3270.         Move.w  (a2),d5
  3271.        
  3272.         Move.w  d5,(a2)+       
  3273.         Add.w   Obx,d5
  3274.        
  3275.         SPLOT   d5,d4,Currbuffer
  3276.         Dbra    d6,Snow_Loop
  3277.         Rts
  3278.  
  3279. *************************************************
  3280. *       Axes swap (X<->Y)                       *
  3281. *************************************************
  3282. Change_Vectors:
  3283.         Subi.w  #5,Surface     
  3284.         Bmi     No_Change
  3285.        
  3286.         Tst.w   Surface
  3287.         Bne     Loop_Surf2
  3288.  
  3289.         Cmpi.w  #$ffff,Velx
  3290.         Beq     Down_Right
  3291.        
  3292.         Subi.w  #1,LDelay
  3293.         Bpl     Loop_Del1
  3294.        
  3295.         Move.w  #2,LDelay
  3296.         Addi.w  #1,Velx
  3297.  
  3298.         Tst.w   Velx
  3299.         Bne     Loop_Del1
  3300.         Bra     Down_Right2
  3301.  
  3302. Down_Right:
  3303.         Move.w  #4,Velx
  3304.         Move.w  #8,NMCtr
  3305. Down_Right2:
  3306.         Move.w  #1,Jump
  3307.         Bra     No_Change
  3308.        
  3309. Loop_Del1:     
  3310.         Move.w  #1,VChange
  3311.         Move.w  Velx,AuxVelx
  3312.         Move.w  Vely,AuxVely
  3313.         Move.w  Velx,Vely
  3314.         Neg.w   Vely
  3315.         Clr.w   Velx
  3316.         Move.w  #1,Sidewalk
  3317.         Rts
  3318.  
  3319. Loop_Surf2:
  3320.         Cmpi.w  #1,Surface
  3321.         Bne     Loop_Surf3
  3322.        
  3323.         Move.w  Velx,d0
  3324.        
  3325.         Cmpi.w  #$7fff,d0
  3326.         Bls     Velx_Loop_Pos
  3327.         Neg.w   d0
  3328.  
  3329. Velx_Loop_Pos:
  3330.         Cmpi.w  #3,d0
  3331.         Bgt     Loop_Del2
  3332.  
  3333.         Move.w  #1,Jump
  3334.         Bra     No_Change
  3335.  
  3336. Loop_Del2:     
  3337.         Move.w  #1,VChange
  3338.         Move.w  Velx,AuxVelx
  3339.         Move.w  Vely,AuxVely
  3340.         Neg.w   Velx
  3341.         Move.w  #2,Sidewalk
  3342.         Rts
  3343.        
  3344. Loop_Surf3:    
  3345.         Cmpi.w  #2,Surface
  3346.         Bne     No_Change
  3347.        
  3348.         Cmpi.w  #1,Velx
  3349.         Beq     Down_Left
  3350.  
  3351.         Subi.w  #1,LDelay
  3352.         Bpl     Loop_Del3
  3353.        
  3354.         Move.w  #2,LDelay
  3355.         Subi.w  #1,Velx
  3356.        
  3357.         Tst.w   Velx
  3358.         Bne     Loop_Del3
  3359.        
  3360.         Bra     Down_Left2
  3361.  
  3362. Down_Left:
  3363.         Move.w  #$fffb,Velx    
  3364.         Move.w  #8,NMCtr
  3365.  
  3366. Down_Left2:
  3367.         Move.w  #1,Jump
  3368.         Bra     No_Change
  3369.  
  3370. Loop_Del3:     
  3371.         Move.w  #1,VChange
  3372.         Move.w  Velx,AuxVelx
  3373.         Move.w  Vely,AuxVely
  3374.         Move.w  Velx,Vely
  3375.         Clr.w   Velx
  3376.         Move.w  #3,Sidewalk
  3377.         Rts
  3378.  
  3379. No_Change:     
  3380.         Clr.w   VChange
  3381.         Clr.w   Sidewalk
  3382.         Rts
  3383.  
  3384. *************************************************
  3385. *       Increase velocity                       *
  3386. *************************************************      
  3387. Increase_Vel:
  3388.         Tst.w   Inc_Vel
  3389.         Beq     Ret_Loop
  3390.  
  3391.         Clr.b   Slide
  3392.         Subi.w  #1,Inc_Vel
  3393.         Tst.w   Dir
  3394.         Beq     Add_Left
  3395.        
  3396.         Move.w  Velx,d0
  3397.         Neg.w   d0
  3398.         Cmpi.w  #12,d0
  3399.         Bgt     Ret_Loop
  3400.         Subi.w  #1,Velx
  3401.         Rts
  3402.                
  3403. Add_Left:
  3404.         Cmpi.w  #12,Velx
  3405.         Bgt     Ret_Loop       
  3406.         Addi.w  #1,Velx
  3407.  
  3408. Ret_Loop:      
  3409.         Rts
  3410.  
  3411. *************************************************
  3412. *       Restore forces                          *
  3413. *************************************************
  3414. Restore_Vectors:
  3415.         Tst.w   NVChange
  3416.         Bne     No_Restoration
  3417.  
  3418.         Tst.w   VChange
  3419.         Beq     No_Restoration
  3420.  
  3421.         Move.w  AuxVelx,Velx
  3422.         Move.w  AuxVely,Vely
  3423.  
  3424. No_Restoration:
  3425.         Clr.w   VChange
  3426.         Rts    
  3427.  
  3428. *************************************************
  3429. *       Decrease NM counters                    *
  3430. *************************************************
  3431. Dec_NMCtr:
  3432.         Tst.w   NMCtr
  3433.         Beq     Dec_NMCtr2
  3434.         Subi.w  #1,NMCtr
  3435.        
  3436. Dec_NMCtr2:    
  3437.         Tst.w   NMCtr2
  3438.         Beq     Dec_NMCtr3
  3439.         Subi.w  #1,NMCtr2
  3440.         Rts
  3441.                
  3442. Dec_NMCtr3:    
  3443.         Clr.w   IJump
  3444.         Rts
  3445.  
  3446. *************************************************
  3447. *       Parallax scrolling                      *
  3448. *************************************************
  3449. Calc_Parallax:
  3450.         Tst.w   Velx
  3451.         Bne     PScroll
  3452.         Rts
  3453. PScroll:
  3454.         Tst.w   Fdir
  3455.         Bne     PRight
  3456.         Move.w  Velx,d0
  3457.         Sub.w   d0,PShift
  3458.         Divs    #2,d0          
  3459.         Add.w   d0,PShift
  3460.         Andi.w  #%1111,PShift
  3461.         Rts
  3462. PRight:        
  3463.         Move.w  Velx,d0
  3464.         Neg.w   d0
  3465.         Add.w   d0,PShift
  3466.         Divs    #2,d0
  3467.         Sub.w   d0,PShift
  3468.         Andi.w  #%1111,PShift
  3469.         Rts
  3470.  
  3471. *************************************************
  3472. *       Work out diagonal surface stuff         *
  3473. *************************************************
  3474. Diagonal_Stuff:
  3475.  
  3476.         Tst.w   Stand
  3477.         Beq     Surf1
  3478.  
  3479.         Cmpi.w  #4,Surface
  3480.         Bgt     DCheck_Over
  3481.  
  3482.         Move.w  #2,Yjump
  3483.         Clr.w   Xjump
  3484.  
  3485. Surf1:
  3486.         Cmpi.w  #1,Surface
  3487.         Bne     Surf2
  3488.        
  3489.         Move.w  #$fffe,Xjump
  3490.         Move.w  #2,Yjump
  3491.        
  3492.         Tst.w   Velx
  3493.         Beq     DCheck_Over
  3494.  
  3495.         Tst.w   Fdir
  3496.         Bne     Go_Down1
  3497.         Cmpi.w  #2,Velx
  3498.         Bls     DCheck_Over
  3499.  
  3500. Go_Down1:
  3501.         Subi.w  #1,SDelay
  3502.         Bpl     DCheck_Over
  3503.         Move.w  #2,SDelay
  3504.         Subi.w  #1,Velx
  3505.         Rts
  3506.  
  3507. Surf2:
  3508.         Cmpi.w  #2,Surface
  3509.         Bne     Surf3
  3510.  
  3511.         Move.w  #2,Xjump
  3512.         Move.w  #2,Yjump
  3513.        
  3514.         Tst.w   Velx
  3515.         Beq     DCheck_Over
  3516.  
  3517.         Tst.w   Fdir
  3518.         Beq     Go_Down2
  3519.         Cmpi.w  #$FFFE,Velx
  3520.         Bhs     DCheck_Over
  3521.  
  3522. Go_Down2:
  3523.         Subi.w  #1,SDelay
  3524.         Bpl     DCheck_Over
  3525.         Move.w  #2,SDelay
  3526.         Addi.w  #1,Velx
  3527.         Rts
  3528.  
  3529. Surf3:
  3530.         Cmpi.w  #3,Surface
  3531.         Bne     Surf4
  3532.        
  3533.         Move.w  #$ffff,Xjump
  3534.         Move.w  #2,Yjump
  3535.  
  3536.         Tst.w   Velx
  3537.         Beq     DCheck_Over
  3538.  
  3539.         Tst.w   Fdir
  3540.         Bne     Go_Down3
  3541.         Cmpi.w  #5,Velx
  3542.         Bls     DCheck_Over
  3543.  
  3544. Go_Down3:
  3545.         Subi.w  #1,SDelay
  3546.         Bpl     DCheck_Over
  3547.         Move.w  #4,SDelay
  3548.         Subi.w  #1,Velx
  3549.         Rts
  3550.  
  3551. Surf4:
  3552.         Cmpi.w  #4,Surface
  3553.         Bne     DCheck_Over
  3554.  
  3555.         Move.w  #1,Xjump
  3556.         Move.w  #2,Yjump
  3557.  
  3558.         Tst.w   Velx
  3559.         Beq     DCheck_Over
  3560.  
  3561.         Tst.w   Fdir
  3562.         Beq     Go_Down4
  3563.         Cmpi.w  #$FFFB,Velx
  3564.         Bhs     DCheck_Over
  3565.  
  3566. Go_Down4:
  3567.         Subi.w  #1,SDelay
  3568.         Bpl     DCheck_Over
  3569.         Move.w  #4,SDelay
  3570.         Addi.w  #1,Velx
  3571.         Rts    
  3572.  
  3573. DCheck_Over:
  3574.         Tst.w   Surface
  3575.         Bne     Surfset
  3576.         Tst.w   Velx
  3577.         Bne     Surfset
  3578.         Cmpi.w  #4,XDelay
  3579.         Bls     Surfset
  3580.         Move.w  #4,XDelay
  3581. Surfset:       
  3582.         Rts    
  3583.        
  3584. *************************************************
  3585. *       Get final velocity of player            *
  3586. *************************************************
  3587. Get_Final_Velocity:
  3588.         Move.w  Velx,d0
  3589.         Tst.w   d0
  3590.         Beq     Still_Vel
  3591.  
  3592.         Clr.w   Left_Blocked
  3593.         Clr.w   Right_Blocked
  3594.  
  3595.         Cmpi.w  #$7FFF,d0
  3596.         Bhs     Right_Vel      
  3597.         Clr.w   Fdir
  3598.         Rts
  3599.  
  3600. Right_Vel:     
  3601.         Move.w  #1,Fdir
  3602. Still_Vel:     
  3603.         Rts
  3604.  
  3605. *************************************************
  3606. *       Check if player is braking              *
  3607. *************************************************
  3608. Check_Brake:
  3609.         Tst.w   Stand
  3610.         Beq     Stop_Brake
  3611.        
  3612.         Tst.w   Sidewalk
  3613.         Bne     Stop_Brake
  3614.        
  3615.         Tst.w   Velx
  3616.         Beq     Stop_Brake
  3617.        
  3618.         Tst.b   Braking
  3619.         Bne     Brake_Mate
  3620.        
  3621.         Move.w  Velx,d0
  3622.         Tst.w   Fdir
  3623.         Beq     Bleft
  3624.         Neg.w   d0
  3625. Bleft:         
  3626.         Andi.w  #%11111,d0
  3627.         Cmpi.w  #3,d0
  3628.         Bhs     Brake_Mate
  3629.         Clr.b   Braking
  3630.         Rts
  3631.  
  3632. Brake_Mate:    
  3633.         Tst.w   Fdir
  3634.         Bne     Right_Brake
  3635.         Cmpi.w  #2,XMotion
  3636.         Bne     No_Brake
  3637.         Move.b  #1,Braking
  3638.         Rts
  3639.  
  3640. Right_Brake:   
  3641.         Cmpi.w  #1,XMotion
  3642.         Bne     No_Brake
  3643.         Move.b  #2,Braking
  3644.         Rts
  3645.  
  3646. Stop_Brake:
  3647.         Clr.b   Braking
  3648. No_Brake:
  3649.         Rts
  3650.  
  3651. *************************************************
  3652. *       X Control Check                         *
  3653. *************************************************
  3654. Check_Horizontal_Controls:
  3655.         Clr.w   XMotion
  3656.  
  3657.         Move.w  Joydat,d6
  3658.         Btst    #9,d6                   ; Input = left?
  3659.         Beq     Check_Right                    
  3660.  
  3661.         Cmpi.b  #1,Braking
  3662.         Bne     Brake_Ok1
  3663.         Clr.b   Braking
  3664.        
  3665. Brake_Ok1:     
  3666.  
  3667.         Cmpi.w  #1,Fdir                 ; Looking right?
  3668.         Beq     Brake_Left                     
  3669.  
  3670.         Cmpi.w  #10,Velx                ; If player velocity < 10,
  3671.         Bhs     Max_Left                ; we can move faster
  3672.  
  3673. No_Maxleft:    
  3674.         Tst.w   Left_Blocked
  3675.         Bne     Max_Left
  3676.  
  3677.         Subi.w  #1,XDelay               ; Decrease delay
  3678.         Bpl     Max_Left               
  3679.  
  3680. Left_Delay:
  3681.         Lea     XDelay_Vals,a0          ; Set new delay
  3682.         Bsr     Get_XDelay_Value       
  3683.         Move.w  d1,XDelay
  3684.         Addi.w  #1,Velx                
  3685.  
  3686. Max_Left:
  3687.         Move.w  #1,XMotion
  3688.         Clr.w   Dir
  3689.         Rts
  3690.  
  3691. Brake_Left:
  3692.         Subi.w  #4,XDelay
  3693.         Bpl     No_Maxleft
  3694.         Bra     Left_Delay     
  3695.  
  3696. Check_Right:
  3697.         Move.w  Joydat,d6
  3698.         Btst    #1,d6                   ; Input = right?
  3699.         Beq     XCheck_Over                    
  3700.  
  3701.         Cmpi.b  #2,Braking
  3702.         Bne     Brake_Ok2
  3703.         Clr.b   Braking
  3704.  
  3705. Brake_Ok2:     
  3706.         Tst.w   Fdir                    ; Looking left?
  3707.         Beq     Brake_Right                    
  3708.        
  3709.         Tst.w   Velx
  3710.         Beq     No_Maxright
  3711.  
  3712.         Cmpi.w  #$FFF5,Velx            
  3713.         Bls     Max_Right
  3714.  
  3715. No_Maxright:   
  3716.         Tst.w   Right_Blocked
  3717.         Bne     Max_Right
  3718.  
  3719.         Subi.w  #1,XDelay              
  3720.         Bpl     Max_Right
  3721.        
  3722. Right_Delay:
  3723.         Lea     XDelay_Vals,a0         
  3724.         Bsr     Get_XDelay_Value       
  3725.         Move.w  d1,XDelay
  3726.         Subi.w  #1,Velx                
  3727.  
  3728. Max_Right:
  3729.         Move.w  #2,XMotion             
  3730.         Move.w  #1,Dir
  3731.  
  3732. XCheck_Over:                           
  3733.         Rts
  3734.        
  3735. Brake_Right:
  3736.         Subi.w  #4,XDelay
  3737.         Bpl     No_Maxright
  3738.         Bra     Right_Delay
  3739.  
  3740. *************************************************
  3741. *       Check vertical controls                 *
  3742. *************************************************
  3743. Check_Vertical_Controls:       
  3744.         Tst.w   NJump
  3745.         Bne     Check_Down
  3746.        
  3747.         Tst.b   Crouch
  3748.         Bne     Check_Down
  3749.        
  3750.         Tst.w   Inc_Vel
  3751.         Bne     Check_Down
  3752.  
  3753.         Btst    #$7,Mousekey           
  3754.         Bne     Check_Down             
  3755.  
  3756.         Tst.w   Power
  3757.         Bne     Contjump
  3758.  
  3759.         Tst.w   Stand                  
  3760.         Beq     Check_Down
  3761.                
  3762.         Tst.w   Jump
  3763.         Bne     Check_Down     
  3764.  
  3765.         Tst.w   Standpfrm
  3766.         Beq     No_Lift_Stand
  3767.  
  3768.         Move.w  Momentum_Y,d3           ; If currently standing on
  3769.         Ext.l   d3                      ; a moving platform, then
  3770.                                         ; transfer momentum into jump
  3771.         Move.w  Momentum_X,d2
  3772.         Ext.l   d2
  3773.         Bra     Lift_Stand
  3774.  
  3775. No_Lift_Stand:                                 
  3776.         Moveq.l #0,d2                  
  3777.         Moveq.l #0,d3
  3778.        
  3779. Lift_Stand:    
  3780.         Cmpi.w  #5,Surface
  3781.         Bhs     Do_XJump
  3782.  
  3783.         Move.w  Xjump,d0
  3784.         Muls    #6,d0
  3785.         Andi.l  #$FFFF,d0
  3786.        
  3787.         Tst.w   Velx
  3788.         Beq     Do_XJump
  3789.        
  3790.         Cmpi.w  #$7FFF,Velx
  3791.         Bls     Velx_Jump_Pos
  3792.  
  3793.         Cmp.w   Velx,d0
  3794.         Blo     Do_XJump
  3795.        
  3796.         Clr.w   Xjump
  3797.         Bra     Do_XJump
  3798.        
  3799. Velx_Jump_Pos:
  3800.         Cmp.w   Velx,d0
  3801.         Bhi     Do_XJump
  3802.        
  3803.         Clr.w   Xjump
  3804.  
  3805. Do_XJump:
  3806.         Move.w  Xjump,d0
  3807.         Muls    #4,d0                  
  3808.  
  3809.         Cmpi.w  #5,Surface
  3810.         Blo     Add_Not_Move
  3811.        
  3812.         Move.w  d0,Velx
  3813.         Bra     Now_Y_Component
  3814.  
  3815. Add_Not_Move:  
  3816.         Add.w   d0,Velx
  3817.  
  3818. Now_Y_Component:
  3819.         Add.w   d2,Velx
  3820.        
  3821.         Move.w  Yjump,d0
  3822.         Muls    #6,d0
  3823.         Andi.l  #$FFFF,d0
  3824.        
  3825.         Tst.w   Vely
  3826.         Beq     Do_YJump
  3827.        
  3828.         Cmpi.w  #$7FFF,Vely
  3829.         Bls     Vely_Jump_Pos
  3830.  
  3831.         Cmp.w   Vely,d0
  3832.         Blo     Do_YJump
  3833.        
  3834.         Clr.w   Yjump
  3835.         Bra     Do_YJump
  3836.        
  3837. Vely_Jump_Pos:
  3838.         Cmp.w   Vely,d0
  3839.         Bhi     Do_YJump
  3840.        
  3841.         Clr.w   Yjump
  3842.  
  3843. Do_YJump:
  3844.         Move.w  Yjump,d0
  3845.         Muls    #4,d0                  
  3846.         Add.w   d0,Vely
  3847.         Add.w   d3,Vely
  3848.        
  3849.         Move.w  #1,Jump
  3850.         Move.w  #1,IJump
  3851.         Move.w  #2,NMCtr2
  3852.         Move.b  #1,Spin
  3853.  
  3854.         Clr.w   VChange
  3855.         Clr.w   AuxVelx
  3856.         Clr.w   AuxVely
  3857.  
  3858.         Clr.w   Standpfrmon
  3859.         Clr.w   Standpfrm
  3860.         Clr.w   Stand
  3861.         Clr.w   Surface
  3862.         Clr.w   Sidewalk
  3863.         Clr.w   Momentum_X
  3864.         Clr.w   Momentum_Y
  3865.         Clr.b   Dino_Platform
  3866.  
  3867. Contjump:
  3868.         Move.w  Power,d0
  3869.        
  3870.         Cmp.w   Max_Jump,d0
  3871.         Bhi     Check_Down
  3872.        
  3873.         Addi.w  #1,Power
  3874.  
  3875.         Move.w  Yjump,d0
  3876.         Add.w   d0,Vely
  3877.        
  3878.         Move.w  Xjump,d0
  3879.         Add.w   d0,Velx
  3880.         Rts
  3881.        
  3882. Check_Down:    
  3883.         Clr.w   Power
  3884.         Clr.b   Crouch
  3885.         Clr.b   Slide
  3886.        
  3887.         Btst    #1,d6
  3888.         Seq.b   Jdown1
  3889.         Btst    #0,d6
  3890.         Seq.b   Jdown2
  3891.        
  3892.         Clr.b   d0
  3893.         Move.b  Jdown2,d0
  3894.        
  3895.         Cmp.b   Jdown1,d0
  3896.         Beq     YCheck_Over             ; Pushing joystick down when jumping
  3897.  
  3898.         Tst.w   Stand                  
  3899.         Beq     No_Crouch              
  3900.  
  3901.         Tst.w   Velx
  3902.         Bne     Blaze_Slide
  3903.        
  3904.         Move.b  #1,Crouch
  3905.         Move.w  #50,CtrDelay
  3906.  
  3907.         Btst    #$7,Mousekey           
  3908.         Bne     YCheck_Over
  3909.        
  3910.         Move.w  #20,NMCtr
  3911.         Move.w  #20,Inc_Vel
  3912.         Rts
  3913.  
  3914. No_Crouch:
  3915.         Tst.w   Stand
  3916.         Bne     YCheck_Over
  3917.  
  3918.         Tst.w   Standpfrmon
  3919.         Bne     YCheck_Over
  3920.        
  3921.         Subi.w  #1,Vely                
  3922. YCheck_Over:
  3923.         Rts
  3924.        
  3925. Blaze_Slide:
  3926.         Tst.w   XMotion
  3927.         Bne     YCheck_Over
  3928.         Move.b  #1,Slide
  3929.         Rts
  3930.        
  3931. *************************************************
  3932. *       X Control Evaluation                    *
  3933. *************************************************
  3934. Horizontal_Evaluation:
  3935.         Tst.w   Velx
  3936.         Bne     In_Limit0
  3937.         Clr.b   Braking
  3938.         Bra     XEval_Over
  3939.  
  3940. In_Limit0:
  3941.         Move.w  Velx,d0
  3942.         Cmpi.w  #$7FFF,d0
  3943.         Bhi     Velx_Negative
  3944.  
  3945.         Cmpi.w  #31,Velx
  3946.         Bls     In_Limit1
  3947.         Move.w  #31,Velx
  3948.        
  3949. In_Limit1:     
  3950.         Cmpi.w  #1,XMotion
  3951.         Beq     No_MoveX1
  3952.        
  3953.         Subi.w  #1,BDelay
  3954.         Bpl     No_MoveX1
  3955.         Move.w  #4,BDelay
  3956.         Subi.w  #1,Velx        
  3957.         Move.w  Velx,d0
  3958.  
  3959. No_MoveX1:     
  3960.         Add.w   d0,Xoff        
  3961.         Cmpi.w  #31,Xoff
  3962.         Bls     XEval_Over
  3963.  
  3964.         Subi.w  #32,Xoff
  3965.         Subi.l  #1,Xmap
  3966.         Bpl     XEval_Over
  3967.  
  3968.         Clr.w   Velx
  3969.         Move.l  #0,Xmap
  3970.         Move.w  #31,Xoff
  3971.         Bra     XEval_Over
  3972.        
  3973. Velx_Negative:
  3974.         Cmpi.w  #$FFE1,Velx
  3975.         Bhs     In_Limit2
  3976.         Move.w  #$FFE1,Velx
  3977.  
  3978. In_Limit2:     
  3979.         Move.w  Velx,d0
  3980.         Neg.w   d0
  3981.  
  3982.         Cmpi.w  #2,XMotion      ; Left->right force?
  3983.         Beq     No_MoveX2       ; Yeah!
  3984.  
  3985.         Subi.w  #1,BDelay
  3986.         Bpl     No_MoveX2
  3987.         Move.w  #4,BDelay
  3988.         Addi.w  #1,Velx         ; Slow down
  3989.  
  3990. No_MoveX2:     
  3991.         Sub.w   d0,Xoff        
  3992.         Bpl     XEval_Over
  3993.  
  3994.         Addi.w  #32,Xoff
  3995.         Addi.l  #1,Xmap
  3996. XEval_Over:
  3997.         Rts
  3998.  
  3999. *************************************************
  4000. *       Evaluate vertical control               *
  4001. *************************************************
  4002. Vertical_Evaluation:
  4003.         Tst.w   Stand
  4004.         Bne     Touch_Ground
  4005.        
  4006.         Tst.w   Momentum_X
  4007.         Bne     Give_Mom
  4008.  
  4009.         Tst.w   Momentum_Y
  4010.         Bne     Give_Mom
  4011.  
  4012.         Bra     No_Mom
  4013.  
  4014. Give_Mom:
  4015.         Move.w  Momentum_X,d0
  4016.         Ext.l   d0
  4017.         Add.w   d0,Velx
  4018.  
  4019.         Move.w  Momentum_Y,d0
  4020.         Ext.l   d0
  4021.         Add.w   d0,Vely
  4022.  
  4023.         Move.w  #1,Jump
  4024.         Move.w  #1,IJump
  4025.         Move.w  #1,NMCtr2
  4026.  
  4027.         Clr.w   Momentum_X
  4028.         Clr.w   Momentum_Y
  4029.  
  4030. No_Mom:
  4031.         Subi.w  #1,Vely
  4032.         Clr.b   Dino_Platform
  4033.         Clr.w   Standpfrmon
  4034.         Clr.w   Standpfrm
  4035.         Clr.w   Stand
  4036.         Clr.w   Surface
  4037.         Clr.w   Sidewalk
  4038.         Clr.w   Left_Blocked
  4039.         Clr.w   Right_Blocked
  4040.        
  4041. Touch_Ground:  
  4042.         Move.w  Vely,d0
  4043.         Cmpi.w  #$7FFF,d0
  4044.         Bhi     Vely_Negative
  4045.  
  4046.         Move.w  Vely,d0        
  4047.         Cmpi.w  #31,d0
  4048.         Ble.s   In_Range1
  4049.         Move.w  #31,Vely
  4050.         Move.w  #31,d0
  4051.  
  4052. In_Range1:     
  4053.         Add.w   d0,Yoff
  4054.         Cmpi.w  #31,Yoff
  4055.         Bls     YEval_Over
  4056.  
  4057.         Subi.w  #32,Yoff
  4058.         Subi.l  #1,Ymap
  4059.         Bpl     YEval_Over
  4060.  
  4061.         Move.l  #0,Ymap
  4062.         Move.w  #31,Yoff
  4063.         Bra     YEval_Over
  4064.  
  4065. Vely_Negative:
  4066.         Move.w  Vely,d0
  4067.         Neg.w   d0
  4068.         Cmpi.w  #19,d0
  4069.         Ble.s   In_Range2
  4070.         Move.w  #$FFED,Vely             ; (-19) Terminal velocity
  4071.         Move.w  #19,d0
  4072.  
  4073. In_Range2:     
  4074.         Sub.w   d0,Yoff
  4075.         Bpl     YEval_Over
  4076.  
  4077.         Addi.w  #32,Yoff
  4078.         Addi.l  #1,Ymap
  4079. YEval_Over:
  4080.         Rts
  4081.  
  4082. *************************************************
  4083. *       Set player direction                    *
  4084. *************************************************
  4085. Eval_Dir:
  4086.         Clr.b   Super_Run
  4087.  
  4088.         Cmp.w   #1,FrDir
  4089.         Bne     Sfrm2
  4090.         Clr.w   YFlip
  4091.         Clr.w   Surfframe
  4092.         Bra     Check_Super_Run
  4093.        
  4094. Sfrm2:
  4095.         Cmpi.w  #2,FrDir
  4096.         Bne     Sfrm3
  4097.         Clr.w   YFlip
  4098.         Move.w  #12,Surfframe
  4099.         Rts
  4100.        
  4101. Sfrm3:
  4102.         Cmpi.w  #3,FrDir
  4103.         Bne     Sfrm4
  4104.         Tst.w   Dir
  4105.         Bne     No_Flip_62
  4106.         Move.w  #1,YFlip
  4107.         Move.w  #1,XORFrame
  4108. No_Flip_62:
  4109.         Move.w  #24,Surfframe
  4110.         Rts
  4111.  
  4112. Sfrm4: 
  4113.         Cmpi.w  #4,FrDir
  4114.         Bne     Sfrm5
  4115.         Move.w  #1,YFlip
  4116.         Move.w  #12,Surfframe
  4117.         Rts
  4118.        
  4119. Sfrm5:
  4120.         Cmpi.w  #5,FrDir
  4121.         Bne     Sfrm6
  4122.         Move.w  #1,YFlip
  4123.         Clr.w   Surfframe
  4124.         Rts
  4125.  
  4126. Sfrm6:
  4127.         Cmpi.w  #6,FrDir
  4128.         Bne     Sfrm7
  4129.         Move.w  #1,YFlip
  4130.         Move.w  #36,Surfframe
  4131.         Rts
  4132.  
  4133. Sfrm7:
  4134.         Cmpi.w  #7,FrDir
  4135.         Bne     Sfrm8
  4136.         Move.w  #1,XORFrame
  4137.         Tst.w   Dir
  4138.         Beq     No_Flip_61
  4139.         Move.w  #1,YFlip
  4140. No_Flip_61:
  4141.         Move.w  #30,Surfframe
  4142.         Rts
  4143.        
  4144. Sfrm8:
  4145.         Cmpi.w  #8,FrDir
  4146.         Bne     Sfrm_Over
  4147.         Clr.w   YFlip
  4148.         Move.w  #36,Surfframe
  4149. Sfrm_Over:
  4150.         Rts
  4151.        
  4152. Check_Super_Run:
  4153.         Move.w  Velx,d0
  4154.         Cmpi.w  #$7fff,d0
  4155.         Bls     Velx_Pos
  4156.         Neg.w   d0
  4157. Velx_Pos:
  4158.         Cmpi.w  #10,d0
  4159.         Blo     No_Super_Run
  4160.  
  4161.         Move.b  #1,Super_Run
  4162.        
  4163.         Tst.b   Spin
  4164.         Bne     No_Super_Run
  4165.        
  4166.         Cmpi.w  #4,Frame
  4167.         Bls     No_Super_Run
  4168.         Move.w  #1,Frame
  4169.  
  4170. No_Super_Run:                          
  4171.         Rts
  4172.        
  4173. *************************************************
  4174. *       Test for player interaction with        *
  4175. *       special tile map.                       *
  4176. *************************************************
  4177.  
  4178. Set_SPtile_Down:
  4179.         Move.w  #127,YChar
  4180.  
  4181.         Tst.w   IJump
  4182.         Bne     Return_Loop
  4183.  
  4184.         Tst.w   Stand
  4185.         Beq     Land_And_Dust
  4186.         Clr.w   Can_Dust
  4187.        
  4188.         Tst.w   Vely
  4189.         Bne     No_Vygone_Check
  4190.         Move.w  #$ffff,Vely
  4191.         Bra     No_Vygone_Check
  4192.  
  4193. Land_And_Dust:
  4194.         Cmpi.w  #2,Can_Dust    
  4195.         Beq     Clear_Can_Dust
  4196.         Move.w  #1,Can_Dust
  4197.         Bra     No_Vygone_Check
  4198.  
  4199. Clear_Can_Dust:
  4200.         Clr.w   Can_Dust       
  4201.         Clr.w   Dust_Delay
  4202.         Move.w  #152,XDust
  4203.         Move.w  #143,YDust
  4204.  
  4205. No_Vygone_Check:       
  4206.         Clr.w   Stand
  4207.         Clr.w   Standpfrm
  4208.         Clr.w   Standpfrmon
  4209.         Clr.w   YFlip
  4210.         Clr.w   XORFrame
  4211.         Clr.w   Brgdn
  4212.         Clr.w   Fpform
  4213.         Clr.w   NJump
  4214.  
  4215.         Move.w  Yoff,d7
  4216.         Subi.w  #2,d7
  4217.         Move.w  d7,d5
  4218.  
  4219.         Move.w  Vely,d6
  4220.         Neg.w   d6
  4221.         Sub.w   d6,d5
  4222.  
  4223.         Bpl     Yoff_In_Range
  4224.         Moveq.l #0,d7
  4225.  
  4226. Yoff_In_Range:
  4227.         Tst.w   Vely
  4228.         Beq     No_Loop
  4229.        
  4230.         Cmpi.w  #$7fff,Vely
  4231.         Blo     No_Loop
  4232.         Clr.b   Spring
  4233.        
  4234. No_Loop:
  4235.        
  4236.         Move.l  Map,a0
  4237.         Move.l  SMap,d0
  4238.  
  4239.         Lea     8(a0,d0.l),a0
  4240.  
  4241.         Moveq.l #4,d0
  4242.         Moveq.l #4,d1
  4243.        
  4244.         Add.l   Xmap,d0
  4245.         Add.l   Ymap,d1
  4246.         Mulu    Xmax,d1
  4247.         Add.l   d1,d0
  4248.        
  4249.         Move.b  0(a0,d0),d2
  4250.         Tst.b   d2
  4251.         Bne     Platform_Detected
  4252.  
  4253. Return_Loop:
  4254.         Clr.w   Can_Dust
  4255.         Clr.w   Dust_Delay
  4256.         Move.w  #152,XDust
  4257.         Move.w  #143,YDust     
  4258.  
  4259.         Tst.w   NVChange
  4260.         Beq     Side_Check1
  4261.  
  4262.         Clr.w   NVChange
  4263.         Bra     Side_Check4
  4264.  
  4265. Side_Check1:   
  4266.         Tst.w   Sidewalk
  4267.         Beq     Side_Check4
  4268.  
  4269.         Cmpi.w  #1,Sidewalk
  4270.         Bne     Side_Check2
  4271.         Move.w  #5,Surface
  4272.         Move.w  #1,NVChange
  4273.         Bra     Side_Check4
  4274.  
  4275. Side_Check2:           
  4276.         Cmpi.w  #2,Sidewalk
  4277.         Bne     Side_Check3
  4278.         Move.w  #6,Surface
  4279.         Move.w  #1,NVChange
  4280.         Bra     Side_Check4
  4281.  
  4282. Side_Check3:           
  4283.         Cmpi.w  #3,Sidewalk
  4284.         Bne     Side_Check4
  4285.         Move.w  #7,Surface
  4286.         Move.w  #1,NVChange
  4287.         Bra     Side_Check4
  4288.  
  4289. Side_Check4:
  4290.         Clr.w   VChange
  4291.         Clr.w   Sidewalk
  4292.         Clr.w   Standon
  4293.         Move.w  #1,Jump
  4294.         Rts
  4295.        
  4296. Platform_Detected:
  4297.         Clr.w   Momentum_X
  4298.         Clr.w   Momentum_Y
  4299.  
  4300.         Cmpi.b  #10,d2
  4301.         Bls     Pfrm1
  4302.        
  4303.         Cmpi.b  #20,d2
  4304.         Bls     Pfrm10
  4305.        
  4306.         Cmpi.b  #30,d2
  4307.         Bls     Pfrm20
  4308.  
  4309.         Cmpi.b  #40,d2
  4310.         Bls     Pfrm30
  4311.  
  4312.         Cmpi.b  #50,d2
  4313.         Bls     Pfrm40
  4314.  
  4315.         Cmpi.b  #60,d2
  4316.         Bls     Pfrm50
  4317.  
  4318.         Cmpi.b  #70,d2
  4319.         Bls     Pfrm60
  4320.  
  4321.         Cmpi.b  #80,d2
  4322.         Bls     Pfrm70
  4323.        
  4324.         Cmpi.b  #90,d2
  4325.         Bls     Pfrm80
  4326.        
  4327.         Cmpi.b  #100,d2
  4328.         Bls     Pfrm90
  4329.        
  4330.         Cmpi.b  #110,d2
  4331.         Bls     Pfrm100
  4332.  
  4333.         Cmpi.b  #120,d2
  4334.         Bls     Pfrm110
  4335.  
  4336.         Cmpi.b  #160,d2
  4337.         Bls     Pfrm240
  4338.  
  4339.         Cmpi.b  #170,d2
  4340.         Bls     Pfrm160
  4341.        
  4342.         Cmpi.b  #180,d2
  4343.         Bls     Pfrm170
  4344.        
  4345.         Cmpi.b  #190,d2
  4346.         Bls     Pfrm180
  4347.        
  4348.         Cmpi.b  #200,d2
  4349.         Bls     Pfrm190
  4350.  
  4351.         Cmpi.b  #210,d2
  4352.         Bls     Pfrm200
  4353.  
  4354.         Cmpi.b  #220,d2
  4355.         Bls     Pfrm210
  4356.  
  4357.         Cmpi.b  #230,d2
  4358.         Bls     Pfrm220
  4359.        
  4360.         Cmpi.b  #240,d2
  4361.         Bls     Pfrm230
  4362.        
  4363.         Bra     Pfrm240
  4364.        
  4365. Pfrm1:
  4366.         Cmpi.b  #1,d2           ; Horizontal
  4367.         Bne     Pfrm2
  4368.  
  4369.         Cmpi.w  #$7fff,Vely
  4370.         Blo     Return_Loop
  4371.  
  4372.         Move.w  #1,FrDir
  4373.         Clr.w   Surface
  4374.         Move.w  #31,Yoff
  4375.         Bra     Settle
  4376.  
  4377. Pfrm2:                          ; 45° Left
  4378.         Cmpi.b  #2,d2
  4379.         Bne     Pfrm3
  4380.  
  4381.         Tst.w   Standon
  4382.         Bne     Pfrm2b
  4383.  
  4384.         Cmpi.w  #24,d7
  4385.         Bgt     Return_Loop
  4386.  
  4387. Pfrm2b:
  4388.         Move.w  #8,FrDir
  4389.         Move.w  #1,Surface
  4390.  
  4391.         Move.w  Xoff,Yoff
  4392.         Bra     Settle
  4393.  
  4394. Pfrm3:                          ; 45° Right
  4395.         Cmpi.b  #3,d2
  4396.         Bne     Pfrm4
  4397.  
  4398.         Tst.w   Standon
  4399.         Bne     Pfrm3b
  4400.  
  4401.         Cmpi.w  #24,d7
  4402.         Bgt     Return_Loop
  4403.  
  4404. Pfrm3b:
  4405.         Move.w  #2,Surface
  4406.         Move.w  #2,FrDir
  4407.        
  4408.         Move.w  Xoff,d0
  4409.         Moveq.w #32,d1
  4410.         Sub.w   d0,d1
  4411.         Move.w  d1,Yoff
  4412.         Bra     Settle
  4413.  
  4414. Pfrm4: 
  4415.         Cmpi.b  #4,d2           ; 22° Left (1)
  4416.         Bne     Pfrm5
  4417.  
  4418.         Move.w  #1,FrDir
  4419.         Move.w  #3,Surface
  4420.  
  4421.         Move.w  Xoff,d0
  4422.         Divu    #2,d0
  4423.         Addi.w  #16,d0
  4424.         Move.w  d0,Yoff
  4425.         Bra     Settle
  4426.  
  4427. Pfrm5:                          ; 22° Left (2)
  4428.         Cmpi.b  #5,d2
  4429.         Bne     Pfrm6
  4430.  
  4431.         Tst.w   Standon
  4432.         Bne     Pfrm5b
  4433.  
  4434.         Cmpi.w  #16,d7
  4435.         Bgt     Return_Loop
  4436.  
  4437. Pfrm5b:
  4438.         Move.w  #1,FrDir
  4439.         Move.w  #3,Surface
  4440.  
  4441.         Move.w  Xoff,d0
  4442.         Divu    #2,d0
  4443.         Move.w  d0,Yoff
  4444.         Bra     Settle
  4445.  
  4446. Pfrm6: 
  4447.         Cmpi.b  #6,d2           ; 22° Right(1)
  4448.         Bne     Pfrm7
  4449.  
  4450.         Tst.w   Standon
  4451.         Bne     Pfrm6b
  4452.  
  4453.         Cmpi.w  #16,d7
  4454.         Bgt     Return_Loop
  4455.  
  4456. Pfrm6b:
  4457.         Move.w  #1,FrDir
  4458.         Move.w  #4,Surface
  4459.  
  4460.         Move.w  Xoff,d0
  4461.         Moveq.w #32,d1
  4462.         Divu    #2,d0
  4463.         Addi.w  #16,d0
  4464.         Sub.w   d0,d1
  4465.         Move.w  d1,Yoff
  4466.         Bra     Settle
  4467.  
  4468. Pfrm7: 
  4469.         Cmpi.b  #7,d2           ; 22° Right(2)
  4470.         Bne     Pfrm10
  4471.  
  4472.         Move.w  #1,FrDir
  4473.         Move.w  #4,Surface
  4474.  
  4475.         Move.w  Xoff,d0
  4476.         Moveq.w #32,d1
  4477.         Divu    #2,d0
  4478.         Sub.w   d0,d1
  4479.         Move.w  d1,Yoff
  4480.         Bra     Settle
  4481.  
  4482. Pfrm10:
  4483.         Cmpi.b  #10,d2
  4484.         Bne     Pfrm11
  4485.  
  4486.         Move.w  #$fffe,Xjump
  4487.         Move.w  #$0000,Yjump
  4488.         Clr.b   Braking
  4489.  
  4490.         Tst.w   Jump
  4491.         Bne     Return_Loop
  4492.  
  4493.         Tst.w   Sidewalk
  4494.         Beq     Return_Loop
  4495.        
  4496.         Move.w  #25,Xoff
  4497.         Move.w  #7,FrDir
  4498.         Move.w  #7,Surface
  4499.         Bra     Settle
  4500.  
  4501. Pfrm11:
  4502.         Cmpi.b  #11,d2
  4503.         Bne     Pfrm12
  4504.        
  4505.         Move.w  #$0002,Xjump
  4506.         Move.w  #$0000,Yjump
  4507.         Clr.b   Braking
  4508.  
  4509.         Tst.w   Jump
  4510.         Bne     Return_Loop
  4511.        
  4512.         Tst.w   Sidewalk
  4513.         Beq     Return_Loop
  4514.        
  4515.         Move.w  #7,Xoff
  4516.         Move.w  #3,FrDir
  4517.         Move.w  #5,Surface
  4518.         Bra     Settle
  4519.                
  4520. Pfrm12:
  4521.         Cmpi.b  #12,d2          ; Top-left corner
  4522.         Bne     Pfrm13
  4523.  
  4524.         Cmpi.w  #$7fff,Vely
  4525.         Blo     Return_Loop
  4526.  
  4527.         Move.w  #1,FrDir
  4528.         Move.w  #31,Yoff
  4529.         Clr.w   Surface
  4530.  
  4531.         Bra     Settle
  4532.  
  4533. Pfrm13:        
  4534.         Cmpi.b  #13,d2          ; Top-right corner
  4535.         Bne     Pfrm22
  4536.  
  4537.         Cmpi.w  #$7fff,Vely
  4538.         Blo     Return_Loop
  4539.  
  4540.         Move.w  #1,FrDir
  4541.         Clr.w   Surface
  4542.         Move.w  #31,Yoff
  4543.  
  4544.         Bra     Settle
  4545.  
  4546. Pfrm14:
  4547. Pfrm15:
  4548. Pfrm16:
  4549. Pfrm17:
  4550. Pfrm18:
  4551. Pfrm19:
  4552. Pfrm20:
  4553. Pfrm21:
  4554.  
  4555. Pfrm22:
  4556.         Cmpi.b  #22,d2          ; 11° Left (1)
  4557.         Bne     Pfrm23
  4558.  
  4559.         Tst.w   Standon
  4560.         Bne     Pfrm22b
  4561.  
  4562.         Cmpi.w  #8,d7
  4563.         Bgt     Return_Loop
  4564.  
  4565. Pfrm22b:
  4566.         Move.w  #1,FrDir
  4567.         Clr.w   Surface
  4568.  
  4569.         Move.w  Xoff,d0
  4570.         Divu    #4,d0
  4571.         Move.w  d0,Yoff
  4572.         Bra     Settle
  4573.  
  4574. Pfrm23:                         ; 11° Left (2)
  4575.         Cmpi.b  #23,d2
  4576.         Bne     Pfrm24
  4577.  
  4578.         Tst.w   Standon
  4579.         Bne     Pfrm23b
  4580.        
  4581.         Cmpi.w  #16,d7
  4582.         Bgt     Return_Loop
  4583.  
  4584. Pfrm23b:
  4585.         Move.w  #1,FrDir
  4586.         Clr.w   Surface
  4587.  
  4588.         Move.w  Xoff,d0
  4589.         Divu    #4,d0
  4590.         Addi.w  #8,d0
  4591.         Move.w  d0,Yoff
  4592.         Bra     Settle
  4593.  
  4594. Pfrm24:                         ; 11° Left (3)
  4595.         Cmpi.b  #24,d2
  4596.         Bne     Pfrm25
  4597.  
  4598.         Tst.w   Standon
  4599.         Bne     Pfrm24b
  4600.        
  4601.         Cmpi.w  #24,d7
  4602.         Bgt     Return_Loop
  4603.  
  4604. Pfrm24b:
  4605.         Move.w  #1,FrDir
  4606.         Clr.w   Surface
  4607.  
  4608.         Move.w  Xoff,d0
  4609.         Divu    #4,d0
  4610.         Addi.w  #16,d0
  4611.         Move.w  d0,Yoff
  4612.  
  4613.         Bra     Settle
  4614.  
  4615. Pfrm25:                         ; 11° Left (4)
  4616.         Cmpi.b  #25,d2
  4617.         Bne     Pfrm26
  4618.  
  4619.         Move.w  Xoff,d0
  4620.         Divu    #4,d0
  4621.         Addi.w  #24,d0
  4622.         Move.w  d0,Yoff
  4623.  
  4624.         Move.w  #1,FrDir
  4625.         Clr.w   Surface
  4626.         Bra     Settle
  4627.  
  4628. Pfrm26:
  4629.         Cmpi.b  #26,d2          ; 11° Right (1)
  4630.         Bne     Pfrm27
  4631.  
  4632.         Tst.w   Standon
  4633.         Bne     Pfrm26b
  4634.  
  4635.         Cmpi.w  #8,d7
  4636.         Bgt     Return_Loop
  4637.  
  4638. Pfrm26b:
  4639.         Move.w  #1,FrDir
  4640.         Clr.w   Surface
  4641.  
  4642.         Move.w  Xoff,d1
  4643.         Moveq.w #31,d0
  4644.         Sub.w   d1,d0
  4645.         Divu    #4,d0
  4646.         Move.w  d0,Yoff
  4647.         Bra     Settle
  4648.  
  4649. Pfrm27:                         ; 11° Right (2)
  4650.         Cmpi.b  #27,d2
  4651.         Bne     Pfrm28
  4652.  
  4653.         Tst.w   Standon
  4654.         Bne     Pfrm27b
  4655.        
  4656.         Cmpi.w  #16,d7
  4657.         Bgt     Return_Loop
  4658.  
  4659. Pfrm27b:
  4660.         Move.w  #1,FrDir
  4661.         Clr.w   Surface
  4662.  
  4663.         Move.w  Xoff,d1
  4664.         Moveq.w #31,d0
  4665.         Sub.w   d1,d0
  4666.         Divu    #4,d0
  4667.         Addi.w  #8,d0
  4668.         Move.w  d0,Yoff
  4669.         Bra     Settle
  4670.  
  4671. Pfrm28:                         ; 11° Right (3)
  4672.         Cmpi.b  #28,d2
  4673.         Bne     Pfrm29
  4674.  
  4675.         Tst.w   Standon
  4676.         Bne     Pfrm28b
  4677.        
  4678.         Cmpi.w  #24,d7
  4679.         Bgt     Return_Loop
  4680.  
  4681. Pfrm28b:       
  4682.        
  4683.         Move.w  #1,FrDir
  4684.         Clr.w   Surface
  4685.  
  4686.         Move.w  Xoff,d1
  4687.         Moveq.w #31,d0
  4688.         Sub.w   d1,d0
  4689.         Divu    #4,d0
  4690.         Addi.w  #16,d0
  4691.         Move.w  d0,Yoff
  4692.  
  4693.         Bra     Settle
  4694.  
  4695. Pfrm29:                         ; 11° Right (4)
  4696.         Cmpi.b  #29,d2
  4697.         Bne     Pfrm30
  4698.  
  4699.         Move.w  Xoff,d1
  4700.         Moveq.w #31,d0
  4701.         Sub.w   d1,d0
  4702.         Divu    #4,d0
  4703.         Addi.w  #24,d0
  4704.         Move.w  d0,Yoff
  4705.  
  4706.         Move.w  #1,FrDir
  4707.         Clr.w   Surface
  4708.         Bra     Settle
  4709.  
  4710. Pfrm30:        
  4711.         Cmpi.b  #30,d2          ; 45° Curve Left (1)
  4712.         Bne     Pfrm31
  4713.  
  4714.         Tst.w   Standon
  4715.         Bne     Pfrm30b
  4716.        
  4717.         Cmpi.w  #24,d7
  4718.         Bgt     Return_Loop
  4719.  
  4720. Pfrm30b:
  4721.         Move.w  #1,FrDir
  4722.         Move.w  #3,Surface
  4723.  
  4724.         Move.w  Xoff,d0
  4725.         Moveq.w #31,d1
  4726.         Sub.w   d0,d1
  4727.         Mulu    d1,d1
  4728.         Divu    #128,d1
  4729.         Moveq.w #31,d0
  4730.         Sub.w   d1,d0
  4731.         Move.w  d0,Yoff
  4732.         Bra     Settle
  4733.  
  4734. Pfrm31:
  4735.         Cmpi.b  #31,d2          ; 45° Curve Left (2)
  4736.         Bne     Pfrm32
  4737.  
  4738.         Tst.w   Standon
  4739.         Bne     Pfrm31b
  4740.        
  4741.         Cmpi.w  #18,d7
  4742.         Bgt     Return_Loop
  4743.  
  4744. Pfrm31b:
  4745.         Move.w  #8,FrDir
  4746.         Move.w  #1,Surface
  4747.  
  4748.         Move.w  Xoff,d0
  4749.         Moveq.w #63,d1
  4750.         Sub.w   d0,d1
  4751.         Mulu    d1,d1
  4752.         Divu    #128,d1
  4753.         Moveq.w #31,d0
  4754.         Sub.w   d1,d0
  4755.         Move.w  d0,Yoff
  4756.         Bra     Settle
  4757.  
  4758. Pfrm32:
  4759.         Cmpi.b  #32,d2          ; 45° Curve Right (1)
  4760.         Bne     Pfrm33
  4761.  
  4762.         Tst.w   Standon
  4763.         Bne     Pfrm32b
  4764.        
  4765.         Cmpi.w  #18,d7
  4766.         Bgt     Return_Loop
  4767.  
  4768. Pfrm32b:
  4769.         Move.w  #2,FrDir
  4770.         Move.w  #2,Surface
  4771.  
  4772.         Move.w  Xoff,d0
  4773.         Addi.w  #32,d0
  4774.         Mulu    d0,d0
  4775.         Divu    #128,d0
  4776.         Moveq.w #31,d1
  4777.         Sub.w   d0,d1
  4778.         Move.w  d1,Yoff
  4779.         Bra     Settle
  4780.  
  4781. Pfrm33:
  4782.         Cmpi.b  #33,d2          ; 45° Curve Right (2)
  4783.         Bne     Pfrm34
  4784.  
  4785.         Tst.w   Standon
  4786.         Bne     Pfrm33b
  4787.        
  4788.         Cmpi.w  #26,d7
  4789.         Bgt     Return_Loop
  4790.  
  4791. Pfrm33b:       
  4792.         Move.w  #1,FrDir
  4793.         Move.w  #4,Surface
  4794.  
  4795.         Move.w  Xoff,d0
  4796.         Mulu    d0,d0
  4797.         Divu    #128,d0
  4798.         Moveq.w #31,d1
  4799.         Sub.w   d0,d1
  4800.         Move.w  d1,Yoff
  4801.         Bra     Settle
  4802.  
  4803. Pfrm34:
  4804.         Cmpi.b  #34,d2          ; 45° Curve Left (3)
  4805.         Bne     Pfrm35
  4806.  
  4807.         Tst.w   Standon
  4808.         Bne     Pfrm34b
  4809.        
  4810.         Cmpi.w  #14,d7
  4811.         Bgt     Return_Loop
  4812.  
  4813. Pfrm34b:               
  4814.         Move.w  #8,FrDir
  4815.         Move.w  #1,Surface
  4816.  
  4817.         Move.w  Xoff,d0
  4818.         Addi.w  #32,d0
  4819.         Mulu    d0,d0
  4820.         Divu    #128,d0
  4821.         Move.w  d0,Yoff
  4822.         Bra     Settle
  4823.  
  4824. Pfrm35:
  4825.         Cmpi.b  #35,d2          ; 45° Curve Left (4)
  4826.         Bne     Pfrm36 
  4827.  
  4828.         Tst.w   Standon
  4829.         Bne     Pfrm35b
  4830.        
  4831.         Cmpi.w  #8,d7
  4832.         Bgt     Return_Loop
  4833.  
  4834. Pfrm35b:
  4835.         Move.w  #1,FrDir
  4836.         Move.w  #3,Surface
  4837.  
  4838.         Move.w  Xoff,d0
  4839.         Mulu    d0,d0
  4840.         Divu    #128,d0
  4841.         Move.w  d0,Yoff
  4842.         Bra     Settle
  4843.  
  4844. Pfrm36:
  4845.         Cmpi.b  #36,d2          ; 45° Curve Right (3)
  4846.         Bne     Pfrm37 
  4847.        
  4848.         Tst.w   Standon
  4849.         Bne     Pfrm36b
  4850.        
  4851.         Cmpi.w  #8,d7
  4852.         Bgt     Return_Loop
  4853.  
  4854. Pfrm36b:
  4855.         Move.w  #1,FrDir
  4856.         Move.w  #4,Surface
  4857.  
  4858.         Move.w  Xoff,d0
  4859.         Moveq.w #31,d1
  4860.         Sub.w   d0,d1
  4861.         Mulu    d1,d1
  4862.         Divu    #128,d1
  4863.         Move.w  d1,Yoff
  4864.         Bra     Settle
  4865.  
  4866. Pfrm37:
  4867.         Cmpi.b  #37,d2          ; 45° Curve Right (4)
  4868.         Bne     Pfrm38
  4869.  
  4870.         Tst.w   Standon
  4871.         Bne     Pfrm37b
  4872.        
  4873.         Cmpi.w  #14,d7
  4874.         Bgt     Return_Loop
  4875.  
  4876. Pfrm37b:               
  4877.         Move.w  #2,FrDir
  4878.         Move.w  #2,Surface
  4879.  
  4880.         Move.w  Xoff,d0
  4881.         Moveq.w #63,d1
  4882.         Sub.w   d0,d1
  4883.         Mulu    d1,d1
  4884.         Divu    #128,d1
  4885.         Move.w  d1,Yoff
  4886.         Bra     Settle
  4887.  
  4888. Pfrm38:
  4889.         Cmpi.b  #38,d2          ; 22° Curve Left (1)
  4890.         Bne     Pfrm39
  4891.        
  4892.         Move.w  #1,FrDir
  4893.         Clr.w   Surface
  4894.  
  4895.         Move.w  Xoff,d0
  4896.         Moveq.w #31,d1
  4897.         Sub.w   d0,d1
  4898.         Mulu    d1,d1
  4899.         Divu    #256,d1
  4900.         Moveq.w #31,d0
  4901.         Sub.w   d1,d0
  4902.         Move.w  d0,Yoff
  4903.         Bra     Settle
  4904.  
  4905. Pfrm39:
  4906.         Cmpi.b  #39,d2          ; 22° Curve Left (2)
  4907.         Bne     Pfrm40
  4908.        
  4909.         Move.w  #1,FrDir
  4910.         Move.w  #3,Surface
  4911.  
  4912.         Move.w  Xoff,d0
  4913.         Moveq.w #63,d1
  4914.         Sub.w   d0,d1
  4915.         Mulu    d1,d1
  4916.         Divu    #256,d1
  4917.         Moveq.w #31,d0
  4918.         Sub.w   d1,d0
  4919.         Move.w  d0,Yoff
  4920.         Bra     Settle
  4921.  
  4922. Pfrm40:
  4923.         Cmpi.b  #40,d2          ; 22° Curve Right (1)
  4924.         Bne     Pfrm41
  4925.        
  4926.         Move.w  #1,FrDir
  4927.         Move.w  #4,Surface
  4928.  
  4929.         Move.w  Xoff,d0
  4930.         Addi.w  #32,d0
  4931.         Mulu    d0,d0
  4932.         Divu    #256,d0
  4933.         Moveq.w #31,d1
  4934.         Sub.w   d0,d1
  4935.         Move.w  d1,Yoff
  4936.         Bra     Settle
  4937.  
  4938. Pfrm41:
  4939.         Cmpi.b  #41,d2          ; 22° Curve Right (2)
  4940.         Bne     Pfrm42
  4941.        
  4942.         Move.w  #1,FrDir
  4943.         Clr.w   Surface
  4944.  
  4945.         Move.w  Xoff,d0
  4946.         Mulu    d0,d0
  4947.         Divu    #256,d0
  4948.         Moveq.w #31,d1
  4949.         Sub.w   d0,d1
  4950.         Move.w  d1,Yoff
  4951.         Bra     Settle
  4952.  
  4953. Pfrm42:
  4954.         Cmpi.b  #42,d2          ; 22° Curve Left (3)
  4955.         Bne     Pfrm43
  4956.  
  4957.         Tst.w   Standon
  4958.         Bne     Pfrm42b
  4959.  
  4960.         Cmpi.w  #16,d7
  4961.         Bgt     Return_Loop
  4962.  
  4963. Pfrm42b:
  4964.         Move.w  #1,FrDir
  4965.         Move.w  #3,Surface
  4966.  
  4967.         Move.w  Xoff,d0
  4968.         Addi.w  #32,d0
  4969.         Mulu    d0,d0
  4970.         Divu    #256,d0
  4971.         Move.w  d0,Yoff
  4972.         Bra     Settle
  4973.  
  4974. Pfrm43:
  4975.         Cmpi.b  #43,d2          ; 22° Curve Left (4)
  4976.         Bne     Pfrm44
  4977.        
  4978.         Tst.w   Standon
  4979.         Bne     Pfrm43b
  4980.  
  4981.         Cmpi.w  #8,d7
  4982.         Bgt     Return_Loop
  4983.  
  4984. Pfrm43b:       
  4985.         Move.w  #1,FrDir
  4986.         Clr.w   Surface
  4987.  
  4988.         Move.w  Xoff,d0
  4989.         Mulu    d0,d0
  4990.         Divu    #256,d0
  4991.         Move.w  d0,Yoff
  4992.         Bra     Settle
  4993.  
  4994. Pfrm44:
  4995.         Cmpi.b  #44,d2          ; 22° Curve Right (3)
  4996.         Bne     Pfrm45
  4997.  
  4998.         Tst.w   Standon
  4999.         Bne     Pfrm44b
  5000.  
  5001.         Cmpi.w  #8,d7
  5002.         Bgt     Return_Loop
  5003.  
  5004. Pfrm44b:               
  5005.         Move.w  #1,FrDir
  5006.         Clr.w   Surface
  5007.  
  5008.         Move.w  Xoff,d0
  5009.         Moveq.w #31,d1
  5010.         Sub.w   d0,d1
  5011.         Mulu    d1,d1
  5012.         Divu    #256,d1
  5013.         Move.w  d1,Yoff
  5014.         Bra     Settle
  5015.  
  5016. Pfrm45:
  5017.         Cmpi.b  #45,d2          ; 22° Curve Right (4)
  5018.         Bne     Pfrm46
  5019.  
  5020.         Tst.w   Standon
  5021.         Bne     Pfrm45b
  5022.  
  5023.         Cmpi.w  #16,d7
  5024.         Bgt     Return_Loop
  5025.  
  5026. Pfrm45b:
  5027.         Move.w  #1,FrDir
  5028.         Move.w  #4,Surface
  5029.  
  5030.         Move.w  Xoff,d0
  5031.         Moveq.w #63,d1
  5032.         Sub.w   d0,d1
  5033.         Mulu    d1,d1
  5034.         Divu    #256,d1
  5035.         Move.w  d1,Yoff
  5036.         Bra     Settle
  5037.  
  5038. Pfrm46:
  5039.         Cmpi.b  #46,d2
  5040.         Bne     Pfrm47
  5041.  
  5042.         Move.w  #$fffe,Xjump
  5043.         Move.w  #$fffe,Yjump
  5044.         Clr.b   Braking
  5045.        
  5046.         Tst.w   Fdir
  5047.         Bne     Pfrm46b
  5048.        
  5049.         Move.w  #31,Xoff
  5050.         Addi.l  #1,Xmap
  5051.        
  5052.         Bra     Set_SPtile_Down
  5053. Pfrm46b:       
  5054.         Move.w  #31,Yoff
  5055.         Addi.l  #1,Ymap
  5056.        
  5057.         Bra     Set_SPtile_Down
  5058.  
  5059. Pfrm47:
  5060.         Cmpi.b  #47,d2
  5061.         Bne     Pfrm48
  5062.  
  5063.         Clr.b   Braking
  5064.         Move.w  #$ffff,Xjump
  5065.         Move.w  #$fffe,Yjump
  5066.        
  5067.         Cmpi.w  #$7fff,Vely
  5068.         Blo     Godn_47
  5069.  
  5070.         Tst.w   Jump
  5071.         Bne     Return_Loop
  5072.  
  5073.         Move.w  Xoff,d0
  5074.         Clr.w   d1
  5075.         Bsr     Get_Coord
  5076.         Move.w  d1,Yoff
  5077.  
  5078.         Move.w  #5,FrDir
  5079.         Move.w  #6,Surface
  5080.         Bra     Settle
  5081. Godn_47:
  5082.         Move.w  #$ffff,Vely
  5083.         Move.w  #1,Jump
  5084.  
  5085.         Move.w  Xoff,d0
  5086.         Clr.w   d1
  5087.         Bsr     Get_Coord
  5088.         Move.w  d1,Yoff
  5089.         Bra     Return_Loop
  5090.  
  5091. Pfrm48:
  5092.         Cmpi.b  #70,d2
  5093.         Bhs     Pfrm70
  5094.  
  5095.         Cmpi.b  #48,d2
  5096.         Bne     Pfrm49
  5097.  
  5098.         Move.w  #$fffe,Yjump
  5099.         Move.w  #$0000,Xjump
  5100.         Clr.b   Braking
  5101.  
  5102.         Cmpi.w  #$7fff,Vely
  5103.         Blo     Godn_48
  5104.  
  5105.         Tst.w   Jump
  5106.         Bne     Return_Loop
  5107.  
  5108.         Move.w  Xoff,d0
  5109.         Moveq.w #1,d1
  5110.         Bsr     Get_Coord
  5111.         Move.w  d1,Yoff
  5112.  
  5113.         Move.w  #5,FrDir
  5114.         Move.w  #6,Surface
  5115.         Bra     Settle
  5116. Godn_48:
  5117.         Move.w  #$ffff,Vely
  5118.         Move.w  #1,Jump
  5119.  
  5120.         Clr.b   Braking
  5121.  
  5122.         Move.w  Xoff,d0
  5123.         Moveq.w #1,d1
  5124.         Bsr     Get_Coord
  5125.         Move.w  d1,Yoff
  5126.         Bra     Return_Loop
  5127.        
  5128. Pfrm49:
  5129.         Cmpi.b  #49,d2
  5130.         Bne     Pfrm50
  5131.  
  5132.         Clr.b   Braking
  5133.         Move.w  #$fffe,Yjump
  5134.         Move.w  #$0000,Xjump
  5135.                
  5136.         Cmpi.w  #$7fff,Vely
  5137.         Blo     Godn_49
  5138.  
  5139.         Tst.w   Jump
  5140.         Bne     Return_Loop
  5141.  
  5142.         Move.w  Xoff,d0
  5143.         Moveq.w #2,d1
  5144.         Bsr     Get_Coord
  5145.         Move.w  d1,Yoff
  5146.  
  5147.         Move.w  #5,FrDir
  5148.         Move.w  #6,Surface
  5149.         Bra     Settle
  5150. Godn_49:
  5151.         Move.w  #$ffff,Vely
  5152.         Move.w  #1,Jump
  5153.  
  5154.         Move.w  Xoff,d0
  5155.         Moveq.w #2,d1
  5156.         Bsr     Get_Coord
  5157.         Move.w  d1,Yoff
  5158.         Bra     Return_Loop
  5159.        
  5160. Pfrm50:
  5161.         Cmpi.b  #50,d2
  5162.         Bne     Pfrm51
  5163.  
  5164.         Clr.b   Braking
  5165.         Move.w  #$fffe,Yjump
  5166.         Move.w  #$0001,Xjump
  5167.        
  5168.         Cmpi.w  #$7fff,Vely
  5169.         Blo     Godn_50
  5170.  
  5171.         Tst.w   Jump
  5172.         Bne     Return_Loop
  5173.  
  5174.         Move.w  Xoff,d0
  5175.         Moveq.w #3,d1
  5176.         Bsr     Get_Coord
  5177.         Move.w  d1,Yoff
  5178.  
  5179.         Move.w  #4,FrDir
  5180.         Move.w  #6,Surface
  5181.         Bra     Settle
  5182. Godn_50:
  5183.         Move.w  #$ffff,Vely
  5184.         Move.w  #1,Jump
  5185.  
  5186.         Move.w  Xoff,d0
  5187.         Moveq.w #3,d1
  5188.         Bsr     Get_Coord
  5189.         Move.w  d1,Yoff
  5190.         Bra     Return_Loop
  5191.  
  5192. Pfrm51:
  5193.         Cmpi.b  #51,d2
  5194.         Bne     Pfrm52
  5195.  
  5196.         Clr.b   Braking
  5197.         Move.w  #$fffe,Yjump
  5198.         Move.w  #$0002,Xjump
  5199.        
  5200.         Tst.w   Fdir
  5201.         Beq     Pfrm51b
  5202.        
  5203.         Clr.w   Xoff
  5204.         Subi.l  #1,Xmap
  5205.        
  5206.         Bra     Set_SPtile_Down
  5207. Pfrm51b:       
  5208.         Move.w  #31,Yoff
  5209.         Addi.l  #1,Ymap
  5210.        
  5211.         Bra     Set_SPtile_Down
  5212.  
  5213. Pfrm52:
  5214.         Cmpi.b  #52,d2
  5215.         Bne     Pfrm53
  5216.  
  5217.         Move.w  #$fffe,Xjump
  5218.         Move.w  #$fffe,Yjump
  5219.         Clr.b   Braking
  5220.  
  5221.         Cmpi.w  #$7fff,Vely
  5222.         Blo     Godn_52
  5223.  
  5224.         Tst.w   Jump
  5225.         Bne     Return_Loop
  5226.        
  5227.         Move.w  Yoff,d0
  5228.         Moveq.w #4,d1
  5229.         Bsr     Get_Coord
  5230.         Move.w  d1,Xoff
  5231.  
  5232.         Move.w  #6,FrDir
  5233.         Move.w  #7,Surface
  5234.         Bra     Settle
  5235. Godn_52:
  5236.         Move.w  #$ffff,Vely
  5237.         Move.w  #1,Jump
  5238.  
  5239.         Move.w  Xoff,d0
  5240.         Moveq.w #4,d1
  5241.         Bsr     Get_Coord
  5242.         Move.w  d1,Xoff
  5243.         Bra     Return_Loop
  5244.        
  5245. Pfrm53:
  5246.         Cmpi.b  #53,d2
  5247.         Bne     Pfrm54
  5248.  
  5249.         Move.w  #$0002,Xjump
  5250.         Move.w  #$fffe,Yjump
  5251.         Clr.b   Braking
  5252.  
  5253.         Cmpi.w  #$7fff,Vely
  5254.         Blo     Godn_53
  5255.  
  5256.         Tst.w   Jump
  5257.         Bne     Return_Loop
  5258.  
  5259.         Move.w  Yoff,d0
  5260.         Moveq.w #5,d1  
  5261.         Bsr     Get_Coord
  5262.         Move.w  d1,Xoff
  5263.  
  5264.         Move.w  #4,FrDir
  5265.         Move.w  #5,Surface
  5266.         Bra     Settle
  5267. Godn_53:
  5268.         Move.w  #$ffff,Vely
  5269.         Move.w  #1,Jump
  5270.  
  5271.         Move.w  Xoff,d0
  5272.         Moveq.w #5,d1
  5273.         Bsr     Get_Coord
  5274.         Move.w  d1,Xoff
  5275.         Bra     Return_Loop
  5276.  
  5277. Pfrm54:
  5278.         Cmpi.b  #54,d2
  5279.         Bne     Pfrm55
  5280.  
  5281.         Move.w  #$fffe,Xjump
  5282.         Move.w  #$ffff,Yjump
  5283.         Clr.b   Braking
  5284.  
  5285.         Cmpi.w  #$7fff,Vely
  5286.         Blo     Godn_54
  5287.  
  5288.         Tst.w   Jump
  5289.         Bne     Return_Loop
  5290.        
  5291.         Move.w  Yoff,d0
  5292.         Moveq.w #6,d1
  5293.         Bsr     Get_Coord
  5294.         Move.w  d1,Xoff
  5295.  
  5296.         Move.w  #7,FrDir
  5297.         Move.w  #7,Surface
  5298.         Bra     Settle
  5299. Godn_54:
  5300.         Move.w  #$ffff,Vely
  5301.         Move.w  #1,Jump
  5302.  
  5303.         Move.w  Xoff,d0
  5304.         Moveq.w #6,d1
  5305.         Bsr     Get_Coord
  5306.         Move.w  d1,Xoff
  5307.         Bra     Return_Loop
  5308.  
  5309. Pfrm55:
  5310.         Cmpi.b  #55,d2
  5311.         Bne     Pfrm56
  5312.  
  5313.         Move.w  #$0002,Xjump
  5314.         Move.w  #$ffff,Yjump
  5315.         Clr.b   Braking
  5316.  
  5317.         Cmpi.w  #$7fff,Vely
  5318.         Blo     Godn_55
  5319.  
  5320.         Tst.w   Jump
  5321.         Bne     Return_Loop
  5322.  
  5323.         Move.w  Yoff,d0
  5324.         Moveq.w #7,d1
  5325.         Bsr     Get_Coord
  5326.         Move.w  d1,Xoff
  5327.  
  5328.         Move.w  #3,FrDir
  5329.         Move.w  #5,Surface
  5330.         Bra     Settle
  5331. Godn_55:
  5332.         Move.w  #$ffff,Vely
  5333.         Move.w  #1,Jump
  5334.  
  5335.         Move.w  Xoff,d0
  5336.         Moveq.w #7,d1
  5337.         Bsr     Get_Coord
  5338.         Move.w  d1,Xoff
  5339.         Bra     Return_Loop
  5340.  
  5341. Pfrm56:
  5342.         Cmpi.b  #56,d2
  5343.         Bne     Pfrm57
  5344.  
  5345.         Tst.w   Standon
  5346.         Bne     Pfrm56b
  5347.  
  5348.         Cmpi.w  #16,Xoff
  5349.         Blo     Return_Loop
  5350.  
  5351. Pfrm56b:
  5352.         Move.w  #$fffe,Xjump
  5353.         Move.w  #$0001,Yjump
  5354.         Clr.b   Braking
  5355.  
  5356.         Move.w  #7,FrDir
  5357.         Move.w  #7,Surface
  5358.  
  5359.         Move.w  Yoff,d0
  5360.         Moveq.w #8,d1
  5361.         Bsr     Get_Coord
  5362.         Move.w  d1,Xoff
  5363.         Bra     Settle
  5364.        
  5365. Pfrm57:
  5366.         Cmpi.b  #57,d2
  5367.         Bne     Pfrm58
  5368.  
  5369.         Tst.w   Standon
  5370.         Bne     Pfrm57b
  5371.  
  5372.         Cmpi.w  #16,Xoff
  5373.         Bgt     Return_Loop
  5374.  
  5375. Pfrm57b:
  5376.         Move.w  #$0002,Xjump
  5377.         Move.w  #$0001,Yjump
  5378.         Clr.b   Braking
  5379.  
  5380.         Move.w  #3,FrDir
  5381.         Move.w  #5,Surface
  5382.  
  5383.         Move.w  Yoff,d0
  5384.         Moveq.w #9,d1
  5385.         Bsr     Get_Coord
  5386.         Move.w  d1,Xoff
  5387.         Bra     Settle
  5388.  
  5389. Pfrm58:
  5390.         Cmpi.b  #58,d2
  5391.         Bne     Pfrm59
  5392.                
  5393.         Clr.b   Braking
  5394.         Move.w  #$fffe,Xjump
  5395.         Move.w  #$0002,Yjump
  5396.  
  5397.         Move.w  #8,FrDir
  5398.         Move.w  #7,Surface
  5399.        
  5400.         Move.w  Yoff,d0
  5401.         Moveq.w #10,d1
  5402.         Bsr     Get_Coord
  5403.         Move.w  d1,Xoff
  5404.         Bra     Settle
  5405.  
  5406. Pfrm59:
  5407.         Cmpi.b  #59,d2
  5408.         Bne     Pfrm60
  5409.  
  5410.         Move.w  #$0002,Xjump
  5411.         Move.w  #$0002,Yjump
  5412.         Clr.b   Braking
  5413.  
  5414.         Move.w  #2,FrDir
  5415.         Move.w  #5,Surface
  5416.        
  5417.  
  5418.         Move.w  Yoff,d0
  5419.         Moveq.w #11,d1
  5420.         Bsr     Get_Coord
  5421.         Move.w  d1,Xoff
  5422.         Bra     Settle
  5423.        
  5424. Pfrm60:
  5425.         Cmpi.b  #60,d2
  5426.         Bne     Pfrm61
  5427.  
  5428.         Move.w  #$0002,Yjump
  5429.         Move.w  #$fffe,Xjump
  5430.         Clr.b   Braking
  5431.        
  5432.         Tst.w   Fdir
  5433.         Beq     Pfrm60b
  5434.        
  5435.         Move.w  #31,Xoff
  5436.         Addi.l  #1,Xmap
  5437.        
  5438.         Bra     Set_SPtile_Down
  5439. Pfrm60b:       
  5440.         Clr.w   Yoff
  5441.         Subi.l  #1,Ymap
  5442.        
  5443.         Bra     Set_SPtile_Down
  5444.  
  5445. Pfrm61:
  5446.         Cmpi.b  #61,d2
  5447.         Bne     Pfrm62
  5448.  
  5449.         Tst.w   Standon
  5450.         Bne     Pfrm61b
  5451.  
  5452.         Cmpi.w  #12,d7
  5453.         Bgt     Return_Loop
  5454.  
  5455. Pfrm61b:
  5456.        
  5457.         Move.w  #8,FrDir
  5458.         Move.w  #3,Surface
  5459.        
  5460.         Move.w  Xoff,d0
  5461.         Moveq.w #12,d1
  5462.         Bsr     Get_Coord
  5463.         Move.w  d1,Yoff
  5464.         Bra     Settle
  5465.        
  5466. Pfrm62:
  5467.         Cmpi.b  #62,d2
  5468.         Bne     Pfrm63
  5469.        
  5470.         Tst.w   Standon
  5471.         Bne     Pfrm62b
  5472.  
  5473.         Cmpi.w  #6,d7
  5474.         Bgt     Return_Loop
  5475.  
  5476. Pfrm62b:
  5477.         Move.w  #1,FrDir
  5478.         Clr.w   Surface
  5479.  
  5480.         Move.w  Xoff,d0
  5481.         Moveq.w #13,d1
  5482.         Bsr     Get_Coord
  5483.         Move.w  d1,Yoff
  5484.         Bra     Settle
  5485.  
  5486. Pfrm63:
  5487.         Cmpi.b  #63,d2
  5488.         Bne     Pfrm64
  5489.  
  5490.         Tst.w   Standon
  5491.         Bne     Pfrm63b
  5492.  
  5493.         Cmpi.w  #6,d7
  5494.         Bgt     Return_Loop
  5495.  
  5496. Pfrm63b:       
  5497.         Move.w  #1,FrDir
  5498.         Clr.w   Surface
  5499.  
  5500.         Move.w  Xoff,d0
  5501.         Moveq.w #14,d1
  5502.         Bsr     Get_Coord
  5503.         Move.w  d1,Yoff
  5504.         Bra     Settle
  5505.        
  5506. Pfrm64:
  5507.         Cmpi.b  #64,d2
  5508.         Bne     Pfrm65
  5509.  
  5510.         Tst.w   Standon
  5511.         Bne     Pfrm64b
  5512.  
  5513.         Cmpi.w  #12,d7
  5514.         Bgt     Return_Loop
  5515.  
  5516. Pfrm64b:
  5517.         Move.w  #2,FrDir
  5518.         Move.w  #4,Surface
  5519.        
  5520.         Move.w  Xoff,d0
  5521.         Moveq.w #15,d1
  5522.         Bsr     Get_Coord
  5523.         Move.w  d1,Yoff
  5524.         Bra     Settle
  5525.  
  5526. Pfrm65:
  5527.         Cmpi.b  #65,d2
  5528.         Bne     Pfrm66
  5529.        
  5530.         Clr.b   Braking
  5531.         Move.w  #$0002,Yjump
  5532.         Move.w  #$0002,Xjump
  5533.        
  5534.         Tst.w   Fdir
  5535.         Beq     Pfrm65b
  5536.        
  5537.         Clr.w   Yoff
  5538.         Subi.l  #1,Ymap
  5539.        
  5540.         Bra     Set_SPtile_Down
  5541.  
  5542. Pfrm65b:       
  5543.         Clr.w   Xoff
  5544.         Subi.l  #1,Xmap
  5545.        
  5546.         Bra     Set_SPtile_Down
  5547.  
  5548. Pfrm66:
  5549.         Cmpi.w  #2,Detect
  5550.         Bne     Pfrm68
  5551.        
  5552.         Cmpi.b  #66,d2
  5553.         Bne     Pfrm67
  5554.        
  5555.         Moveq.w #46,d2
  5556.         Bra     Pfrm46
  5557.  
  5558. Pfrm67:
  5559.         Cmpi.w  #2,Detect
  5560.         Bne     Pfrm68
  5561.        
  5562.         Cmpi.b  #67,d2
  5563.         Bne     Pfrm68
  5564.        
  5565.         Moveq.w #47,d2
  5566.         Bra     Pfrm47
  5567.  
  5568. Pfrm68:
  5569.         Cmpi.b  #68,d2
  5570.         Bne     Pfrm69
  5571.        
  5572.         Move.w  #2,Detect
  5573.         Moveq.w #48,d2
  5574.         Bra     Pfrm48
  5575.  
  5576. Pfrm69:
  5577. Pfrm70:
  5578. Pfrm71:
  5579. Pfrm72:
  5580.         Cmpi.w  #2,Detect
  5581.         Bne     Pfrm73
  5582.        
  5583.         Cmpi.b  #72,d2
  5584.         Bne     Pfrm73
  5585.        
  5586.         Moveq.w #52,d2
  5587.         Bra     Pfrm52
  5588.  
  5589. Pfrm73:
  5590. Pfrm74:
  5591.         Cmpi.w  #2,Detect
  5592.         Bne     Pfrm75
  5593.        
  5594.         Cmpi.b  #74,d2
  5595.         Bne     Pfrm75
  5596.        
  5597.         Moveq.w #54,d2
  5598.         Bra     Pfrm54
  5599.  
  5600. Pfrm75:
  5601. Pfrm76:
  5602.         Cmpi.w  #2,Detect
  5603.         Bne     Pfrm77
  5604.        
  5605.         Cmpi.b  #76,d2
  5606.         Bne     Pfrm77
  5607.        
  5608.         Moveq.w #56,d2
  5609.         Bra     Pfrm56
  5610.  
  5611. Pfrm77:
  5612. Pfrm78:
  5613.         Cmpi.w  #2,Detect
  5614.         Bne     Pfrm79
  5615.        
  5616.         Cmpi.b  #78,d2
  5617.         Bne     Pfrm79
  5618.        
  5619.         Moveq.w #58,d2
  5620.         Bra     Pfrm58
  5621.  
  5622. Pfrm79:
  5623. Pfrm80:
  5624.         Cmpi.w  #2,Detect
  5625.         Bne     Pfrm81
  5626.        
  5627.         Cmpi.b  #80,d2
  5628.         Bne     Pfrm81
  5629.        
  5630.         Moveq.w #60,d2
  5631.         Bra     Pfrm60
  5632.  
  5633. Pfrm81:
  5634.         Cmpi.w  #2,Detect
  5635.         Bne     Pfrm83
  5636.        
  5637.         Cmpi.b  #81,d2
  5638.         Bne     Pfrm82
  5639.        
  5640.         Moveq.w #61,d2
  5641.         Bra     Pfrm61
  5642.  
  5643. Pfrm82:
  5644.         Cmpi.w  #2,Detect
  5645.         Bne     Pfrm83
  5646.        
  5647.         Cmpi.b  #82,d2
  5648.         Bne     Pfrm83
  5649.        
  5650.         Moveq.w #62,d2
  5651.         Bra     Pfrm62
  5652.  
  5653. Pfrm83:
  5654.         Cmpi.w  #1,Detect
  5655.         Bne     Pfrm86
  5656.        
  5657.         Cmpi.b  #83,d2
  5658.         Bne     Pfrm84
  5659.        
  5660.         Moveq.w #63,d2
  5661.         Bra     Pfrm63
  5662. Pfrm84:
  5663. Pfrm85:
  5664. Pfrm86:
  5665.         Cmpi.w  #1,Detect
  5666.         Bne     Pfrm90
  5667.        
  5668.         Cmpi.b  #86,d2
  5669.         Bne     Pfrm87
  5670.        
  5671.         Moveq.w #26,d2
  5672.         Bra     Pfrm26
  5673.  
  5674. Pfrm87:
  5675.         Cmpi.b  #87,d2
  5676.         Bne     Pfrm88
  5677.        
  5678.         Moveq.w #26,d2
  5679.         Bra     Pfrm26
  5680.  
  5681. Pfrm88:
  5682.         Cmpi.b  #88,d2
  5683.         Bne     Pfrm89
  5684.        
  5685.         Moveq.w #27,d2
  5686.         Bra     Pfrm27
  5687.  
  5688. Pfrm89:
  5689.         Cmpi.b  #89,d2
  5690.         Bne     Pfrm90
  5691.        
  5692.         Moveq.w #28,d2
  5693.         Bra     Pfrm28
  5694.  
  5695. Pfrm90:
  5696.         Cmpi.w  #2,Detect
  5697.         Bne     Pfrm91
  5698.        
  5699.         Cmpi.b  #90,d2
  5700.         Bne     Pfrm91
  5701.        
  5702.         Moveq.w #2,d2
  5703.         Bra     Pfrm2
  5704.  
  5705. Pfrm91:
  5706.         Cmpi.w  #1,Detect
  5707.         Bne     Pfrm92
  5708.        
  5709.         Cmpi.b  #91,d2
  5710.         Bne     Pfrm92
  5711.        
  5712.         Moveq.w #3,d2
  5713.         Bra     Pfrm3
  5714.  
  5715. Pfrm92:
  5716.         Cmpi.w  #1,Detect
  5717.         Bne     Pfrm94
  5718.        
  5719.         Cmpi.b  #92,d2
  5720.         Bne     Pfrm93
  5721.        
  5722.         Moveq.w #4,d2
  5723.         Bra     Pfrm4
  5724.  
  5725. Pfrm93:
  5726.         Cmpi.b  #93,d2
  5727.         Bne     Pfrm94
  5728.        
  5729.         Moveq.w #5,d2
  5730.         Bra     Pfrm5
  5731.        
  5732. Pfrm94:
  5733.         Cmpi.w  #2,Detect
  5734.         Bne     Pfrm96
  5735.        
  5736.         Cmpi.b  #94,d2
  5737.         Bne     Pfrm95
  5738.        
  5739.         Moveq.w #6,d2
  5740.         Bra     Pfrm6
  5741.  
  5742. Pfrm95:
  5743.         Cmpi.b  #95,d2
  5744.         Bne     Pfrm96
  5745.        
  5746.         Moveq.w #7,d2
  5747.         Bra     Pfrm7
  5748.        
  5749. Pfrm96:
  5750.         Cmpi.w  #1,Detect
  5751.         Bne     Pfrm100
  5752.        
  5753.         Cmpi.b  #96,d2
  5754.         Bne     Pfrm97
  5755.        
  5756.         Moveq.w #22,d2
  5757.         Bra     Pfrm22
  5758.  
  5759. Pfrm97:
  5760.         Cmpi.b  #97,d2
  5761.         Bne     Pfrm98
  5762.        
  5763.         Moveq.w #23,d2
  5764.         Bra     Pfrm24
  5765.  
  5766. Pfrm98:
  5767.         Cmpi.b  #98,d2
  5768.         Bne     Pfrm99
  5769.        
  5770.         Moveq.w #24,d2
  5771.         Bra     Pfrm24
  5772.  
  5773. Pfrm99:
  5774.         Cmpi.b  #99,d2
  5775.         Bne     Pfrm100
  5776.        
  5777.         Moveq.w #25,d2
  5778.         Bra     Pfrm25
  5779.        
  5780. Pfrm100:       
  5781. ;       Cmpi.w  #2,Detect
  5782. ;       Bne     Pfrm101
  5783.        
  5784. ;       Cmpi.b  #100,d2
  5785. ;       Bne     Pfrm101
  5786.        
  5787. ;       Moveq.b #8,d2
  5788. ;       Bra     Pfrm8
  5789.  
  5790. Pfrm101:
  5791. ;       Cmpi.w  #1,Detect
  5792. ;       Bne     Pfrm102
  5793.        
  5794. ;       Cmpi.b  #101,d2
  5795. ;       Bne     Pfrm102
  5796.        
  5797. ;       Moveq.b #9,d2
  5798. ;       Bra     Pfrm9
  5799.  
  5800. Pfrm102:
  5801.         Cmpi.w  #2,Detect
  5802.         Bne     Pfrm103
  5803.        
  5804.         Cmpi.b  #102,d2
  5805.         Bne     Pfrm103
  5806.        
  5807.         Move.w  #10,d2
  5808.         Bra     Pfrm10
  5809.  
  5810. Pfrm103:               
  5811.         Cmpi.w  #1,Detect
  5812.         Bne     Pfrm104
  5813.  
  5814.         Cmpi.b  #103,d2
  5815.         Bne     Pfrm104
  5816.        
  5817.         Move.w  #11,d2
  5818.         Bra     Pfrm11
  5819.  
  5820. Pfrm104:
  5821.         Cmpi.b  #104,d2
  5822.         Bne     Pfrm105
  5823.  
  5824.         Cmpi.w  #1,Detect
  5825.         Bne     Pfrm104b
  5826.  
  5827.         Moveq.w #1,d2
  5828.         Bra     Pfrm1
  5829.        
  5830. Pfrm104b:      
  5831.         Cmpi.w  #2,Detect
  5832.         Bne     Pfrm105
  5833.  
  5834.         Move.w  #10,d2
  5835.         Bra     Pfrm10
  5836.  
  5837. Pfrm105:
  5838.         Cmpi.b  #105,d2
  5839.         Bne     Pfrm106
  5840.  
  5841.         Cmpi.w  #2,Detect
  5842.         Bne     Pfrm105b
  5843.  
  5844.         Moveq.w #1,d2
  5845.         Bra     Pfrm1
  5846.  
  5847. Pfrm105b:      
  5848.         Cmpi.w  #1,Detect
  5849.         Bne     Pfrm106
  5850.  
  5851.         Move.w  #11,d2
  5852.         Bra     Pfrm11
  5853.        
  5854. Pfrm106:
  5855.         Cmpi.b  #106,d2
  5856.         Bne     Pfrm107
  5857.  
  5858.         Move.w  #$0000,Xjump
  5859.         Move.w  #$fffe,Yjump
  5860.         Cmpi.w  #$7fff,Vely
  5861.         Blo     Godn_106       
  5862.  
  5863.         Tst.w   Jump
  5864.         Bne     Return_Loop
  5865.  
  5866.         Tst.w   Sidewalk
  5867.         Beq     Return_Loop
  5868.                
  5869.         Move.w  #5,FrDir
  5870.         Move.w  #6,Surface
  5871.         Bra     Settle
  5872.  
  5873. Godn_106:
  5874.         Move.w  #1,Jump
  5875.         Bra     Return_Loop
  5876.  
  5877. Pfrm107:
  5878.         Cmpi.b  #107,d2
  5879.         Bne     Pfrm108
  5880.        
  5881.         Cmpi.w  #2,Detect
  5882.         Bne     Pfrm107b
  5883.  
  5884.         Moveq.b #1,d2
  5885.         Bra     Pfrm1
  5886.  
  5887. Pfrm107b:
  5888.         Moveq.b #114,d2        
  5889.         Bra     Pfrm114
  5890.  
  5891. Pfrm108:
  5892.         Cmpi.b  #108,d2
  5893.         Bne     Pfrm109
  5894.        
  5895.         Cmpi.w  #1,Detect
  5896.         Bne     Pfrm108b
  5897.  
  5898.         Moveq.b #1,d2
  5899.         Bra     Pfrm1
  5900.        
  5901. Pfrm108b:
  5902.         Moveq.b #114,d2        
  5903.         Bra     Pfrm114
  5904.  
  5905. Pfrm109:
  5906.         Cmpi.b  #109,d2         ; (Spikes)
  5907.         Bne     Pfrm110
  5908.  
  5909.         Clr.b   Invulnerable   
  5910.         Move.w  #8,Cf_Hit_Vely          ; Impact velocity adjustment
  5911.         Move.w  #7,Cf_Hit_Velx_Lt
  5912.         Move.w  #$FFF9,Cf_Hit_Velx_Rt
  5913.         Move.w  #1,Hit
  5914.         Rts
  5915.  
  5916. Pfrm110:
  5917.         Cmpi.b  #110,d2
  5918.         Bne     Pfrm111
  5919.        
  5920.         Clr.w   Surface
  5921.         Move.w  #1,Detect
  5922.         Move.w  #31,Yoff
  5923.         Bra     Settle
  5924.  
  5925. Pfrm111:
  5926.         Cmpi.b  #111,d2
  5927.         Bne     Pfrm112
  5928.  
  5929.         Move.w  #1,Detect
  5930.         Bra     Return_Loop
  5931.        
  5932. Pfrm112:
  5933.         Cmpi.b  #112,d2
  5934.         Bne     Pfrm113
  5935.  
  5936.         Move.w  #2,Detect
  5937.         Bra     Return_Loop
  5938.  
  5939. Pfrm113:
  5940.         Cmpi.b  #113,d2
  5941.         Bne     Pfrm114
  5942.        
  5943.         Clr.w   Surface
  5944.         Move.w  #2,Detect
  5945.         Move.w  #31,Yoff
  5946.         Bra     Settle
  5947.  
  5948. Pfrm114:       
  5949.         Cmpi.b  #114,d2
  5950.         Bne     Pfrm115
  5951.  
  5952.         Move.w  #2,Can_Dust
  5953.         Subi.l  #1,Ymap
  5954.         Clr.w   Yoff
  5955.  
  5956.         Bra     Set_SPtile_Down
  5957.         Bra     Settle
  5958.  
  5959. Pfrm115:       
  5960.         Cmpi.b  #115,d2
  5961.         Bne     Pfrm116
  5962.  
  5963.         Cmpi.w  #$7fff,Vely
  5964.         Blo     Return_Loop
  5965.  
  5966.         Tst.w   Standon
  5967.         Beq     Return_Loop
  5968.        
  5969.         Move.w  #2,Can_Dust
  5970.         Addi.l  #1,Ymap
  5971.         Move.w  #31,Yoff
  5972.  
  5973.         Bra     Set_SPtile_Down
  5974.         Bra     Settle
  5975.  
  5976. Pfrm116:
  5977.         Cmpi.w  #2,Detect
  5978.         Bne     Pfrm118
  5979.  
  5980.         Cmpi.b  #116,d2
  5981.         Bne     Pfrm117
  5982.  
  5983.         Move.w  #114,d2
  5984.         Bra     Pfrm114
  5985.        
  5986. Pfrm117:       
  5987.         Cmpi.b  #117,d2
  5988.         Bne     Pfrm118
  5989.  
  5990.         Move.w  #115,d2
  5991.         Bra     Pfrm115
  5992.  
  5993. Pfrm118:
  5994. Pfrm119:
  5995. Pfrm120:
  5996. Pfrm121:
  5997. Pfrm122:
  5998. Pfrm123:
  5999. Pfrm124:
  6000. Pfrm125:
  6001. Pfrm126:
  6002. Pfrm127:
  6003. Pfrm128:
  6004. Pfrm129:
  6005. Pfrm130:
  6006. Pfrm131:
  6007. Pfrm132:
  6008. Pfrm133:
  6009. Pfrm134:
  6010. Pfrm135:
  6011. Pfrm136:
  6012. Pfrm137:
  6013. Pfrm138:
  6014. Pfrm139:
  6015. Pfrm140:
  6016. Pfrm141:
  6017. Pfrm142:
  6018. Pfrm143:
  6019. Pfrm144:
  6020. Pfrm145:
  6021. Pfrm146:
  6022. Pfrm147:
  6023. Pfrm148:
  6024. Pfrm149:
  6025. Pfrm150:
  6026. Pfrm151:
  6027. Pfrm152:
  6028. Pfrm153:
  6029. Pfrm154:
  6030. Pfrm155:
  6031.  
  6032. Pfrm156:
  6033.         Cmpi.b  #156,d2
  6034.         Bne     Pfrm157
  6035.         Bra     Return_Loop
  6036.  
  6037. Pfrm157:
  6038.         Cmpi.b  #157,d2
  6039.         Bne     Pfrm158
  6040.         Bra     Return_Loop
  6041.  
  6042. Pfrm158:
  6043. Pfrm159:
  6044. Pfrm160:
  6045. Pfrm161:
  6046.  
  6047. Pfrm162:
  6048.         Cmpi.b  #162,d2
  6049.         Bne     Pfrm163
  6050.        
  6051.         Cmpi.w  #20,d7
  6052.         Bhi     Pfrm162b
  6053.        
  6054.         Addi.w  #1,Emeralds
  6055.         Move.b  #187,(a0,d0)
  6056.         Sub.l   SMap,a0
  6057.         Clr.b   0(a0,d0)
  6058.         JEWELS_UPDATE
  6059.  
  6060. Pfrm162b:
  6061.         Move.b  #115,d2
  6062.         Bra     Pfrm115
  6063.                
  6064. Pfrm163:                       
  6065.         Cmpi.b  #163,d2
  6066.         Bne     Pfrm164
  6067.        
  6068.         Cmpi.w  #20,d7
  6069.         Bhi     Return_Loop
  6070.        
  6071.         Addi.w  #1,Emeralds
  6072.         Move.b  #188,(a0,d0)
  6073.         Sub.l   SMap,a0
  6074.         Clr.b   0(a0,d0)
  6075.         JEWELS_UPDATE
  6076.         Bra     Return_Loop
  6077.  
  6078. Pfrm164:                       
  6079.         Cmpi.b  #164,d2
  6080.         Bne     Pfrm165
  6081.        
  6082.         Cmpi.w  #20,d7
  6083.         Bhi     Return_Loop
  6084.        
  6085.         Addi.w  #1,Emeralds
  6086.         Move.b  #189,(a0,d0)
  6087.         Sub.l   SMap,a0
  6088.         Clr.b   0(a0,d0)
  6089.         JEWELS_UPDATE
  6090.         Bra     Return_Loop
  6091.  
  6092. Pfrm165:
  6093. Pfrm166:
  6094. Pfrm167:       
  6095.         Cmpi.b  #167,d2
  6096.         Bne     Pfrm168
  6097.  
  6098.         Bra     Return_Loop
  6099. Pfrm168:
  6100. Pfrm169:       
  6101.         Cmpi.b  #169,d2
  6102.         Bne     Pfrm170
  6103.        
  6104.         Cmpi.w  #$7fff,Vely
  6105.         Blo     Return_Loop
  6106.  
  6107.         Cmpi.w  #20,d7
  6108.         Bhi     Return_Loop
  6109.  
  6110.         Move.b  #1,Spring      
  6111.         Move.w  #24,Vely
  6112.         Clr.w   Hit
  6113.         Clr.b   Spin
  6114.         Clr.b   Slide
  6115.        
  6116.         Move.b  #185,(a0,d0)
  6117.         Sub.l   SMap,a0
  6118.         Clr.b   (a0,d0)
  6119.         Bra     Return_Loop
  6120.  
  6121. Pfrm170:
  6122. Pfrm171:
  6123. Pfrm172:
  6124.         Cmpi.b  #172,d2
  6125.         Bne     Pfrm173
  6126.        
  6127.         Cmpi.w  #20,Yoff
  6128.         Bhi     Return_Loop
  6129.        
  6130.         Move.w  #1,Hit
  6131.         Move.b  #$FF,Energy
  6132.         Clr.b   Invulnerable
  6133.         Bra     Return_Loop
  6134.  
  6135. Pfrm173:
  6136.         Cmpi.b  #173,d2
  6137.         Bne     Pfrm174
  6138.        
  6139.         Clr.w   Left_Blocked
  6140.         Clr.w   Right_Blocked
  6141.  
  6142.         Move.w  #1,FrDir
  6143.         Move.w  #31,Yoff
  6144.         Clr.w   Surface
  6145.  
  6146.         Subi.w  #2,Xoff
  6147.         Bpl     Settle
  6148.         Addi.w  #32,Xoff
  6149.         Addi.l  #1,Xmap
  6150.         Bra     Settle
  6151.  
  6152. Pfrm174:
  6153.         Cmpi.b  #174,d2
  6154.         Bne     Pfrm175
  6155.        
  6156.         Cmpi.w  #$7fff,Vely
  6157.         Blo     Return_Loop
  6158.  
  6159.         Move.w  #1,FrDir
  6160.         Clr.w   Brgdn
  6161.         Clr.w   Surface
  6162.  
  6163.         Cmpi.w  #16,Xoff
  6164.         Bhs     Sec_Brg
  6165.         Move.w  #1,Brgdn
  6166.         Move.w  #25,Yoff
  6167.         Bra     Settle
  6168.  
  6169. Sec_Brg:       
  6170.         Move.w  #2,Brgdn
  6171.         Move.w  #25,Yoff
  6172.         Bra     Settle
  6173.                
  6174. Pfrm175:
  6175. Pfrm176:
  6176. Pfrm177:
  6177. Pfrm178:       
  6178. Pfrm179:       
  6179.         Cmpi.b  #179,d2
  6180.         Bne     Pfrm180
  6181.  
  6182.         Cmpi.w  #$7fff,Vely
  6183.         Blo     Return_Loop
  6184.        
  6185.         Tst.w   Dpfstand
  6186.         Beq     Return_Loop
  6187.         Move.w  #31,Yoff
  6188.         Move.w  #1,FrDir
  6189.         Clr.w   Surface
  6190.  
  6191.         Bra     Settle
  6192. Pfrm180:
  6193. Pfrm181:
  6194. Pfrm182:
  6195.         Cmpi.b  #182,d2
  6196.         Bne     Pfrm183
  6197.  
  6198.         Cmpi.w  #$7fff,Vely
  6199.         Blo     Return_Loop
  6200.  
  6201.         Clr.w   Surface
  6202.         Move.w  #1,FrDir
  6203.         Move.w  #1,Fpform
  6204.         Move.w  #28,Yoff
  6205.         Bra     Settle 
  6206.  
  6207.         Clr.w   Standon
  6208.         Bra     Return_Loop
  6209.  
  6210. Pfrm183:
  6211. Pfrm184:
  6212. Pfrm185:
  6213. Pfrm186:
  6214. Pfrm187:
  6215. Pfrm188:
  6216. Pfrm189:
  6217. Pfrm190:
  6218. Pfrm191:
  6219. Pfrm192:
  6220. Pfrm193:
  6221. Pfrm194:
  6222. Pfrm195:
  6223. Pfrm196:
  6224. Pfrm197:
  6225. Pfrm198:
  6226. Pfrm199:
  6227. Pfrm200:
  6228. Pfrm201:
  6229. Pfrm202:
  6230. Pfrm203:
  6231. Pfrm204:
  6232.         Cmpi.b  #204,d2
  6233.         Bne     Pfrm205
  6234.  
  6235.         Move.b  #209,d2
  6236.         Bra     Pfrm209
  6237.  
  6238. Pfrm205:
  6239.         Cmpi.b  #205,d2
  6240.         Bne     Pfrm206
  6241.        
  6242.         Cmpi.w  #1,Detect
  6243.         Bne     Pfrm205b
  6244.        
  6245.         Move.w  #2,d2
  6246.         Bra     Pfrm2
  6247.  
  6248. Pfrm205b:      
  6249.         Move.w  #3,d2
  6250.         Bra     Pfrm3
  6251.  
  6252. Pfrm206:
  6253.         Cmpi.b  #206,d2
  6254.         Bne     Pfrm207
  6255.  
  6256.         Cmpi.w  #1,Detect
  6257.         Bne     Pfrm206b
  6258.  
  6259.         Moveq.w #1,d2
  6260.         Bra     Pfrm1
  6261.        
  6262. Pfrm206b:      
  6263.         Cmpi.w  #2,Detect
  6264.         Bne     Pfrm207
  6265.  
  6266.         Move.w  #10,d2
  6267.         Bra     Pfrm10
  6268.  
  6269. Pfrm207:
  6270.         Cmpi.b  #207,d2
  6271.         Bne     Pfrm208
  6272.  
  6273.         Cmpi.w  #2,Detect
  6274.         Bne     Pfrm207b
  6275.  
  6276.         Moveq.w #1,d2
  6277.         Bra     Platform_Detected
  6278. Pfrm207b:      
  6279.         Cmpi.w  #1,Detect
  6280.         Bne     Pfrm208
  6281.  
  6282.         Move.w  #11,d2
  6283.         Bra     Pfrm11
  6284.  
  6285. Pfrm208:
  6286. Pfrm209:
  6287.         Cmpi.b  #209,d2
  6288.         Bne     Pfrm210
  6289.  
  6290.         Move.w  #1,FrDir
  6291.         Move.w  #31,Yoff
  6292.         Move.w  #1,NJump
  6293.         Clr.w   Surface
  6294.         Bra     Settle
  6295.        
  6296. Pfrm210:       
  6297.         Cmpi.b  #210,d2
  6298.         Bne     Pfrm211
  6299.        
  6300.         Move.w  #1,Detect
  6301.         Moveq.w #49,d2
  6302.         Bra     Pfrm49
  6303.  
  6304. Pfrm211:       
  6305.         Cmpi.w  #1,Detect
  6306.         Bne     Pfrm220
  6307.        
  6308.         Cmpi.b  #211,d2
  6309.         Bne     Pfrm212
  6310.        
  6311.         Moveq.w #50,d2
  6312.         Bra     Pfrm50
  6313.  
  6314.  
  6315. Pfrm212:
  6316.         Cmpi.w  #1,Detect
  6317.         Bne     Pfrm220
  6318.        
  6319.         Cmpi.b  #212,d2
  6320.         Bne     Pfrm213
  6321.        
  6322.         Moveq.w #51,d2
  6323.         Bra     Pfrm51
  6324.  
  6325. Pfrm213:
  6326.         Cmpi.w  #1,Detect
  6327.         Bne     Pfrm220
  6328.        
  6329.         Cmpi.b  #213,d2
  6330.         Bne     Pfrm214
  6331.        
  6332.         Moveq.w #53,d2
  6333.         Bra     Pfrm53
  6334.  
  6335. Pfrm214:
  6336.         Cmpi.w  #1,Detect
  6337.         Bne     Pfrm220
  6338.        
  6339.         Cmpi.b  #214,d2
  6340.         Bne     Pfrm215
  6341.        
  6342.         Moveq.w #55,d2
  6343.         Bra     Pfrm55
  6344.  
  6345. Pfrm215:
  6346.         Cmpi.w  #1,Detect
  6347.         Bne     Pfrm220
  6348.        
  6349.         Cmpi.b  #215,d2
  6350.         Bne     Pfrm216
  6351.        
  6352.         Moveq.w #57,d2
  6353.         Bra     Pfrm57
  6354.  
  6355. Pfrm216:
  6356.         Cmpi.w  #1,Detect
  6357.         Bne     Pfrm220
  6358.        
  6359.         Cmpi.b  #216,d2
  6360.         Bne     Pfrm217
  6361.        
  6362.         Moveq.w #59,d2
  6363.         Bra     Pfrm59
  6364.  
  6365. Pfrm217:
  6366.         Cmpi.w  #1,Detect
  6367.         Bne     Pfrm220
  6368.        
  6369.         Cmpi.b  #217,d2
  6370.         Bne     Pfrm218
  6371.        
  6372.         Moveq.w #63,d2
  6373.         Bra     Pfrm63
  6374.  
  6375. Pfrm218:
  6376.         Cmpi.w  #1,Detect
  6377.         Bne     Pfrm220
  6378.        
  6379.         Cmpi.b  #218,d2
  6380.         Bne     Pfrm219
  6381.        
  6382.         Moveq.w #64,d2
  6383.         Bra     Pfrm64
  6384.  
  6385. Pfrm219:
  6386.         Cmpi.w  #1,Detect
  6387.         Bne     Pfrm220
  6388.        
  6389.         Cmpi.b  #219,d2
  6390.         Bne     Pfrm220
  6391.        
  6392.         Moveq.w #65,d2
  6393.         Bra     Pfrm65
  6394.  
  6395. Pfrm220:
  6396.  
  6397. Pfrm221:               
  6398.         Cmpi.b  #221,d2
  6399.         Bne     Pfrm222
  6400.  
  6401.         Clr.w   Surface
  6402.         Moveq.b #1,d2
  6403.         Bra     Pfrm1
  6404.  
  6405. Pfrm222:
  6406.         Cmpi.b  #222,d2
  6407.         Bne     Pfrm223
  6408.        
  6409.         Moveq.w #2,d2
  6410.         Bra     Pfrm2
  6411. Pfrm223:
  6412.         Cmpi.b  #223,d2
  6413.         Bne     Pfrm224
  6414.  
  6415.         Moveq.w #3,d2
  6416.         Bra     Pfrm3
  6417. Pfrm224:
  6418.         Cmpi.b  #224,d2
  6419.         Bne     Pfrm225
  6420.  
  6421.         Moveq.w #4,d2
  6422.         Bra     Pfrm4
  6423. Pfrm225:
  6424.         Cmpi.b  #225,d2
  6425.         Bne     Pfrm226
  6426.        
  6427.         Moveq.w #5,d2
  6428.         Bra     Pfrm5
  6429. Pfrm226:
  6430.         Cmpi.b  #226,d2
  6431.         Bne     Pfrm227
  6432.        
  6433.         Moveq.w #6,d2
  6434.         Bra     Pfrm6
  6435. Pfrm227:
  6436.         Cmpi.b  #227,d2
  6437.         Bne     Pfrm228
  6438.        
  6439.         Moveq.w #7,d2
  6440.         Bra     Pfrm7
  6441. Pfrm228:
  6442.         Cmpi.b  #228,d2
  6443.         Bne     Pfrm229
  6444.        
  6445.         Moveq.w #114,d2
  6446.         Bra     Pfrm114
  6447. Pfrm229:
  6448.         Cmpi.b  #229,d2
  6449.         Bne     Pfrm230
  6450.        
  6451.         Moveq.w #115,d2
  6452.         Bra     Pfrm115
  6453.  
  6454. Pfrm230:
  6455.         Cmpi.b  #230,d2
  6456.         Bne     Pfrm231
  6457.  
  6458.         Moveq.w #22,d2
  6459.         Bra     Pfrm22
  6460.  
  6461. Pfrm231:
  6462.         Cmpi.b  #231,d2
  6463.         Bne     Pfrm232
  6464.  
  6465.         Moveq.w #23,d2
  6466.         Bra     Pfrm23
  6467.  
  6468. Pfrm232:
  6469.         Cmpi.b  #232,d2
  6470.         Bne     Pfrm233
  6471.  
  6472.         Moveq.w #24,d2
  6473.         Bra     Pfrm24
  6474.  
  6475. Pfrm233:
  6476.         Cmpi.b  #233,d2
  6477.         Bne     Pfrm234
  6478.  
  6479.         Moveq.w #25,d2
  6480.         Bra     Pfrm25
  6481.  
  6482. Pfrm234:
  6483.         Cmpi.b  #234,d2
  6484.         Bne     Pfrm235
  6485.        
  6486.         Moveq.w #26,d2
  6487.         Bra     Pfrm26
  6488.  
  6489. Pfrm235:
  6490.         Cmpi.b  #235,d2
  6491.         Bne     Pfrm236
  6492.        
  6493.         Moveq.w #27,d2
  6494.         Bra     Pfrm27
  6495.  
  6496. Pfrm236:
  6497.         Cmpi.b  #236,d2
  6498.         Bne     Pfrm237
  6499.        
  6500.         Moveq.w #28,d2
  6501.         Bra     Pfrm28
  6502.  
  6503. Pfrm237:
  6504.         Cmpi.b  #237,d2
  6505.         Bne     Pfrm238
  6506.  
  6507.         Moveq.w #29,d2
  6508.         Bra     Pfrm29
  6509.  
  6510. Pfrm238:
  6511. ;       Cmpi.w  #2,Detect
  6512. ;       Bne     Pfrm239
  6513.        
  6514. ;       Cmpi.b  #238,d2
  6515. ;       Bne     Pfrm239
  6516.        
  6517. ;       Moveq.b #8,d2
  6518. ;       Bra     Pfrm8
  6519.  
  6520. Pfrm239:
  6521. ;       Cmpi.w  #1,Detect
  6522. ;       Bne     Pfrm240
  6523.        
  6524. ;       Cmpi.b  #239,d2
  6525. ;       Bne     Pfrm240
  6526.        
  6527. ;       Moveq.b #9,d2
  6528. ;       Bra     Pfrm9
  6529.  
  6530. Pfrm240:
  6531.         Clr.w   Standon
  6532.         Bra     Return_Loop
  6533.                
  6534. Settle:
  6535.         Tst.w   Standon
  6536.         Bne     Settle_On
  6537.  
  6538.         Cmpi.w  #7,Surface
  6539.         Bne     Set2
  6540.         Move.w  Vely,Velx
  6541.         Bra     Settle_On
  6542.  
  6543. Set2:
  6544.         Cmpi.w  #5,Surface
  6545.         Bne     Set3
  6546.         Move.w  Vely,Velx
  6547.         Neg.w   Velx
  6548.         Bra     Settle_On
  6549.  
  6550. Set3:
  6551.         Cmpi.b  #61,d2
  6552.         Bne     Set4
  6553.         Move.w  Vely,d0
  6554.         Ext.l   d0
  6555.         Divs    #2,d0
  6556.         Move.w  d0,Velx
  6557.         Bra     Settle_On
  6558.  
  6559. Set4:
  6560.         Cmpi.b  #64,d2
  6561.         Bne     Settle_On
  6562.         Move.w  Vely,d0
  6563.         Neg.w   d0
  6564.         Ext.l   d0
  6565.         Divu    #2,d0
  6566.         Move.w  d0,Velx
  6567.         Bra     Settle_On      
  6568.  
  6569. Settle_On:
  6570.         Tst.w   Can_Dust
  6571.         Beq     No_Dust_On_Land
  6572.         Move.w  #1,Dust_Delay
  6573.         Move.w  #152,XDust
  6574.         Move.w  #143,YDust     
  6575.  
  6576. No_Dust_On_Land:
  6577.         Clr.w   Vely
  6578.         Clr.w   Jump
  6579.         Clr.b   Spring
  6580.         Move.w  #1,Stand
  6581.         Move.w  #1,Standon
  6582.         Clr.b   Spin
  6583.         Clr.w   Hit
  6584.         Rts    
  6585.        
  6586. *****************************************
  6587. *       Determine what is to the left,  *
  6588. *       right and above player sprite   *
  6589. *****************************************
  6590. Set_SPtile_Middle:
  6591.         Clr.b   Hang
  6592.  
  6593.         Move.l  SMap,d0         ; Mid-tile
  6594.         Move.l  Map,a0
  6595.        
  6596.         Lea     8(a0,d0.l),a0
  6597.  
  6598.         Moveq.l #4,d0
  6599.         Moveq.l #3,d1
  6600.        
  6601.         Add.l   Xmap,d0
  6602.         Add.l   Ymap,d1
  6603.         Mulu    Xmax,d1
  6604.         Add.l   d1,d0
  6605.        
  6606.         Move.b  0(a0,d0),d2
  6607.         Tst.b   d2
  6608.         Bne     Pfrm1_CMid
  6609.         Bra     Check_Over
  6610.  
  6611. Pfrm1_CMid:
  6612.         Cmpi.b  #8,d2           ;(Wall)
  6613.         Bne     Pfrm2_CMid
  6614.  
  6615.         Clr.b   Braking
  6616.         Move.w  #3,Velx
  6617.         Rts
  6618.  
  6619. Pfrm2_CMid:
  6620.         Cmpi.b  #9,d2           ;(Wall)
  6621.         Bne     Pfrm3_CMid
  6622.        
  6623.         Clr.b   Braking
  6624.         Move.w  #$fffd,Velx
  6625.         Rts
  6626.  
  6627. Pfrm3_CMid
  6628.         Tst.w   Velx
  6629.         Beq     No_Lateral_Check
  6630.  
  6631.         Cmpi.b  #12,d2          ;(Wall)
  6632.         Beq     Go_Left
  6633.  
  6634.         Cmpi.b  #13,d2
  6635.         Beq     Go_Right
  6636.  
  6637.         Cmpi.b  #14,d2          ;(Wall)
  6638.         Beq     Go_Left
  6639.  
  6640.         Cmpi.b  #15,d2
  6641.         Beq     Go_Right
  6642.  
  6643. No_Lateral_Check:
  6644.         Cmpi.b  #17,d2
  6645.         Beq     Saqaf
  6646.        
  6647.         Cmpi.b  #18,d2
  6648.         Beq     Saqaf
  6649.  
  6650.         Cmpi.b  #19,d2
  6651.         Beq     Saqaf
  6652.  
  6653. Pfrm4_CMid:
  6654.         Cmpi.b  #20,d2
  6655.         Bne     Pfrm5_CMid
  6656.  
  6657.         Cmpi.w  #14,Yoff
  6658.         Blo     Return_Loop_Two
  6659.  
  6660.         Btst    #$7,Mousekey           
  6661.         Beq     Return_Loop_Two
  6662.  
  6663.         Move.w  #28,Yoff
  6664.         Move.w  #132,YChar
  6665.         Bra     Settle_On2
  6666.  
  6667. Pfrm5_CMid:    
  6668.         Cmpi.b  #21,d2
  6669.         Bne     Pfrm6_CMid
  6670.         Bra     Saqaf
  6671.  
  6672. Pfrm6_CMid:
  6673.         Cmpi.b  #160,d2         ; Restart point (Animated computer)
  6674.         Bne     Pfrm7_CMid
  6675.        
  6676.         Tst.b   Crouch
  6677.         Beq     Not_Selected
  6678.  
  6679.         Move.l  Xmap,XStart
  6680.         Move.l  Ymap,YStart
  6681.         Move.w  #008,XStartb
  6682.         Move.w  Yoff,YStartb
  6683.        
  6684.         Clr.b   0(a0,d0)
  6685.         Sub.l   SMap,a0
  6686.         Move.b  #197,0(a0,d0)
  6687.  
  6688. Not_Selected:  
  6689.         Rts
  6690.  
  6691. Pfrm7_CMid:    
  6692.         Cmpi.b  #165,d2         ; Barrier
  6693.         Bne     Pfrm8_CMid
  6694.         Bra     Go_Right               
  6695.  
  6696. Pfrm8_CMid:
  6697.         Cmpi.b  #166,d2         ; Barrier
  6698.         Bne     Pfrm9_CMid
  6699.         Bra     Go_Right               
  6700.  
  6701. Pfrm9_CMid:
  6702.         Cmpi.b  #161,d2         ; Replenish energy
  6703.         Bne     Pfrm10_CMid
  6704.  
  6705.         Cmpi.b  #2,Energy
  6706.         Blo     Add_Energy
  6707.         Rts
  6708.  
  6709. Add_Energy:
  6710.         Addi.b  #1,Energy
  6711.         ENERGY_UPDATE
  6712.         Rts
  6713.  
  6714. Pfrm10_CMid:                   
  6715.         Cmpi.b  #162,d2         ; Emerald
  6716.         Bne     Pfrm11_CMid
  6717.        
  6718.         Cmpi.w  #10,Yoff
  6719.         Blo     Check_Over
  6720.        
  6721.         Addi.w  #1,Emeralds
  6722.  
  6723.         Move.b  #187,(a0,d0)
  6724.         Sub.l   SMap,a0
  6725.         Clr.b   0(a0,d0)
  6726.  
  6727.         JEWELS_UPDATE
  6728.         Rts
  6729.  
  6730. Pfrm11_CMid:                   
  6731.         Cmpi.b  #163,d2         ; Emerald
  6732.         Bne     Pfrm12_CMid
  6733.        
  6734.         Cmpi.w  #10,Yoff
  6735.         Blo     Check_Over
  6736.        
  6737.         Addi.w  #1,Emeralds
  6738.  
  6739.         Move.b  #188,(a0,d0)
  6740.         Sub.l   SMap,a0
  6741.         Clr.b   0(a0,d0)
  6742.        
  6743.         JEWELS_UPDATE
  6744.         Rts            
  6745.  
  6746. Pfrm12_CMid:                   
  6747.         Cmpi.b  #164,d2         ; Emerald
  6748.         Bne     Pfrm13_CMid
  6749.        
  6750.         Cmpi.w  #10,Yoff
  6751.         Blo     Check_Over
  6752.        
  6753.         Addi.w  #1,Emeralds
  6754.  
  6755.         Move.b  #189,(a0,d0)
  6756.         Sub.l   SMap,a0
  6757.         Clr.b   0(a0,d0)
  6758.  
  6759.         JEWELS_UPDATE
  6760.         Rts
  6761.  
  6762. Pfrm13_CMid:                   
  6763.         Cmpi.b  #170,d2         ; (Spring -28)
  6764.         Bne     Pfrm14_CMid
  6765.         Move.w  #$FFE4,Velx
  6766.         Clr.b   Braking
  6767.         Rts
  6768.  
  6769. Pfrm14_CMid:
  6770.         Cmpi.b  #171,d2         ; (Spring  28)
  6771.         Bne     Pfrm15_CMid
  6772.         Move.w  #28,Velx
  6773.         Clr.b   Braking
  6774.         Rts
  6775.  
  6776. Pfrm15_CMid:
  6777.         Cmpi.b  #109,d2         ; Spikes
  6778.         Bne     Pfrm16_CMid
  6779.  
  6780.         Clr.b   Invulnerable
  6781.         Move.w  #8,Cf_Hit_Vely  ; Impact from collision
  6782.         Move.w  #7,Cf_Hit_Velx_Lt
  6783.         Move.w  #$FFF9,Cf_Hit_Velx_Rt
  6784.         Move.w  #1,Hit
  6785.         Rts
  6786.  
  6787. Pfrm16_CMid:
  6788.         Cmpi.b  #238,d2
  6789.         Bne     Pfrm17_CMid
  6790.        
  6791.         Cmpi.w  #1,Detect
  6792.         Bne     Pfrm17_CMid
  6793.  
  6794.         Moveq.b #8,d2
  6795.         Bra     Pfrm1_CMid
  6796.  
  6797. Pfrm17_CMid:
  6798.         Cmpi.b  #100,d2
  6799.         Bne     Pfrm18_CMid
  6800.        
  6801.         Cmpi.w  #2,Detect
  6802.         Bne     Pfrm18_CMid
  6803.  
  6804.         Moveq.b #9,d2
  6805.         Bra     Pfrm2_CMid
  6806.  
  6807. Pfrm18_CMid:
  6808.         Cmpi.b  #101,d2
  6809.         Bne     Pfrm19_CMid
  6810.        
  6811.         Cmpi.w  #1,Detect
  6812.         Bne     Pfrm19_CMid
  6813.  
  6814.         Moveq.b #8,d2
  6815.         Bra     Pfrm1_CMid
  6816.  
  6817. Pfrm19_CMid:
  6818.         Cmpi.b  #239,d2
  6819.         Bne     Check_Over
  6820.        
  6821.         Cmpi.w  #2,Detect
  6822.         Bne     Check_Over
  6823.  
  6824.         Moveq.b #9,d2
  6825.         Bra     Pfrm2_CMid
  6826.  
  6827. Check_Over:
  6828.         Tst.w   VChange
  6829.         Bne     Return_Loop_Two
  6830.  
  6831.         Cmpi.w  #16,Xoff
  6832.         Bhi     Set_SPtile_Middle2
  6833.  
  6834.         Move.l  SMap,d0
  6835.         Move.l  Map,a0
  6836.        
  6837.         Lea     8(a0,d0.l),a0
  6838.  
  6839.         Moveq.l #5,d0
  6840.         Moveq.l #3,d1
  6841.        
  6842.         Cmpi.w  #16,Yoff
  6843.         Bhs     No_BCheck
  6844.         Addi.l  #1,d1
  6845.  
  6846. No_BCheck:     
  6847.         Add.l   Xmap,d0
  6848.         Add.l   Ymap,d1
  6849.         Mulu    Xmax,d1
  6850.         Add.l   d1,d0
  6851.        
  6852.         Move.b  0(a0,d0),d2
  6853.         Tst.b   d2
  6854.         Bne     Platform_Detected_Mid
  6855.         Bra     Set_SPtile_Middle2
  6856.        
  6857. Platform_Detected_Mid:
  6858.         Cmpi.b  #12,d2
  6859.         Beq     Wall_Right
  6860.  
  6861.         Cmpi.b  #14,d2
  6862.         Beq     Wall_Right
  6863.  
  6864.         Cmpi.b  #18,d2
  6865.         Beq     Wall_Right
  6866.  
  6867.         Cmpi.b  #109,d2         ; Spikes
  6868.         Beq     Wall_Right             
  6869.  
  6870.         Cmpi.b  #165,d2
  6871.         Beq     Wall_Right             
  6872.  
  6873.         Cmpi.b  #166,d2
  6874.         Beq     Wall_Right             
  6875.  
  6876. Set_SPtile_Middle2:
  6877.         Cmpi.w  #16,Xoff
  6878.         Blo     Return_Loop_Two
  6879.  
  6880.         Move.l  SMap,d0
  6881.         Move.l  Map,a0
  6882.        
  6883.         Lea     8(a0,d0.l),a0
  6884.  
  6885.         Moveq.l #3,d0
  6886.         Moveq.l #3,d1
  6887.  
  6888.         Cmpi.w  #16,Yoff
  6889.         Bhs     No_CCheck
  6890.         Addi.l  #1,d1
  6891.  
  6892. No_CCheck:             
  6893.         Add.l   Xmap,d0
  6894.         Add.l   Ymap,d1
  6895.         Mulu    Xmax,d1
  6896.         Add.l   d1,d0
  6897.  
  6898.         Move.b  0(a0,d0),d2
  6899.         Tst.b   d2
  6900.         Bne     Pfrm13_BMid    
  6901.         Bra     Return_Loop_Two
  6902.  
  6903. Pfrm13_BMid:
  6904.         Cmpi.b  #13,d2
  6905.         Beq     Wall_Left
  6906.  
  6907.         Cmpi.b  #15,d2
  6908.         Beq     Wall_Left
  6909.  
  6910.         Cmpi.b  #19,d2
  6911.         Beq     Wall_Left
  6912.  
  6913.         Cmpi.b  #109,d2         ; Spikes
  6914.         Beq     Wall_Left
  6915.        
  6916.         Cmpi.b  #165,d2
  6917.         Beq     Wall_Left              
  6918.  
  6919.         Cmpi.b  #166,d2
  6920.         Beq     Wall_Left      
  6921.  
  6922. Return_Loop_Two:
  6923.         Rts    
  6924.        
  6925. Settle_On2:
  6926.         Tst.w   Velx
  6927.         Beq     Hang_In_Limits
  6928.  
  6929.         Cmpi.w  #$7fff,Velx
  6930.         Blo     Now_Check_Pos_HVelx
  6931.  
  6932.         Cmpi.w  #$FFFD,Velx
  6933.         Bhs     Hang_In_Limits
  6934.         Move.w  #$FFFD,Velx
  6935.         Bra     Hang_In_Limits
  6936.  
  6937. Now_Check_Pos_HVelx:
  6938.         Cmpi.w  #3,Velx
  6939.         Bls     Hang_In_Limits
  6940.         Move.w  #3,Velx
  6941.        
  6942. Hang_In_Limits:
  6943.         Clr.w   Vely
  6944.         Clr.w   Jump   
  6945.         Clr.w   Hit
  6946.         Clr.b   Spin
  6947.         Clr.b   Slide
  6948.         Move.w  #1,Stand
  6949.         Move.b  #1,Hang
  6950.         Rts    
  6951.  
  6952. Saqaf:
  6953.         Move.w  #$ffff,Vely
  6954.         Add.l   #1,Ymap
  6955.         Move.w  #31,Yoff
  6956.         Bra     Check_Over
  6957.  
  6958. Go_Left:
  6959.         Clr.w   Velx
  6960.         Move.w  #16,Xoff
  6961.         Subi.l  #1,Xmap
  6962.         Rts
  6963.  
  6964. Go_Right:
  6965.         Clr.w   Velx
  6966.         Move.w  #16,Xoff
  6967.         Addi.l  #1,Xmap
  6968.         Rts
  6969.  
  6970. Wall_Right:
  6971.         Cmpi.w  #$7fff,Velx
  6972.         Blo     Return_Loop_Two
  6973.  
  6974.         Move.w  #1,Right_Blocked
  6975.         Clr.b   Braking
  6976.         Clr.w   Velx
  6977.         Move.w  #16,Xoff
  6978.         Bra     Return_Loop_Two
  6979.        
  6980. Wall_Left:
  6981.         Tst.w   Velx
  6982.         Beq     Return_Loop_Two
  6983.  
  6984.         Cmpi.w  #$7fff,Velx
  6985.         Bhi     Return_Loop_Two
  6986.  
  6987.         Move.w  #1,Left_Blocked
  6988.         Clr.b   Braking
  6989.         Clr.w   Velx
  6990.         Move.w  #16,Xoff
  6991.         Bra     Return_Loop_Two
  6992.  
  6993. ; Fetch Word From Loop Data Table
  6994.  
  6995. Get_Coord:     
  6996.         Mulu    #2,d0
  6997.         Lea     Loop_Data,a0
  6998.         Mulu    #64,d1
  6999.         Add.w   d1,d0
  7000.         Move.w  0(a0,d0),d1
  7001.         Rts
  7002.  
  7003. *************************************************
  7004. *       Check which tiles are near player       *
  7005. *************************************************      
  7006. Check_Near_Tiles:
  7007.         Clr.b   Whoopie
  7008.         Clr.b   Ext_Whoopie
  7009.  
  7010.         Cmpi.w  #12,Xoff
  7011.         Bhs     Check_Other_Side
  7012.  
  7013.         Move.l  Map,a0
  7014.         Move.w  Xmax,d0
  7015.         Move.w  Ymax,d1
  7016.         Mulu    d1,d0
  7017.        
  7018.         Lea     8(a0,d0.l),a0
  7019.         Moveq.l #5,d0
  7020.         Moveq.l #4,d1
  7021.        
  7022.         Add.l   Xmap,d0
  7023.         Add.l   Ymap,d1
  7024.         Mulu    Xmax,d1
  7025.         Add.l   d1,d0
  7026.        
  7027.         Move.b  0(a0,d0),d2
  7028.         Tst.b   d2
  7029.         Bne     Check_Other_Side
  7030.        
  7031.         Move.b  #1,Whoopie
  7032.  
  7033.         Cmpi.w  #5,Xoff
  7034.         Bhi     No_Ext_Whoopie_A
  7035.         Move.b  #1,Ext_Whoopie
  7036.  
  7037. No_Ext_Whoopie_A:
  7038.         Rts
  7039.        
  7040. Check_Other_Side:
  7041.         Cmpi.w  #20,Xoff
  7042.         Bls     Near_Check_Over
  7043.  
  7044.         Move.l  Map,a0
  7045.         Move.w  Xmax,d0
  7046.         Move.w  Ymax,d1
  7047.         Mulu    d1,d0
  7048.        
  7049.         Lea     8(a0,d0.l),a0
  7050.         Moveq.l #3,d0
  7051.         Moveq.l #4,d1
  7052.        
  7053.         Add.l   Xmap,d0
  7054.         Add.l   Ymap,d1
  7055.         Mulu    Xmax,d1
  7056.         Add.l   d1,d0
  7057.        
  7058.         Move.b  0(a0,d0),d2
  7059.         Tst.b   d2
  7060.         Bne     Near_Check_Over
  7061.  
  7062.         Move.b  #2,Whoopie
  7063.  
  7064.         Cmpi.w  #27,Xoff
  7065.         Blo     Near_Check_Over
  7066.         Move.b  #1,Ext_Whoopie
  7067.  
  7068. Near_Check_Over:
  7069.         Rts
  7070.        
  7071. *************************************************
  7072. *       Draw player sprite on screen            *
  7073. *************************************************
  7074. Draw_Hero:
  7075.         Move.l  Sprites,Src
  7076.         Move.l  Masks,SrcMask
  7077.         Bsr     Which_Frame
  7078.  
  7079.         Tst.w   Hit
  7080.         Bne     Still_Hit_Flying
  7081.  
  7082.         Tst.b   Invulnerable
  7083.         Beq     No_Dec_Invulnerable
  7084.         Subi.b  #1,Invulnerable
  7085.  
  7086. No_Dec_Invulnerable:
  7087.         Btst.b  #0,Invulnerable
  7088.         Bne     Blaze_Invulnerable
  7089.  
  7090. Still_Hit_Flying:
  7091.         Subi.w  #1,d0           * Frame
  7092.         Move.w  d0,d1           * Fr -> d1
  7093.         Divu    #8,d1           * D1 -> X Fr Y Fr
  7094.         Move.w  d1,d2           * Y Fr - > d2                  
  7095.         Swap    d1              * d1 <-> d1
  7096.         Mulu.w  #4,d1           * D1 -> Bytes
  7097.         Mulu.w  #$400,d2        * D2 -> Bytes  
  7098.  
  7099.         Ext.l   d1
  7100.         Ext.l   d2
  7101.         Add.l   d1,d2
  7102.        
  7103.         Add.l   d2,Src
  7104.         Add.l   d2,SrcMask
  7105.  
  7106.         Moveq.l #0,d0
  7107.         Moveq.l #0,d1
  7108.  
  7109.         Move.w  YChar,d0        ; Y coordinate
  7110.         Mulu    #40,d0
  7111.        
  7112.         Move.w  XChar,d1        ; X coordinate
  7113.         Divu    #16,d1         
  7114.         Swap    d1             
  7115.         Move.w  d1,d2          
  7116.         Swap    d1             
  7117.         Andi.l  #$ffff,d1      
  7118.         Mulu    #2,d1          
  7119.  
  7120.         Move.w  Offx,d3        
  7121.         Andi.w  #$F,d3
  7122.         Sub.w   d3,d2
  7123.  
  7124.         Bpl     Shift_All_Right_B
  7125.         Addi.w  #16,d2
  7126.         Subi.l  #2,d1
  7127.  
  7128.         Bpl     Shift_All_Right_B
  7129.         Moveq.l #0,d0
  7130.  
  7131. Shift_All_Right_B:
  7132.         Move.w  d2,Obx
  7133.  
  7134.         Add.l   d1,d0
  7135.         Add.l   Currbuffer,d0
  7136.         Move.l  d0,Dest
  7137.  
  7138.         Moveq.l #0,d0
  7139.         Moveq.l #0,d7
  7140.        
  7141.         Cmpi.b  #1,Spring
  7142.         Bne     Normal_Size
  7143.         Move.w  #$C03,d7
  7144.         Bra     Big_Size
  7145.  
  7146. Normal_Size:   
  7147.         Move.w  #$803,d7
  7148.  
  7149. Big_Size:      
  7150.         Tst.w   YFlip
  7151.         Beq     No_Flip
  7152.        
  7153.         Addi.l  #$500,Dest
  7154.        
  7155.         BLITM   Src,Dest,d7,#26,#-46,Obx,#$FFFF,#0,SrcMask
  7156.         Bra     Yes_Flip
  7157.  
  7158. No_Flip:
  7159.         BLITM   Src,Dest,d7,#26,#34,Obx,#$FFFF,#0,SrcMask
  7160.  
  7161. Yes_Flip:
  7162.         Addi.l  #13824,Src
  7163.         Addi.l  #10240,Dest
  7164.         FBLITM  SrcMask,Src,Dest,d7
  7165.         Addi.l  #13824,Src
  7166.         Addi.l  #10240,Dest
  7167.         FBLITM  SrcMask,Src,Dest,d7
  7168.         Addi.l  #13824,Src
  7169.         Addi.l  #10240,Dest
  7170.         FBLITM  SrcMask,Src,Dest,d7
  7171.         Addi.l  #13824,Src
  7172.         Addi.l  #10240,Dest
  7173.         FBLITM  SrcMask,Src,Dest,d7
  7174.  
  7175. Blaze_Invulnerable:
  7176.         Rts
  7177.  
  7178. *************************************************
  7179. *       Handle dust animation                   *
  7180. *************************************************
  7181. Dust_Routine:
  7182.         Tst.w   Hit
  7183.         Bne     No_Dust
  7184.  
  7185.         Tst.b   Cover_Cat
  7186.         Bne     No_Dust
  7187.  
  7188.         Cmpi.w  #4,Surface
  7189.         Bhi     No_Dust
  7190.  
  7191.         Tst.b   Slide
  7192.         Bne     Do_Dust
  7193.        
  7194.         Tst.b   Braking
  7195.         Bne     Do_Dust
  7196.  
  7197.         Tst.w   Dust_Delay
  7198.         Bne     Do_Dust
  7199.  
  7200. No_Dust:
  7201.         Rts
  7202.  
  7203. Do_Dust:
  7204.         Addi.w  #1,Dust_Delay
  7205.         Cmpi.w  #7,Dust_Delay
  7206.         Bls     No_Dust_Reset
  7207.        
  7208.         Move.w  #152,XDust
  7209.         Move.w  #143,YDust
  7210.         Clr.w   Dust_Delay
  7211.         Rts
  7212.  
  7213. No_Dust_Reset:
  7214.         Move.w  Velx,d1
  7215.  
  7216.         Tst.w   d1
  7217.         Beq     Dust_Lab_B
  7218.        
  7219.         Cmpi.w  #$7FFF,d1
  7220.         Bhi     Dust_Lab_A
  7221.        
  7222.         Cmpi.w  #7,d1
  7223.         Bls     Dust_Lab_B
  7224.         Move.w  #7,d1
  7225.         Bra     Dust_Lab_B
  7226.        
  7227. Dust_Lab_A:    
  7228.         Cmpi.w  #$FFF9,d1
  7229.         Bhs     Dust_Lab_B
  7230.         Move.w  #$FFF9,d1
  7231.  
  7232. Dust_Lab_B:
  7233.         Add.w   d1,XDust
  7234.         Subi.w  #1,YDust
  7235.         Andi.w  #$FF,YDust
  7236.  
  7237.         Move.w  Dust_Delay,d0
  7238.         Divu    #2,d0
  7239.         Andi.l  #%11,d0
  7240.         Addi.w  #422,d0
  7241.        
  7242.         Move.w  XDust,XSprite_16
  7243.         Move.w  YDust,YSprite_16
  7244.         Bsr     Sprite_16
  7245.         Rts
  7246.  
  7247. Sprite_16:
  7248.         Move.l  Sprites,Src
  7249.         Move.l  Masks,SrcMask
  7250.  
  7251.         Subi.w  #1,d0           * Frame
  7252.         Move.w  d0,d1           * Fr -> d1
  7253.         Divu    #16,d1          * D1 -> X Fr Y Fr
  7254.         Move.w  d1,d2           * Y Fr - > d2                  
  7255.         Swap    d1              * d1 <-> d1
  7256.         Mulu.w  #2,d1           * D1 -> Bytes
  7257.         Mulu.w  #$200,d2        * D2 -> Bytes  
  7258.  
  7259.         Ext.l   d1
  7260.         Ext.l   d2
  7261.         Add.l   d1,d2
  7262.        
  7263.         Add.l   d2,Src
  7264.         Add.l   d2,SrcMask
  7265.  
  7266.         Moveq.l #0,d0
  7267.         Moveq.l #0,d1
  7268.  
  7269.         Move.w  YSprite_16,d0   * Y Coord
  7270.         Mulu    #40,d0
  7271.        
  7272.         Move.w  XSprite_16,d1   * XCoord
  7273.         Divu    #16,d1         
  7274.         Swap    d1             
  7275.         Move.w  d1,d2          
  7276.         Swap    d1             
  7277.         Andi.l  #$ffff,d1      
  7278.         Mulu    #2,d1          
  7279.  
  7280.         Move.w  Offx,d3        
  7281.         Andi.w  #$F,d3
  7282.         Sub.w   d3,d2
  7283.  
  7284.         Bpl     Shift_All_Right_C
  7285.         Addi.w  #16,d2
  7286.         Subi.l  #2,d1
  7287.  
  7288.         Bpl     Shift_All_Right_C
  7289.         Moveq.l #0,d0
  7290.  
  7291. Shift_All_Right_C:
  7292.         Move.w  d2,Obx
  7293.  
  7294.         Add.l   d1,d0
  7295.         Add.l   Currbuffer,d0
  7296.         Move.l  d0,Dest
  7297.        
  7298.         BLITM   Src,Dest,#$402,#28,#36,Obx,#$FFFF,#0,SrcMask
  7299.         Addi.l  #13824,Src
  7300.         Addi.l  #10240,Dest
  7301.         FBLITM  SrcMask,Src,Dest,#$402
  7302.         Addi.l  #13824,Src
  7303.         Addi.l  #10240,Dest
  7304.         FBLITM  SrcMask,Src,Dest,#$402
  7305.         Addi.l  #13824,Src
  7306.         Addi.l  #10240,Dest
  7307.         FBLITM  SrcMask,Src,Dest,#$402
  7308.         Addi.l  #13824,Src
  7309.         Addi.l  #10240,Dest
  7310.         FBLITM  SrcMask,Src,Dest,#$402
  7311.         Rts    
  7312.  
  7313. *************************************************
  7314. * Determine player animation frame              *
  7315. *************************************************
  7316. Which_Frame:
  7317.         Move.w  Dir,Direction
  7318.        
  7319.         Tst.w   Hit
  7320.         Bne     Hit_Frames
  7321.  
  7322.         Tst.b   Hang
  7323.         Bne     Hanging
  7324.  
  7325.         Tst.w   XORFrame
  7326.         Bne     Not_Flipped
  7327.  
  7328.         Tst.w   YFlip
  7329.         Beq     Not_Flipped
  7330.  
  7331.         Eor.w   #1,Direction
  7332. Not_Flipped:   
  7333.  
  7334.         Tst.b   Spring
  7335.         Bne     Spring_Jump
  7336.  
  7337.         Tst.b   Spin            ; Spinning?
  7338.         Bne     Spinning        ; Yes!
  7339.  
  7340.         Tst.w   Sidewalk
  7341.         Bne     Cont_Move
  7342.  
  7343.         Tst.b   Slide
  7344.         Bne     Do_Slide
  7345.  
  7346.         Tst.w   Stand
  7347.         Beq     Cont_Move
  7348.  
  7349.         Tst.w   Velx            ; Still spinning?
  7350.         Beq     Still           ; Yes!
  7351.        
  7352. Cont_Move:
  7353.         Move.w  #50,CtrDelay
  7354.  
  7355.         Tst.b   Braking
  7356.         Bne     Brake_Now
  7357.        
  7358.         Tst.b   Super_Run
  7359.         Bne     Do_Super_Run
  7360.  
  7361.         Subi.w  #1,Delay
  7362.         Bpl     Cyc_Not_Yet1
  7363.                
  7364.         Addi.w  #1,Frame        ; Increment frame
  7365.         Bsr     Get_Delay_Value ; S.F.I.!
  7366.         Cmpi.w  #6,Frame        ; Repeat animation
  7367.         Bls     Cyc_Not_Yet1    ; Not yet
  7368.         Move.w  #1,Frame        ; Reformat frame
  7369.  
  7370. Cyc_Not_Yet1:
  7371.         Move.w  Frame,d0       
  7372.  
  7373.         Tst.w   XORFrame
  7374.         Bne     Good_Dir
  7375.        
  7376.         Tst.w   Direction       ; Determine direction
  7377.         Bne     Good_Dir
  7378.         Addi.w  #6,d0
  7379.  
  7380. Good_Dir:      
  7381.         Add.w   Surfframe,d0
  7382.         Rts    
  7383.  
  7384. Do_Super_Run:
  7385.         Move.w  Dir,Direction
  7386.  
  7387.         Subi.w  #1,Delay
  7388.         Bpl     Cyc_Not_Yet0
  7389.                
  7390.         Addi.w  #1,Frame        ; Increment frame
  7391.         Bsr     Get_Delay_Value ; S.F.I.!
  7392.         Cmpi.w  #4,Frame       
  7393.         Bls     Cyc_Not_Yet0
  7394.         Move.w  #1,Frame        ; Reformat frame
  7395.  
  7396. Cyc_Not_Yet0:
  7397.         Move.w  Frame,d0       
  7398.  
  7399.         Tst.w   Direction       ; Determine direction
  7400.         Bne     Good_SRun_Dir
  7401.         Addi.w  #4,d0
  7402.  
  7403. Good_SRun_Dir: 
  7404.         Add.w   #84,d0
  7405.         Rts    
  7406.        
  7407. Crouch_Me:
  7408.         Move.w  #72,d0
  7409.         Tst.w   Direction
  7410.         Beq     Good_Dir2
  7411.         Subi.w  #1,d0
  7412.         Rts    
  7413.  
  7414. Still:
  7415.         Tst.b   Whoopie
  7416.         Bne     Whoops
  7417.  
  7418.         Tst.b   Crouch
  7419.         Bne     Crouch_Me
  7420.  
  7421.         Tst.b   Energy
  7422.         Beq     Weak
  7423.        
  7424.         Tst.w   CtrDelay
  7425.         Beq     Sleepy
  7426.         Subi.w  #1,CtrDelay
  7427.  
  7428.         Move.w  #1,Frame
  7429.         Move.w  #59,d0
  7430.         Tst.w   Direction
  7431.         Bne     Good_Dir2
  7432.         Addi.w  #2,d0
  7433. Good_Dir2:     
  7434.         Rts    
  7435.  
  7436. Weak:
  7437.         Move.w  #1,Frame
  7438.         Move.w  #$61,d0
  7439.  
  7440.         Tst.w   Direction
  7441.         Bne     Good_Dir5
  7442.         Addi.w  #2,d0
  7443.  
  7444. Good_Dir5:     
  7445.         Subi.w  #1,WDelay
  7446.         Bpl     No_Cyc2
  7447.         Move.w  #8,WDelay
  7448.  
  7449.         Addi.w  #1,Whoops_Frame
  7450.         Andi.w  #1,Whoops_Frame
  7451. No_Cyc2:
  7452.         Add.w   Whoops_Frame,d0
  7453.         Rts    
  7454.  
  7455. Stand_Wall_Left:
  7456.         Move.w  #$65,d0
  7457.         Move.w  #1,Frame
  7458.         Rts    
  7459.  
  7460. Stand_Wall_Right:
  7461.         Move.w  #$66,d0
  7462.         Move.w  #1,Frame
  7463.         Rts    
  7464.  
  7465. Sleepy:
  7466.         Tst.w   Left_Blocked
  7467.         Bne     Stand_Wall_Left
  7468.  
  7469.         Tst.w   Right_Blocked
  7470.         Bne     Stand_Wall_Right
  7471.  
  7472.         Move.w  #1,Frame
  7473.         Move.w  #73,d0 
  7474.  
  7475.         Tst.w   Direction
  7476.         Bne     Good_Dir6
  7477.         Addi.w  #2,d0
  7478.  
  7479. Good_Dir6:     
  7480.         Subi.w  #1,WDelay
  7481.         Bpl     No_Cyc3
  7482.         Move.w  #8,WDelay
  7483.  
  7484.         Addi.w  #1,Whoops_Frame
  7485.         Andi.w  #1,Whoops_Frame
  7486. No_Cyc3:
  7487.         Add.w   Whoops_Frame,d0
  7488.         Rts    
  7489.  
  7490. Whoops:
  7491.         Move.w  #77,d0
  7492.         Cmpi.b  #1,Whoopie
  7493.         Beq     Whoops_Over
  7494.  
  7495.         Add.w   #2,d0
  7496. Whoops_Over:   
  7497.         Subi.w  #1,WDelay
  7498.        
  7499.         Bpl     No_Cyc
  7500.         Move.w  #8,WDelay
  7501.         Addi.w  #1,Whoops_Frame
  7502.         Andi.w  #1,Whoops_Frame
  7503. No_Cyc:
  7504.         Add.w   Whoops_Frame,d0
  7505.         Tst.b   Ext_Whoopie
  7506.         Beq     No_Ext_Whoopie
  7507.         Addi.w  #16,d0
  7508. No_Ext_Whoopie:
  7509.         Rts    
  7510.        
  7511. Spinning:
  7512.         Move.w  #50,CtrDelay
  7513.         Addi.w  #1,Frame
  7514.         Cmpi.w  #6,Frame
  7515.         Bls     Cyc_Not_Yet2
  7516.         Move.w  #1,Frame
  7517.        
  7518. Cyc_Not_Yet2:  
  7519.         Move.w  Frame,d0
  7520.         Addi.w  #64,d0
  7521.         Tst.w   Direction
  7522.         Bne     Good_Dir3
  7523.         Move.w  #1,YFlip
  7524. Good_Dir3:     
  7525.         Rts            
  7526.        
  7527. Brake_Now:
  7528.         Move.w  #1,Frame
  7529.         Cmpi.b  #1,Braking
  7530.         Bne     Other_BSide
  7531.         Move.w  #62,d0
  7532.         Rts
  7533.        
  7534. Other_BSide:   
  7535.         Move.w  #60,d0
  7536.         Rts    
  7537.        
  7538. Spring_Jump:
  7539.         Move.w  #50,CtrDelay
  7540.         Cmpi.b  #2,Spring
  7541.         Beq     Hit_Frames
  7542.  
  7543.         Move.w  #$67,d0
  7544.         Tst.w   Direction
  7545.         Bne     Good_Dir4
  7546.         Addi.w  #1,d0
  7547. Good_Dir4:
  7548.         Rts    
  7549.  
  7550. Hit_Frames:
  7551.         Move.w  #1,Frame
  7552.         Move.w  #$52,d0
  7553.         Tst.w   Direction
  7554.         Bne     Good_Dir7
  7555.         Subi.w  #1,d0
  7556.  
  7557. Good_Dir7:     
  7558.         Rts
  7559.        
  7560. Do_Slide:
  7561.         Tst.w   VChange
  7562.         Bne     Cont_Move
  7563.  
  7564.         Move.w  #1,Frame
  7565.         Move.w  #$53,d0
  7566.         Tst.w   Direction
  7567.         Bne     Good_Dir8
  7568.         Addi.w  #1,d0
  7569.  
  7570. Good_Dir8:     
  7571.         Rts
  7572.        
  7573. Hanging:
  7574.         Tst.w   Velx
  7575.         Beq     Still2
  7576.  
  7577.         Move.w  Dir,Direction
  7578.        
  7579.         Subi.w  #1,Delay
  7580.         Bpl     Cyc_Not_Yet4
  7581.                
  7582.         Addi.w  #1,Frame        ; Increase frame
  7583.         Bsr     Get_Delay_Value ; S.F.I.!
  7584.         Cmpi.w  #4,Frame        ; Repeat animation?
  7585.         Bls     Cyc_Not_Yet4    ; Not yet!
  7586.         Move.w  #1,Frame        ; Reformat frame
  7587.  
  7588. Cyc_Not_Yet4:
  7589.         Move.w  Frame,d0       
  7590.  
  7591.         Tst.w   Direction       ; Determine direction
  7592.         Bne     Good_Hang_Dir
  7593.         Addi.w  #4,d0
  7594.  
  7595. Good_Hang_Dir: 
  7596.         Add.w   #50,d0
  7597.         Rts    
  7598.  
  7599. Still2:
  7600.         Move.w  #1,Frame
  7601.         Move.w  #49,d0
  7602.         Tst.w   Direction
  7603.         Bne     Good_Hang_Dir2
  7604.         Addi.w  #1,d0
  7605. Good_Hang_Dir2:
  7606.         Rts    
  7607.        
  7608. *************************************************
  7609. *       Compute values for delays               *
  7610. *************************************************
  7611. Get_Delay_Value:
  7612.         Lea     Delay_Vals,a0
  7613.         Move.w  Velx,d0
  7614.         Cmpi.w  #$7fff,d0
  7615.         Bls     Velx_Not_Negative
  7616.         Neg.w   d0
  7617.  
  7618. Velx_Not_Negative:
  7619.         Move.b  0(a0,d0),d1
  7620.         Ext.w   d1
  7621.         Move.w  d1,Delay
  7622.         Rts
  7623.        
  7624. *************************************************
  7625. *       Delay B                                 *
  7626. *************************************************
  7627. Get_XDelay_Value:
  7628.         Move.w  Velx,d0
  7629.         Cmpi.w  #$7fff,d0
  7630.         Bls     Vx_Not_Negative
  7631.         Neg.w   d0
  7632.  
  7633. Vx_Not_Negative:
  7634.         Move.b  0(a0,d0),d1
  7635.         Ext.w   d1
  7636.         Rts
  7637.  
  7638. *************************************************
  7639. *       Wait VBL                                *
  7640. *************************************************
  7641. Wait_VBL:
  7642.         Move.l  Vposr,d0
  7643.         Lsr.l   #8,d0
  7644.         Move.w  d0,d1
  7645.         Cmpi.w  #$FC,d1
  7646.         Blo.s   Wait_VBL
  7647.         Rts
  7648.  
  7649. *************************************************
  7650. *       Double buffer (flip screen)             *
  7651. *************************************************
  7652. Flip_Screen:
  7653.         Move.w  #$40,$dff096
  7654.  
  7655.         Move.l  Copper1,a0
  7656.         Move.w  Offx,$9a(a0)
  7657.         Move.l  Copper2,a0
  7658.         Move.w  Offx,$9a(a0)
  7659.  
  7660.         Move.w  #$8040,$dff096                  *<--------+    
  7661.                                                 *         |    
  7662. *************************************************         |    
  7663. *       Double buffer keeps Bplcon1 unaffected  *         |    
  7664. *************************************************         |    
  7665.                                                 *         |    
  7666. Screen_Swap:                                    *<--------+
  7667.         Move.l  Buffer1,d0
  7668.         Cmp.l   Showbuffer,d0
  7669.         Beq     Change_Buffer
  7670.  
  7671.         Move.l  Buffer1,Showbuffer
  7672.         Move.l  Buffer2,Currbuffer
  7673.         Move.l  Copper1,Cop1lch
  7674.         Move.l  Copper2,Current_Copper
  7675.         Bra     Screen_Flipped
  7676.  
  7677. Change_Buffer:
  7678.         Move.l  Buffer2,Showbuffer     
  7679.         Move.l  Buffer1,Currbuffer
  7680.         Move.l  Copper2,Cop1lch
  7681.         Move.l  Copper1,Current_Copper
  7682.  
  7683. Screen_Flipped:
  7684.         Rts    
  7685.        
  7686. *************************************************
  7687. *       Render map tiles on screen              *
  7688. *************************************************
  7689. Draw_Blocks:
  7690.         Clr.w   Enemy_Check
  7691.         Clr.b   Extra_Blocks
  7692.         Clr.b   Do_Mask_Routine
  7693.  
  7694.         Move.l  Blocks,Src              ; Src = Source Bmap
  7695.         Move.l  Currbuffer,Dest
  7696.