home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / TOYS / DB4K.ZIP / DB4K / SOURCE / DB.S < prev    next >
Encoding:
Text File  |  1999-06-08  |  17.0 KB  |  1,055 lines

  1.      opt    a+,x+
  2. *
  3. *    4K hoppa skutta spel!
  4. *
  5.  
  6.  
  7. DEBUG    equ 0
  8. FLERA    equ 0
  9. EXIT    equ 0
  10.  
  11.  
  12. ant_näsor    equ 25
  13.  
  14.     SECTION TEXT
  15.  
  16. *--[ Fixxa till fiendeobjekt ]--*
  17.     rsreset
  18. e_type    rs.w    1
  19. e_x    rs.w    1
  20. e_y    rs.w    1
  21. e_dx    rs.w    1
  22. e_size:    rs.b    1
  23.  
  24.  
  25.  
  26. *--[ 
  27. START:
  28.     clr.l    -(sp)
  29.     move.w    #32,-(sp)
  30.     trap    #1
  31.     IFNE    EXIT
  32.     addq.l    #6,sp
  33.     move.l    d0,-(sp)
  34.     ENDC
  35.  
  36.     IFEQ    DEBUG
  37.     IFNE    EXIT
  38.     move.w    #2,-(sp)
  39.     trap    #14
  40.     addq.l    #2,sp
  41.     move.l    D0,-(sp)
  42.     move.l    #$58ffff,-(sp)
  43.     trap    #14
  44.     addq.l    #4,sp
  45.     move.w    D0,-(sp)
  46.     ENDC
  47.  
  48. *--[ Set VGA 320*200 TC ]--*
  49.     lea    VGA(pc),a6
  50.     move.w    #$59,-(a7)
  51.     trap    #14
  52.     addq.l    #2,a7
  53.     cmp.b    #2,d0
  54.     beq.s    .vga
  55.     lea    VGA(pc),a6
  56. .vga:
  57.     lea    $ffff8282.w,a0
  58.     move.l    (a6)+,(a0)+
  59.     move.l    (a6)+,(a0)+
  60.     move.l    (a6)+,(a0)
  61.     lea    $ffff82a2.w,a0
  62.     move.l    (a6)+,(a0)+
  63.     move.l    (a6)+,(a0)+
  64.     move.l    (a6)+,(a0)+
  65.     move.w    #$200,$ffff820a.w
  66.     move.w    (a6)+,$ffff82c0.w
  67.     clr.w    $ffff8266.w
  68.     bset.b    #0,$ffff8266.w
  69.     move.w    (a6)+,$ffff82c2.w
  70.     move.w    #$140,$ffff8210.w
  71.     ENDC
  72.  
  73.  
  74.     IFNE    EXIT
  75.     move.l    $118.w,-(sp)
  76.     ENDC
  77.     IFEQ    DEBUG
  78.     move.l    #Min_KeyVec,$118.w
  79.     ENDC
  80.  
  81.  
  82.  
  83.  
  84. *--[ Nolla alla variabler ]--*
  85. NyttSpel:
  86. *---------------------------------------------------------------*
  87. *    InitieraSpel                        *
  88. *---------------------------------------------------------------*
  89.     lea    BSS_START(pc),a0
  90.     move.w    #(BSS_SLUT-BSS_START)/4/4-1,d0
  91. .rensa:
  92.     clr.l    (a0)+
  93.     clr.l    (a0)+
  94.     clr.l    (a0)+
  95.     clr.l    (a0)+
  96.     dbra    d0,.rensa    
  97.  
  98.     move.w    #ant_näsor,Näsor
  99.     lea    SpriteData(pc),a0
  100.     lea    18(a0),a1
  101.     lea    gfx_ET(pc),a2
  102.     moveq    #5,d7
  103. InitieraSpelLoop:
  104.     bsr    ExpanderaBlock
  105.     dbra    d7,InitieraSpelLoop
  106.     move.w    #3,Liv
  107.     IFNE    FLERA
  108.     clr.w    Level
  109.     ENDC
  110. *--[ Packa upp banblocken ]--*
  111.     lea    BlockData(pc),a0
  112.     lea    BlockData+32(pc),a1
  113.     lea    BanBlock(pc),a2
  114.     moveq.l    #15,d7
  115. .loop:
  116.     bsr    ExpanderaBlock
  117.     dbra    d7,.loop
  118. *--[ Fixxa till en DB ]--*
  119.     lea    gfx_ET(pc),a0
  120.     lea    BanBlock+512*3(pc),a1
  121.     move.w    #254,d0
  122. .maska:
  123.     move.w    (a0)+,d1
  124.     beq.s    .skutt
  125.     move.w    d1,(a1)
  126. .skutt:
  127.     addq.w    #2,a1
  128.     dbra    d0,.maska
  129.     
  130. *---------------------------------------------------------------*
  131. *    InitieraLevel                        *
  132. *---------------------------------------------------------------*
  133. InitieraLevel:
  134. *--[ Rensa alla objekt ]--*
  135.     lea    Fiender(pc),a0
  136.     move.l    a0,a1
  137.     moveq.l    #e_size*32/4-1,d0
  138. .rensa:
  139.     clr.l    (a1)+
  140.     dbra    d0,.rensa
  141.     IFNE    FLERA
  142.     move.w    Level(pc),d0
  143. *--[ Klura ut vilken bana ]--*
  144.     lea    BanLista(pc),a1
  145.     move.l    (a1,d0.w*4),a1
  146.     ELSE
  147.     lea    BanData1(pc),a1
  148.     ENDC
  149.     lea    Bana(pc),a2
  150.     move.w    #399,d0
  151.     moveq.l    #-16,d1
  152. .exp_bana:
  153.     move.b    (a1)+,d2
  154.     move.b    d2,d3
  155.     asl.b    #4,d3
  156.     and.b    d1,d2
  157.     move.b    d2,(a2)+
  158.     move.b    d3,(a2)+
  159.     dbra    d0,.exp_bana
  160.     move.w    (a1)+,Telefonkort
  161. *--[ Kopiera in objekt data ]--*
  162. .loop:
  163.     move.l    (a1)+,d0
  164.     beq.s    .done
  165.     move.l    d0,(a0)+
  166.     move.l    (a1)+,(a0)+
  167.     bra.s    .loop
  168. .done:
  169.     move.l    Fiender+e_x(pc),SparadPos
  170.  
  171. *--[ Sätt upp nytt spel ]--*
  172. NyttFörsök:
  173.     clr.l    RedigDX
  174.     clr.w    Hopp
  175.     move.w    #1,Energi
  176.     move.w    #-1,Klarat
  177.     move.l    SparadPos(pc),Fiender+e_x
  178.  
  179.  
  180. *****************************************************************
  181. *---------------------------------------------------------------*
  182. *    HÄR BÖRJAR SPELET!                    *
  183. *---------------------------------------------------------------*
  184. *****************************************************************
  185.  
  186. *--[ Huvud loopen ]--*
  187. MainLoop:
  188. *--[ Flytta fiender och sånt ]--*
  189.     bsr    UppdateraAI
  190.     bsr    KollaKrockar
  191.  
  192.     move.w    Fiender+e_x(pc),d0
  193.     sub.w    #136,d0
  194.     bge.s    .inte_neg
  195.     moveq    #0,d0
  196. .inte_neg:
  197.     cmp.w    #992,d0
  198.     blt.s    .inte_ovs
  199.     move.w    #991,d0
  200. .inte_ovs:
  201.     move.w    d0,ScreenX
  202.  
  203.     IFNE    EXIT
  204. *--[ Läs av tangentbordet ]--*
  205.     tst.b    KeyBuf+1(pc)
  206.     beq.s    .inte_ESC
  207.     clr.l    Liv
  208. .inte_ESC:
  209.     ENDC
  210.  
  211. *--[ Vill ET hoppa? ]--*
  212.     tst.w    IVatten(pc)
  213.     bge.s    .inte_Hopp
  214.     tst.b    KeyBuf+42(pc)
  215.     beq.s    .inte_Hopp
  216.     tst.w    Hopp(pc)
  217.     beq.s    .inte_Hopp
  218.     bgt.s    .skuttar
  219.     move.w    #10,Hopp
  220. .skuttar:
  221.     move.w    #$fffc,RedigDY
  222. .inte_Hopp:
  223.  
  224.     lea    MaxFart(pc),a0
  225.     move.w    #3,(a0)
  226. *--[ Springa fort? ]--*
  227.     tst.b    KeyBuf+56(pc)
  228.     beq.s    .inte_Fort
  229.     move.w    #5,(a0)
  230. .inte_Fort:
  231.  
  232.     move.w    (a0),d0
  233.     moveq.l    #0,d1
  234. *--[ Vill ET vänster? ]--*
  235.     tst.b    KeyBuf+75(pc)
  236.     beq.s    .inte_Vänster
  237.     neg.w    d0
  238.     move.w    d0,d1
  239. .inte_Vänster:
  240. *--[ Vill ET höger ]--*
  241.     tst.b    KeyBuf+77(pc)
  242.     beq.s    .inte_Höger
  243.     move.w    d0,d1
  244. .inte_Höger:
  245.  
  246. *--[ Om i vatten ska vi simma runt ]--*
  247.     move.l    RedigDY(pc),d7
  248.     lea    $4000.w,a0
  249.     tst.w    IVatten(pc)
  250.     blt.s    .inte_Simma
  251.     tst.b    KeyBuf+72(pc)
  252.     beq.s    .inte_Upp
  253.     sub.l    a0,d7
  254. .inte_Upp:
  255.     tst.b    KeyBuf+80(pc)
  256.     beq.s    .inte_Simma
  257.     add.l    a0,d7
  258. .inte_Simma:
  259.     swap    d7
  260.     cmp.w    #14,d7
  261.     blt.s    .skutt1
  262.     move.w    #6,d7
  263. .skutt1:
  264.     cmp.w    #-4,d7
  265.     bgt.s    .skutt2
  266.     move.w    #-4,d7
  267. .skutt2:
  268.     swap    d7
  269.     move.l    d7,RedigDY
  270.  
  271. *--[ Räkna ut korrekt hastighet ]--*
  272.     swap    d1
  273.     move.l    RedigDX(pc),d0
  274.     sub.l    d0,d1
  275.     asr.l    #2,d1
  276.     add.l    d1,d0
  277.     add.l    #$1000,d0
  278.     move.l    d0,RedigDX        
  279.     swap    d0
  280.     move.w    d0,Fiender+e_dx
  281.  
  282.  
  283. *--[ Swappa skärmar ]--*
  284.     movem.l    ScreenReal(pc),d0-3
  285.     exg.l    d0,d2
  286.     exg.l    d1,d3
  287.     movem.l    d0-3,ScreenReal
  288. *--[ Och sätt skärmarna ]--*
  289.     move.w    #-1,-(sp)
  290.     move.l    ScreenReal(pc),-(sp)
  291.     pea    $ffffffff.w
  292.     move.w    #5,-(sp)
  293.     trap    #14
  294. *--[ Och vänta VBL ]--*
  295.     move.w    #37,-(sp)
  296.     trap    #14
  297.     lea    14(sp),sp
  298.  
  299. *--[ Så ritar vi ut bakgrunden ]--*
  300.     bsr    RitaSpelplan
  301.  
  302. *--[ Jaha då ritar vi då ]--*
  303.     bsr    RitaSpritar
  304.     
  305. *--[ Och så skickar vi ut lite info ]--*
  306.     bsr    RitaStatusbar
  307.  
  308. *--[ Avsluta om noll liv ]--*
  309.     tst.w    Klarat(pc)
  310.     bne.s    .ej_klarat
  311.     IFNE     FLERA
  312.     addq.w    #1,Level(pc)
  313.     bra    NyttFörsök
  314.     ELSEIF
  315.     bra.s    .slut
  316.     ENDC
  317. .ej_klarat:
  318.     tst.w    Energi(pc)
  319.     bgt    MainLoop
  320.     subq.w    #1,Liv
  321.     bgt    NyttFörsök
  322.  
  323.  
  324. .slut
  325.     IFNE    EXIT
  326.     IFEQ    DEBUG
  327.     move.l    (sp)+,$118.w
  328.  
  329.     move.w    #$58,-(sp)
  330.     trap    #14
  331.     addq.l    #4,sp
  332.     move.w    #-1,4(sp)
  333.     move.l    #-1,-(sp)
  334.     move.w    #5,-(sp)
  335.     trap    #14
  336.     lea    12(sp),sp        
  337.     ENDC
  338.  
  339.  
  340.     move.w    #32,-(sp)
  341.     trap    #1
  342.     addq.l    #6,sp
  343.     
  344.     pea    Seger(pc)
  345.     tst.w    Klarat(pc)
  346.     beq.s    .skutt
  347.     pea    Förlust(pc)
  348. .skutt:
  349.     move.w    #9,-(sp)
  350.     trap    #1
  351.     
  352.     move.w    #200,d7
  353. .llop
  354.     move.w    #37,-(sp)
  355.     trap    #14
  356.     addq.l    #2,sp
  357.     dbra    d7,.llop
  358.     
  359.     clr.w    -(sp)
  360.     trap    #1
  361.     ELSEIF
  362.     bra    NyttSpel
  363.     ENDC
  364.  
  365. *---------------------------------------------------------------*
  366. *    Keyboard vector                        *
  367. *---------------------------------------------------------------*
  368. Min_KeyVec:
  369.     move.w    #$2500,sr        ;set ipl level
  370.     movem.l    d0-a6,-(sp)
  371.     moveq    #0,d0
  372.     move.b    $fffffc00.w,d0
  373.     btst    #7,d0
  374.     beq.s    .hopp
  375.     bra.s    .skutt2
  376. .loop:
  377.     move.b    $fffffc02.w,d0
  378.     IFNE     EXIT
  379.     move.w    d0,-(sp)
  380.     lea    $f96.w,a0
  381.     jsr    ([$1132.w])
  382.     move.w    (sp)+,d0
  383.     ENDC
  384.     lea    KeyBuf(pc),a0
  385.     bclr    #7,d0
  386.     beq.s    .inte_satt
  387.     clr.b    (a0,d0.w)
  388.     bra.s    .skutt
  389. .inte_satt:
  390.     st.b    (a0,d0.w)
  391. .skutt:
  392.     move.b    $fffffc00.w,d0
  393. .skutt2:
  394.     btst    #0,d0
  395.     bne.s    .loop
  396. .hopp:
  397.     movem.l    (sp)+,d0-a6
  398.     bclr    #6,$fffffa11.w    ;signal end of ikbd interrupt
  399.     rte
  400.  
  401.  
  402. *---------------------------------------------------------------*
  403. *    UppdateraAI                        *
  404. *---------------------------------------------------------------*
  405. UppdateraAI:
  406.     subq.w    #1,Odödlig
  407.     tst.w    Hopp(pc)
  408.     ble.s    .skutt
  409.     subq.w    #1,Hopp
  410. .skutt:
  411.     lea    Fiender(pc),a0
  412.     lea    Bana(pc),a1
  413.     lea    15.w,a5            ; a5 är 15
  414.     moveq.l    #63,d7
  415. AI_Loop:
  416.     lea    KollaBlock(pc),a6
  417.     move.w    e_type(a0),d0
  418.     beq    AI_Klar
  419.     movem.w    e_x(a0),d1-3
  420. *--[ Krock med vägg ? ]--*
  421.     move.w    d1,d4
  422.     move.w    d2,d5
  423.     add.w    a5,d5
  424.     add.w    d3,d4
  425.     tst.s    d3
  426.     beq.s    AI_InteVägg
  427.     blt.s    .neg
  428.     add.w    a5,d4
  429. .neg:
  430.     move.b    #5*16,KollaVärde
  431.     move.w    d4,a4
  432.     jsr    (a6)
  433.     bge.s    AI_Vägg
  434.     move.w    a4,d4
  435.     move.w    d2,d5
  436.     jsr    (a6)
  437.     blt.s    AI_InteVägg
  438. AI_Vägg
  439.     cmp.w    #1,d0
  440.     beq.s    .är_ET
  441.     neg.w    d3
  442.     bra.s    AI_InteVägg
  443. .är_ET:
  444.     tst.w    d3
  445.     blt.s    .done
  446.     add.w    a5,d1
  447. .done:
  448.     and.w    #$fff0,d1
  449.     moveq.l    #0,d3
  450.     move.l    d3,RedigDX
  451. AI_InteVägg:
  452.     move.w    d1,d4
  453.     add.w    d3,d4
  454.     blt.s    AI_Vägg
  455.     cmp.w    #16*79,d4
  456.     bge.s    AI_Vägg
  457.     move.w    d4,d1
  458. *--[ Kolla om han har mark under fötterna ]--*
  459.     moveq.l    #0,d6
  460.     move.w    d1,d4
  461.     move.w    d2,d5
  462.     add.w    #16,d5
  463.     jsr    (a6)
  464.     blt.s    .ickeV
  465.     bset    #0,d6
  466. .ickeV:
  467.     move.w    d1,d4
  468.     move.w    d2,d5
  469.     add.w    a5,d4
  470.     add.w    #16,d5
  471.     jsr    (a6)
  472.     blt.s    .ickeH
  473.     bset    #1,d6
  474. .ickeH:
  475.     cmp.w    #1,d0
  476.     beq.s    Är_ET    
  477.     cmp.b    #%11,d6
  478.     beq    AI_Klar
  479.     cmp.w    #3,d0
  480.     beq    AI_Klar
  481.     neg.w    d3
  482.     jmp    AI_Klar
  483. Är_ET:
  484. *--[ Fixxa till ett skutt ]--*
  485.     tst.w    Hopp(pc)
  486.     blt    ET_SkuttarEj
  487.     move.l    RedigDY(pc),d4
  488.     tst.w    IVatten(pc)
  489.     bge.s    .simmar
  490.     add.l    #$8000,d4
  491.     bra.s    .skutt
  492. .simmar:
  493.     add.l    #$1000,d4
  494. .skutt
  495.     move.l    d4,RedigDY
  496.     swap    d4
  497.     tst.w    d4
  498.     beq    ET_Klar
  499.     bgt.s    ET_faller
  500. ET_Hoppar:
  501.     move.b    #6*16,KollaVärde
  502.     move.w    d4,a4
  503.     move.w    d1,d4
  504.     move.w    d2,d5
  505.     add.w    a4,d5
  506.     jsr    (a6)
  507.     bge.s    .dunk
  508.     move.w    d1,d4
  509.     add.w    a5,d4
  510.     move.w    d2,d5
  511.     add.w    a4,d5
  512.     jsr    (a6)
  513.     bge.s    .dunk
  514. *--[ ET hoppar faktiskt ]--*
  515.     add.w    a4,d2
  516.     bra.s    ET_Klar
  517. .dunk:
  518.     clr.l    RedigDY
  519.     clr.w    Hopp
  520.     and.w    #$fff0,d2
  521.     bra.s    ET_Klar
  522. ET_faller:
  523.     move.b    #5*16,KollaVärde
  524.     move.w    d4,a4
  525.     move.w    d1,d4
  526.     move.w    d2,d5
  527.     add.w    a4,d5
  528.     add.w    a5,d5
  529.     jsr    (a6)
  530.     bge.s    .dunk
  531.     move.w    d1,d4
  532.     add.w    a5,d4
  533.     move.w    d2,d5
  534.     add.w    a4,d5
  535.     add.w    a5,d5
  536.     jsr    (a6)
  537.     bge.s    .dunk
  538. *--[ ET faller faktiskt ]--*
  539.     add.w    a4,d2
  540.     bra.s    ET_Klar
  541. .dunk:
  542.     clr.l    RedigDY
  543.     move.w    #-1,Hopp
  544.     add.w    a5,d2
  545.     and.w    #$fff0,d2
  546.     bra.s    ET_Klar
  547. ET_SkuttarEj:
  548.     tst.w    d6
  549.     bne.s    ET_Klar
  550.     clr.w    Hopp
  551.     clr.l    RedigDY
  552. ET_Klar:    
  553.     lea    KollaBonus(pc),a6
  554.     move.w    #-1,IVatten
  555.     move.w    d1,d4
  556.     move.w    d2,d5
  557.     jsr    (a6)
  558.     move.w    d1,d4
  559.     add.w    a5,d4
  560.     move.w    d2,d5
  561.     jsr    (a6)
  562.     move.w    d1,d4
  563.     move.w    d2,d5
  564.     add.w    a5,d5
  565.     jsr    (a6)
  566.     move.w    d1,d4
  567.     add.w    a5,d4
  568.     move.w    d2,d5
  569.     add.w    a5,d5
  570.     jsr    (a6)    
  571. AI_Klar:
  572.     movem.w    d1-3,e_x(a0)
  573.     addq.l    #e_size,a0
  574.     dbra    d7,AI_Loop
  575.     rts
  576.  
  577. *    d4,d5 är X,Y och a0 är bandatan
  578. KollaBlock:
  579.     move.l    a1,a2
  580.     asr.w    #4,d4
  581.     asr.w    #4,d5
  582.     muls    #80,d5
  583.     add.w    d5,a2
  584.     move.b    (a2,d4.w),d4
  585.     cmp.b    KollaVärde(pc),d4
  586.     rts
  587. KollaVärde:
  588.     dc.b    0
  589.     even
  590.  
  591. KollaBonus:
  592.     move.l    a1,a2
  593.     asr.w    #4,d4
  594.     asr.w    #4,d5
  595.     muls    #80,d5
  596.     add.w    d5,a2
  597.     move.b    (a2,d4.w),d5
  598.     bge    .klar
  599.     cmp.b    #-7*16,d5
  600.     bgt.s    .inte_Exit
  601.     tst.w    Telefonkort(pc)
  602.     bgt.s    .klar
  603.     clr.w    Klarat
  604.     bra.s    .klar
  605. .inte_Exit:
  606.     cmp.b    #-6*16,d5
  607.     bne.s    .inte_VattenYta
  608.     move.w    #1,IVatten
  609.     clr.w    Hopp
  610.     bra.s    .klar
  611. .inte_VattenYta:
  612.     cmp.b    #-5*16,d5
  613.     bne.s    .inte_Vatten
  614.     clr.w    IVatten
  615.     clr.w    Hopp
  616.     bra.s    .klar
  617. .inte_Vatten:    
  618.     cmp.b    #-4*16,d5
  619.     bne.s    .inte_Kort
  620.     subq.w    #1,Telefonkort
  621.     bra.s    .tabort
  622. .inte_Kort:
  623.     cmp.b    #-3*16,d5
  624.     bne.s    .inte_Blå
  625.     addq.w    #1,Energi
  626.     bra.s    .tabort
  627. .inte_Blå:
  628.     cmp.b    #-2*16,d5
  629.     bne.s    .inte_Näsa
  630.     subq.w    #1,Näsor
  631.     bne.s    .tabort
  632.     move.w    #ant_näsor,Näsor
  633.     addq.w    #1,Liv
  634.     bra.s    .tabort
  635. .inte_Näsa:
  636.     bsr.s    TaStryk2
  637.     move.w    #$fffc,RedigDY
  638.     bra.s    .klar
  639. .tabort:
  640.     clr.b    (a2,d4.w)
  641. .klar:
  642.     rts
  643.     
  644.  
  645.  
  646.  
  647. TaStryk:
  648.     clr.w    Hopp
  649.     clr.w    e_type(a0)
  650. TaStryk2:
  651.     tst.w    Odödlig(pc)
  652.     bgt.s    .skutt
  653.     subq.w    #1,Energi
  654.     move.w    #20,Odödlig
  655. .skutt
  656.     rts
  657.  
  658.  
  659.  
  660. *---------------------------------------------------------------*
  661. *    KollaKrockar                        *
  662. *---------------------------------------------------------------*
  663. KollaKrockar:
  664.     lea    Fiender(pc),a0
  665.     movem.w    e_x(a0),d0-1    ; Ja här är ETs position!
  666.     moveq    #63,d7
  667.     moveq.l    #-15,d5
  668.     moveq.l    #15,d6
  669. .loop
  670.     addq.l    #e_size,a0
  671.     move.w    e_type(a0),d4    ; Är det krockbart?
  672.     beq.s    .inte_en_suck
  673.     movem.w    e_x(a0),d2-3    ; jajamen, hämta koordinater
  674.     sub.w    d0,d2
  675.     cmp.w    d5,d2
  676.     blt.s    .inte_en_suck
  677.     cmp.w    d6,d2
  678.     bgt.s    .inte_en_suck
  679.     sub.w    d1,d3
  680.     cmp.w    d5,d3
  681.     blt.s    .inte_en_suck
  682.     cmp.w    d6,d3
  683.     bgt.s    .inte_en_suck
  684. *--[ Det är en fiende krock! ]--*
  685.     cmp.w    #3,d4
  686.     bge.s    .ET_loose
  687.     tst.w    Hopp(pc)
  688.     bne.s    .ET_loose
  689. *--[ ET har dödat det! ]--*
  690.     clr.w    e_type(a0)
  691.     bra.s    .skutt
  692. .ET_loose:
  693. *--[ ET får stryk ]--*
  694.     bsr.s    TaStryk
  695. .skutt:
  696.     move.w    #$fffe,RedigDY
  697. .inte_en_suck:
  698.     dbra    d7,.loop
  699.     rts
  700.     
  701.     
  702.  
  703. *---------------------------------------------------------------*
  704. *    RitaSpritar                        *
  705. *---------------------------------------------------------------*
  706. RitaSpritar:
  707.     lea    Fiender(pc),a0
  708.     moveq    #63,d7
  709. .loop:
  710.     move.w    e_type(a0),d1
  711.     beq.s    .inget_att_rita
  712.     movem.w    e_x(a0),d2-3
  713.     sub.w    ScreenX(pc),d2
  714.     cmp.w    #-16,d2
  715.     ble.s    .inget_att_rita
  716.     cmp.w    #320-32,d2
  717.     bge.s    .inget_att_rita
  718.     lea    gfxlista(pc),a1
  719.     move.l    (a1,d1.w*4),a1
  720. *--[ Är det ET? ]--*
  721.     cmp.w    #1,d1
  722.     bne.s    .inte_ET
  723.     move.w    Odödlig(pc),d1
  724.     ble.s    .norm
  725.     btst    #0,d1
  726.     beq.s    .inget_att_rita
  727. .norm:
  728.     tst.w    Hopp(pc)
  729.     bge.s    .hoppar
  730.     move.w    e_x(a0),d1
  731.     and.w    #%100,d1
  732.     bra.s    .rita
  733. .hoppar:
  734.     moveq    #8,d1
  735.     bra.s    .rita
  736. .inte_ET:
  737. *--[ Det är en fi! ]--*
  738.     moveq    #0,d1
  739. .rita:
  740.     asl.w    #7,d1
  741.     add.w    d1,a1
  742.     move.l    Screen(pc),a2
  743.     muls    #640,d3
  744.     asl.w    #1,d2
  745.     add.l    d3,a2
  746.     add.w    d2,a2
  747.     moveq.l    #15,d0
  748.     tst.w    e_dx(a0)
  749.     blt.s    .vänster
  750.     bsr.s    RitaSprite
  751.     bra.s    .inget_att_rita
  752. .vänster
  753.     bsr.s    RitaSpriteVänd
  754. .inget_att_rita:
  755.     addq.l    #e_size,a0
  756.     dbra    d7,.loop
  757.     rts
  758.     
  759. RitaSprite:
  760. .y:
  761.     moveq    #15,d1
  762. .x:
  763.     move.w    (a1)+,d2
  764.     beq.s    .nope
  765.     move.w    d2,(a2)
  766. .nope:
  767.     addq.l    #2,a2
  768.     dbra    d1,.x
  769.     lea    640-32(a2),a2
  770.     dbra    d0,.y
  771.     rts
  772. RitaSpriteVänd:
  773.     lea    32(a2),a2
  774. .y:
  775.     moveq    #15,d1
  776. .x:
  777.     subq.l    #2,a2
  778.     move.w    (a1)+,d2
  779.     beq.s    .nope
  780.     move.w    d2,(a2)
  781. .nope:
  782.     dbra    d1,.x
  783.     lea    640+32(a2),a2
  784.     dbra    d0,.y
  785.     rts
  786.  
  787.  
  788. *---------------------------------------------------------------*
  789. *    ExpanderaBlock                        *
  790. *        a0=Palette pointer                *
  791. *        a1=16 färgers                    *
  792. *        a2=destblock 16*16 pixlar            *
  793. *---------------------------------------------------------------*
  794. ExpanderaBlock:
  795.     moveq    #127,d0
  796.     moveq    #0,d1
  797.     moveq    #$f,d2
  798. .loop:
  799.     move.b    (a1)+,d3
  800.     move.b    d3,d4
  801.     rol.b    #4,d3
  802.     and.l    d2,d3
  803.     and.l    d2,d4
  804.     move.w    (a0,d3.l*2),(a2)+
  805.     move.w    (a0,d4.l*2),(a2)+
  806.     dbra    d0,.loop
  807.     rts
  808.  
  809. *---------------------------------------------------------------*
  810. *    RitaStatusbar    (Och klippa spritar)            *
  811. *---------------------------------------------------------------*
  812. RitaStatusbar:
  813.     move.l    ScreenReal2(pc),a0
  814.     move.w    #(640*16-32)/4-1,d0
  815. .tjo
  816.     clr.l    (a0)+
  817.     dbra    d0,.tjo
  818.     move.w    #160,d1
  819. .lpy    moveq.l    #15,d2
  820. .lpx    clr.l    (a0)+
  821.     dbra    d2,.lpx
  822.     lea    576(a0),a0
  823.     dbra    d1,.lpy
  824.         
  825.  
  826.     lea    StatBlock(pc),a1
  827.     moveq.l    #17,d0
  828. .rensa:
  829.     clr.b    (a1)+
  830.     dbra    d0,.rensa
  831.     move.w    Energi(pc),d0
  832.     subq.w    #1,d0
  833.     blt.s    .neg_energi
  834.     bra.s    .skutt1
  835. .energi:
  836.     move.b    #-3*16,-(a1)
  837. .skutt1:
  838.     dbra    d0,.energi
  839. .neg_energi:
  840.     lea    StatBlock(pc),a1
  841.     move.w    Liv(pc),d0
  842.     bra.s    .skutt2
  843. .liv:
  844.     move.b    #3*16,(a1)+
  845. .skutt2:
  846.     dbra    d0,.liv
  847.     
  848.     moveq.l    #0,d7
  849.     moveq.l    #17,d6
  850.     lea    StatBlock(pc),a1
  851.     lea    64(a0),a2
  852.     bra.s    Xloop
  853.     
  854.     rts
  855.  
  856.  
  857. *---------------------------------------------------------------*
  858. *    RitaSpelplan                        *
  859. *---------------------------------------------------------------*
  860. RitaSpelplan:
  861.     move.l    Screen(pc),a0
  862.     move.w    ScreenX(pc),d0
  863.     lea    Bana(pc),a1
  864.     move.w    d0,d1
  865.     and.w    #$f,d1        ; d1=shift
  866.     moveq    #0,d2
  867.     sub.w    d1,d2
  868.     lea    (a0,d2.w*2),a0    ; a0 Skärm till adress
  869.     asr.w    #4,d0
  870.     add.w    d0,a1        ; a1=Bandatan
  871.     moveq    #9,d7
  872. Yloop:
  873.     move.l    a0,a2
  874.     moveq    #9,d6
  875.     sub.w    d7,d6
  876.     muls    #640*16,d6
  877.     add.l    d6,a2        ; a2=Denna rads adress
  878.     moveq.l    #18,d6
  879. Xloop:
  880.     moveq.l    #0,d5
  881.     move.b    (a1)+,d5
  882.     asl.w    #4,d5
  883.     lea    BanBlock(pc,d5.l*2),a3    ; a3=Grafikblocket
  884.     moveq    #15,d5
  885. Sloop:
  886.     movem.l    (a3)+,d0-4/a4-6
  887.     movem.l    d0-4/a4-6,(a2)
  888.     lea    640(a2),a2
  889.     dbra    d5,Sloop
  890.     lea    32-640*16(a2),a2
  891.     dbra    d6,Xloop
  892.     lea    80-19(a1),a1
  893.     dbra    d7,Yloop
  894.     rts
  895.  
  896.  
  897.     SECTION DATA
  898.  
  899. *--[ Plocklista för banorna 1-5 ]--*
  900. BanBlock:
  901.     ds.b    512*16
  902.     ds.b    80*10
  903. Bana:
  904.     ds.b    80*10+16
  905.     dcb.b    4,-1*16
  906.  
  907.  
  908.     IFNE    FLERA
  909. BanLista:
  910.     dc.l    BanData1
  911. ;    dc.l    BanData2
  912. ;    dc.l    BanData3
  913. ;    dc.l    BanData4
  914. ;    dc.l    BanData5
  915. ;    dc.l    0
  916.     ENDC
  917.  
  918.  
  919. *--[ Plocklista för spritar -5 - 4 ]--*
  920. gfxlista:
  921.     dc.l    gfx_Null
  922.     dc.l    gfx_ET
  923.     dc.l    gfx_Snigel
  924.     dc.l    gfx_Bajs
  925.     dc.l    gfx_Igelkott
  926.     
  927. BanData1:
  928.     incbin    level.dbd
  929.     dc.l    0
  930.     even
  931.     IFNE    FLERA
  932. ;BanData2:
  933. ;    incbin    level2.dbd
  934.     even
  935. ;BanData3:
  936. ;    incbin    level3.dbd
  937.     even
  938. ;BanData4:
  939. ;    incbin    level4.dbd
  940.     even
  941. ;BanData5:
  942. ;    incbin    level5.dbd
  943.     even
  944.     ENDC
  945.  
  946. SpriteData:
  947.     incbin    sprites.dat
  948.     even
  949.     
  950. BlockData:
  951.     incbin    blocks.dat
  952.     even
  953.  
  954. ScreenReal:
  955.     dc.l    ScreenBuf
  956. Screen:
  957.     dc.l    ScreenBuf2+640*16+32
  958. ScreenReal2:
  959.     dc.l    ScreenBuf2
  960. Screen2:
  961.     dc.l    ScreenBuf+640*16+32
  962.     even
  963.  
  964.     IFNE    EXIT
  965. Seger:    dc.b    27,"EAnd DB lived hapily ever after!",0
  966. Förlust:dc.b    27,"EGAME OVER!",0
  967.     even
  968.     ENDC
  969.  
  970. VGA:
  971.     dc.l    $c6008d
  972.     dc.l    $1502ac
  973.     dc.l    $8d0096
  974.     dc.l    $4eb04d1
  975.     dc.l    $3f00f5
  976.     dc.l    $41504e7
  977. ;    dc.w    $200
  978.     dc.w    $186
  979.     dc.w    $5
  980. ;    dc.w    $140
  981. RGB:
  982.     dc.l   $fe00cc
  983.     dc.l   $280039
  984.     dc.l   $9a00d9
  985.     dc.l   $2710265
  986.     dc.l   $2f0081
  987.     dc.l   $211026b
  988. ;    dc.w   $200
  989.     dc.w   $182
  990.     dc.w   $0
  991. ;    dc.w   $140
  992.  
  993.  
  994.  
  995.     SECTION BSS
  996. BSS_START:
  997.  
  998. StatBlock:
  999.     ds.b    18
  1000.  
  1001. gfx_Null:
  1002.     ds.l    128
  1003. gfx_ET:
  1004.     ds.l    128*3
  1005. gfx_Snigel:
  1006.     ds.l    128
  1007. gfx_Bajs:
  1008.     ds.l    128
  1009. gfx_Igelkott:
  1010.     ds.l    128
  1011.  
  1012.  
  1013. Odödlig:
  1014.     ds.w    1    ; Om > 0 so tar vi ingen skada!
  1015. RedigDX:
  1016.     ds.l    1
  1017. RedigDY:
  1018.     ds.l    1
  1019. MaxFart:
  1020.     ds.w    1
  1021. IVatten:
  1022.     ds.w    1
  1023. ScreenX:
  1024.     ds.w    1    ; Hur mycket scrollat!
  1025. Liv:
  1026.     ds.w    1    ; Ska vi sluta?
  1027. Energi:
  1028.     ds.w    1    ; Hur mycket mer stryk ET tål
  1029.     IFNE    FLERA
  1030. Level:
  1031.     ds.w    1    ; Vilken bana är vi på?
  1032.     ENDC
  1033. Hopp:
  1034.     ds.w    1    ; Om > 0 så ska vi hoppa, 0 så faller vi
  1035. Telefonkort:
  1036.     ds.w    1    ; När det når noll kan man avsluta banan
  1037. Näsor:
  1038.     ds.w    1
  1039. Klarat:
  1040.     ds.w    1    ; om = 0 så har vi klarat banan!
  1041. SparadPos:
  1042.     ds.l    1
  1043. Fiender:
  1044.     ds.b    e_size*64
  1045.     
  1046. KeyBuf:
  1047.     ds.b    128
  1048. safety:
  1049.     ds.b    640*200
  1050. ScreenBuf:
  1051.     ds.b    640*202
  1052.     ds.b    640*200
  1053. ScreenBuf2:
  1054.     ds.b    640*202
  1055. BSS_SLUT: