Advertisement
keithbugeja

Blaze (Amiga 500) Source Code

Nov 17th, 2015
1,158
0
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.     Move.w  Yoff,d0
  7697.     Mulu    #40,d0
  7698.     Add.l   d0,Dest
  7699.  
  7700.     Moveq.l #0,d0
  7701.     Move.w  Xoff,d0
  7702.  
  7703.     Cmpi.w  #16,Xoff
  7704.     Blo No_Extra
  7705.     Addi.l  #2,Dest
  7706.     Andi.l  #$F,d0
  7707.  
  7708. No_Extra:  
  7709.     Mulu    #$11,d0
  7710.     Move.w  d0,Offx
  7711.  
  7712.     INTBLIT #36
  7713.     Moveq.l #6,d3           ; Dest = Dest Bmap
  7714.  
  7715. Yloop:                  ; Xdum,Ydum = Dummy Vars.
  7716.     Moveq.l #8,d4           ; Map = Map Start Addr.
  7717.  
  7718. Xloop:                  ; Dummybuffer = Dummy Buf.
  7719.     Move.l  Map,a0          ; Offx = Xoff mod 16
  7720.     Lea     8(a0),a0   
  7721.                     ; Currbuffer = Logical Buffer
  7722.     Move.l  Ymap,d6         ; Showbuffer = Physical Buffer
  7723.     Add.l   d3,d6
  7724.    
  7725.     Mulu    Xmax,d6
  7726.     Add.l   Xmap,d6
  7727.     Add.l   d4,d6
  7728.     Bra Animation
  7729.  
  7730. No_Anim:
  7731.     Move.b  0(a0,d6),d7
  7732.  
  7733. Anim_Found:
  7734.     Andi.l  #$FF,d7
  7735.     Tst.b   d7
  7736.     Bne Nzero
  7737.  
  7738.     Move.l  #5,Xdum
  7739.     Move.l  #25,Ydum
  7740.     Bra Yzero
  7741.  
  7742. Nzero: 
  7743.     Tst.b   Extra_Blocks
  7744.     Beq Nzero_Again
  7745.  
  7746.     Addi.l  #256,d7
  7747.     Clr.b   Extra_Blocks
  7748.  
  7749. Nzero_Again:
  7750.     Subq.l  #1,d7
  7751.     Divu    #10,d7
  7752.     Move.l  d7,Ydum
  7753.     Swap    d7
  7754.     Move.l  d7,Xdum
  7755.  
  7756. Yzero: 
  7757.     BLOCK   Xdum,Ydum,Src,d4,d3,Dest,#0
  7758.  
  7759. No_Draw:
  7760.     Dbra    d4,Xloop
  7761.     Dbra    d3,Yloop
  7762.    
  7763.     Move.w  Anim_Ctr,FG_Anim_Ctr
  7764.     Addi.w  #1,Anim_Ctr
  7765.     Cmpi.w  #48,Anim_Ctr
  7766.     Blo No_Cycle
  7767.     Clr.w   Anim_Ctr
  7768.  
  7769. No_Cycle:  
  7770.     Addi.w  #1,Flick_Ctr
  7771.     Andi.w  #1,Flick_Ctr
  7772.     Rts
  7773.  
  7774. *************************************************
  7775. *   Animation               *
  7776. *************************************************
  7777. Animation:
  7778.     Move.l  Map,a1
  7779.     Move.l  SMap,d0
  7780.  
  7781.     Lea 8(a1,d0.l),a1
  7782.     Move.b  0(a1,d6),d7
  7783.  
  7784.     Cmpi.b  #150,d7
  7785.     Bls No_Anim
  7786.    
  7787.     Cmpi.b  #240,d7
  7788.     Bhi No_Anim
  7789.    
  7790.     Cmpi.b  #200,d7
  7791.     Blo Anim0
  7792.    
  7793.     Move.b  #1,Do_Mask_Routine
  7794.    
  7795. Anim0:
  7796.     Cmpi.b  #160,d7         ; Flicker effect ?
  7797.     Bne Anim0_B
  7798.  
  7799.     Move.b  0(a0,d6),d7
  7800.     Add.w   Flick_Ctr,d7
  7801.     Bra Anim_Found
  7802.    
  7803. Anim0_B:
  7804.     Cmpi.b  #163,d7         ; Round jewels (yellow lozenge)
  7805.     Bne Anim1
  7806.    
  7807.     Moveq.b #1,d7
  7808.     Move.w  Anim_Ctr,d5
  7809.     Andi.l  #%111,d5
  7810.     Divu    #4,d5
  7811.     Add.w   d5,d7
  7812.     Move.b  #1,Extra_Blocks
  7813.     Bra Anim_Found 
  7814.    
  7815. Anim1: 
  7816.     Cmpi.b  #209,d7         ; Waterfalls
  7817.     Beq Covered_Anim
  7818.  
  7819.     Cmpi.b  #208,d7         ; Waterfalls
  7820.     Bne Anim2
  7821.  
  7822. Covered_Anim:
  7823.     Move.w  Anim_Ctr,d5
  7824.     Lea Anim,a2
  7825.     Move.b  $30(a2,d5),d7
  7826.     Bra Anim_Found
  7827.  
  7828. Anim2:
  7829.     Cmpi.b  #164,d7         ; Jewels (collectibles)
  7830.     Beq Do_Jewel_Anim
  7831.  
  7832.     Cmpi.b  #162,d7
  7833.     Bne Anim3
  7834.    
  7835. Do_Jewel_Anim:
  7836.     Lea Anim,a2
  7837.     Move.w  Anim_Ctr,d5
  7838.     Lea $150(a2),a2
  7839.     Move.b  (a2,d5),d7
  7840.     Bra Anim_Found
  7841.  
  7842. Anim3:
  7843.     Cmpi.b  #177,d7         ; Lava
  7844.     Bne Anim4
  7845.  
  7846.     Move.w  Anim_Ctr,d5
  7847.     Lea Anim,a2
  7848.     Lea $90(a2),a2
  7849.     Move.b  (a2,d5),d7
  7850.     Bra Anim_Found
  7851.  
  7852. Anim4:
  7853.     Cmpi.b  #167,d7         ; Spikes
  7854.     Bne Anim5
  7855.  
  7856.     Move.w  Anim_Ctr,d5
  7857.     Lea Anim,a2
  7858.     Lea $60(a2),a2
  7859.     Move.b  (a2,d5),d7
  7860.     Bra Anim_Found
  7861.  
  7862. Anim5: 
  7863.     Cmpi.b  #172,d7         ; Conveyors/flames
  7864.     Bne Anim6
  7865.  
  7866.     Move.w  Anim_Ctr,d5
  7867.     Lea Anim,a2
  7868.     Lea $120(a2),a2
  7869.     Move.b  (a2,d5),d7
  7870.     Bra Anim_Found
  7871.  
  7872. Anim6:
  7873.     Cmpi.b  #174,d7         ; Bridge
  7874.     Bne Anim7
  7875.    
  7876.     Tst.w   Brgdn
  7877.     Beq Bridge_Set
  7878.    
  7879.     Cmpi.w  #4,d3
  7880.     Bne Bridge_Set
  7881.  
  7882.     Cmpi.w  #5,d4
  7883.     Bne Check_1
  7884.    
  7885.     Cmpi.w  #1,Brgdn
  7886.     Bne Bridge_Set
  7887.  
  7888.     Move.b  #170,d7
  7889.     Bra Anim_Found
  7890.    
  7891. Check_1:   
  7892.     Cmpi.w  #4,d4
  7893.     Bne Check_2
  7894.    
  7895.     Cmpi.w  #1,Brgdn
  7896.     Bne Bridge_2
  7897.  
  7898.     Move.b  #169,d7
  7899.     Bra Anim_Found
  7900.    
  7901. Bridge_2:
  7902.     Move.b  #170,d7
  7903.     Bra Anim_Found     
  7904.  
  7905. Check_2:   
  7906.     Cmpi.w  #3,d4
  7907.     Bne Bridge_Set
  7908.  
  7909.     Cmpi.w  #2,Brgdn
  7910.     Bne Bridge_Set
  7911.  
  7912.     Move.b  #169,d7
  7913.     Bra Anim_Found
  7914.    
  7915. Bridge_Set:
  7916.     Move.b  #166,d7
  7917.     Bra Anim_Found 
  7918.        
  7919. Anim7:
  7920.     Cmpi.b  #165,d7         ; Barrier 1
  7921.     Bne Anim8
  7922.    
  7923.     Move.w  Anim_Ctr,d5
  7924.     Lea Anim,a2
  7925.     Lea $C0(a2),a2
  7926.     Move.b  0(a2,d5),d7
  7927.     Bra Anim_Found
  7928.  
  7929. Anim8:
  7930.     Cmpi.b  #166,d7         ; Barrier 2
  7931.     Bne Anim9
  7932.    
  7933.     Move.w  Anim_Ctr,d5
  7934.     Lea Anim,a2
  7935.     Lea $F0(a2),a2
  7936.     Move.b  0(a2,d5),d7
  7937.     Bra Anim_Found
  7938.    
  7939. Anim9:
  7940.     Cmpi.b  #182,d7         ; Lowering platform
  7941.     Bne Anim10
  7942.    
  7943.     Tst.w   Fpform
  7944.     Beq Anim10
  7945.  
  7946.     Cmpi.w  #4,d3
  7947.     Bne Anim10
  7948.  
  7949.     Cmpi.w  #4,d4
  7950.     Bne Anim10
  7951.  
  7952.     Move.w  #175,d7
  7953.     Bra Anim_Found
  7954.    
  7955. Anim10:
  7956.     Cmpi.b  #178,d7         ; Dithering flicker
  7957.     Bne Anim11
  7958.    
  7959.     Tst.w   Flick_Ctr
  7960.     Beq No_Anim
  7961.  
  7962.     Moveq.b #0,d7
  7963.     Bra Anim_Found
  7964.  
  7965. Anim11:
  7966.     Cmpi.b  #179,d7         ; Disappearing platform
  7967.     Bne Anim12
  7968.  
  7969.     Lea Anim,a2
  7970.     Move.w  Anim_Ctr,d5
  7971.     Move.b  0(a2,d5),d7
  7972.  
  7973.     Clr.w   Dpfstand
  7974.  
  7975.     Cmpi.b  #153,d7
  7976.     Bne Anim_Found
  7977.    
  7978.     Move.w  #1,Dpfstand
  7979.     Bra Anim_Found
  7980.  
  7981. Anim12:
  7982.     Cmpi.b  #183,d7
  7983.     Bne Anim13
  7984.  
  7985.     Move.w  #1,Enemy_Check
  7986.     Bra No_Anim
  7987.  
  7988. Anim13:
  7989.     Cmpi.b  #159,d7
  7990.     Bne Anim14
  7991.  
  7992.     Move.w  #1,Level_Complete
  7993.     Bra No_Anim
  7994.  
  7995. Anim14:
  7996.     Cmpi.b  #185,d7         ; Spring
  7997.     Bne Anim15
  7998.    
  7999.     Moveq.l #0,d5
  8000.     Move.b  0(a0,d6),d5
  8001.  
  8002.     Lea Anim,a2
  8003.     Lea $1E0(a2),a2
  8004.     Move.b  (a2,d5),d7
  8005.  
  8006.     Addq.b  #1,d5
  8007.     Move.b  d5,0(a0,d6)
  8008.  
  8009.     Cmpi.w  #4,d5
  8010.     Bne Anim_Found
  8011.  
  8012.     Move.b  #124,0(a0,d6)
  8013.     Move.b  #169,0(a1,d6)
  8014.     Bra Anim_Found
  8015.  
  8016. Anim15:
  8017.     Cmpi.b  #189,d7         ; Gem explosion A (normal)
  8018.     Bne Anim16
  8019.    
  8020.     Moveq.l #0,d5
  8021.     Move.b  0(a0,d6),d5
  8022.  
  8023.     Lea Anim,a2
  8024.     Lea $1B0(a2),a2
  8025.     Move.b  (a2,d5),d7
  8026.  
  8027.     Addq.b  #1,d5
  8028.     Move.b  d5,0(a0,d6)
  8029.  
  8030.     Tst.b   d7
  8031.     Bne Anim_Found
  8032.  
  8033.     Clr.b   0(a0,d6)
  8034.     Clr.b   0(a1,d6)
  8035.     Bra Anim_Found
  8036.  
  8037. Anim16:
  8038.     Cmpi.b  #190,d7         ; Toggle enemy
  8039.     Blo Anim17
  8040.    
  8041.     Cmpi.b  #200,d7
  8042.     Bhs Anim17
  8043.    
  8044.     Moveq.l #0,d5
  8045.     Move.b  d7,d5
  8046.  
  8047.     Subi.w  #190,d5
  8048.     Mulu    #5,d5
  8049.     Move.w  d5,Estart
  8050.     Bra No_Anim
  8051.  
  8052. Anim17:
  8053.     Cmpi.b  #188,d7         ; Gem explosion B (in front of wall block)
  8054.     Bne Anim18
  8055.    
  8056.     Moveq.l #0,d5
  8057.     Move.b  0(a0,d6),d5
  8058.     Move.b  #1,Extra_Blocks
  8059.  
  8060.     Lea Anim,a2
  8061.     Lea $210(a2),a2
  8062.     Move.b  (a2,d5),d7
  8063.  
  8064.     Addq.b  #1,d5
  8065.     Move.b  d5,0(a0,d6)
  8066.  
  8067.     Cmpi.b  #177,d7
  8068.     Bne Anim_Found
  8069.  
  8070.     Move.b  #177,0(a0,d6)
  8071.     Clr.b   0(a1,d6)
  8072.     Clr.b   Extra_Blocks
  8073.     Bra Anim_Found
  8074.    
  8075. Anim18:
  8076.     Cmpi.b  #187,d7         ; Gem explosion C (over diagonal)
  8077.     Bne Anim19
  8078.    
  8079.     Moveq.l #0,d5
  8080.     Move.b  0(a0,d6),d5
  8081.  
  8082.     Lea Anim,a2
  8083.     Lea $1B0(a2),a2
  8084.     Move.b  (a2,d5),d7
  8085.  
  8086.     Addq.b  #1,d5
  8087.     Move.b  d5,0(a0,d6)
  8088.  
  8089.     Tst.b   d7
  8090.     Bne Anim_Found
  8091.  
  8092.     Clr.b   0(a0,d6)
  8093.     Move.b  #115,0(a1,d6)
  8094.     Bra Anim_Found
  8095.  
  8096. Anim19:
  8097.     Cmpi.b  #161,d7         ; Replenisher
  8098.     Bne Anim20
  8099.  
  8100.     Move.w  Anim_Ctr,d5
  8101.     Lea Anim,a2
  8102.     Lea $240(a2),a2
  8103.     Move.b  (a2,d5),d7
  8104.     Bra Anim_Found
  8105.  
  8106. Anim20:
  8107.     Cmpi.b  #157,d7         ; Lava
  8108.     Bne Anim21
  8109.  
  8110.     Move.l  d3,d5
  8111.     Add.l   Ymap,d5
  8112.     Mulu    #32,d5
  8113.     Move.l  Lava_Anim_Y,d0
  8114.    
  8115.     Sub.l   d5,d0
  8116.     Bmi No_Anim
  8117.  
  8118.     Move.l  Lava_Anim_X,d1
  8119.     Sub.l   d0,d1
  8120.    
  8121.     Move.l  d4,d5
  8122.     Add.l   Xmap,d5
  8123.     Mulu    #32,d5
  8124.  
  8125.     Cmp.l   d1,d5
  8126.     Bgt No_Anim
  8127.  
  8128.     Cmpi.l  #4,d4           ; Test if player has collided with lava
  8129.     Bne No_Fry
  8130.  
  8131.     Cmpi.l  #3,d3
  8132.     Bne No_Fry
  8133.    
  8134.     Move.w  #1,Hit
  8135.     Move.b  #$FF,Energy
  8136.     Clr.b   Invulnerable
  8137.    
  8138. No_Fry:
  8139.     Move.w  Anim_Ctr,d5
  8140.     Lea Anim,a2
  8141.     Lea $90(a2),a2
  8142.     Move.b  (a2,d5),d7
  8143.     Bra Anim_Found
  8144.  
  8145. Anim21:
  8146.     Bra No_Anim        
  8147.  
  8148. *************************************************
  8149. *   Draw foreground blocks          *
  8150. *************************************************
  8151. Draw_FG_Blocks:
  8152.     Clr.b   Cover_Cat       ; Flag determines whether player is hidden
  8153.  
  8154.     Move.l  Blocks,Src      ; Src = Source Bmap
  8155.     Move.l  Currbuffer,Dest
  8156.     Move.w  Yoff,d0
  8157.     Mulu    #40,d0
  8158.     Add.l   d0,Dest
  8159.  
  8160.     Cmpi.w  #16,Xoff
  8161.     Blo FG_No_Extra
  8162.     Addi.l  #2,Dest
  8163.     Move.l  #3,MShift
  8164.     Bra FG_No_Extra_MShift
  8165.    
  8166. FG_No_Extra:
  8167.     Move.l  #4,MShift
  8168.  
  8169. FG_No_Extra_MShift:
  8170.     INTBLITM #36
  8171.     Move.l  #1,d3           ; Dest = Dest Bmap
  8172. FG_Yloop:               ; Xdum,Ydum = Dummy Vars.
  8173.     Move.l  #1,d4           ; Map = Map Start Addr.
  8174. FG_Xloop:               ; Dummybuffer = Dummy Buf.
  8175.     Move.l  Xmap,Xdum       ; Currbuffer = Logical Buffer
  8176.     Move.l  Ymap,Ydum       ; Showbuffer = Physical Buffer
  8177.     Add.l   d4,Xdum
  8178.     Add.l   d3,Ydum
  8179.    
  8180.     Move.l  MShift,d7
  8181.     Add.l   d7,Xdum
  8182.    
  8183.     Addi.l  #3,Ydum
  8184.     Move.l  Ydum,d6
  8185.     Mulu    Xmax,d6
  8186.     Add.l   Xdum,d6
  8187.     Bra FG_Animation
  8188.  
  8189. FG_Anim_Found:
  8190.     Ext.l   d7
  8191.     Subq.l  #1,d7
  8192.     Divu    #10,d7
  8193.     Move.l  d7,Ydum
  8194.     Swap    d7
  8195.     Move.l  d7,Xdum
  8196.    
  8197.     Add.l   MShift,d4
  8198.     Addi.l  #3,d3
  8199.  
  8200.     BLOCKM  Xdum,Ydum,Src,d4,d3,Dest,MkBlocks
  8201.     Sub.l   MShift,d4
  8202.     Subi.l  #3,d3
  8203.    
  8204. FG_No_Draw:
  8205.     Dbra    d4,FG_Xloop
  8206.     Dbra    d3,FG_Yloop
  8207.     Rts
  8208.  
  8209. *************************************************
  8210. *   Animation               *
  8211. *************************************************
  8212. FG_Animation:
  8213.     Move.l  Map,a1
  8214.     Move.l  a1,a2
  8215.     Move.l  SMap,d0
  8216.  
  8217.     Lea 8(a1,d0.l),a1
  8218.     Move.b  0(a1,d6),d7
  8219.  
  8220.     Cmpi.b  #200,d7
  8221.     Blo FG_No_Draw
  8222.    
  8223.     Cmpi.b  #240,d7
  8224.     Bhi FG_No_Draw
  8225.  
  8226.     Move.b  #1,Cover_Cat
  8227.  
  8228.     Cmpi.b  #208,d7
  8229.     Beq Anim_Hide
  8230.    
  8231.     Cmpi.b  #209,d7
  8232.     Beq Anim_Hide
  8233.  
  8234. Hide:
  8235.     Move.b  8(a2,d6),d7
  8236.  
  8237.     Tst.b   d7
  8238.     Beq FG_No_Draw
  8239.  
  8240.     Bra FG_Anim_Found
  8241.  
  8242. Anim_Hide:
  8243.     Lea Anim,a2
  8244.     Move.w  FG_Anim_Ctr,d5
  8245.     Move.b  $30(a2,d5),d7
  8246.     Bra FG_Anim_Found
  8247.  
  8248. *************************************************
  8249. *   Allocate FAST memory for maps       *
  8250. *************************************************
  8251. Allocate_Fast:
  8252.     Move.l  $4.w,a6
  8253.  
  8254.     Clr.l   d1
  8255.     Move.l  #130000,d0
  8256.     Jsr AllocMem(a6)
  8257.     Move.l  d0,Map
  8258.     Rts
  8259.  
  8260. *************************************************
  8261. *   Allocate CHIP memory for graphics   *
  8262. *************************************************
  8263. Allocate_Raster:
  8264.     Move.l  Gfxbase,a6
  8265.  
  8266.     Move.w  #320,d0
  8267.     Move.w  #256*5,d1
  8268.     Jsr     AllocRaster(a6)
  8269.     Move.l  d0,Buffer1
  8270.    
  8271.     Move.w  #320,d0
  8272.     Move.w  #256*5,d1
  8273.     Jsr     AllocRaster(a6)
  8274.     Move.l  d0,Buffer2
  8275.    
  8276.     Move.w  #320,d0
  8277.     Move.w  #832*5,d1
  8278.     Jsr AllocRaster(a6)
  8279.     Move.l  d0,Blocks
  8280.  
  8281.     Move.w  #3388,d0
  8282.     Move.w  #8,d1
  8283.     Jsr AllocRaster(a6)
  8284.     Move.l  d0,Copper1
  8285.  
  8286.     Move.w  #3388,d0
  8287.     Move.w  #8,d1
  8288.     Jsr AllocRaster(a6)
  8289.     Move.l  d0,Copper2
  8290.  
  8291.     Move.w  #256,d0
  8292.     Move.w  #432*5,d1
  8293.     Jsr AllocRaster(a6)
  8294.     Move.l  d0,Sprites
  8295.  
  8296.     Move.w  #256,d0
  8297.     Move.w  #432,d1
  8298.     Jsr AllocRaster(a6)
  8299.     Move.l  d0,Masks
  8300.  
  8301.     Move.w  #320,d0
  8302.     Move.w  #832,d1
  8303.     Jsr AllocRaster(a6)
  8304.     Move.l  d0,MkBlocks
  8305.    
  8306.     Move.w  #320,d0
  8307.     Move.w  #256*5,d1
  8308.     Jsr AllocRaster(a6)
  8309.     Move.l  d0,Enemies
  8310.    
  8311.     Move.w  #320,d0
  8312.     Move.w  #256,d1
  8313.     Jsr AllocRaster(a6)
  8314.     Move.l  d0,MKEnemies
  8315.    
  8316.     Move.w  #320,d0
  8317.     Move.w  #48,d1
  8318.     Jsr AllocRaster(a6)
  8319.     Move.l  d0,Font
  8320.  
  8321.     Move.w  #320,d0
  8322.     Move.w  #16,d1
  8323.     Jsr AllocRaster(a6)
  8324.     Move.l  d0,Panel
  8325.  
  8326. ;   Move.w  #320,d0         ; Mayby it works
  8327. ;   Move.w  #256*4,d1       ; on the 500+, 1200
  8328. ;   Jsr AllocRaster(a6)     ; and 600 range of
  8329. ;   Move.l  d0,Music_Start  ; computers
  8330.  
  8331.     Rts
  8332.  
  8333. *************************************************
  8334. *   Set up copper lists         *
  8335. *************************************************
  8336. Copper_Setup:
  8337.     INSCOP  Buffer1,Copper1,#$502
  8338.     INSCOP  Buffer2,Copper2,#$502  
  8339.     Rts
  8340.  
  8341. *************************************************
  8342. *   Clear buffer (d0 = size)        *
  8343. *************************************************
  8344. Clear:
  8345.     Clr.l   (a0)+
  8346.     Dbra    d0,Clear
  8347.     Rts
  8348.  
  8349. *************************************************
  8350. *   Wait for mousekey           *
  8351. *************************************************
  8352. Mouse_Key:
  8353.     Btst    #$6,$bfe001
  8354.     Bne.s   Mouse_Key
  8355.     Rts
  8356.      
  8357. *************************************************
  8358. *   Clear double-buffered screen        *
  8359. *************************************************
  8360. Clear_Buffers:
  8361.     Move.l  Buffer1,a0
  8362.     Move.l  #12800,d0
  8363.     Bsr Clear
  8364.    
  8365.     Move.l  Buffer2,a0
  8366.     Move.l  #12800,d0
  8367.     Bsr Clear
  8368.     Rts
  8369.  
  8370. Clear_Text_Buffers:
  8371.     Move.l  Buffer1,a0
  8372.     Adda.l  #40960,a0
  8373.     Move.l  #2560,d0
  8374.     Bsr Clear
  8375.    
  8376.     Move.l  Buffer2,a0
  8377.     Adda.l  #40960,a0
  8378.     Move.l  #2560,d0
  8379.     Bsr Clear
  8380.     Rts
  8381.  
  8382. *************************************************
  8383. *   Load level 'zone' picture       *
  8384. *************************************************
  8385. Show_Zone:
  8386.     OPENF   #Copper2_Name,#Old_Mode
  8387.     READF   Handle,Copper1,#3380
  8388.     CLOSEF  Handle
  8389.  
  8390.     OPENF   #Copper2_Name,#Old_Mode
  8391.     READF   Handle,Copper2,#3380
  8392.     CLOSEF  Handle
  8393.  
  8394.     Move.l  Buffer1,Currbuffer
  8395.     Move.l  Buffer2,Showbuffer
  8396.  
  8397.     INSCOP  Buffer1,Copper1,#0
  8398.     INSCOP  Buffer2,Copper2,#0
  8399.     COPON   Copper1
  8400.    
  8401.     Bsr Wait_VBL
  8402.  
  8403.     Move.w  #$2c81,$dff08e
  8404.     Move.w  #$2cc1,$dff090
  8405.  
  8406.     Bsr Clear_Buffers
  8407.     Lea Cmap5,a0
  8408.     Move.w  #31,d0
  8409.     Bsr Get_Cmap
  8410.     Bsr Set_Cmap
  8411.  
  8412.     LOADPIC #Zone_Pic_Name,#51200
  8413.     Rts
  8414.  
  8415. *************************************************
  8416. *   Fade                    *
  8417. *************************************************
  8418. Fade:
  8419.     Moveq.w #0,d5
  8420.     Lea Cmap,a0
  8421.     Move.w  #31,d4
  8422.    
  8423. Fade_Cycle:
  8424.     Clr.w   Fade_Not
  8425.     Move.w  (a0),d0
  8426.     Clr.w   (a0)
  8427.     Move.w  d0,d1
  8428.     Move.w  d0,d2
  8429.     Move.w  d0,d3  
  8430.    
  8431. Get_RCol:
  8432.     Andi.w  #$F00,d1
  8433.     Subi.w  #$100,d1
  8434.     Bpl Get_GCol
  8435.     Moveq.w #0,d1
  8436.     Move.w  #1,Fade_Not
  8437.  
  8438. Get_GCol:
  8439.     Andi.w  #$F0,d2
  8440.     Subi.w  #$10,d2
  8441.     Bpl Get_BCol
  8442.     Moveq.w #0,d2
  8443.     Addi.w  #1,Fade_Not
  8444.  
  8445. Get_BCol:
  8446.     Andi.w  #$F,d3
  8447.     Subi.w  #$1,d3
  8448.     Bpl Get_All_Col
  8449.     Moveq.w #0,d3
  8450.     Addi.w  #1,Fade_Not
  8451.  
  8452. Get_All_Col:       
  8453.     Or.w    d1,(a0)
  8454.     Or.w    d2,(a0)
  8455.     Or.w    d3,(a0)+
  8456.    
  8457.     Cmpi.w  #3,Fade_Not
  8458.     Bne Not_Faded
  8459.     Addi.w  #1,d5
  8460.  
  8461. Not_Faded: 
  8462.     Move.l  #$500,d6
  8463. Wait_Loop:
  8464.     Dbra    d6,Wait_Loop
  8465.  
  8466.     Dbra    d4,Fade_Cycle
  8467.    
  8468.     Bsr Wait_VBL
  8469.     Bsr Set_Cmap
  8470.     Cmpi.w  #32,d5
  8471.     Bne Fade
  8472.     Rts
  8473.  
  8474. *************************************************
  8475. *   Fade copper list            *
  8476. *************************************************
  8477. Copper_Fade:
  8478.     Move.w  #16,d7
  8479.    
  8480. Fade_CCycle:
  8481.     Move.l  Fading_Copper,a0
  8482.     Move.w  #$300,d6
  8483.  
  8484. Find_Colour:
  8485.     Move.w  (a0),d0
  8486.     Btst    #0,d0
  8487.     Bne Next_Instruction
  8488.  
  8489.     Cmpi.w  #$180,d0
  8490.     Blo Next_Instruction
  8491.    
  8492.     Cmpi.w  #$1BE,d0
  8493.     Bgt Next_Instruction
  8494.    
  8495.     Addq.l  #2,a0
  8496.     Move.w  (a0),d0
  8497.     Clr.w   (a0)
  8498.  
  8499.     Move.w  d0,d1
  8500.     Move.w  d0,d2
  8501.     Move.w  d0,d3  
  8502.    
  8503. Get_CRCol:
  8504.     Andi.w  #$F00,d1
  8505.     Subi.w  #$100,d1
  8506.     Bpl Get_CGCol
  8507.     Moveq.w #0,d1
  8508.  
  8509. Get_CGCol:
  8510.     Andi.w  #$F0,d2
  8511.     Subi.w  #$10,d2
  8512.     Bpl Get_CBCol
  8513.     Moveq.w #0,d2
  8514.  
  8515. Get_CBCol:
  8516.     Andi.w  #$F,d3
  8517.     Subi.w  #$1,d3
  8518.     Bpl Get_All_CCol
  8519.     Moveq.w #0,d3
  8520.  
  8521. Get_All_CCol:      
  8522.     Or.w    d1,(a0)
  8523.     Or.w    d2,(a0)
  8524.     Or.w    d3,(a0)+
  8525.    
  8526.     Dbra    d6,Find_Colour
  8527.  
  8528.     Move.w  #$A00,d5
  8529. WCloop:
  8530.     Dbra    d5,WCloop
  8531.  
  8532.     Dbra    d7,Fade_CCycle
  8533.     Rts
  8534.    
  8535. Next_Instruction:  
  8536.     Addq.l  #4,a0
  8537.     Dbra    d6,Find_Colour
  8538.  
  8539.     Move.w  #$A00,d5
  8540. WCloop2:
  8541.     Dbra    d5,WCloop2
  8542.  
  8543.     Dbra    d7,Fade_CCycle
  8544.     Rts
  8545.        
  8546. *************************************************
  8547. *   Get colour palette          *
  8548. *************************************************
  8549. Get_Cmap:
  8550.     Lea Cmap,a1
  8551. Copy_Cmap:
  8552.     Move.w  (a0)+,(a1)+
  8553.     Dbra    d0,Copy_Cmap
  8554.     Rts
  8555.  
  8556. *************************************************
  8557. *   Set colour palette          *
  8558. *************************************************
  8559. Set_Cmap:
  8560.     Move.w  #31,d0
  8561.     Lea $dff180,a1
  8562.     Lea Cmap,a0
  8563.    
  8564. Move_Cmap:     
  8565.     Move.w  (a0)+,(a1)+
  8566.     Dbra    d0,Move_Cmap
  8567.     Rts
  8568.    
  8569. *************************************************
  8570. *   Parallax scrolling routine      *
  8571. *************************************************
  8572. Parallax_Scroll:
  8573.     Include "PScroll.Mod"
  8574.     Rts
  8575.    
  8576. *************************************************
  8577. *   Copy front to back buffer       *
  8578. *************************************************  
  8579. Copy_Buffers:  
  8580.     Move.l  Showbuffer,Src
  8581.     Move.l  Currbuffer,Dest
  8582.    
  8583.     BLIT    Src,Dest,#$4014,#0,#0,#0,#$FFFF,#$FFFF
  8584.  
  8585.     Addi.l  #10240,Src
  8586.     Addi.l  #10240,Dest
  8587.     FBLIT   Src,Dest,#$4014
  8588.  
  8589.     Addi.l  #10240,Src
  8590.     Addi.l  #10240,Dest
  8591.     FBLIT   Src,Dest,#$4014
  8592.  
  8593.     Addi.l  #10240,Src
  8594.     Addi.l  #10240,Dest
  8595.     FBLIT   Src,Dest,#$4014
  8596.  
  8597.     Addi.l  #10240,Src
  8598.     Addi.l  #10240,Dest
  8599.     FBLIT   Src,Dest,#$4014
  8600.     Rts
  8601.  
  8602. *************************************************
  8603. *   Copy single bitplane text buffer    *
  8604. *************************************************  
  8605. Copy_Text_Buffer:  
  8606.     Move.l  Showbuffer,Src
  8607.     Move.l  Currbuffer,Dest
  8608.    
  8609.     Addi.l  #40960,Src
  8610.     Addi.l  #40960,Dest
  8611.     BLIT    Src,Dest,#$4014,#0,#0,#0,#$FFFF,#$FFFF
  8612.     Rts
  8613.    
  8614. *************************************************
  8615. *   Hiscore table               *
  8616. *************************************************
  8617. Hi_Score_Table:
  8618.     OPENF   #Copper4_Name,#Old_Mode
  8619.     READF   Handle,Copper1,#3380
  8620.     CLOSEF  Handle
  8621.  
  8622.     OPENF   #Copper4_Name,#Old_Mode
  8623.     READF   Handle,Copper2,#3380
  8624.     CLOSEF  Handle
  8625.  
  8626.     Move.l  Buffer1,Currbuffer
  8627.     Move.l  Buffer2,Showbuffer
  8628.  
  8629.     INSCOP  Buffer1,Copper1,#0
  8630.     INSCOP  Buffer2,Copper2,#0
  8631.     COPON   Copper1
  8632.    
  8633.     Bsr Wait_VBL
  8634.  
  8635.     TURNONDMA
  8636.     LOADPIC #Hi_Score_Name,#51200
  8637.  
  8638.     OPENF   #Hi_Score_Music_Name,#Old_Mode
  8639.     READF   Handle,Music_Start,#40960
  8640.     CLOSEF  Handle
  8641.  
  8642.     ;Jsr    mt_init
  8643.     Jsr Set_Int3
  8644.  
  8645. Hi_Score_Loop:
  8646.     Btst    #7,Mousekey
  8647.     Bne Hi_Score_Loop
  8648.  
  8649.     Jsr Restart_Loading
  8650.     Rts
  8651.    
  8652. *************************************************
  8653. *   Load option screen          *
  8654. *************************************************
  8655. Title_Screen:
  8656.     Move.l  Buffer1,Currbuffer
  8657.     Move.l  Buffer2,Showbuffer
  8658.  
  8659.     LOADPIC #Overview_Name,#40960
  8660.  
  8661.     OPENF   #Copper3_Name,#Old_Mode
  8662.     READF   Handle,Copper1,#3380
  8663.     CLOSEF  Handle
  8664.  
  8665.     OPENF   #Copper3_Name,#Old_Mode
  8666.     READF   Handle,Copper2,#3380
  8667.     CLOSEF  Handle
  8668.  
  8669.     INSCOP  Buffer1,Copper1,#0
  8670.     INSCOP  Buffer2,Copper2,#0
  8671.     COPON   Copper1
  8672.    
  8673.     Bsr Wait_VBL
  8674.     TURNONDMA
  8675.  
  8676.     ***************************************
  8677.     *****   Title_Screen Part 1 *******
  8678.     ***************************************
  8679.     Bsr Clear_Text_Buffers
  8680.     PRINTAT Showbuffer,#0,#5,#Credits,#Credits_End-Credits,#40960
  8681.     Bsr Copy_Buffers
  8682.  
  8683.     Moveq.l #0,d7
  8684.    
  8685. Credit_Loop:
  8686.     Bsr Parallax_Scroll
  8687.     Bsr Sin_Title
  8688.     Bsr Flip_Screen
  8689.     Bsr Wait_VBL
  8690.    
  8691.     Btst    #7,Mousekey
  8692.     Beq Title_Part_2
  8693.     Bra Credit_Loop
  8694.    
  8695.     ***************************************
  8696.     *****   Title_Screen Part 2 *******
  8697.     ***************************************
  8698. Title_Part_2:
  8699.     HOLD_FIRE
  8700.  
  8701.     Move.l  Buffer1,d1
  8702.     Addi.l  #40960,d1
  8703.     Move.l  d1,a0
  8704.     Move.l  #2560,d0
  8705.     Bsr Clear
  8706.  
  8707.     Move.l  Buffer2,d1
  8708.     Addi.l  #40960,d1
  8709.     Move.l  d1,a0
  8710.     Move.l  #2560,d0
  8711.     Bsr Clear
  8712.  
  8713.     Bsr Print_Choice
  8714.  
  8715. Ov_Loop:
  8716.     Move.w  Joydat,d6
  8717.     Btst    #9,d6           ; Left?
  8718.     Beq Not_Left_Push
  8719.  
  8720.     Lea Opt1,a0
  8721.     Lea Opt2,a1
  8722.     Move.b  #105,(a0)
  8723.     Move.b  #106,(a1)
  8724.     Bsr Print_Choice
  8725.  
  8726. Not_Left_Push: 
  8727.     Btst    #1,d6
  8728.     Beq Not_Right_Push
  8729.  
  8730.     Lea Opt1,a0
  8731.     Lea Opt2,a1
  8732.     Move.b  #106,(a0)
  8733.     Move.b  #105,(a1)
  8734.  
  8735.     Bsr Print_Choice
  8736.  
  8737. Not_Right_Push:
  8738.     Bsr Parallax_Scroll
  8739.     Bsr Sin_Title
  8740.     Bsr Screen_Swap
  8741.     Bsr Wait_VBL
  8742.    
  8743.     Btst    #7,Mousekey
  8744.     Bne Ov_Loop
  8745.    
  8746.     Lea Opt1,a0
  8747.     Cmpi.b  #105,(a0)
  8748.     Beq Fade_And_Start
  8749.  
  8750.     HOLD_FIRE
  8751.  
  8752.     ***************************************
  8753.     *****   Title_Screen Part 3 *******
  8754.     ***************************************
  8755.  
  8756.     Move.l  Buffer1,d1
  8757.     Addi.l  #40960,d1
  8758.     Move.l  d1,a0
  8759.     Move.l  #2560,d0
  8760.     Bsr Clear
  8761.  
  8762.     Move.l  Buffer2,d1
  8763.     Addi.l  #40960,d1
  8764.     Move.l  d1,a0
  8765.     Move.l  #2560,d0
  8766.     Bsr Clear
  8767.  
  8768.     Bsr Print_Opts
  8769.    
  8770. Option_Screen:
  8771.     Bsr Parallax_Scroll
  8772.     Bsr Sin_Title
  8773.     Bsr Screen_Swap
  8774.     Bsr Wait_VBL
  8775.    
  8776.     Btst    #7,Mousekey
  8777.     Bne Option_Screen
  8778.    
  8779. Fade_And_Start:
  8780.     Move.l  Copper1,Fading_Copper
  8781.     Bsr Copper_Fade
  8782.  
  8783.     Move.l  Copper2,Fading_Copper
  8784.     Bsr Copper_Fade
  8785.    
  8786.     Bsr Clear_Buffers
  8787.     Rts
  8788.  
  8789. *************************************************
  8790. *   Start/Options text routine      *
  8791. *************************************************
  8792. Print_Choice:
  8793.     PRINTAT Showbuffer,#6,#10,#Opt1,#Opt1_End-Opt1,#40960
  8794.     PRINTAT Showbuffer,#6,#11,#Opt2,#Opt2_End-Opt2,#40960
  8795.     Bsr Copy_Text_Buffer
  8796.     Rts
  8797.  
  8798. Print_Opts:
  8799.     PRINTAT Showbuffer,#0,#5,#Opts_Menu,#Opts_Menu_End-Opts_Menu,#40960
  8800.     Bsr Copy_Text_Buffer
  8801.     Rts
  8802.  
  8803. *************************************************
  8804. *   Animate BLAZE title - make it wavy  *
  8805. *************************************************
  8806. Sin_Title:
  8807.     Addi.w  #2,d7
  8808.     Cmpi.w  #94,d7
  8809.     Bls No_Sin_Reset
  8810.     Clr d7
  8811.  
  8812. No_Sin_Reset:  
  8813.     Lea Bpl1_Sin,a0
  8814.     Lea (a0,d7),a0
  8815.  
  8816.     Move.l  Copper1,a1
  8817.     Lea $11E(a1),a1
  8818.  
  8819.     Move.l  Copper2,a2
  8820.     Lea $11E(a2),a2
  8821.    
  8822.     Move.w  #32,d0
  8823.    
  8824. Sin_Loop:  
  8825.     Move.w  (a0),(a1)
  8826.     Move.w  (a0)+,(a2)
  8827.  
  8828.     Addq.l  #8,a1
  8829.     Addq.l  #8,a2
  8830.  
  8831.     Dbra    d0,Sin_Loop
  8832.     Rts
  8833.  
  8834. *************************************************
  8835. *   Load Warp logo screen           *  
  8836. *************************************************
  8837. Load_Logo:
  8838.     OPENF   #Copper2_Name,#Old_Mode
  8839.     READF   Handle,Copper1,#3380
  8840.     CLOSEF  Handle
  8841.  
  8842.     OPENF   #Copper2_Name,#Old_Mode
  8843.     READF   Handle,Copper2,#3380
  8844.     CLOSEF  Handle
  8845.  
  8846.     Move.l  Buffer1,Currbuffer
  8847.     Move.l  Buffer2,Showbuffer
  8848.  
  8849.     INSCOP  Buffer1,Copper1,#0
  8850.     INSCOP  Buffer2,Copper2,#0
  8851.     COPON   Copper1
  8852.    
  8853.     Bsr Wait_VBL
  8854.  
  8855.     Move.w  #$2c81,$dff08e
  8856.     Move.w  #$2cc1,$dff090
  8857.  
  8858.     Lea Cmap2,a0
  8859.     Move.w  #31,d0
  8860.     Bsr Get_Cmap
  8861.     Bsr Set_Cmap
  8862.  
  8863.     LOADPIC #Logo_Pic_Name,#51200
  8864.  
  8865.     Rts
  8866.    
  8867. *************************************************
  8868. *   Load font, sprites and masks        *
  8869. *************************************************
  8870. Load_Sprites:  
  8871.     OPENF   #Font_Name,#Old_Mode    ; Load Font In Memory
  8872.     READF   Handle,Font,#1920
  8873.     CLOSEF  Handle
  8874.    
  8875.     OPENF   #Sprites_Name,#Old_Mode ; Load Sprites In Memory
  8876.     READF   Handle,Sprites,#69120
  8877.     CLOSEF  Handle
  8878.  
  8879.     OPENF   #Masks_Name,#Old_Mode
  8880.     READF   Handle,Masks,#13824
  8881.     CLOSEF  Handle
  8882.     Rts
  8883.    
  8884. *************************************************
  8885. *   Load enemy and map tiles        *
  8886. *************************************************  
  8887. Load_Blocks:       
  8888.     Move.b  Level,Current_Level
  8889.  
  8890.     OPENF   #Blocks_Name,#Old_Mode  ; Load Blocks In Memory
  8891.     READF   Handle,Blocks,#166400
  8892.     CLOSEF  Handle
  8893.  
  8894.     OPENF   #Block_Masks_Name,#Old_Mode ; Load Blocks In Memory
  8895.     READF   Handle,MkBlocks,#33280
  8896.     CLOSEF  Handle
  8897.  
  8898.     OPENF   #Enemy_Sprites_Name,#Old_Mode   ; Load Sprites In Memory
  8899.     READF   Handle,Enemies,#51200
  8900.     CLOSEF  Handle
  8901.  
  8902.     OPENF   #Enemy_Masks_Name,#Old_Mode
  8903.     READF   Handle,MKEnemies,#10240
  8904.     CLOSEF  Handle
  8905.     Rts
  8906.    
  8907. *************************************************
  8908. *   Load level maps             *
  8909. *************************************************  
  8910. Load_Map:
  8911.     Move.l  Map,d6
  8912.     Addi.l  #60008,d6
  8913.     Move.l  d6,Spare_Buffer
  8914.  
  8915.     OPENF   #Map_Name,#Old_Mode
  8916.     READF   Handle,d6,#60008
  8917.     CLOSEF  Handle
  8918.  
  8919.     Addi.l  #60008,d6
  8920.    
  8921.     OPENF   #EnemyMap_Name,#Old_Mode
  8922.     READF   Handle,d6,#900
  8923.     CLOSEF  Handle
  8924.    
  8925.     Addi.l  #900,d6
  8926.  
  8927.     OPENF   #Copper1_Name,#Old_Mode
  8928.     READF   Handle,d6,#3388
  8929.     CLOSEF  Handle
  8930.  
  8931.     Addi.l  #3388,d6
  8932.  
  8933.     OPENF   #Copper1_Name,#Old_Mode
  8934.     READF   Handle,d6,#3388
  8935.     CLOSEF  Handle
  8936.  
  8937.     Move.l  Spare_Buffer,a0
  8938.     Move.w  4(a0),Xmax
  8939.     Move.w  6(a0),Ymax
  8940.  
  8941.     Move.w  Xmax,d0
  8942.     Move.w  Ymax,d1
  8943.     Mulu    d1,d0
  8944.     Move.l  d0,SMap
  8945.     Rts
  8946.  
  8947. *************************************************
  8948. *   Recopy map data from source         *
  8949. *************************************************  
  8950. Recopy_Map_Data:
  8951.     Move.l  Spare_Buffer,d4
  8952.     COPY    d4,Map,#60008
  8953.  
  8954.     Addi.l  #60008,d4
  8955.     COPY    d4,#Enmx,#900
  8956.  
  8957.     Addi.l  #900,d4
  8958.     COPY    d4,Copper1,#3388
  8959.  
  8960.     Addi.l  #3388,d4
  8961.     COPY    d4,Copper2,#3388
  8962.     Rts
  8963.    
  8964. *************************************************
  8965. *   Load level music            *
  8966. *************************************************
  8967. Load_Music:
  8968.     OPENF   #Music_Name,#Old_Mode
  8969.     READF   Handle,Music_Start,#40960
  8970.     CLOSEF  Handle
  8971.     Rts
  8972.  
  8973. *************************************************
  8974. *   Wait for VBL                *
  8975. *************************************************
  8976. Wait_Blit:
  8977.     Btst    #14,$dff002
  8978.     Bne.s   Wait_Blit    
  8979.     Rts
  8980.  
  8981. *************************************************
  8982. *   Increase filename index byte        *
  8983. *************************************************  
  8984. Increase_File_Names:
  8985.     Lea Map_Name,a0
  8986.     Addi.b  #1,12(a0)
  8987.  
  8988.     Lea EnemyMap_Name,a0
  8989.     Addi.b  #1,12(a0)
  8990.     Rts
  8991.  
  8992. *************************************************
  8993. *   Pause game              *
  8994. *************************************************
  8995. Pause_Game:
  8996.     Clr.l $6a4
  8997.     Clr.l $6b0
  8998.     Clr.l d0
  8999.  
  9000.     PRINT   #Pause,#Pause_End-Pause,Panel
  9001. Main:
  9002.     Btst    #$07,$bfe001
  9003.     Bne     Main
  9004.  
  9005.     HOLD_FIRE
  9006.  
  9007.     PRINT   #Panel_Data,#Panel_Data_End-Panel_Data,Panel
  9008.     PRINT   #Panel_Vals,#Panel_Vals_End-Panel_Vals,Panel
  9009.     Jmp No_Pause
  9010.  
  9011. *************************************************
  9012. *   Disk Error              *
  9013. *************************************************
  9014. Disk_Error:
  9015.     Bsr Clear_Buffers
  9016.    
  9017.     PRINT   #Dk_Err,#Dk_Err_End-Dk_Err,Buffer1
  9018.  
  9019.     Move.l  Dosbase,a6
  9020.     Jsr IoErr(a6)
  9021.     Move.l  d0,d5
  9022.  
  9023.     Move.l  #Insert_Disk,Text_Start
  9024.     PRINTAT Buffer1,#0,#1,Text_Start,#20,#0
  9025.  
  9026.     SETERRCOP
  9027.     COPON   #Error_Cop
  9028.     SPRITESOFF
  9029.     TURNONDMA
  9030.    
  9031. Err_Main:
  9032.     Btst    #$07,$bfe001
  9033.     Bne     Err_Main
  9034.  
  9035.     TURNOFFDMA
  9036.     Rts
  9037.  
  9038. *************************************************
  9039. *   Fatal Trap              *
  9040. *************************************************
  9041. CPU_Trap:
  9042.     Bsr Clear_Buffers
  9043.     PRINT   #CPU_Err,#CPU_Err_End-CPU_Err,Buffer1
  9044.     SETERRCOP
  9045.     COPON   #Error_Cop
  9046.     SPRITESOFF
  9047.     TURNONDMA
  9048.    
  9049. CPU_Err_Main:
  9050.     Btst    #$07,$bfe001
  9051.     Bne     CPU_Err_Main
  9052.     TURNOFFDMA
  9053.     Rte
  9054.  
  9055. *************************************************
  9056. *   Update HUD panel            *
  9057. *************************************************
  9058. Update_Panel:
  9059.     TIME_UPDATE
  9060.     PRINT   #Panel_Vals,#Panel_Vals_End-Panel_Vals,Panel
  9061.     Rts
  9062.  
  9063. *************************************************
  9064. *   Scroll copper list to match water level *
  9065. *************************************************
  9066. Scroll_Copper:
  9067.     Move.l  Water_Lev_C,d0
  9068.     Cmp.l   Water_Lev_A,d0
  9069.     Beq Convert_Water_Level
  9070.     Bhi Lower_Water_Level
  9071.     Blo Higher_Water_Level
  9072.        
  9073. Higher_Water_Level:    
  9074.     Move.w  #1,Water_Direction
  9075.     Subi.l  #1,Water_Lev_A
  9076.     Bra Convert_Water_Level
  9077.  
  9078. Lower_Water_Level:
  9079.     Move.w  #2,Water_Direction
  9080.     Addi.l  #1,Water_Lev_A
  9081.  
  9082. Convert_Water_Level:
  9083.     Move.l  Water_Lev_A,d1
  9084.     Move.l  #$FD3DFFFE,Water_Lev_B
  9085.    
  9086.     Move.l  Ymap,d0
  9087.     Mulu    #32,d0
  9088.  
  9089.     Moveq.l #0,d2
  9090.     Moveq.l #0,d3
  9091.  
  9092.     Move.w  Yoff,d2
  9093.     Move.w  #32,d3
  9094.     Sub.w   d2,d3  
  9095.     Add.l   d3,d0
  9096.    
  9097.     Sub.l   d0,d1
  9098.     Bpl No_Overflow
  9099.    
  9100.     Move.l  #$104DFFFE,Water_Lev_B
  9101.     Bra Overflow
  9102.    
  9103. No_Overflow:
  9104.     Cmpi.l  #190,d1
  9105.     Bhi Overflow
  9106.            
  9107.     Andi.l  #$FF,d1
  9108.     Addi.b  #60,d1
  9109.    
  9110.     Swap    d1
  9111.     Lsl.l   #8,d1
  9112.     Bset    #16,d1
  9113.  
  9114.     Move.w  #$FFFE,d1
  9115.     Ori.l   #$3D0000,d1
  9116.     Move.l  d1,Water_Lev_B
  9117.  
  9118. Overflow:
  9119.     Move.l  Water_Lev_B,d1
  9120.     Move.l  Current_Copper,a0
  9121.  
  9122.     Lea $7E8(a0),a0
  9123.     Move.l  d1,(a0)
  9124.  
  9125.     Andi.l  #$FF00FFFF,d1
  9126.     Bset    #16,d1
  9127.     Addi.l  #$01000000,d1
  9128.    
  9129.     Lea $8(a0),a0
  9130.     Move.l  d1,(a0)
  9131.     Rts
  9132.  
  9133. *************************************************
  9134. *   Scaling routine             *
  9135. *************************************************
  9136. Scale:
  9137.     Rts
  9138.  
  9139. *************************************************
  9140. *   Set Interrupt 3             *
  9141. *************************************************
  9142. Set_Int3:
  9143.     Move.w  #$4000,Intena
  9144.     Move.l  $6c,Old_Int
  9145.     Move.l  #Int3,$6c
  9146.     Move.w  #$C000,Intena
  9147.     Rts
  9148.  
  9149. Int3:
  9150.     Movem.l d0-d7/a0-a7,-(Sp)
  9151.     Move.w  Intreqr,d0  
  9152.     Btst    #5,d0
  9153.     Bne     Play
  9154.     Bra     No_Play
  9155. Play:
  9156. ;   Jsr mt_music
  9157.     Addi.w  #1,Game_Timer_A
  9158.  
  9159. No_Play:
  9160.     Move.w  #$70,Intreq
  9161.         Movem.l (Sp)+,d0-d7/a0-a7
  9162.     Rte
  9163.  
  9164. *************************************************
  9165. *   New game                *
  9166. *************************************************
  9167. Init_New_Addr:
  9168.     Lea Map_Name,a0
  9169.     Move.b  #49,12(a0)
  9170.  
  9171.     Lea EnemyMap_Name,a0
  9172.     Move.b  #49,12(a0)
  9173.  
  9174.     Move.b  #1,Level
  9175.     Move.b  Start_Lives,Lives
  9176.     Move.b  Start_Energy,Energy
  9177.     Rts
  9178.  
  9179. *************************************************
  9180. *   Initialise all flags and variables  *
  9181. *************************************************
  9182. Init_Addr:
  9183.     Move.w  #127,YChar
  9184.     Move.w  #1,Frame
  9185.     Move.w  #1,Delay
  9186.     Move.w  #1,XDelay
  9187.     Move.w  #1,SDelay
  9188.     Move.w  #1,LDelay
  9189.     Move.w  #1,BDelay
  9190.     Move.w  #8,RDelay
  9191.     Move.w  #1,WDelay
  9192.     Move.w  #50,CtrDelay   
  9193.     Move.w  #25,TDelay 
  9194.     Move.w  #999,Time
  9195.     Move.l  #5,Xmap
  9196.     Move.l  #36,Ymap
  9197.     Move.l  #5,XStart
  9198.     Move.l  #36,YStart
  9199.  
  9200.     Clr.l   Score
  9201.     Clr.w   Xoff       
  9202.     Clr.w   Yoff       
  9203.     Clr.w   Offx       
  9204.     Clr.w   Obx
  9205.  
  9206. Life_Lost_Reset:
  9207.     Clr.l   Xdum
  9208.     Clr.l   Ydum
  9209.     Clr.l   MShift     
  9210.     Clr.l   Lava_Anim_X
  9211.     Clr.l   Lava_Anim_Y
  9212.  
  9213.     Clr.b   Slide
  9214.     Clr.b   Spin       
  9215.     Clr.b   Spring     
  9216.     Clr.b   Braking
  9217.     Clr.b   Hang       
  9218.     Clr.b   Whoopie
  9219.     Clr.b   Ext_Whoopie
  9220.     Clr.b   Super_Run  
  9221.     Clr.b   Crouch     
  9222.     Clr.b   Invulnerable
  9223.     Clr.b   Dino_Platform
  9224.     Clr.b   Cover_Cat
  9225.  
  9226.     Clr.w   Velx
  9227.     Clr.w   Vely
  9228.     Clr.w   AuxVelx
  9229.     Clr.w   AuxVely
  9230.  
  9231.     Clr.w   VChange
  9232.     Clr.w   NVChange   
  9233.     Clr.w   Power      
  9234.     Clr.w   Inc_Vel
  9235.  
  9236.     Clr.w   Direction  
  9237.     Clr.w   Dir    
  9238.     Clr.w   Fdir       
  9239.  
  9240.     Clr.w   Flick_Ctr  
  9241.     Clr.w   Anim_Ctr   
  9242.     Clr.w   FG_Anim_Ctr
  9243.     Clr.w   NMCtr      
  9244.     Clr.w   NMCtr2     
  9245.     Clr.w   NMCtr4     
  9246.     Clr.w   Estart
  9247.     Clr.w   Jump       
  9248.     Clr.w   IJump      
  9249.     Clr.w   Xjump      
  9250.     Clr.w   Yjump      
  9251.     Clr.w   NJump      
  9252.  
  9253.     Clr.w   XMotion
  9254.     Clr.w   YFlip      
  9255.     Clr.w   XORFrame   
  9256.     Clr.w   Surfframe  
  9257.     Clr.w   Whoops_Frame   
  9258.     Clr.w   Emerald_Ctr
  9259.  
  9260.     Clr.w   PShift         
  9261.     Clr.w   Detect     
  9262.     Clr.w   Standon
  9263.     Clr.w   Stand      
  9264.     Clr.w   Standpploop
  9265.     Clr.w   Standpfrm
  9266.     Clr.w   Standpfrmon
  9267.     Clr.w   Surface
  9268.     Clr.w   Sidewalk   
  9269.     Clr.w   Brgdn      
  9270.     Clr.w   Fpform     
  9271.     Clr.w   Dpfstand   
  9272.     Clr.w   Left_Blocked   
  9273.     Clr.w   Right_Blocked  
  9274.     Clr.w   FrDir      
  9275.     Clr.w   Rten       
  9276.     Clr.w   Level_Complete
  9277.    
  9278.     Clr.w   Emeralds       
  9279.     Clr.w   Hit    
  9280.    
  9281.     Move.b  Start_Energy,Energy
  9282.  
  9283.     Lea Velocities,a0       ; Clear velocities
  9284.     Move.l  #50,d0
  9285.  
  9286. Velclr_Loop:
  9287.     Clr.w   (a0)+
  9288.     Dbra    d0,Velclr_Loop
  9289.  
  9290.     Lea Angles,a0           ; Clear angles
  9291.     Move.l  #50,d0
  9292.  
  9293. Angclr_Loop:
  9294.     Clr.w   (a0)+
  9295.     Dbra    d0,Angclr_Loop
  9296.  
  9297.     Rts
  9298.  
  9299. *************************************************
  9300. *   Include music playback routines     *
  9301. *************************************************
  9302.  
  9303. ;   Include "Music_Routine.S"
  9304.  
  9305. *** Data **************
  9306.  
  9307. Bpl1_Sin:  
  9308.     Dc.w    $88,$77,$66,$55,$44,$44,$33,$33,$22,$22
  9309.     Dc.w    $11,$11,$00,$00,$00,$11,$11,$22,$22,$33
  9310.     Dc.w    $33,$44,$44,$55,$66,$77,$88,$99,$aa,$bb
  9311.     Dc.w    $cc,$cc,$dd,$dd,$ee,$ee,$ff,$ff,$ff,$ee
  9312.     Dc.w    $ee,$dd,$dd,$cc,$cc,$bb,$aa,$99
  9313.  
  9314.     Dc.w    $88,$77,$66,$55,$44,$44,$33,$33,$22,$22
  9315.     Dc.w    $11,$11,$00,$00,$00,$11,$11,$22,$22,$33
  9316.     Dc.w    $33,$44,$44,$55,$66,$77,$88,$99,$aa,$bb
  9317.     Dc.w    $cc,$cc,$dd,$dd,$ee,$ee,$ff,$ff,$ff,$ee
  9318.     Dc.w    $ee,$dd,$dd,$cc,$cc,$bb,$aa,$99
  9319.  
  9320. Bpl2_Sin:  
  9321.     Dc.w    $44,$44,$33,$33,$22,$22,$22,$11,$11,$11
  9322.     Dc.w    $11,$00,$00,$00,$00,$00,$11,$11,$11,$11
  9323.     Dc.w    $22,$22,$22,$33,$33,$44,$44,$55,$55,$66
  9324.     Dc.w    $66,$66,$77,$77,$77,$77,$88,$88,$88,$88
  9325.     Dc.w    $88,$77,$77,$77,$77,$66,$66,$66,$55,$55
  9326.  
  9327.     Dc.w    $44,$44,$33,$33,$22,$22,$22,$11,$11,$11
  9328.     Dc.w    $11,$00,$00,$00,$00,$00,$11,$11,$11,$11
  9329.     Dc.w    $22,$22,$22,$33,$33,$44,$44,$55,$55,$66
  9330.     Dc.w    $66,$66,$77,$77,$77,$77,$88,$88,$88,$88
  9331.     Dc.w    $88,$77,$77,$77,$77,$66,$66,$66,$55,$55
  9332.        
  9333. Xmax:       Dc.w    0
  9334. Ymax:       Dc.w    0
  9335. Xoff:      Dc.w    0
  9336. Yoff:      Dc.w    0                  
  9337. Offx:      Dc.w    0              
  9338. MShift:     Dc.l    0
  9339.  
  9340. Cf_Hit_Velx_Lt: Dc.w    0
  9341. Cf_Hit_Velx_Rt: Dc.w    0
  9342. Cf_Hit_Vely:    Dc.w    0
  9343.  
  9344. Hit_Velx_Lt:    Dc.w    0
  9345. Hit_Velx_Rt:    Dc.w    0
  9346. Hit_Vely:   Dc.w    0
  9347.  
  9348. Velx:       Dc.w    0      
  9349. Vely:       Dc.w    0  
  9350. AuxVelx:    Dc.w    0
  9351. AuxVely:    Dc.w    0
  9352. VChange:    Dc.w    0
  9353. NVChange:   Dc.w    0
  9354. Power:      Dc.w    0
  9355. Inc_Vel:    Dc.w    0
  9356.  
  9357. Obx:        Dc.w    0
  9358. XChar:      Dc.w    144
  9359. YChar:      Dc.w    127
  9360. XDust:      Dc.w    148
  9361. YDust:      Dc.w    143
  9362. XSprite_16: Dc.w    0
  9363. YSprite_16: Dc.w    0
  9364. Can_Dust:   Dc.w    0
  9365. Frame:      Dc.w    1
  9366.  
  9367.  
  9368. Direction:  Dc.w    0
  9369. Dir     Dc.w    0
  9370.  
  9371. Fdir:       Dc.w    0
  9372. Flick_Ctr:  Dc.w    0
  9373. Anim_Ctr:   Dc.w    0
  9374. Enemy_Anim_Ctr: Dc.w    0
  9375. FG_Anim_Ctr:    Dc.w    0
  9376. NMCtr:      Dc.w    0
  9377. NMCtr2:     Dc.w    0
  9378. NMCtr4:     Dc.w    0
  9379. XMotion:    Dc.w    0
  9380. YFlip:      Dc.w    0
  9381.  
  9382. XORFrame:   Dc.w    0
  9383. Surfframe:  Dc.w    0
  9384. Whoopie:    Dc.w    0
  9385. Whoops_Frame:   Dc.w    0
  9386. Ext_Whoopie:    Dc.w    0
  9387. Super_Run:  Dc.w    0
  9388. Crouch:     Dc.w    0
  9389.  
  9390. Jump:       Dc.w    0
  9391. IJump:      Dc.w    0
  9392. Xjump:      Dc.w    0
  9393. Yjump:      Dc.w    0
  9394. NJump:      Dc.w    0
  9395. Max_Jump:   Dc.w    0
  9396. Momentum_X: Dc.w    0
  9397. Momentum_Y: Dc.w    0
  9398.  
  9399. Delay:      Dc.w    1
  9400. XDelay:     Dc.w    1
  9401. SDelay:     Dc.w    1
  9402. LDelay:     Dc.w    1
  9403. BDelay:     Dc.w    1
  9404. RDelay:     Dc.w    8
  9405. WDelay:     Dc.w    1
  9406. CtrDelay:   Dc.w    50
  9407. TDelay:     Dc.w    26
  9408. Dust_Delay: Dc.w    0
  9409. Emerald_Ctr:    Dc.w    0
  9410. PShift:     Dc.w    0
  9411. Level_Complete: Dc.w    0  
  9412.  
  9413. Detect:     Dc.w    0
  9414. Standon:    Dc.w    0
  9415. Stand:      Dc.w    0
  9416. Standpfrm:  Dc.w    0
  9417. Standpfrmon:    Dc.w    0
  9418. Standpploop:    Dc.w    0
  9419. Surface:    Dc.w    0
  9420. Sidewalk:   Dc.w    0
  9421.  
  9422. Brgdn:      Dc.w    0
  9423. Fpform:     Dc.w    0
  9424. Dpfstand:   Dc.w    0
  9425. Platform_Number: Dc.w   0
  9426.  
  9427. Left_Blocked:   Dc.w    0
  9428. Right_Blocked:  Dc.w    0
  9429. FrDir:      Dc.w    0
  9430. Rten:       Dc.w    0
  9431. Emeralds:   Dc.w    0  
  9432. Hit:        Dc.w    0
  9433. Time:       Dc.w    999
  9434.  
  9435. Cust_Ctr_A: Dc.w    0
  9436. Cust_Ctr_B: Dc.w    0
  9437. Cust_Ctr_C: Dc.w    0
  9438. Cust_Ctr_D: Dc.w    0
  9439. Cust_Ctr_E: Dc.w    0
  9440. Cust_Ctr_F: Dc.w    0
  9441. Cust_Ctr_G: Dc.w    0
  9442. Cust_Ctr_H: Dc.w    0
  9443. Cust_Ctr_I: Dc.w    0
  9444. Cust_Ctr_J: Dc.w    0
  9445.  
  9446. Lava_Anim_X:    Dc.l    0
  9447. Lava_Anim_Y:    Dc.l    0
  9448.  
  9449. Coll_X1:    Dc.l    0
  9450. Coll_X2:    Dc.l    0
  9451. Coll_Y1:    Dc.l    0
  9452. Coll_Y2:    Dc.l    0
  9453.  
  9454. Offex:      Dc.l    0
  9455. Offey:      Dc.l    0
  9456. Savecx:     Dc.l    0
  9457. Savecy:     Dc.l    0
  9458. Cenmx:      Dc.l    0
  9459. Cenmy:      Dc.l    0
  9460. Cenmvy:     Dc.w    0
  9461. Cenmvx:     Dc.w    0
  9462. Cenmt:      Dc.w    0
  9463. Cenmpfrm:   Dc.w    0
  9464. Cenmfoh:    Dc.w    0
  9465.  
  9466. Velocities: Ds.w    50
  9467. Angles:     Ds.w    50
  9468.  
  9469. Dummy_Velocity: Dc.w    0
  9470. Dummy_Angle:    Dc.w    0
  9471. Angle:          Dc.w    0
  9472.  
  9473. Enemy_Check:    Dc.w    0
  9474. Enemy_Frame:    Dc.w    0
  9475.  
  9476. CSize:      Dc.w    12
  9477. NFrames:    Dc.w    0
  9478. XBytes:     Dc.w    0
  9479. YBytes:     Dc.w    0
  9480. Enmsize:    Dc.w    0
  9481. Emod:       Dc.w    0
  9482.  
  9483. * Enemy structures
  9484.  
  9485. Enmx:       Ds.l    50  ; x position
  9486. Enmy:       Ds.l    50  ; y position
  9487. Enmt:       Ds.w    50  ; type
  9488. Enmvx:      Ds.w    50  ; x velocity
  9489. Enmvy:      Ds.w    50  ; y velocity
  9490. Enmpfrm:    Ds.w    50  ; is plaform?
  9491. Enmfoh:     Ds.w    50  ; is friend or foe?
  9492. Enmdata:
  9493. Estart:     Dc.w    0
  9494.  
  9495. *>  Bullets
  9496. Fire_Toggle:        Ds.b    50
  9497. Enemy_Fire_X:       Ds.l    50
  9498. Enemy_Fire_Y:       Ds.l    50
  9499. Enemy_Fire_VX:      Ds.w    50
  9500. Enemy_Fire_VY:      Ds.w    50
  9501. Enemy_Fire_Dirx:   Dc.w    0
  9502. Enemy_Fire_Diry:   Dc.w    0
  9503. *>  Bullets
  9504.  
  9505. Snowx:  Dc.w    035,065,090,120,155,180,200,230,250,260,280
  9506.         Dc.w    045,075,110,135,165,190,215,240,265,270,290
  9507.        
  9508. Snowy:  Dc.w    032,060,098,120,100,050,140,060,170,040,040
  9509.         Dc.w    044,070,130,150,110,160,100,080,120,070,090
  9510.  
  9511. Snows:  Dc.w    001,002,001,003,002,001,002,001,003,002,002
  9512.         Dc.w    002,003,002,001,003,001,002,002,003,002,001
  9513.  
  9514. Snow:   Dc.w    0
  9515.    
  9516. Sine_Read:      Dc.w    0
  9517. Cosine_Read:    Dc.w    0
  9518. Sin_Ptr:        Dc.w    0
  9519. SMode:          Dc.w    0
  9520. STab:           Dc.w    0
  9521. Water_Lev_A:        Dc.l    $5CA
  9522. Water_Lev_B:        Dc.l    0
  9523. Water_Lev_C:        Dc.l    $5CA
  9524. Water_Direction:   Dc.w    0
  9525.  
  9526. Text_Start:     Dc.l    0
  9527. Music_Start:    Dc.l    $60C8
  9528. Map:           Dc.l    0
  9529. Spare_Buffer:   Dc.l    0
  9530.  
  9531. Copper1:        Dc.l    0
  9532. Copper2:        Dc.l    0
  9533. Fading_Copper:  Dc.l    0
  9534. Current_Copper: Dc.l    0
  9535.  
  9536. Font:       Dc.l    0
  9537. MKEnemies:  Dc.l    0
  9538. Enemies:    Dc.l    0
  9539. Sprites:   Dc.l    0
  9540. Masks:      Dc.l    0
  9541. Blocks:    Dc.l    0
  9542. MkBlocks:   Dc.l    0
  9543. Panel:      Dc.l    0
  9544.  
  9545. Buffer1:   Dc.l    0              
  9546. Buffer2:   Dc.l    0              
  9547. Currbuffer: Dc.l    0
  9548. Showbuffer: Dc.l    0    
  9549.  
  9550. SrcMask:    Dc.l    0
  9551. Src:       Dc.l    0  
  9552. Dest:      Dc.l    0  
  9553.  
  9554. Doshandle   Dc.l    0
  9555. Handle:     Dc.l    0
  9556. Dosbase:    Dc.l    0
  9557. Gfxbase:    Dc.l    0
  9558.        
  9559. XChar_Map:  Dc.l    0
  9560. YChar_Map:  Dc.l    0      
  9561. Xdum:      Dc.l    0              
  9562. Ydum:      Dc.l    0              
  9563. Xmap:      Dc.l    10             
  9564. Ymap:      Dc.l    0  
  9565. XStart:     Dc.l    0
  9566. YStart:     Dc.l    0
  9567. XStartb:    Dc.w    0
  9568. YStartb:    Dc.w    0
  9569. SMap:       Dc.l    0  
  9570.  
  9571. Old_Int:        Dc.l    0
  9572. Game_Timer_A:   Dc.l    0
  9573. Game_Timer_B:   Dc.l    0
  9574. Score:          Dc.l    0
  9575.  
  9576. Prop:       Dc.w    0
  9577. LProp:      Dc.w    0
  9578. Bob_Frame:  Dc.w    0
  9579.  
  9580. Do_Mask_Routine:   Dc.b    0
  9581. Jdown1:             Dc.b    0
  9582. Jdown2:             Dc.b    0
  9583. Pend_Bob:           Dc.b    0
  9584. Destructable:       Dc.b    0
  9585. Cover_Cat:          Dc.b    0
  9586. Dino_Platform:      Dc.b    0
  9587. Extra_Blocks:       Dc.b    0
  9588. Enemy_Fire_Pause:   Dc.b    0
  9589.  
  9590. Start_Lives:    Dc.b    3
  9591. Start_Energy:   Dc.b    2
  9592. In_Game_Timer:  Dc.b    1
  9593. Lives:          Dc.b    3
  9594. Energy:         Dc.b    2
  9595. Level:          Dc.b    1
  9596. Current_Level:  Dc.b    0
  9597.  
  9598. Slide:          Dc.b    0
  9599. Spin:           Dc.b    0
  9600. Spring:         Dc.b    0
  9601. Braking:        Dc.b    0
  9602. Hang:           Dc.b    0
  9603. Invulnerable:   Dc.b    0
  9604.  
  9605.         Even
  9606.        
  9607. Max_Segments:   Dc.l    0
  9608. Scale_Buffer:   Dc.l    0
  9609. Dest_Buffer:    Dc.l    0
  9610. Max_Scale_X:    Dc.w    0
  9611. Max_Scale_Y:    Dc.w    0
  9612. Str_Scale_X:    Dc.w    0
  9613. Str_Scale_Y:    Dc.w    0
  9614. Draw:           Dc.w    0
  9615. Mag_Power:      Dc.w    0
  9616. Scale_Plane:    Dc.w    0
  9617.  
  9618. *********************************************************
  9619. *   Filename strings (null-terminated)      *
  9620. *********************************************************
  9621.  
  9622. Gfxname:           Dc.b    "graphics.library",0
  9623. Dosname:            Dc.b    "dos.library",0
  9624.  
  9625. Copper1_Name:       Dc.b    "BLAZE:Copper1.Cop",0
  9626. Copper2_Name:       Dc.b    "BLAZE:Copper2.Cop",0
  9627. Copper3_Name:       Dc.b    "BLAZE:Copper4.Cop",0
  9628. Copper4_Name:       Dc.b    "BLAZE:Copper7.Cop",0
  9629.  
  9630. Map_Name:           Dc.b    "BLAZE:Level_1.Map",0
  9631. EnemyMap_Name:      Dc.b    "BLAZE:Level_1.Edata",0
  9632.  
  9633. Sprites_Name:       Dc.b    "BLAZE:Sprites.RAW",0
  9634. Masks_Name:         Dc.b    "BLAZE:Masks.RAW",0
  9635.  
  9636. Enemy_Sprites_Name: Dc.b    "BLAZE:Enemies1.RAW",0
  9637. Enemy_Masks_Name:   Dc.b    "BLAZE:Emasks1.RAW",0
  9638.  
  9639. Blocks_Name:        Dc.b    "BLAZE:Blocks1.RAW",0
  9640. Block_Masks_Name:   Dc.b    "BLAZE:BMasks1.RAW",0
  9641.  
  9642. Logo_Pic_Name:      Dc.b    "BLAZE:Logo.RAW",0
  9643. Title_Pic_Name:     Dc.b    "BLAZE:Title.RAW",0
  9644. Zone_Pic_Name:      Dc.b    "BLAZE:Zonepic_1.RAW",0
  9645. Overview_Name:      Dc.b    "BLAZE:Overview.RAW",0
  9646. Hi_Score_Name:      Dc.b    "BLAZE:Hi-Score.RAW",0
  9647. Font_Name:          Dc.b    "BLAZE:Font.RAW",0
  9648.  
  9649. Music_Name:     Dc.b    "BLAZE:Music.ST",0
  9650. Hi_Score_Music_Name:    Dc.b    "BLAZE:Music2.ST",0
  9651.  
  9652. *                12345678901234567890
  9653.  
  9654. Dk_Err:         Dc.b    "   DISK REQUESTER   "
  9655. Dk_Err_End:     Dc.b    0
  9656.  
  9657. CPU_Err:        Dc.b    "  FATAL CPU CRASH=  "
  9658. CPU_Err_End:    Dc.b    0
  9659.  
  9660. Err_A:          Dc.b    "   FILE NOT FOUND   ",0
  9661. Err_B:          Dc.b    " DISK NOT VALIDATED ",0
  9662. Err_C:          Dc.b    "DISK WRITE PROTECTED",0
  9663. Err_D:          Dc.b    " DEVICE NOT MOUNTED ",0
  9664. Err_E:          Dc.b    "      DISK FULL     ",0      
  9665. Err_F:          Dc.b    "   NOT A DOS DISK   ",0
  9666. Err_G:          Dc.b    "  NO DISK IN DRIVE  ",0              
  9667. Err_H:          Dc.b    " UNPRINTABLE ERROR= ",0
  9668.  
  9669. Insert_Disk:    Dc.b    "PLEASE INSERT DISK 1"
  9670. Insert_Disk_End: Dc.b   0
  9671.        
  9672. Loading:        Dc.b    "LOADING GAME..."
  9673. Loading_End:    Dc.b    0
  9674.  
  9675. Pause:          Dc.b    106,106,106,"GAME",106,"PAUSED==",106,106,106,106
  9676. Pause_End:      Dc.b    0
  9677.  
  9678. Quit_Text:      Dc.b    106,106,106,"GAME",106,"ABORTED=",106,106,106,106
  9679. Quit_Text_End:  Dc.b    0
  9680.  
  9681. Opt1:           Dc.b    105,"START"
  9682. Opt1_End:       Dc.b    0
  9683.  
  9684. Opt2:           Dc.b    106,"OPTIONS"  
  9685. Opt2_End:       Dc.b    0
  9686.  
  9687. *                  12345678901234567890
  9688.  
  9689. Bonus_Messages:     Dc.b    004,"   EACH 100 GEMS  ",255
  9690.             Dc.b    000,"   COLLECTED  AN  ",255
  9691.             Dc.b    000,"   EXTRA LIFE IS  ",255
  9692.             Dc.b    000,"      GAINED=     ",255
  9693.            
  9694.             Dc.b    005," SECRET ROOMS ARE ",255
  9695.             Dc.b    000,"SCATTERED ALL OVER",255
  9696.             Dc.b    000,"OVER THE LANDSCAPE",255
  9697.             Dc.b    000," AND CONTAIN LOTS ",255
  9698.             Dc.b    000,"   OF BONUSES==   ",255
  9699.            
  9700.             Dc.b    004," FINISH THE STAGE ",255
  9701.             Dc.b    000,"   QUICKLY AND A  ",255
  9702.             Dc.b    000,"  HUGE TIME BONUS ",255
  9703.             Dc.b    000," WILL BE AWARDED==",255
  9704.            
  9705.             Dc.b    003,"  THESE DEVICES   ",255
  9706.             Dc.b    000,"  REPLENISH THE   ",255
  9707.             Dc.b    000,"  ENERGY GAUGE=   ",255
  9708.  
  9709.             Dc.b    003,"  COLLECT ALL THE ",255
  9710.             Dc.b    000,"  GEMS IN A STAGE ",255
  9711.             Dc.b    000," TO EARN A PERFECT",255
  9712.            
  9713.             Dc.b    004," RESTART  MONITORS",255
  9714.             Dc.b    000," ARE  ACTIVATED BY",255
  9715.             Dc.b    000," CROUCHING INFRONT",255
  9716.             Dc.b    000,"      OF THEM=    ",255
  9717.  
  9718.             Dc.b    003,"   REMEMBER THAT  ",255
  9719.             Dc.b    000," MOMENTUM  AFFECTS",255
  9720.             Dc.b    000," JUMPS FROM LIFTS=",255
  9721.  
  9722.             Dc.b    002,"FIRE IN PITS KILLS",255
  9723.             Dc.b    000,"    ON CONTACT=   ",255
  9724.            
  9725.             Dc.b    004,"HIDING  BEHIND THE",255
  9726.             Dc.b    000," SCENERY PREVENTS ",255
  9727.             Dc.b    000,"  COLLISION WITH  ",255
  9728.             Dc.b    000,"   THE ENEMIES=   ",255
  9729.            
  9730.             Dc.b    003,"  BEWARE OF  THE  ",255
  9731.             Dc.b    000," CRUMBLING PIECES ",255
  9732.             Dc.b    000,"    OF SCENERY    ",255
  9733.  
  9734.             Dc.b    003," THE HEADS OF THE ",255
  9735.             Dc.b    000," GIANT SNAKES ACT ",255
  9736.             Dc.b    000," AS SPRINGBOARDS= ",255
  9737.            
  9738.             Dc.b    004," WHEN NO ENERGY IS",255
  9739.             Dc.b    000," LEFT WAITING FOR ",255
  9740.             Dc.b    000,"    100 SECONDS   ",255
  9741.             Dc.b    000," RESTORES ENERGY==",255
  9742.                        
  9743.            
  9744. Credits:    Dc.b    000,"68000 PROGRAMMING ",255
  9745.             Dc.b    000,"KEITH BUGEJA      ",255
  9746.             Dc.b    000,"                  ",255
  9747.             Dc.b    000,"GRAPHICS          ",255
  9748.             Dc.b    000,"KEITH BUGEJA      ",255
  9749.             Dc.b    000,"                  ",255
  9750.             Dc.b    000,"PUSH START BUTTON=",255
  9751.             Dc.b    000,"                  ",255
  9752.             Dc.b    000,"   ; 1993 WARP    ",255
  9753. Credits_End:        Dc.b    0
  9754.  
  9755. Hiscore_Table:      Dc.b    " TOP 1000000...KEITH",255
  9756.             Dc.b    " 2ND 0900000...COLIN",255
  9757.             Dc.b    " 3RD 0800000...JOHN ",255
  9758.             Dc.b    " 4TH 0700000...ROBBY",255
  9759.             Dc.b    " 5TH 0600000...STEVE",255
  9760.             Dc.b    " 6TH 0500000...CHRIS",255
  9761.             Dc.b    " 7TH 0400000...KEVIN",255
  9762.             Dc.b    " 8TH 0300000...JOE  ",255
  9763.             Dc.b    " 9TH 0200000...HENRY",255
  9764. Hiscore_Table_End:  Dc.b    0
  9765.  
  9766. Opts_Menu:  Dc.b    000,000,"  OPTIONS MENU   ",255
  9767.             Dc.b    000,105,"LIVES           3",255
  9768.             Dc.b    000,106,"HEALTH          3",255
  9769.             Dc.b    000,106,"CONTINUES       3",255
  9770.             Dc.b    000,106,"EXTRA LIVES    ON",255
  9771.             Dc.b    000,106,"BONUS STAGE    ON",255
  9772.             Dc.b    000,106,"TIME COUNTER   ON",255
  9773.             Dc.b    000,106,"CONTROL      JSTK",255
  9774.             Dc.b    000,106,"EXIT MENU        ",255
  9775. Opts_Menu_End:      Dc.b    0
  9776.  
  9777. Game_Type:  Dc.b    000,000,"CHOOSE GAME TYPE ",255
  9778.             Dc.b    000,000,"ONE PLAYER GAMES ",255
  9779.             Dc.b    000,105,"  BLAZE ALONE    ",255
  9780.             Dc.b    000,106,"  YUKI  ALONE    ",255
  9781.             Dc.b    000,000,"                 ",255
  9782.             Dc.b    000,000,"TWO PLAYER GAMES ",255
  9783.             Dc.b    000,106,"   TEAM MODE     ",255
  9784.             Dc.b    000,106,"   LINK MODE     ",255
  9785.             Dc.b    000,106,"  VERSUS MODE    ",255
  9786. Game_Type_End:      Dc.b    0
  9787.  
  9788. Bonus:      Dc.b    000,"    WELL DONE=    ",255
  9789.             Dc.b    000,"  ACT COMPLETE==  ",255
  9790.             Dc.b    000,"      BONUS=      ",255
  9791.             Dc.b    000," TIME         999 ",255
  9792.             Dc.b    000," JEWELS       999 ",255
  9793.             Dc.b    000," HEALTH       999 ",255
  9794.             Dc.b    000," PERFECT      999 ",255
  9795.             Dc.b    000," TOTAL       9999 ",255
  9796.             Dc.b    000," <BONUS CONTINUE< ",255
  9797. Bonus_End:      Dc.b    0          
  9798.  
  9799.  
  9800. Demo_Text:
  9801.             Dc.b    000,"    WELL DONE=    ",255
  9802.             Dc.b    000,"                  ",255
  9803.             Dc.b    000,"YOU HAVE COMPLETED",255
  9804.             Dc.b    000,"THIS DEMO OF BLAZE",255
  9805. Demo_Text_End:      Dc.b    0
  9806.                        
  9807. Panel_Data:         Dc.b    106,$5b,$5c,"999",$5d,$5e,$63,$5f,$60,"3",$61,$62,"000",106
  9808. Panel_Data_End:     Dc.b    0  
  9809.  
  9810. Panel_Vals:         Dc.b    0,0,0,"999",0,0,$63,0,0,"3",0,0,"000",0
  9811. Panel_Vals_End:     Dc.b    0  
  9812.  
  9813. * Values        001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016,017,018,019,020,021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048
  9814.  
  9815. Anim:   Dc.b    153,153,153,153,153,153,153,153,153,153,154,154,154,154,154,155,155,155,155,155,156,156,156,156,156,156,156,000,000,000,000,000,000,000,000,000,000,155,155,155,155,155,154,154,154,154,154,154  * 0 None
  9816.         Dc.b    208,209,210,211,212,213,214,215,208,209,210,211,212,213,214,215,208,209,210,211,212,213,214,215,208,209,210,211,212,213,214,215,208,209,210,211,212,213,214,215,208,209,210,211,212,213,214,215  * 1 Water Fall
  9817.         Dc.b    184,184,184,184,184,184,185,185,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,185,185,184,184  * 2 Spikes
  9818.         Dc.b    232,232,233,233,234,234,235,235,236,236,237,237,238,238,239,239,232,232,233,233,234,234,235,235,236,236,237,237,238,238,239,239,232,232,233,233,234,234,235,235,236,236,237,237,238,238,239,239  * 3
  9819.         Dc.b    192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195  * 5
  9820.         Dc.b    194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193,194,195,192,193  * 6
  9821.         Dc.b    115,115,116,116,119,119,172,172,115,115,116,116,119,119,172,172,115,115,116,116,119,119,172,172,115,115,116,116,119,119,172,172,115,115,116,116,119,119,172,172,115,115,116,116,119,119,172,172  * 7
  9822.         Dc.b    183,183,187,187,131,131,132,132,183,183,187,187,131,131,132,132,183,183,187,187,131,131,132,132,183,183,187,187,131,131,132,132,183,183,187,187,131,131,132,132,183,183,187,187,131,131,132,132  * 8 Jewels
  9823.         Dc.b    176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179,176,177,178,179  * Jets
  9824.         Dc.b    243,243,242,242,242,243,243,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000  * Gem Implosion
  9825.         Dc.b    124,125,125,125,124,124,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000  * Spring
  9826.         Dc.b    003,003,004,004,004,003,003,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177  * Gem Implosion B
  9827.         Dc.b    155,155,156,156,198,198,155,155,156,156,198,198,155,155,156,156,198,198,155,155,156,156,198,198,155,155,156,156,198,198,155,155,156,156,198,198,155,155,156,156,198,198,155,155,156,156,198,198  * Replenisher
  9828.        
  9829.  
  9830. Enemy_Anim:
  9831.         Dc.b    023,024,025,024,023,024,025,024,023,024,025,024     * 000  Mutant Crab
  9832.         Dc.b    026,027,028,029,026,027,028,029,026,027,028,029     * 012 Water Fountain
  9833.         Dc.b    034,035,036,037,034,035,036,037,034,035,036,037     * 024
  9834.         Dc.b    038,038,040,040,042,042,044,044,042,042,040,040     * 036 Vulture  
  9835.         Dc.b    074,074,075,075,076,076,077,077,078,078,079,079     * 048 KABOOM!
  9836.         Dc.b    076,076,077,077,078,078,079,079,075,075,074,074     * 060 KAPOW!
  9837.         Dc.b    120,121,122,123,120,121,122,123,120,121,122,123     * 072 Spflush!(Lava)
  9838.         Dc.b    011,011,011,011,011,011,011,011,011,011,011,011     * 084 Fish A
  9839.         Dc.b    012,012,013,013,014,014,015,015,015,015,015,015     * 096 Fish B
  9840.         Dc.b    015,015,015,015,015,015,015,015,015,015,015,015     * 108 Fish C
  9841.         Dc.b    002,002,002,012,012,012,003,003,003,013,013,013     * 120 Crumbling Platform
  9842.         Dc.b    124,124,133,133,134,134,124,124,133,133,134,134     * 132 Lavus
  9843.  
  9844.  
  9845. Delay_Vals:
  9846.         Dc.b    4,3,3,2,2,2,1,1
  9847.         Dc.b    1,1,1,1,1,1,1,0
  9848.         Dc.b    0,0,0,0,0,0,0,0
  9849.         Dc.b    0,0,0,0,0,0,0,0
  9850.         Dc.b    0,0,0,0,0,0,0,0
  9851.        
  9852. XDelay_Vals:
  9853.         Dc.b    02,03,03,05,05,08,08,08
  9854.         Dc.b    09,09,10,11,12,13,14,14
  9855.         Dc.b    14,14,14,14,14,14,16,16
  9856.         Dc.b    16,16,16,16,16,16,16,16
  9857.    
  9858. Loop_Data:  Incbin "Loop.Data"
  9859.  
  9860.     Even   
  9861.  
  9862. *********************************************************
  9863. *   Inclusion Of Trig. Tables           *
  9864. *********************************************************
  9865.  
  9866. Sine_Data:      Incbin "Sine_Table.Data"
  9867. Cosine_Data:    Incbin "Cosine_Table.Data"
  9868.  
  9869. *************************************************
  9870. *   Colour Maps             *
  9871. *************************************************
  9872. Cmap:       Ds.w    32
  9873.  
  9874. Cmap1:     
  9875.         Dc.w    $0000,$0FFF,$0DBE,$0B8C,$096B,$073A,$0518,$0407
  9876.         Dc.w    $000F,$016F,$01BF,$02FF,$0FF0,$0CA0,$0960,$0630
  9877.         Dc.w    $0AAA,$0FFF,$0FEF,$0ECF,$0EBF,$0DAE,$0CAD,$0BAC
  9878.         Dc.w    $0AAF,$0ACF,$0AFF,$0CFF,$0FFA,$0EDA,$0DBA,$0CAA
  9879.  
  9880. Cmap2:     
  9881.         Dc.w $0000,$0FFF,$0FFB,$0FE8,$0FE4,$0FF0,$0FD0,$0FB0
  9882.         Dc.w $0F90,$0F70,$0F50,$0F40,$0F20,$0F00,$0C00,$0900
  9883.         Dc.w $0700,$0400,$0005,$0007,$0009,$000C,$000E,$004F
  9884.         Dc.w $006F,$008F,$00AF,$00CF,$03DF,$06EF,$08FF,$0BFF
  9885.  
  9886.  
  9887. Cmap3:
  9888.         Dc.w    $0000,$0FFF,$0000,$0900,$0F00,$0F70,$0FB0,$0FF0
  9889.         Dc.w    $0510,$0731,$0953,$0046,$0058,$006A,$007B,$0080
  9890.         Dc.w    $009F,$08CF,$0330,$0444,$0666,$0888,$0306,$0528
  9891.         Dc.w    $084A,$0A7C,$0CBD,$0150,$0080,$00B0,$08F0,$0D80
  9892.  
  9893. Cmap4:
  9894.         Dc.w    $0124,$0FFF,$0CCE,$09AD,$068D,$046C,$0457,$0346
  9895.         Dc.w    $0235,$0110,$0230,$0341,$0453,$0563,$0674,$0210
  9896.         Dc.w    $0321,$0432,$0543,$0654,$0765,$0876,$0987,$0220
  9897.         Dc.w    $0331,$0441,$0652,$0764,$0875,$0BA9,$0EDB,$089D
  9898.  
  9899. Cmap5:
  9900.         Dc.w    $0000,$0FFF,$0DEE,$0BDE,$0ACD,$08BC,$07AC,$069B
  9901.         Dc.w    $048A,$037A,$0269,$0158,$0047,$0036,$0025,$0020
  9902.         Dc.w    $0030,$0150,$0260,$0470,$0690,$08A0,$09B2,$0FF0
  9903.         Dc.w    $0CC0,$0A00,$0C00,$0F00,$0AAA,$0CCC,$0FFF,$0FAA
  9904.  
  9905. Fade_Not:   Dc.w    0
  9906.  
  9907.     Even
  9908.  
  9909. *************************************************
  9910. *   Background Sprite Data (Chip RAM)   *
  9911. *   And Dummy Copper Lists (Chip RAM)   *
  9912. *************************************************
  9913.  
  9914. Section Sprite_Data, Code_C
  9915.  
  9916. Cop_Pan:   
  9917.         Dc.w    $FF01,$FFFE * WAIT
  9918.         Dc.w    $0102,$0008 * Bplcon1
  9919.  
  9920.  
  9921. Cop_Pan2:  
  9922.         Dc.w    $00E0,$0000 * Bplpth
  9923.         Dc.w    $00E2,$0000 * Bplptl
  9924.         Dc.w    $0092,$0040 * Ddfstrt
  9925.         Dc.w    $0094,$00C0 * Ddfstp
  9926.         Dc.w    $0108,$0007 * Bplmod1
  9927.         Dc.w    $010A,$0007 * Bplmod2
  9928.         Dc.w    $0100,$1000 * Bplcon0
  9929.         Dc.w    $0180,$0000 * Col0
  9930.         Dc.w    $0182,$0FFF * Col1
  9931.         Dc.w    $FFFF,$FFFE * End Cop
  9932.  
  9933.  
  9934. Cop_Dummy: 
  9935.         Dc.w    $0100,$0000 * Bplcon0
  9936.         Dc.w    $0180,$0000 * Col 0
  9937.         Dc.w    $0182,$0000 * Col 1
  9938.         Dc.w    $FFFF,$FFFE * End Cop
  9939.  
  9940.  
  9941. Error_Cop:  Dc.w    $0102,$0000 * Bplcon1
  9942.  
  9943. Error_Cop2:
  9944.         Dc.w    $00E0,$0000 * Bplpth
  9945.         Dc.w    $00E2,$0000 * Bplptl
  9946.         Dc.w    $008E,$5E81 * Diwstrt
  9947.         Dc.w    $0090,$80C1 * Diwstop
  9948.         Dc.w    $0092,$0038 * Ddfstrt
  9949.         Dc.w    $0094,$00D0 * Ddfstop
  9950.         Dc.w    $0108,$0000 * Bplmod1
  9951.         Dc.w    $010A,$0000 * Bplmod2
  9952.         Dc.w    $0100,$1000 * Bplcon0
  9953.         Dc.w    $0180,$0000 * Col0
  9954.         Dc.w    $0182,$0FFF * Col1
  9955.         Dc.w    $FFFF,$FFFE * End Cop
  9956.            
  9957. Include "Sprites.mod"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement