home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 556b.lha / DiamondQuest_v1.1 / DiamondSource / DiamondQuest.asm < prev    next >
Assembly Source File  |  1991-09-17  |  45KB  |  2,585 lines

  1.  
  2.  INCLUDE "exec/types.i"
  3.  INCLUDE "exec/ports.i"
  4.  INCLUDE "exec/io.i"
  5.  INCLUDE "exec/memory.i"
  6.  INCLUDE "devices/audio.i"
  7.  INCLUDE "libraries/dosextens.i"
  8.  INCLUDE "intuition/intuition.i"
  9.  INCLUDE "intuition/screens.i"
  10.  INCLUDE "graphics/gfx.i"
  11.  
  12.  xref _AbsExecBase
  13.  xref _BeginIO
  14.  xref _LVOAbortIO
  15.  xref _LVOAddPort
  16.  xref _LVOAllocMem
  17.  xref _LVOAllocSignal
  18.  xref _LVOChangeSprite
  19.  xref _LVOCheckIO
  20.  xref _LVOClose
  21.  xref _LVOCloseDevice
  22.  xref _LVOCloseLibrary
  23.  xref _LVOCloseScreen
  24.  xref _LVOCloseWindow
  25.  xref _LVODisplayAlert
  26.  xref _LVODisplayBeep
  27.  xref _LVODoIO
  28.  xref _LVODrawImage
  29.  xref _LVOFindPort
  30.  xref _LVOFindTask
  31.  xref _LVOFreeMem
  32.  xref _LVOFreeSprite
  33.  xref _LVOFreeSignal
  34.  xref _LVOGetMsg
  35.  xref _LVOGetSprite
  36.  xref _LVOInitBitMap
  37.  xref _LVOInitRastPort
  38.  xref _LVOLoadRGB4
  39.  xref _LVOMove
  40.  xref _LVOMoveSprite
  41.  xref _LVOOpen
  42.  xref _LVOOpenDevice
  43.  xref _LVOOpenLibrary
  44.  xref _LVOOpenScreen
  45.  xref _LVOOpenWindow
  46.  xref _LVOOutput
  47.  xref _LVOPolyDraw
  48.  xref _LVOPutMsg
  49.  xref _LVORead
  50.  xref _LVOReadPixel
  51.  xref _LVORectFill
  52.  xref _LVORemPort
  53.  xref _LVOReplyMsg
  54.  xref _LVOSendIO
  55.  xref _LVOSetAPen
  56.  xref _LVOSetPointer
  57.  xref _LVOSetRast
  58.  xref _LVOText
  59.  xref _LVOViewPortAddress
  60.  xref _LVOWait
  61.  xref _LVOWaitIO
  62.  xref _LVOWaitPort
  63.  xref _LVOWrite
  64.  xref _LVOWritePixel
  65.  
  66.  section game,CODE
  67.  
  68.  movea.l #intname,a1
  69.  moveq #31,d0
  70.  movea.l 4,a6
  71.  jsr _LVOOpenLibrary(a6)
  72.  move.l d0,intbase
  73.  beq abort
  74.  movea.l #dosname,a1
  75.  moveq #0,d0
  76. ; movea.l 4,a6
  77.  jsr _LVOOpenLibrary(a6)
  78.  move.l d0,dosbase
  79.  beq abort
  80.  movea.l #grname,a1
  81.  moveq #0,d0
  82. ; movea.l 4,a6
  83.  jsr _LVOOpenLibrary(a6)
  84.  move.l d0,grbase
  85.  beq abort
  86.  
  87.   suba.l a1,a1
  88.   jsr _LVOFindTask(a6)
  89.   movea.l d0,a4
  90.   tst.l pr_CLI(a4)
  91.   bne yes_cli
  92.  
  93.   lea pr_MsgPort(a4),a0
  94.   jsr _LVOWaitPort(a6)
  95.   lea pr_MsgPort(a4),a0
  96.   jsr _LVOGetMsg(a6)
  97.   move.l d0,returnmsg
  98.  
  99. yes_cli
  100. ;**************
  101.  
  102.  bsr init_audio
  103.  tst.l d0
  104.  beq vapautukset ; ei vapauteta spritejä
  105.  
  106.  bsr alusta_kentta
  107.  tst.l d0
  108.  beq vapautukset ;
  109.  bsr avaa_ruutu
  110.  tst.l d0
  111.  beq vapautukset ;
  112.  
  113.  bsr muuta_varit
  114.  bsr tee_spritet
  115.  tst.l d0
  116.  beq vapauta_spritet
  117.  
  118.  bsr game_info_screen
  119.  
  120. actual_game
  121.  
  122.  move.b #0,nkentta
  123.  lea msg9,a0
  124.  moveq #msglen9,d7
  125.  move.l #186,d0
  126.  move.l #244,d1
  127.  moveq #9,d6
  128.  bsr kirjoita
  129.  lea msg10,a0
  130.  moveq #msglen10,d7
  131.  move.l #100,d0
  132.  move.l #254,d1
  133.  moveq #14,d6
  134.  bsr kirjoita
  135.  bsr kirjoita_taso
  136.  
  137.  bsr do_voice_tddup
  138.  
  139.   lea maps,a0
  140.   move.l #mapslen,d1
  141.   move.l #2940,d6
  142.   move.l kenttac,d7
  143.   bsr Lataa ; ladataan kartat muistiin
  144.  tst.l d0
  145.  beq vapauta_spritet ; karttaa ei löytynyt
  146.  
  147.  move.w #17,c_spritex
  148.  move.w #17,c_spritey
  149.  bsr tee_kentta
  150.  bsr energia_mittari
  151.  bsr pallo_piirto
  152.  move.l intbase,a6 ;hävitetään hiiren pointteri näkyvistä
  153.  move.l cwindow,a0
  154.  move.l pointer,a1
  155.  moveq #1,d0
  156.  moveq #1,d1
  157.  jsr _LVOSetPointer(a6)
  158.  
  159.  move.b #4,henget
  160.  move.b #0,lopetus
  161.  move.w #255,energia
  162.  move.b #0,kanto
  163.  move.w #0,jekut
  164.  move.b #0,kivet
  165.  move.b #0,hlaskuri
  166.  move.l #0,a0
  167.  move.l #sprite1,a1
  168.  move.w c_spritex,d0
  169.  move.w c_spritey,d1
  170.  move.l grbase,a6
  171.  jsr _LVOMoveSprite(a6)
  172.  
  173. ;************* PELI SILMUKKA **********
  174.  
  175. loop1
  176.  bsr spriteliikku_ohjaus
  177.  cmp.l #0,d0
  178.  beq no_click
  179. ei_lopeteta
  180.  bsr ota_esine
  181. no_click
  182.  tst.b lopetus
  183.  bne pelin_loppu
  184.  sub.b #1,txlaskuri
  185.  bsr jekku_ohjaus
  186.  bra loop1
  187.  
  188. ;**************
  189. pelin_loppu
  190.  move.l #0,a0
  191.  move.l grbase,a6
  192.  move.w #321,d0
  193.  move.l #sprite1,a1
  194.  jsr _LVOMoveSprite(a6)
  195.  
  196.  move.l #$7ffff,d0
  197. oloop
  198.  sub.l #1,d0
  199.  bne oloop
  200.  
  201.  sub.b #1,henget
  202.  beq no_lives
  203.  bsr pallo_poisto
  204.   lea maps,a0
  205.   move.l #mapslen,d1
  206.   move.l #2940,d6
  207.   move.l kenttac,d7
  208.   bsr Lataa
  209.  sub.b #1,nkentta
  210.  move.w a_spritex,c_spritex
  211.  move.w a_spritey,c_spritey
  212.  bsr uusi_kentta
  213.  move.b #0,lopetus
  214.   move.l #0,a0
  215.   move.l #sprite1,a1
  216.   move.w c_spritex,d0
  217.   move.w c_spritey,d1
  218.   move.l grbase,a6
  219.   jsr _LVOMoveSprite(a6)
  220.   move.b #0,c_suunta
  221.  bra loop1
  222. no_lives
  223.  move.l #$cffff,d0
  224. loppuloop
  225.  sub.l #1,d0
  226.  bne loppuloop
  227.  
  228.  bsr game_over_screen
  229.  tst.b d0
  230.  bne actual_game
  231.  
  232. ;********* Lopetetaan **************
  233.  
  234.  bsr do_voice_aaah
  235.  move.l #180000,d0
  236. loppu_test_loop1
  237.  subi.l #1,d0
  238.  bne loppu_test_loop1
  239.  move.l 4,a6
  240.  move.l aumsg,a1
  241.  jsr _LVOAbortIO(a6)
  242.  
  243. vapauta_spritet
  244.  lea numsprite,a5
  245.  movea.l grbase,a6
  246.  moveq #3,d7
  247. loop2
  248.  moveq #0,d0
  249.  move.b -1(a5,d7.w),d0
  250.  cmpi.b #-1,d0
  251.  beq.s loop3
  252.  jsr _LVOFreeSprite(a6)
  253. loop3
  254.  subq #1,d7
  255.  bne loop2
  256.  
  257. vapautukset
  258.  bsr free_audio
  259.  
  260.  bsr VapautaMuistit
  261.  
  262. close_gr
  263.  movea.l 4,a6
  264.  movea.l grbase,a1
  265.  jsr _LVOCloseLibrary(a6)
  266. close_dos
  267.  movea.l 4,a6
  268.  movea.l dosbase,a1
  269.  jsr _LVOCloseLibrary(a6)
  270. close_int
  271.  movea.l 4,a6
  272.  movea.l intbase,a1
  273.  jsr _LVOCloseLibrary(a6)
  274. abort
  275.  tst.l returnmsg
  276.  beq abort_2
  277.  movea.l 4,a6
  278.  movea.l returnmsg,a1
  279.  jsr _LVOReplyMsg(a6)
  280. abort_2
  281.  rts          ;**** Palataan CLI:hin ( tai WB:hen )
  282.  
  283. ;*************************
  284.  
  285. avaa_ruutu
  286.  movea.l #newscreen,a0  ;newscreen structure
  287.  movea.l intbase,a6
  288.  jsr _LVOOpenScreen(a6)
  289.  move.l d0,cscreen
  290.  beq.s ei_nayttoa ; ei ruutua
  291.  move.l d0,rport
  292.  add.l #84,rport
  293.  move.l d0,vport
  294.  add.l #44,vport
  295.  move.l #newwindow,a0  ;avataan myös ikkuna
  296.  move.l cscreen,nw_Screen(a0)
  297.  movea.l intbase,a6
  298.  jsr _LVOOpenWindow(a6)
  299.  move.l d0,cwindow
  300.  beq.s ei_nayttoa ; ei ruutua
  301. avaa_ruutu_pois
  302.  rts
  303.  
  304. ei_nayttoa
  305.   lea msg4,a1
  306.   move.l #msglen4,d3
  307.   bsr valitukset_ei_tiedosto
  308.   bsr GURU
  309.   moveq #0,d0
  310.   bra.s avaa_ruutu_pois
  311.  
  312. muuta_varit
  313.  movea.l grbase,a6
  314.  movea.l vport,a0
  315.  movea.l #colormap,a1
  316.  moveq #32,d0
  317.  jsr _LVOLoadRGB4(a6)        ; LoadRGB4;  muoto: $0RGB
  318.  rts
  319.  
  320. tee_spritet
  321.  lea numsprite,a5    ; sisältää kolmen spriten numerot
  322.  moveq #1,d0
  323.  lea sprite0,a0
  324.  bsr.s init_sprite
  325.  move.b d0,2(a5)
  326. ; cmpi.b #-1,d0
  327. ; beq.s ei_spriteja  ; itse asiassa tätä spriteä ei tarvita
  328.  
  329.  moveq #-1,d0
  330.  lea sprite1,a0
  331.  bsr.s init_sprite
  332.  move.b d0,(a5)
  333.  cmpi.b #-1,d0
  334.  beq.s ei_spriteja
  335.  
  336.  moveq #-1,d0
  337.  lea sprite2,a0
  338.  bsr.s init_sprite
  339.  move.b d0,1(a5)
  340.  cmpi.b #-1,d0
  341.  beq.s ei_spriteja
  342.  
  343.  moveq #-1,d0
  344.  
  345.  rts
  346.  
  347. ei_spriteja
  348.   lea msg8,a1
  349.   move.l #msglen8,d3
  350.   bsr valitukset_ei_tiedosto
  351.   bsr GURU
  352.   moveq #0,d0
  353.   rts
  354.  
  355. init_sprite
  356.  move.l grbase,a6
  357.  jsr _LVOGetSprite(a6)
  358.  rts
  359.  
  360. tee_kentta
  361.  move.w c_spritex,a_spritex
  362.  move.w c_spritey,a_spritey
  363. tee_kentta_b
  364.  ;ruudut (20*14) muuttujissa x ja y
  365.  move.l rport,a1  ;... mutta ensin siivotaan...
  366.  move.l grbase,a6
  367.  moveq #0,d0
  368.  jsr _LVOSetAPen(a6)
  369.  moveq #0,d0
  370.  moveq #0,d1
  371.  move.w #319,d2
  372.  move.w #224,d3
  373.  move.l rport,a1
  374.  jsr _LVORectFill(a6)
  375.  bsr etsi_kenttaos
  376.       ;nkenttaos on kentän osoite
  377.       ; - ainoa enää ulkoa tarvittava vakio
  378.  move.b #13,y
  379. loopy
  380.  move.b #19,x
  381. loopx
  382.  ; kenttien syvyys on 4 bittiä
  383.  ; haetaan menossa olevan ruudun arvo
  384.  moveq #0,d0
  385.  move.b y,d0
  386.  mulu #10,d0
  387.  moveq #0,d1
  388.  move.b x,d1
  389.  lsr.b #1,d1
  390.  add.w d1,d0
  391.  move.l nkenttaos,a0
  392.  move.b 0(a0,d0.w),d0
  393.  move.b d0,dloop
  394.  and.b #$f,d0
  395.  bsr draw_box
  396.  move.b dloop,d0
  397.  lsr.b #4,d0
  398.  subi.b #1,x
  399.  bsr draw_box
  400.  cmp.b #0,x
  401.  beq.s looppo
  402.  subi.b #1,x
  403.  bra loopx
  404. looppo
  405.  subi.b #1,y
  406.  cmp.b #-1,y
  407.  bne loopy
  408.  rts
  409.  
  410. draw_box
  411.  move.l rport,a0
  412.  move.l intbase,a6
  413.  moveq #0,d2
  414.  move.b d0,d2
  415.  moveq #0,d1
  416.  move.b y,d1
  417.  lsl.w #4,d1
  418.  moveq #0,d0
  419.  move.b x,d0
  420.  lsl.w #4,d0
  421.  cmp.b #0,d2
  422.  beq draw_pois
  423.  move.l #box_images,a1
  424.  lsl.w #2,d2
  425.  move.l -4(a1,d2),a1
  426.  jsr _LVODrawImage(a6)
  427. draw_pois
  428.  rts
  429.  
  430. ;**********************
  431. hextodec               ; muutettava luku d1:ssä
  432.  move.l d1,d2          ; vain kaksinumeroinen, 0-99
  433.  divu #10,d1
  434.  andi.l #$f,d1
  435.  move.l d1,d3
  436.  lsl.w #4,d3   ; d3:ssa BCD luku , kymmenet
  437.  mulu #10,d1
  438.  sub.b d1,d2   ; d2:ssa BCD luku , ykköset
  439.  move #4,CCR   ; Extended bit = 0, Zero bit =1
  440.  abcd d3,d2    ; BCD yhteenlasku
  441. modify                 ;muutettava luku d2:ssa
  442.  move.l #string,addr
  443.  move.l #string,a5     ;merkkijonon osoite, joho luku tulee
  444.  moveq #8,d1
  445. loopnum
  446.  move.l d2,d0
  447.  lsr.l #4,d2
  448.  bsr muuta
  449.  move.b d0,-1(a5,d1.l)
  450.  subi.b #1,d1
  451.  bne loopnum
  452.  rts
  453. muuta                  ;muutettava luku d0:ssa
  454.  and.b #$f,d0
  455.  or.b #$30,d0
  456.  cmp.b #$3a,d0
  457.  blt poisnum
  458.  add.b #7,d0
  459. poisnum
  460.  rts
  461. type
  462.  move.l grbase,a6
  463.  move.l rport,a1
  464.  move.b #9,d0
  465.  jsr _LVOSetAPen(a6)
  466.  move.l rport,a1
  467.  move.l addr,a0
  468.  move.l lenght,d0
  469.  jsr _LVOText(a6)
  470.  rts
  471.  
  472. kirjoita_happo
  473.  move.l d0,-(sp)
  474.  moveq #0,d1
  475.  move.b hlaskuri,d1
  476.  bsr hextodec
  477.  add.l #6,a5
  478.  move.l a5,a0
  479.  moveq #2,d7
  480.  moveq #16,d0
  481.  move.w #236,d1
  482.  moveq #9,d6
  483.  bsr kirjoita
  484.  move.l (sp)+,d0
  485.  rts
  486.  
  487. kirjoita_taso
  488.  move.l d0,-(sp)
  489.  moveq #0,d1
  490.  move.b nkentta,d1
  491.  addq #1,d1
  492.  bsr hextodec
  493.  add.l #6,a5
  494.  move.l a5,a0
  495.  moveq #2,d7
  496.  move.w #252,d0
  497.  move.w #244,d1
  498.  moveq #9,d6
  499.  bsr kirjoita
  500.  move.l (sp)+,d0
  501.  rts
  502.  
  503. report_mouse
  504.  moveq #0,d7
  505.  bsr intuimessage
  506.  tst.l d0
  507.  beq report_mouse_pois ; ei viestejä
  508.  move.b #0,suunta
  509.  move.w d7,d3
  510.  swap d7
  511.  move.w d7,d2
  512.  move.b d3,d0
  513.  bsr abs_muunnos
  514.  move.b d0,d1
  515.  move.b d2,d0
  516.  bsr abs_muunnos
  517.  move.b #1,suunta
  518.  cmp.b d1,d0
  519.  bgt.s report_a
  520.  move.b #2,suunta
  521.  move.b d1,d0
  522.  move.b d3,d2
  523. report_a
  524.  cmp.b #2,d0
  525.  bgt.s report_b
  526.  move.b #0,suunta
  527.  bra.s report_c
  528. report_b
  529.  and.b #$80,d2
  530.  or.b d2,suunta
  531. report_c
  532.  moveq #3,d0
  533.  cmp.l #RAWKEY,d5
  534.  beq report_keys
  535.  cmp.l #MOUSEBUTTONS,d5
  536.  bne.s report_mouse_pois2
  537.  cmp.w #$c000,d6
  538.  beq.s report_mouse_pois
  539.  moveq #0,d0
  540.  cmp.w #$a000,d6
  541.  bne.s report_mouse_pois
  542.  bsr ota_kr
  543. report_mouse_pois2
  544.  moveq #0,d0
  545. report_mouse_pois
  546.  rts
  547.  
  548. intuimessage
  549.  move.l cwindow,a0
  550.  move.l $56(a0),a0
  551.  movea.l 4,a6
  552.  jsr _LVOGetMsg(a6)
  553.  tst.l d0
  554.  beq.s intuimessage_pois
  555.  move.l d0,a1
  556.  move.l im_MouseX(a1),d7
  557.  move.w im_Qualifier(a1),d6
  558.  move.l im_Class(a1),d5
  559.  move.w im_Code(a1),d4
  560.  jsr _LVOReplyMsg(a6) ;d0:ssa on 0, jos viestejä ei ole saapunut
  561.  moveq #-1,d0
  562. intuimessage_pois
  563.  rts
  564.  
  565. passed
  566.  lea msg13,a0
  567.  move.w #msglen13,d7
  568.  moveq #16,d0
  569.  moveq #124,d1
  570.  moveq #9,d6
  571.  bsr kirjoita
  572.  rts
  573.  
  574. report_keys
  575.  ; d4:ssa näppäimen numero
  576.  moveq #0,d0
  577.  cmp.w #$45,d4
  578.  beq report_esc
  579.  cmp.w #$58,d4
  580.  beq report_sanct
  581.  cmp.w #$2e,d4
  582.  beq report_acid
  583.  cmp.w #$5f,d4
  584.  beq report_info
  585.  cmp.w #$19,d4
  586.  beq report_pause
  587.  rts
  588. report_esc
  589.  move.b #-1,lopetus
  590.  move.b #1,henget
  591.  rts
  592. report_sanct
  593.  
  594.  cmp.b #$9a,d6   ; RSHIFT+CONTROL+LALT+RCOMMAND
  595.  bne report_sanct_pois
  596.  move.b #4,henget
  597.  bsr pallo_piirto
  598.  moveq #0,d0
  599. report_sanct_pois 
  600.  rts
  601. report_acid
  602.  cmp.b #$e1,d6   ; LSHIFT+RALT+LCOMMAND+RCOMMAND
  603.  bne report_acid_pois
  604.  move.b #90,hlaskuri
  605.   moveq #0,d0
  606.   move.w #224,d1
  607.   move.l #happo_i,a1
  608.   bsr piirra_image
  609.   bsr kirjoita_happo
  610.  
  611.  bset.b #0,kanto
  612.   moveq #16,d0
  613.   move.w #240,d1
  614.   move.l #kranaatti_i,a1
  615.   bsr piirra_image
  616.  
  617.  bset.b #2,kanto
  618.   moveq #0,d0
  619.   move.w #240,d1
  620.   move.l #myrkky_i,a1
  621.   bsr piirra_image
  622.  
  623.  moveq #0,d0
  624. report_acid_pois
  625.  rts
  626. report_info
  627.  movem d1-d7/a0-a6,-(sp)
  628.  bsr game_info_screen
  629.  bsr info_clear
  630.  movem (sp)+,d1-d7/a0-a6
  631.  moveq #0,d0
  632.  rts
  633. report_pause
  634.  movea.l rport,a1
  635.  movea.l grbase,a6
  636.  moveq #0,d0
  637.  jsr _LVOSetAPen(a6)
  638.  movea.l rport,a1
  639.  movea.l grbase,a6
  640.  moveq #100,d0
  641.  move.w #246,d1
  642.  move.w #319,d2
  643.  move.w #255,d3
  644.  jsr _LVORectFill(a6)
  645.  lea msg11,a0
  646.  move.w #msglen11,d7
  647.  moveq #116,d0
  648.  move.l #254,d1
  649.  moveq #13,d6
  650.  bsr kirjoita
  651. report_pause_loop
  652.  bsr intuimessage
  653.  tst.l d0
  654.  beq report_pause_loop
  655.  cmp.l #RAWKEY,d5
  656.  bne report_pause_loop
  657.  cmp.b #$19,d4
  658.  bne report_pause_loop
  659.  ; puhdistetaan jäljet
  660.  movea.l rport,a1
  661.  movea.l grbase,a6
  662.  lea msg10,a0
  663.  moveq #msglen10,d7
  664.  moveq #100,d0
  665.  move.l #254,d1
  666.  moveq #14,d6
  667.  bsr kirjoita
  668.  rts
  669.  
  670. etsi_kenttaos
  671.  move.l #kentat,a0 ;kentat os. kenttien osoitteiden alkuun
  672.  moveq #0,d0
  673.  move.b nkentta,d0
  674.  lsl.b #2,d0
  675.  move.l 0(a0,d0.w),nkenttaos
  676.  rts
  677.  
  678. etsi_ruutu
  679.  ;etsittävän ruudun koordinaatit muuttujissa x ja y
  680.  ;kentän osoite valmiina vakiossa nkenttaos
  681.  move.l nkenttaos,a0
  682.  moveq #0,d1
  683.  move.b y,d1
  684.  mulu #10,d1
  685.  moveq #0,d0
  686.  move.b x,d0
  687.  lsr.b #1,d0
  688.  add.w d1,d0 ;ruudun tavun offset-arvo d0:ssa
  689.  move.b 0(a0,d0.w),d0 ;d0:ssa on ruudun tavu
  690.  move.b x,d1
  691.  and.b #1,d1
  692.  cmp.b #1,d1
  693.  beq.s etsi_ruutu_pois
  694.  lsr.b #4,d0  ;parilliselle x:arvolle 4 ylintä bittiä
  695. etsi_ruutu_pois
  696.  and.b #$f,d0 ;lopullinen arvo on d0:ssa
  697. ; cmp.b #15,d0
  698. ; bne etsi_ruutu_pois2
  699. ; move.b #1,d0
  700. etsi_ruutu_pois2
  701.  rts
  702.  
  703. spriteliikku_ohjaus
  704.  moveq #0,d0
  705.  sub.w #1,solaskuri  ;määrätään, kuinka usein spriteä liikutetaan
  706.  and.w #$7f,solaskuri
  707.  bne spriteliikku_pois2
  708.  bsr jekku_testit
  709.  bsr report_mouse
  710.  tst.l d0
  711.  bne spriteliikku_pois2
  712. spriteliikku
  713.  bsr energy_loss
  714.  bsr gaboom
  715.  cmp.b #0,suunta
  716.  beq.s spriteliikku_pois
  717.  move.b suunta,c_suunta
  718.  move.b #9,v_sprite
  719. spriteliikku_pois
  720.  tst.b c_suunta
  721.  beq spriteliikku_b
  722.  move.w c_spritex,d0
  723.  move.w c_spritey,d1
  724.  move.b c_suunta,sprite_suunta
  725.  bsr suunta_lupa
  726.  move.l #0,a0
  727.  move.l #sprite1,a1
  728.  move.w c_spritex,d0
  729.  move.w c_spritey,d1
  730.  move.l grbase,a6
  731.  jsr _LVOMoveSprite(a6)
  732.   bsr sprite_paikka
  733.   bsr etsi_ruutu
  734.   cmp.b #3,d0
  735.   bne.s spriteliikku_a
  736.  cmp.b #5,kivet
  737.  bne.s spriteliikku_b
  738.  bsr uusi_kentta
  739. spriteliikku_a
  740.  cmp.b #5,d0
  741.  bne.s spriteliikku_b
  742.  bsr kallot
  743. spriteliikku_b                              
  744.  clr.l d0
  745. spriteliikku_pois2
  746.  rts
  747.  
  748. sprite_paikka
  749.  move.w c_spritex,d0
  750.  add.w #7,d0
  751.  lsr.w #4,d0
  752.  move.b d0,x
  753.  move.w c_spritey,d0
  754.  add.w #7,d0
  755.  lsr.w #4,d0
  756.  move.b d0,y
  757.  rts
  758.  
  759. suunta_ruudut
  760.  ;ruudut paikoissa x,y ja xm,ym
  761.  ;move.w c_spritex,d0
  762.  ;move.w c_spritey,d1
  763.  move.w d0,d2
  764.  move.w d1,d3
  765.  cmp.b #1,sprite_suunta
  766.  bne.s suuntar_a
  767.   ;suunta oikealle
  768.   add.w #15,d0
  769.   add.w #1,d1
  770.   add.w #15,d2
  771.   add.w #14,d3
  772.   rts
  773. suuntar_a
  774.  cmp.b #$81,sprite_suunta
  775.  bne.s suuntar_b
  776.   ;suunta vasemmalle
  777.   add.w #1,d1
  778.   add.w #14,d3
  779.   rts
  780. suuntar_b
  781.  cmp.b #2,sprite_suunta
  782.  bne.s suuntar_c
  783.   ;suunta alas
  784.   add.w #15,d1
  785.   add.w #14,d2
  786.   add.w #15,d3
  787.   add.w #1,d0
  788.   rts
  789. suuntar_c
  790.   ;suunta ylös
  791.   add.w #1,d0
  792.   add.w #14,d2
  793.   rts
  794.  
  795. suunta_xy
  796.  bsr suunta_ruudut
  797.  lsr.w #4,d0
  798.  move.b d0,x
  799.  lsr.w #4,d1
  800.  move.b d1,y
  801.  lsr.w #4,d2
  802.  move.b d2,xm
  803.  lsr.w #4,d3
  804.  move.b d3,ym
  805.  bsr etsi_ruutu
  806.  rts
  807.  
  808. suunta_lupa
  809.  bsr suunta_xy
  810.   bsr pompotus
  811.  cmp.b #1,d0
  812.  beq.s suunta_loppu
  813.  move.b xm,x
  814.  move.b ym,y
  815.  bsr etsi_ruutu
  816.   bsr pompotus
  817.  cmp.b #1,d0
  818.  beq.s suunta_loppu
  819.  move.w c_spritex,d1
  820.  move.w c_spritey,d2
  821.  move.b c_suunta,d0
  822.  bsr vars_sliikku
  823.  move.w d1,c_spritex
  824.  move.w d2,c_spritey
  825. suunta_loppu
  826.  bsr spritehidastuvuus
  827.  rts
  828.  
  829. pompotus
  830.   cmp.b #$a,d0
  831.   bne.s pompotus_loppu
  832.   bsr do_voice_boing
  833.   bchg.b #7,suunta
  834.   move.b c_suunta,d1
  835.   andi.b #$7f,d1
  836.   andi.b #$80,suunta
  837.   add.b d1,suunta
  838.   move.b #$c,v_sprite
  839.   move.b #1,d0
  840. pompotus_loppu
  841.   rts
  842.  
  843. vars_sliikku
  844.  sub.b #1,nlaskuri   ;vähennetään nopeuslaskuria
  845.  bne.s vars_sloppu         ;ellei nollautunut, mennään y:hyn
  846.  bsr spriten_liike
  847.  move.b v_sprite,d0
  848.  move.b #$b,nlaskuri
  849.  sub.b d0,nlaskuri
  850. vars_sloppu
  851.  rts
  852.  
  853. spriten_liike
  854.  ;suunta d0:ssa, x-paikka d1:ssä, y-paikka d2:ssä
  855.  move.w #-1,d4
  856.  btst #7,d0
  857.  bne spriten_x
  858.  move.w #1,d4
  859. spriten_x
  860.  btst #0,d0
  861.  beq spriten_y
  862.  add.w d4,d1
  863.  rts
  864. spriten_y
  865.  add.w d4,d2
  866.  rts
  867.  
  868. spritehidastuvuus
  869.  bsr sprite_paikka ;nopeuden pudotus 'suossa'
  870.  bsr etsi_ruutu
  871.  cmp.b #2,d0
  872.  bne.s spriteh_a
  873.  and.b #3,v_sprite
  874. spriteh_a
  875.  sub.b #1,vhlaskuri ;määritellään spriten automaattinen hidastuvuus
  876.  and.b #$3f,vhlaskuri
  877.  bne spriteh_loppu
  878.  
  879.  tst.b v_sprite
  880.  beq.s spriteh_stop
  881.  sub.b #1,v_sprite
  882.  rts
  883. spriteh_stop
  884.  move.b #0,c_suunta
  885. spriteh_loppu
  886.  rts
  887.  
  888. uusi_kentta
  889.  add.b #1,nkentta
  890.  bsr kirjoita_taso
  891.  bsr tee_kentta
  892.  cmp.b #$14,nkentta
  893.  bne uusi_kentta_2
  894.  bsr passed
  895. uusi_kentta_2
  896.  move.b #0,kivet
  897.  move.b #0,kanto
  898.  move.b #0,hlaskuri
  899.  bsr esine_poisto
  900.  move.w #255,energia
  901.  bsr energia_mittari
  902.  move.w #0,jekut
  903.  move.w #321,d0
  904.  move.l #0,a0
  905.  move.l #sprite2,a1
  906.  move.l grbase,a6
  907.  jsr _LVOMoveSprite(a6)
  908.  rts
  909.  
  910. ota_esine
  911.  move.b #0,v_sprite ; pysäytetään sprite
  912.  bsr sprite_paikka
  913.  bsr etsi_ruutu
  914.   cmp.b #3,d0
  915.   bls ei_esinetta
  916.   cmp.b #5,d0
  917.   beq ei_esinetta
  918.   cmp.b #8,d0
  919.   beq ei_esinetta
  920.   move.l d0,-(sp)
  921.   bsr do_voice_bell
  922.   bsr pyyhi_ruutu
  923.   move.l (sp)+,d0
  924.  cmp.b #4,d0
  925.  bne.s ota_pullo
  926.  add.b #1,kivet
  927.  rts
  928. ota_pullo
  929.  cmp.b #6,d0
  930.  bne.s ota_kranaatti
  931.  addi.w #127,energia
  932.  cmp.w #$ff,energia
  933.  bls.s ota_pallo_a
  934.  move.w #$ff,energia
  935. ota_pallo_a
  936.  bsr energia_mittari
  937.  rts
  938. ota_kranaatti
  939.  cmp.b #7,d0
  940.  bne.s ota_myrkky
  941.  btst.b #0,kanto
  942.  bne.s ota_myrkky
  943.  bset.b #0,kanto
  944.   moveq #16,d0
  945.   move.w #240,d1
  946.   move.l #kranaatti_i,a1
  947.   bsr piirra_image
  948.  rts
  949. ota_myrkky
  950.  cmp.b #9,d0
  951.  bne.s ota_happo
  952.  bset.b #2,kanto
  953.   moveq #0,d0
  954.   move.w #240,d1
  955.   move.l #myrkky_i,a1
  956.   bsr piirra_image
  957.  rts
  958. ota_happo
  959.  cmp.b #$b,d0
  960.  bne.s ota_pois
  961.  addi.b #4,hlaskuri
  962.   moveq #0,d0
  963.   move.w #224,d1
  964.   move.l #happo_i,a1
  965.   bsr piirra_image
  966.   bsr kirjoita_happo
  967.  rts
  968. ota_pois
  969.  rts
  970.  
  971. piirra_image
  972.  movea.l rport,a0
  973.  movea.l intbase,a6
  974.  jsr _LVODrawImage(a6)
  975.  rts
  976.  
  977. ei_esinetta
  978.  bsr do_voice_hit
  979.  rts
  980.  
  981. ota_kr
  982.  bsr sprite_paikka
  983.  btst.b #0,kanto
  984.  beq.s ota_kr_pois
  985.   moveq #0,d0
  986.   move.l rport,a1
  987.   move.l grbase,a6
  988.   jsr _LVOSetAPen(a6)
  989.   moveq #16,d0
  990.   move.w #240,d1
  991.   moveq #31,d2
  992.   move.w #255,d3
  993.   move.l rport,a1
  994.   move.l grbase,a6
  995.   jsr _LVORectFill(a6)
  996.  bclr.b #0,kanto
  997.  bset.b #1,kanto
  998.  move.b x,kpaikkax
  999.  move.b y,kpaikkay
  1000.  moveq #7,d0
  1001.  bsr draw_box
  1002. ota_kr_pois
  1003.  rts
  1004.  
  1005. pyyhi_ruutu
  1006.  move.l grbase,a6
  1007.  move.l rport,a1
  1008.  moveq #0,d0
  1009.  jsr _LVOSetAPen(a6)
  1010.  moveq #0,d0  ; nollataan ensin rekisteri, koska x tyyppiä byte
  1011.  moveq #0,d1  ; nollataan ensin rekisteri, koska y tyyppiä byte
  1012.  move.b x,d0
  1013.  move.b y,d1
  1014.  lsl.w #4,d0
  1015.  lsl.w #4,d1
  1016.  move.w d0,d2
  1017.  add.w #15,d2
  1018.  move.w d1,d3
  1019.  add.w #15,d3
  1020.  move.l rport,a1
  1021.  jsr _LVORectFill(a6)
  1022.  bsr nollaa_taulukko
  1023.  rts
  1024. nollaa_taulukko
  1025.  bsr etsi_kenttaos
  1026.  move.l nkenttaos,a0
  1027.  moveq.l #0,d0
  1028.  move.b x,d0
  1029.  lsr.b #1,d0
  1030.  moveq.l #0,d1
  1031.  move.b y,d1
  1032.  mulu #10,d1
  1033.  add.b d1,d0
  1034.  btst.b #0,x
  1035.  beq.s nollaa_p
  1036.  and.b #$f0,0(a0,d0.w)
  1037.  bra nollaa_pois
  1038. nollaa_p
  1039.  and.b #$f,0(a0,d0.w)
  1040. nollaa_pois
  1041.  rts
  1042.  
  1043. energia_mittari
  1044.  ;piirretään muuttujassa energia oleva luku palkkina
  1045.  movea.l rport,a1
  1046.  moveq #12,d0
  1047.  move.l grbase,a6
  1048.  jsr _LVOSetAPen(a6)
  1049.  move.l rport,a1
  1050.  moveq #40,d0
  1051.  move.w #226,d1
  1052.  jsr _LVOMove(a6)
  1053.  move.l rport,a1
  1054.  moveq #4,d0
  1055.  move.l #epoints,a0
  1056.  jsr _LVOPolyDraw(a6)
  1057.   moveq #0,d0
  1058.   move.l rport,a1
  1059.   jsr _LVOSetAPen(a6)
  1060.   moveq #41,d0
  1061.   move.w #227,d1
  1062.   move.w #296,d2
  1063.   move.w #233,d3
  1064.   move.l rport,a1
  1065.   jsr _LVORectFill(a6)
  1066.  moveq #1,d0
  1067.  move.l rport,a1
  1068.  jsr _LVOSetAPen(a6)
  1069.  moveq #41,d0
  1070.  move.w #227,d1
  1071.  move.w d0,d2
  1072.  move.w #233,d3
  1073.  add.w energia,d2
  1074.  move.l rport,a1
  1075.  jsr _LVORectFill(a6)
  1076.  move.l rport,a1
  1077.  moveq #0,d0
  1078.  jsr _LVOSetAPen(a6)
  1079.  rts
  1080.  
  1081. kallot
  1082.  move.b #0,v_sprite
  1083.  move.b #0,suunta
  1084.  sub.b #1,elaskuri
  1085.  and.b #$f,elaskuri
  1086.  bne.s kallot_pois
  1087.  tst.b hlaskuri
  1088.  bne happo_laskut
  1089.  lsr.w energia
  1090.  lsr.w energia
  1091.  bsr do_voice_aaah
  1092.  bsr energia_mittari
  1093.  move.l intbase,a6
  1094.  move.l cscreen,a0
  1095.  jsr _LVODisplayBeep(a6)
  1096. kallot_pois
  1097.  rts
  1098. happo_laskut
  1099.  subi.b #1,hlaskuri
  1100.  bsr kirjoita_happo
  1101.  bsr do_voice_chiump
  1102.  rts
  1103.  
  1104. energy_loss
  1105.  tst.w energia
  1106.  beq.s energy_loppu
  1107.  sub.w #1,evlaskuri
  1108.  and.w #$1ff,evlaskuri
  1109.  bne kallot_pois
  1110.  sub.w #1,energia
  1111.  bsr energia_mittari
  1112.  rts
  1113. energy_loppu
  1114.  move.b #1,lopetus
  1115.  rts
  1116.  
  1117. gaboom
  1118.  btst.b #1,kanto
  1119.  beq gaboom_loppu
  1120.  sub.b #1,klaskuri
  1121.  and.b #$7f,klaskuri
  1122.  bne gaboom_loppu
  1123.  bsr do_voice_buum
  1124.  move.l rport,a1
  1125.  move.b #0,d0
  1126.  move.l grbase,a6
  1127.  jsr _LVOSetAPen(a6)
  1128.  move.b kpaikkax,x
  1129.  move.b kpaikkay,y
  1130.  bsr pyyhi_ruutu
  1131.  add.b #1,x
  1132.  bsr pyyhi_ruutu
  1133.  sub.b #2,x
  1134.  bsr pyyhi_ruutu
  1135.  add.b #1,x
  1136.  add.b #1,y
  1137.  bsr pyyhi_ruutu
  1138.  sub.b #2,y
  1139.  bsr pyyhi_ruutu
  1140.  bclr.b #1,kanto
  1141. gaboom_loppu
  1142.  rts
  1143.  
  1144. j1_kohtaaminen
  1145.  btst #0,jekut
  1146.  beq j1_kohtaaminen_loppu
  1147.  bsr sprite_paikka
  1148.  move.w j1_spritex,d0
  1149.  add.w #7,d0
  1150.  lsr.w #4,d0
  1151.  cmp.b x,d0
  1152.  bne j1_kohtaaminen_loppu
  1153.  move.w j1_spritey,d0
  1154.  add.w #7,d0
  1155.  lsr.w #4,d0
  1156.  cmp.b y,d0
  1157.  bne j1_kohtaaminen_loppu
  1158.  move.b #0,v_sprite
  1159.  btst.b #2,kanto
  1160.  beq.s j1_koht_jatko
  1161.   moveq #0,d0
  1162.   move.l rport,a1
  1163.   move.l grbase,a6
  1164.   jsr _LVOSetAPen(a6)
  1165.   moveq #0,d0
  1166.   move.w #240,d1
  1167.   moveq #15,d2
  1168.   move.w #255,d3
  1169.   move.l rport,a1
  1170.   move.l grbase,a6
  1171.   jsr _LVORectFill(a6)
  1172.  bsr do_voice_chiump
  1173.  bclr.b #2,kanto
  1174.  bclr #0,jekut
  1175.  move.l #0,a0
  1176.  move.l #sprite2,a1
  1177.  move.w #321,d0
  1178.  move.l grbase,a6
  1179.  jsr _LVOMoveSprite(a6)
  1180.  rts
  1181. j1_koht_jatko
  1182.  sub.b #1,elaskuri
  1183.  and.b #$f,elaskuri
  1184.  bne.s j1_kohtaaminen_loppu
  1185.  lsr.w energia
  1186.  bsr do_voice_aaah
  1187.  bsr energia_mittari
  1188.  move.l intbase,a6
  1189.  move.l cscreen,a0
  1190.  jsr _LVODisplayBeep(a6)
  1191. j1_kohtaaminen_loppu
  1192.  rts
  1193.  
  1194. j1_suunta_lupa
  1195.  move.w j1_spritex,d0
  1196.  move.w j1_spritey,d1
  1197.  bsr suunta_xy
  1198.  cmp.b #1,d0
  1199.  beq.s j1_suunta_lloppu
  1200.  cmp.b #5,d0
  1201.  beq.s j1_suunta_lloppu
  1202.  cmp.b #8,d0
  1203.  beq.s j1_suunta_lloppu
  1204.  cmp.b #10,d0
  1205.  beq.s j1_suunta_lloppu
  1206.  move.b xm,x
  1207.  move.b ym,y
  1208.  bsr etsi_ruutu
  1209.  cmp.b #1,d0
  1210.  beq.s j1_suunta_lloppu
  1211.  cmp.b #5,d0
  1212.  beq.s j1_suunta_lloppu
  1213.  cmp.b #8,d0
  1214.  beq.s j1_suunta_lloppu
  1215.  cmp.b #10,d0
  1216.  beq.s j1_suunta_lloppu
  1217.  clr.l d0
  1218. j1_suunta_lloppu
  1219.  rts
  1220. jekku_testit
  1221.  btst #0,jekut
  1222.  bne.s jekku_loppu
  1223.  sub.w #1,j1laskuri
  1224.  and.w #$3ff,j1laskuri
  1225.  bne.s jekku_loppu
  1226.  bset #0,jekut
  1227.  move.l #j1_koord,a0
  1228.  moveq #0,d0
  1229.  move.b nkentta,d0
  1230.  lsl.w #2,d0
  1231.  move.w 0(a0,d0.w),d1
  1232.  move.w 2(a0,d0.w),d0
  1233.  move.w d1,j1_spritex
  1234.  move.w d0,j1_spritey
  1235. jekku_loppu
  1236.  rts
  1237.  
  1238. jekku_ohjaus
  1239.  sub.w #1,jekkulaskuri
  1240.  and.w #$1ff,jekkulaskuri
  1241.  bne jekku_loppu
  1242.  bsr j1_kohtaaminen
  1243.  btst #0,jekut
  1244.  beq jekku_loppu
  1245.  bsr jekku1
  1246.  rts
  1247.  
  1248. jekku1
  1249.  sub.w #1,animlaskuri  ; animlaskuri määrää, kuinka usein haukotellaan
  1250.  and.w #$ff,animlaskuri
  1251.  bne jekku1_apois1
  1252.  move.b #-1,frames     ; asetetaan animaatio päälle
  1253.  move.b #0,frame       ; frame antaa imagen numeron
  1254.  move.w #2,framelaskuri ; määrätään haukotuksen nopeus
  1255.  bsr do_voice_roar
  1256. jekku1_apois1
  1257.  cmp.b #0,frames
  1258.  beq jekku1_apois2
  1259.  bsr jekku_animaatio
  1260. jekku1_apois2
  1261.  bsr j1_suunta_valinta
  1262.  move.b sprite_suunta,d0
  1263.  tst.b d0
  1264.  beq.s jekku1_loppu
  1265.  move.w j1_spritex,d1
  1266.  move.w j1_spritey,d2
  1267.  bsr spriten_liike
  1268.  move.w d1,j1_spritex
  1269.  move.w d2,j1_spritey
  1270.  move.w d1,d0
  1271.  move.w d2,d1
  1272.  move.l #0,a0
  1273.  move.l grbase,a6
  1274.  move.l #sprite2,a1
  1275.  jsr _LVOMoveSprite(a6)
  1276. jekku1_loppu
  1277.  rts
  1278.  
  1279. jekku_animaatio
  1280.  subq.w #1,framelaskuri  ; framelaskuri määrää, kuinka kauan framea näytetään
  1281.  bne jekku_animaatio_pois
  1282.  move.w #2,framelaskuri ; määrätään haukotuksen nopeus
  1283.  moveq #0,d0
  1284.  move.b frame,d0
  1285.  lea spritedata2,a2
  1286.  move.l 0(a2,d0.w),a2 ; haettiin spritedatan osoite
  1287.  cmp.l #0,a2
  1288.  beq jekku_animaatio_stop ; viimeinen frame on jo piirretty
  1289.  move.l #0,a0
  1290.  move.l #sprite2,a1
  1291.  move.l grbase,a6
  1292.  jsr _LVOChangeSprite(a6)
  1293.  add.b #4,frame
  1294. jekku_animaatio_pois
  1295.  rts
  1296. jekku_animaatio_stop
  1297.  move.b #0,frames
  1298.  rts
  1299.  
  1300. j_c_sprite_erotus
  1301.  move.w c_spritey,d0
  1302.  sub.w j1_spritey,d0
  1303.  bsr abs_wmuunnos
  1304.  move.w d0,d1
  1305.  move.w c_spritex,d0
  1306.  sub.w j1_spritex,d0
  1307.  bsr abs_wmuunnos
  1308.  rts
  1309. j1_suunta_valinta
  1310.  bsr j_c_sprite_erotus
  1311.  cmp.w d0,d1
  1312.  bls.s j1_suunta_py
  1313.  move.b #$81,sprite_suunta
  1314.  move.w c_spritex,d0
  1315.  cmp.w j1_spritex,d0
  1316.  beq.s j1_suunta_py
  1317.  bls.s j1_suunta_a
  1318.  move.b #1,sprite_suunta
  1319. j1_suunta_a
  1320.  bsr j1_suunta_lupa
  1321.  tst.w d0
  1322.  bne.s j1_suunta_py
  1323.  rts
  1324. j1_suunta_py
  1325.  move.w c_spritey,d1
  1326.  move.b #$82,sprite_suunta
  1327.  cmp.w j1_spritey,d1
  1328.  beq.s j1_suunta_va
  1329.  bls.s j1_suunta_b
  1330.  move.b #2,sprite_suunta
  1331. j1_suunta_b
  1332.  bsr j1_suunta_lupa
  1333.  tst.w d0
  1334.  bne.s j1_suunta_va
  1335. j1_suunta_pois
  1336.  rts
  1337. j1_suunta_va
  1338.  move.w c_spritex,d0
  1339.  move.b #$81,sprite_suunta
  1340.  cmp.w j1_spritex,d0
  1341.  beq.s j1_suunta_d
  1342.  bls.s j1_suunta_c
  1343.  move.b #1,sprite_suunta
  1344. j1_suunta_c
  1345.  bsr j1_suunta_lupa
  1346.  tst.w d0
  1347.  beq j1_suunta_pois
  1348. j1_suunta_d
  1349.  move.b #0,sprite_suunta
  1350.  rts
  1351.  
  1352. abs_muunnos
  1353.  ;otetaan itseisarvo d0:sta
  1354.  tst.b d0
  1355.  bmi.s abs_m
  1356.  bra.s abs_p
  1357. abs_m
  1358.  neg.b d0
  1359. abs_p
  1360.  rts
  1361.  
  1362. abs_wmuunnos
  1363.  ;otetaan itseisarvo d0:sta
  1364.  tst.w d0
  1365.  bmi.s abs_wm
  1366.  bra.s abs_wp
  1367. abs_wm
  1368.  neg.w d0
  1369. abs_wp
  1370.  rts
  1371.  
  1372. pallo_poisto
  1373.  move.l rport,a1
  1374.  move.b #0,d0
  1375.  move.l grbase,a6
  1376.  jsr _LVOSetAPen(a6)
  1377.  moveq #0,d0
  1378.  move.b henget,d0
  1379.  mulu #18,d0
  1380.  add.b #28,d0
  1381.  move.w #240,d1
  1382.  move.w d0,d2
  1383.  add.w #16,d2
  1384.  move.w #255,d3
  1385.  move.l rport,a1
  1386.  jsr _LVORectFill(a6)
  1387.  rts
  1388.  
  1389. pallo_piirto
  1390.  move.b #46,x
  1391. pploop
  1392.  moveq #0,d0
  1393.  move.b x,d0
  1394.  move.w #240,d1
  1395.  move.l #pallo_i,a1
  1396.  bsr piirra_image
  1397.  add.b #18,x
  1398.  cmp.b #100,x
  1399.  blt pploop
  1400.  bsr esine_poisto
  1401.  rts
  1402.  
  1403. esine_poisto
  1404.  move.l rport,a1
  1405.  move.l grbase,a6
  1406.  moveq #0,d0
  1407.  jsr _LVOSetAPen(a6)
  1408.  move.l rport,a1
  1409.  move.l grbase,a6
  1410.  moveq #0,d0
  1411.  move.w #224,d1
  1412.  moveq #31,d2
  1413.  move.w #255,d3
  1414.  jsr _LVORectFill(a6)
  1415.  rts
  1416.  
  1417. game_over_screen
  1418.   move.l intbase,a6 ;hiiren pointteri näkyviin
  1419.   move.l cwindow,a0
  1420.   move.l pointer2,a1
  1421.   moveq #16,d0
  1422.   moveq #16,d1
  1423.   moveq #0,d2
  1424.   moveq #0,d3
  1425.   jsr _LVOSetPointer(a6)
  1426.   move.l #0,a0
  1427.   move.l grbase,a6
  1428.   move.w #321,d0
  1429.   move.l #sprite2,a1
  1430.   jsr _LVOMoveSprite(a6)
  1431.  move.l grbase,a6
  1432.  move.l rport,a1
  1433.  moveq #0,d0
  1434.  jsr _LVOSetAPen(a6)
  1435.  move.l rport,a1
  1436.  moveq #0,d0
  1437.  moveq #0,d1
  1438.  move.w #319,d2
  1439.  move.w #255,d3
  1440.  jsr _LVORectFill(a6)
  1441.  move.l rport,a1
  1442.  moveq #9,d0
  1443.  jsr _LVOSetAPen(a6)
  1444.  move.l #msg1,a0
  1445.  move.w #27,d7
  1446.  move.w #52,d0
  1447.  move.w #80,d1
  1448.  moveq #9,d6
  1449.  bsr kirjoita
  1450.  move.l #msg2,a0
  1451.  moveq #3,d7
  1452.  move.w #68,d0
  1453.  move.w #140,d1
  1454.  moveq #9,d6
  1455.  bsr kirjoita
  1456.  move.l #msg3,a0
  1457.  move.w #6,d7
  1458.  move.w #216,d0
  1459.  move.w #140,d1
  1460.  moveq #9,d6
  1461.  bsr kirjoita
  1462. wait_for_click
  1463.  bsr intuimessage
  1464.  tst.l d0
  1465.  beq wait_for_click
  1466.  cmp.w #$c000,d6
  1467.  bne wait_for_click
  1468.  move.l cwindow,a0
  1469.  move.l $c(a0),d6
  1470.  move.w d6,d7
  1471.  swap d6
  1472.  cmp.w #122,d6
  1473.  blt wait_for_click
  1474.  cmp.w #150,d6
  1475.  bgt wait_for_click
  1476.   cmp.w #208,d7
  1477.   blt yes
  1478.   cmp.w #272,d7
  1479.   bgt wait_for_click
  1480.   moveq #0,d0
  1481.   rts
  1482. yes
  1483.   cmp.w #104,d7
  1484.   bgt wait_for_click
  1485.   cmp.w #56,d7
  1486.   blt wait_for_click
  1487.   moveq #1,d0
  1488.  rts
  1489.  
  1490. game_info_screen
  1491.   move.l #0,a0
  1492.   move.l grbase,a6
  1493.   move.w #321,d0
  1494.   move.l #sprite2,a1
  1495.   jsr _LVOMoveSprite(a6)
  1496.   move.l #0,a0
  1497.   move.l grbase,a6
  1498.   move.w #321,d0
  1499.   move.l #sprite1,a1
  1500.   jsr _LVOMoveSprite(a6)
  1501.  move.l grbase,a6
  1502.  move.l rport,a1
  1503.  moveq #0,d0
  1504.  jsr _LVOSetAPen(a6)
  1505.  move.l grbase,a6
  1506.  move.l rport,a1
  1507.  moveq #0,d0
  1508.  moveq #0,d1
  1509.  move.w #319,d2
  1510.  move.w #223,d3
  1511.  jsr _LVORectFill(a6)
  1512. ;*** seuraavaksi kirjoitetaan tekstit
  1513.  moveq #108,d4
  1514.  lea info,a4
  1515.  lea infolen,a3
  1516.  moveq #0,d7
  1517. info_loop
  1518.  subq #4,d4
  1519.  move.l d4,d5
  1520.  lsr.w #2,d5
  1521.  move.l 0(a4,d4.w),a0  ; tekstin osoite
  1522.  move.b 0(a3,d5.w),d7  ; tekstin pituus
  1523.  moveq #0,d0
  1524.  moveq #8,d1
  1525.  move.l d4,d5
  1526.  lsl.l #1,d5
  1527.  add.l d5,d1
  1528.  moveq #11,d6
  1529.  bsr kirjoita
  1530.  tst.b d4
  1531.  bne info_loop
  1532. ;***
  1533. wait_for_key
  1534.  bsr intuimessage
  1535.  tst.l d0
  1536.  beq wait_for_key
  1537.  cmp.w #RAWKEY,d5
  1538.  bne wait_for_key
  1539.  btst.l #7,d4
  1540.  bne wait_for_key
  1541.  rts
  1542.  
  1543. info_clear
  1544. ;*** palataan peliin
  1545.  bsr tee_kentta_b
  1546.  move.l #0,a0
  1547.  move.l #sprite1,a1
  1548.  move.w c_spritex,d0
  1549.  move.w c_spritey,d1
  1550.  move.l grbase,a6
  1551.  jsr _LVOMoveSprite(a6)
  1552.  move.w j1_spritex,d0
  1553.  move.w j1_spritey,d1
  1554.  move.l #0,a0
  1555.  move.l grbase,a6
  1556.  move.l #sprite2,a1
  1557.  jsr _LVOMoveSprite(a6)
  1558.  rts
  1559.  
  1560. kirjoita
  1561.  ;d7:ssa on tekstin pituus
  1562.  ;d6:ssa on väri
  1563.  ;a0:ssa on tekstin osoite
  1564.  ;d0:ssa on x-koord.
  1565.  ;d1:ssa on y-koord.
  1566.  move.l grbase,a6
  1567.  move.l rport,a1
  1568.  jsr _LVOMove(a6)
  1569.  move.l rport,a1
  1570.  move.l d6,d0
  1571.  jsr _LVOSetAPen(a6)
  1572.  move.l rport,a1
  1573.  move.w d7,d0
  1574.  jsr _LVOText(a6)
  1575.  rts
  1576.  
  1577. alusta_kentta
  1578.  ;muistin varaus
  1579.  move.l #2940,d0  ; 21 kenttää
  1580.  moveq.l #0,d1
  1581.  movea.l 4,a6
  1582.  jsr _LVOAllocMem(a6)
  1583.  ;muistin osoite on d0:ssa
  1584.  tst.l d0
  1585.  beq.s ei_kartta_muistia
  1586.  move.l d0,kenttac
  1587.  
  1588.  lea kentat,a0
  1589.  moveq #20,d1
  1590. alusta_kentta_loop
  1591.  move.l d0,(a0)
  1592.  add.l #140,d0
  1593.  add.l #4,a0
  1594.  dbra d1,alusta_kentta_loop
  1595. alusta_kentta_pois
  1596.  rts
  1597.  
  1598. ei_kartta_muistia
  1599.   lea msg6,a1
  1600.   move.l #msglen6,d3
  1601.   bsr valitukset_ei_tiedosto
  1602.   bsr GURU
  1603.   moveq #0,d0
  1604.   bra.s alusta_kentta_pois
  1605.  
  1606. Lataa
  1607.    move.l a6,-(sp)
  1608.  
  1609.  ; Argumentit : (name,buffer,length)
  1610.  ; tiedoston nimen osoite a0:ssa
  1611.  ; nimen pituus d1:ssä
  1612.  ; tiedoston koko d6:ssa
  1613.  ; muistin osoite d7:ssa
  1614.  ; avataan tiedosto
  1615.  ; lea maps,a0
  1616.    move.l d1,nimipituus ; nimen pituus myhempää kirjoittamista varten
  1617.    move.l a0,tiedosto ; myöhempää nimen kirjoittamista varten
  1618.    move.l a0,d1   ; Nimen osoite : name
  1619.    move.l #MODE_OLDFILE,d2 ; accessMode
  1620.    movea.l dosbase,a6
  1621.    jsr _LVOOpen(a6)
  1622.    tst.l d0   ; jos tulos on nolla, tiedostoa ei ole
  1623.    beq.s ei_tiedostoa
  1624.  
  1625.  ; tiedosto saatiin avattua
  1626.    move.l d0,filehandle ;tiedoston tunnus muistiin
  1627.    move.l d0,d1
  1628.    move.l d7,d2 ; osoite muistiin, jonne kirjoitetaan : buffer
  1629.    move.l d6,d3 ; muistiblokin koko : length
  1630.    movea.l dosbase,a6
  1631.    jsr _LVORead(a6)
  1632.    cmp.l #0,d0
  1633.    beq.s ei_tiedostoa
  1634.    cmp.l #-1,d0
  1635.    beq.s ei_tiedostoa
  1636.  
  1637.  ; suljetaan tiedosto
  1638.    move.l filehandle,d1
  1639.    movea.l dosbase,a6
  1640.    jsr _LVOClose(a6)
  1641.    moveq #-1,d0
  1642. lataa_loppu
  1643.    move.l (sp)+,a6
  1644.    rts
  1645.  
  1646. ei_tiedostoa
  1647.   move.l tiedosto,a1
  1648.   move.l nimipituus,d3
  1649.   bsr valitukset
  1650.   bsr GURU
  1651.   moveq #0,d0
  1652.   bra.s lataa_loppu
  1653.  
  1654. valitukset
  1655.   ; a1:ssa tiedoston nimi, d3:ssa nimenpituus
  1656.   moveq #0,d5
  1657.   lea valitus,a0
  1658.   lea msg7b,a2         ; "Tiedosto "
  1659.   move.w #msglen7b,d0
  1660.   move.w d0,d5
  1661. valitukset_loop1
  1662.   move.b -1(a2,d0.w),-1(a0,d0.w)
  1663.   subq #1,d0
  1664.   bne valitukset_loop1
  1665.  
  1666.   add.w d3,d5
  1667.   move.l d5,d4
  1668. valitukset_loop2
  1669.   move.b -1(a1,d3.w),-1(a0,d4.w)
  1670.   subq #1,d4
  1671.   subq #1,d3
  1672.   bne valitukset_loop2
  1673.  
  1674.   lea msg7,a2          ; " ei avaudu."
  1675.   move.w #msglen7,d0
  1676.   add.w d0,d5
  1677.   move.l d5,d4
  1678. valitukset_loop3
  1679.   move.b -1(a2,d0.w),-1(a0,d4.w)
  1680.   subq #1,d4
  1681.   subq #1,d0
  1682.   bne valitukset_loop3
  1683.  
  1684.   bsr lisaa_hiiri
  1685.   rts
  1686.  
  1687. valitukset_ei_tiedosto
  1688.   ; a1:ssa teksti, d3:ssa tekstinpituus
  1689.   moveq #0,d5
  1690.   lea valitus,a0
  1691.   move.w d3,d5
  1692. valitukset_et_loop1
  1693.   move.b -1(a1,d3.w),-1(a0,d3.w)
  1694.   subq #1,d3
  1695.   bne valitukset_et_loop1
  1696.  
  1697.   bsr lisaa_hiiri
  1698.   rts
  1699.  
  1700. lisaa_hiiri
  1701.   lea msg12,a2
  1702.   move.w #msglen12,d0
  1703.   add.w d0,d5
  1704.   move.l d5,d4
  1705. valitukset_loop4
  1706.   move.b -1(a2,d0.w),-1(a0,d4.w)
  1707.   subq #1,d4
  1708.   subq #1,d0
  1709.   bne valitukset_loop4
  1710.   rts
  1711.  
  1712. GURU
  1713.  ; d0:ssa AlertNumber,a0:ssa String, d1:ssä Height
  1714.  movea.l intbase,a6
  1715.  moveq #0,d0
  1716.  moveq #28,d1
  1717.  jsr _LVODisplayAlert(a6)
  1718.  rts
  1719.  
  1720. ;******
  1721.  
  1722. init_audio
  1723.  
  1724.  move.l #ioa_SIZEOF,d0
  1725.  move.l #(MEMF_CLEAR!MEMF_CHIP),d1
  1726.  move.l 4,a6
  1727.  jsr _LVOAllocMem(a6)
  1728.  move.l d0,aumsg
  1729.  beq ei_chip_muistia
  1730.  
  1731.  move.l #39184,d0
  1732.  move.l #MEMF_CHIP,d1
  1733.  move.l 4,a6
  1734.  jsr _LVOAllocMem(a6)
  1735.  move.l d0,audiodata
  1736.  beq ei_chip_muistia
  1737.  
  1738.  lea bell,a0
  1739.  move.l #belllen,d1
  1740.  move.l #16358,d6
  1741.  move.l audiodata,d7
  1742.  move.l d7,voice_bell
  1743.  bsr Lataa
  1744.  tst.l d0
  1745.  beq init_audio_pois
  1746.  
  1747.  lea aaah,a0
  1748.  move.l #aaahlen,d1
  1749.  add.l d6,d7
  1750.  move.l d7,voice_aaah
  1751.  move.l #2688,d6
  1752.  bsr Lataa
  1753.  tst.l d0
  1754.  beq init_audio_pois
  1755.  
  1756.  lea hit,a0
  1757.  move.l #hitlen,d1
  1758.  add.l d6,d7
  1759.  move.l d7,voice_hit
  1760.  move.l #616,d6
  1761.  bsr Lataa
  1762.  tst.l d0
  1763.  beq init_audio_pois
  1764.  
  1765.  lea buum,a0
  1766.  move.l #buumlen,d1
  1767.  add.l d6,d7
  1768.  move.l d7,voice_buum
  1769.  move.l #7634,d6
  1770.  bsr Lataa
  1771.  tst.l d0
  1772.  beq init_audio_pois
  1773.  
  1774.  lea boing,a0
  1775.  move.l #boinglen,d1
  1776.  add.l d6,d7
  1777.  move.l d7,voice_boing
  1778.  move.l #3544,d6
  1779.  bsr Lataa
  1780.  tst.l d0
  1781.  beq init_audio_pois
  1782.  
  1783.  lea chiump,a0
  1784.  move.l #chiumplen,d1
  1785.  add.l d6,d7
  1786.  move.l d7,voice_chiump
  1787.  move.l #4912,d6
  1788.  bsr Lataa
  1789.  tst.l d0
  1790.  beq init_audio_pois
  1791.  
  1792.  lea roar,a0
  1793.  move.l #roarlen,d1
  1794.  add.l d6,d7
  1795.  move.l d7,voice_roar
  1796.  move.l #3432,d6
  1797.  bsr Lataa
  1798.  tst.l d0
  1799.  beq init_audio_pois
  1800.  
  1801.  move.l #49568,d0
  1802.  move.l #MEMF_CHIP,d1
  1803.  move.l 4,a6
  1804.  jsr _LVOAllocMem(a6)
  1805.  move.l d0,tddupdata
  1806.  beq ei_chip_muistia
  1807.  
  1808.  lea tddup,a0
  1809.  move.l #tdduplen,d1
  1810.  move.l d0,d7
  1811.  move.l d7,voice_tddup
  1812.  move.l #49568,d6
  1813.  bsr Lataa
  1814.  tst.l d0
  1815.  beq init_audio_pois
  1816.  
  1817.  move.l #1252,d0
  1818.  move.l #MEMF_CHIP,d1
  1819.  move.l 4,a6
  1820.  jsr _LVOAllocMem(a6)
  1821.  move.l d0,imagedata
  1822.  beq ei_chip_muistia
  1823.  
  1824.  lea image,a0
  1825.  move.l #imagelen,d1
  1826.  move.l d0,d7
  1827.   move.l d0,pointer
  1828.   add.l #12,d0
  1829.   move.l d0,spritedata1
  1830.   add.l #72,d0
  1831.   move.l d0,spritedata2a
  1832.   move.l d0,sprite2
  1833.   add.l #72,d0
  1834.   move.l d0,spritedata2b
  1835.   move.l d0,spritedata2bb
  1836.   add.l #72,d0
  1837.   move.l d0,spritedata2c
  1838.   move.l d0,spritedata2cc
  1839.   add.l #72,d0
  1840.   move.l d0,spritedata2d
  1841.   move.l d0,spritedata2dd
  1842.   add.l #72,d0
  1843.   move.l d0,spritedata2e
  1844.   add.l #72,d0
  1845.   move.l d0,pointer2
  1846.   add.l #72,d0
  1847.   move.l d0,suo_id
  1848.   add.l #32,d0
  1849.   move.l d0,exit_id
  1850.   add.l #64,d0
  1851.   move.l d0,muuri_id
  1852.   add.l #64,d0
  1853.   move.l d0,kivi_id
  1854.   add.l #64,d0
  1855.   move.l d0,kallo_id
  1856.   add.l #64,d0
  1857.   move.l d0,pullo_id
  1858.   add.l #64,d0
  1859.   move.l d0,kranaatti_id
  1860.   add.l #64,d0
  1861.   move.l d0,portti_id
  1862.   add.l #64,d0
  1863.   move.l d0,pallo_id
  1864.   add.l #64,d0
  1865.   move.l d0,myrkky_id
  1866.   add.l #64,d0
  1867.   move.l d0,linko_id
  1868.   add.l #64,d0
  1869.   move.l d0,happo_id
  1870.  
  1871.  move.l #1252,d6
  1872.  bsr Lataa
  1873.  tst.l d0
  1874.  beq init_audio_pois
  1875.  
  1876.  move.l aumsg,a1
  1877.  lea allocbits,a0
  1878.  move.l a0,ioa_Data(a1)
  1879.  move.l #4,ioa_Length(a1)
  1880.  move.l #0,MN_REPLYPORT(a1)
  1881.  move.b #127,LN_PRI(a1)
  1882.  move.b #ADIOF_NOWAIT,IO_FLAGS(a1)
  1883.  
  1884.  lea audioname,a0
  1885.  moveq #0,d0
  1886.  moveq #0,d1
  1887.  move.l 4,a6
  1888.  jsr _LVOOpenDevice(a6)
  1889.  tst.l d0
  1890.  bne ei_audiota
  1891.  
  1892.  move.l aumsg,a0
  1893.  move.l IO_UNIT(a0),unit
  1894. ; move.l #0,MN_REPLYPORT(a0)
  1895.  move.l IO_DEVICE(a0),audev
  1896.  move.l ioa_AllocKey(a0),allockey
  1897.  moveq #-1,d0
  1898. init_audio_pois
  1899.  rts
  1900.  
  1901. ei_audiota
  1902.   lea amsg1,a1
  1903.   move.l #amsglen1,d3
  1904.   bsr valitukset_ei_tiedosto
  1905.   bsr GURU
  1906.   moveq #0,d0
  1907.   bra.s init_audio_pois
  1908.  
  1909. ei_chip_muistia
  1910.   lea msg5,a1
  1911.   move.l #msglen5,d3
  1912.   bsr valitukset_ei_tiedosto
  1913.   bsr GURU
  1914.   moveq #0,d0
  1915.   bra.s init_audio_pois
  1916.  
  1917. voice_out
  1918.  ; annetaan a0:ssa osoite messagedataan
  1919.  moveq #13,d1
  1920.  move.l aumsg,a1
  1921. voice_out_loop
  1922.  move.b 0(a0,d1.w),ioa_Data(a1,d1.w)
  1923.  dbra d1,voice_out_loop
  1924.  
  1925. ; move.l audiodata,ioa_Data(a1)
  1926. ; move.w allockey,ioa_AllocKey(a1)
  1927.  move.w #CMD_WRITE,IO_COMMAND(a1)
  1928. ; move.l unit,IO_UNIT(a1)
  1929.  move.b #(ADIOF_NOWAIT!ADIOF_PERVOL),IO_FLAGS(a1)
  1930.  
  1931.  move.l aumsg,a1
  1932.  move.l a1,-(sp)
  1933.  jsr _BeginIO
  1934.  move.l (sp)+,a1
  1935.  
  1936.  rts
  1937.  
  1938. do_voice_bell
  1939.  move.l aumsg,a1
  1940.  move.l 4,a6
  1941.  jsr _LVOAbortIO(a6)
  1942.  lea voice_bell,a0
  1943.  bsr voice_out
  1944.  rts
  1945.  
  1946. do_voice_aaah
  1947.  move.l aumsg,a1
  1948.  move.l 4,a6
  1949.  jsr _LVOAbortIO(a6)
  1950.  lea voice_aaah,a0
  1951.  bsr voice_out
  1952.  rts
  1953.  
  1954. do_voice_hit
  1955.  move.l aumsg,a1
  1956.  move.l 4,a6
  1957.  jsr _LVOAbortIO(a6)
  1958.  lea voice_hit,a0
  1959.  bsr voice_out
  1960.  rts
  1961.  
  1962. do_voice_buum
  1963.  move.l aumsg,a1
  1964.  move.l 4,a6
  1965.  jsr _LVOAbortIO(a6)
  1966.  lea voice_buum,a0
  1967.  bsr voice_out
  1968.  rts
  1969.  
  1970. do_voice_boing
  1971.  move.l aumsg,a1
  1972.  move.l 4,a6
  1973.  jsr _LVOAbortIO(a6)
  1974.  lea voice_boing,a0
  1975.  bsr voice_out
  1976.  rts
  1977.  
  1978. do_voice_chiump
  1979.  move.l aumsg,a1
  1980.  move.l 4,a6
  1981.  jsr _LVOAbortIO(a6)
  1982.  lea voice_chiump,a0
  1983.  bsr voice_out
  1984.  rts
  1985.  
  1986. do_voice_roar
  1987.  move.l aumsg,a1
  1988.  move.l 4,a6
  1989.  jsr _LVOAbortIO(a6)
  1990.  lea voice_roar,a0
  1991.  bsr voice_out
  1992.  rts
  1993.  
  1994. do_voice_tddup
  1995.  move.l aumsg,a1
  1996.  move.l 4,a6
  1997.  jsr _LVOAbortIO(a6)
  1998.  lea voice_tddup,a0
  1999.  bsr voice_out
  2000.  rts
  2001.  
  2002. free_audio
  2003.  move.l aumsg,a1
  2004.  move.l audev,d1
  2005.  tst.l d1
  2006.  beq free_audio_pois
  2007.  move.l 4,a6
  2008. ; jsr _LVOAbortIO(a6)
  2009.  
  2010. ; move.w allockey,ioa_AllocKey(a1)
  2011.  move.w #ADCMD_FREE,IO_COMMAND(a1)
  2012.  move.b #IOF_QUICK,IO_FLAGS(a1)
  2013. ; move.l unit,IO_UNIT(a1)
  2014.  move.l 4,a6
  2015.  jsr _LVODoIO(a6)
  2016.  
  2017.  move.l aumsg,a1
  2018.  move.l 4,a6
  2019.  jsr _LVOCloseDevice(a6)
  2020.  
  2021. free_audio_pois
  2022.  rts
  2023.  
  2024. ;******
  2025. VapautaMuistit
  2026.   move.l cwindow,a0
  2027.   cmpa.l #0,a0
  2028.   beq VM0
  2029.   move.l intbase,a6
  2030.   jsr _LVOCloseWindow(a6)
  2031. VM0
  2032.   move.l cscreen,a0
  2033.   cmpa.l #0,a0
  2034.   beq VM1
  2035. ;  move.l intbase,a6
  2036.   jsr _LVOCloseScreen(a6)
  2037. VM1
  2038.   move.l kenttac,a1
  2039.   cmpa.l #0,a1
  2040.   beq VM2
  2041.   move.l #2940,d0
  2042.   move.l 4,a6
  2043.   jsr _LVOFreeMem(a6)
  2044. VM2
  2045.  move.l aumsg,a1
  2046.  move.l #ioa_SIZEOF,d0
  2047.   cmpa.l #0,a1
  2048.   beq VM7
  2049. ; move.l 4,a6
  2050.  jsr _LVOFreeMem(a6)
  2051. VM7
  2052.  move.l audiodata,a1
  2053.  move.l #39184,d0
  2054.   cmpa.l #0,a1
  2055.   beq VM8
  2056. ; move.l 4,a6
  2057.  jsr _LVOFreeMem(a6)
  2058. VM8
  2059.  move.l tddupdata,a1
  2060.  move.l #49568,d0
  2061.   cmpa.l #0,a1
  2062.   beq VM9
  2063. ; move.l 4,a6
  2064.  jsr _LVOFreeMem(a6)
  2065. VM9
  2066.  move.l imagedata,a1
  2067.  move.l #1252,d0
  2068.   cmpa.l #0,a1
  2069.   beq VMA
  2070. ; move.l 4,a6
  2071.  jsr _LVOFreeMem(a6)
  2072. VMA
  2073.   rts
  2074.   
  2075. ;**************************************************
  2076.  
  2077. ;        DATA ALUE
  2078. henget      dc.b 0
  2079. addr        dc.l 0
  2080. lenght      dc.l 0
  2081. kanta       dc.l 0
  2082. returnmsg   dc.l 0
  2083. string      dc.b '********',32,10
  2084. intname     dc.b 'intuition.library',0
  2085. dosname     dc.b 'dos.library',0
  2086. grname      dc.b 'graphics.library',0
  2087. audioname   dc.b 'audio.device',0
  2088. valitus     dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  2089.             dc.l 0,0  ; mahtuu 128 merkkiä
  2090.  
  2091. intbase ds.l 1
  2092.  
  2093. newwindow
  2094.    dc.w 0
  2095.    dc.w 0
  2096.    dc.w 320
  2097.    dc.w 256
  2098.    dc.b -1
  2099.    dc.b -1
  2100.    dc.l MOUSEBUTTONS!MOUSEMOVE!RAWKEY!DELTAMOVE
  2101.    dc.l REPORTMOUSE!BORDERLESS!ACTIVATE!RMBTRAP
  2102.    dc.l 0
  2103.    dc.l 0
  2104.    dc.l 0
  2105.    dc.l 0 ;screen addr
  2106.    dc.l 0
  2107.    dc.w 0
  2108.    dc.w 0
  2109.    dc.w 0
  2110.    dc.w 0
  2111.    dc.w $f
  2112.  
  2113. newscreen
  2114.    dc.w 0
  2115.    dc.w 0
  2116.    dc.w 320
  2117.    dc.w 256
  2118.    dc.w 4
  2119.    dc.b 0
  2120.    dc.b 1
  2121.    dc.w 0
  2122.    dc.w $f
  2123.    dc.l 0
  2124.    dc.l 0
  2125.    dc.l 0
  2126.    dc.l 0
  2127.  
  2128. suo_i   ;kynät 0 ja 2
  2129.    dc.w 0,0
  2130.    dc.w 16,16,1
  2131. suo_id   dc.l 0
  2132.    dc.b 2,0
  2133.    dc.w 0,0
  2134. exit_i  ;kynät 0, 1, 4 ja 5
  2135.    dc.w 0,0
  2136.    dc.w 16,16,2
  2137. exit_id   dc.l 0
  2138.    dc.b 5,0
  2139.    dc.w 0,0
  2140. muuri_i ;kynät 1, 3, 5 ja 7
  2141.    dc.w 0,0
  2142.    dc.w 16,16,2
  2143. muuri_id   dc.l 0
  2144.    dc.b 6,1
  2145.    dc.w 0,0
  2146. kivi_i ;kynät 0, 4, 8 ja 12
  2147.    dc.w 0,0
  2148.    dc.w 16,16,2
  2149. kivi_id   dc.l 0
  2150.    dc.b 12,0
  2151.    dc.w 0,0
  2152. kallo_i ;kynät 0, 4, 8 ja 12
  2153.    dc.w 0,0
  2154.    dc.w 16,16,2
  2155. kallo_id   dc.l 0
  2156.    dc.b 12,0
  2157.    dc.w 0,0
  2158. pullo_i ;kynät 0, 2, 8 ja 10
  2159.    dc.w 0,0
  2160.    dc.w 16,16,2
  2161. pullo_id   dc.l 0
  2162.    dc.b 10,0
  2163.    dc.w 0,0
  2164. kranaatti_i ;kynät 0, 2, 4 ja 6
  2165.    dc.w 0,0
  2166.    dc.w 16,16,2
  2167. kranaatti_id   dc.l 0
  2168.    dc.b 6,0
  2169.    dc.w 0,0
  2170. portti_i ;kynät 0, 1, 4 ja 5
  2171.    dc.w 0,0
  2172.    dc.w 16,16,2
  2173. portti_id   dc.l 0
  2174.    dc.b 5,0
  2175.    dc.w 0,0
  2176. pallo_i ;kynät 0, 4, 8 ja 12
  2177.    dc.w 0,0
  2178.    dc.w 16,16,2
  2179. pallo_id   dc.l 0
  2180.    dc.b 12,0
  2181.    dc.w 0,0
  2182. myrkky_i ;kynät 0, 1, 8 ja 9
  2183.    dc.w 0,0
  2184.    dc.w 16,16,2
  2185. myrkky_id   dc.l 0
  2186.    dc.b 9,0
  2187.    dc.w 0,0
  2188. linko_i ;kynät 12, 13, 14 ja 15
  2189.    dc.w 0,0
  2190.    dc.w 16,16,2
  2191. linko_id   dc.l 0
  2192.    dc.b 3,12
  2193.    dc.w 0,0
  2194. happo_i  ;kynät 9, 11, 13 ja 15
  2195.    dc.w 0,0
  2196.    dc.w 16,16,2
  2197. happo_id   dc.l 0
  2198.    dc.b 6,9
  2199.    dc.w 0,0
  2200.  
  2201. spritedata2
  2202. spritedata2b   dc.l 0
  2203. spritedata2c   dc.l 0
  2204. spritedata2d   dc.l 0
  2205. spritedata2e   dc.l 0
  2206. spritedata2dd  dc.l 0
  2207. spritedata2cc  dc.l 0
  2208. spritedata2bb  dc.l 0
  2209. spritedata2a   dc.l 0
  2210.    dc.l 0
  2211.  
  2212. sprite1
  2213. spritedata1    dc.l 0
  2214.    dc.w 16
  2215.    dc.w 20,20,2
  2216.  
  2217.    cnop 0,2
  2218.  
  2219. sprite2
  2220.    dc.l 0
  2221.    dc.w 16
  2222.    dc.w 20,20,3
  2223. sprite0
  2224. pointer   dc.l 0
  2225.    dc.w 1
  2226.    dc.w 20,20,1
  2227.  
  2228. kentat
  2229.    dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  2230. colormap
  2231.    dc.w $0333,$0d86,$0111,$0a64
  2232.    dc.w $0000,$0742,$0353,$0420
  2233.    dc.w $023f,$0ff3,$081f,$01f6
  2234.    dc.w $0fff,$0800,$0f70,$0333
  2235.    dc.w $0a64,$0cff,$019e,$0f90
  2236.    dc.w $0444,$0002,$0779,$0ddf
  2237.    dc.w $0555,$0002,$0779,$0ddf
  2238.    dc.w $0999,$0002,$0779,$0ddf
  2239.  
  2240. epoints
  2241.    dc.w 297,226
  2242.    dc.w 297,234
  2243.    dc.w 40,234
  2244.    dc.w 40,226
  2245.  
  2246. box_images
  2247.    dc.l muuri_i      ; image n:o $1
  2248.    dc.l suo_i        ; image n:o $2
  2249.    dc.l exit_i       ; image n:o $3
  2250.    dc.l kivi_i       ; image n:o $4
  2251.    dc.l kallo_i      ; image n:o $5
  2252.    dc.l pullo_i      ; image n:o $6
  2253.    dc.l kranaatti_i  ; image n:o $7
  2254.    dc.l portti_i     ; image n:o $8
  2255.    dc.l myrkky_i     ; image n:o $9
  2256.    dc.l linko_i      ; image n:o $A
  2257.    dc.l happo_i      ; image n:o $B
  2258. j1_koord
  2259.    dc.w 18,18
  2260.    dc.w 144,128
  2261.    dc.w 18,80
  2262.    dc.w 288,160
  2263.    dc.w 192,18
  2264.    dc.w 160,192
  2265.    dc.w 192,64
  2266.    dc.w 144,48
  2267.    dc.w 160,48
  2268.    dc.w 16,128
  2269.    dc.w 16,16
  2270.    dc.w 32,32
  2271.    dc.w 192,80
  2272.    dc.w 64,160
  2273.    dc.w 208,192
  2274.    dc.w 240,96
  2275.    dc.w 176,112
  2276.    dc.w 240,32
  2277.    dc.w 160,48
  2278.    dc.w 16,176
  2279.    dc.w 16,128
  2280. kenttac      ds.l 1
  2281. filehandle   dc.l 0
  2282. tiedosto     dc.l 0
  2283. nimipituus   dc.l 0
  2284. dosbase   ds.l 1
  2285. grbase    ds.l 1
  2286. cscreen   ds.l 1
  2287. cwindow   ds.l 1
  2288. rport     ds.l 1
  2289. vport     ds.l 1
  2290. dloop     dc.l 0
  2291. x         dc.b 0
  2292. y         dc.b 0
  2293. nkentta   dc.b 0
  2294. numsprite dc.b 0,0,0
  2295. nkenttaos dc.l 0
  2296. ym        dc.l 0
  2297. xm        dc.l 0
  2298. kivet     dc.b 0
  2299. energia   dc.w 255
  2300. msg1      dc.b 'Do you want to play again ?'
  2301. msg2      dc.b 'YES'
  2302. msg3      dc.b '..no..'
  2303. ;********** GAME CONTROL DATA ************
  2304. suunta        dc.b 0
  2305. sprite_suunta dc.b 0
  2306. c_suunta      dc.b 0
  2307. c_spritex     dc.w 321
  2308. c_spritey     dc.w 0
  2309. a_spritex     dc.w 0
  2310. a_spritey     dc.w 0
  2311. j1_spritex    dc.w 321
  2312. j1_spritey    dc.w 0
  2313. v_sprite      dc.b 0
  2314. nlaskuri      dc.b 1
  2315. vhlaskuri     dc.b 0
  2316. solaskuri     dc.w 0
  2317. txlaskuri     dc.b 0
  2318. elaskuri      dc.b 0
  2319. hlaskuri      dc.b 0
  2320. evlaskuri     dc.w 0
  2321. klaskuri      dc.b 0
  2322. j1laskuri     dc.w 0
  2323. jekkulaskuri  dc.w 0
  2324. jekut         dc.w 0
  2325. kpaikkax      dc.b 0
  2326. kpaikkay      dc.b 0
  2327. lopetus       dc.b 0
  2328. kanto         dc.b 0
  2329.  
  2330. ;********************
  2331.  
  2332. audiodata   dc.l 0
  2333. tddupdata   dc.l 0
  2334. imagedata   dc.l 0
  2335. audev       dc.l 0
  2336. unit        dc.l 0
  2337. aumsg       dc.l 0
  2338. allockey    dc.w 0
  2339. allocbits   dc.b 1,2,4,8
  2340.  
  2341. animlaskuri    dc.w 0
  2342. framelaskuri   dc.w 0
  2343. frames         dc.b 0
  2344. frame          dc.b 0
  2345.  
  2346. voice_bell
  2347.  dc.l 0     ; ioa_Data
  2348.  dc.l 16358 ; ioa_Length
  2349.  dc.w 300   ; ioa_Period
  2350.  dc.w 63    ; ioa_Volume
  2351.  dc.w 1     ; ioa_Cycles
  2352.  
  2353. voice_aaah
  2354.  dc.l 0     ; ioa_Data
  2355.  dc.l 2688  ; ioa_Length
  2356.  dc.w 300   ; ioa_Period
  2357.  dc.w 63    ; ioa_Volume
  2358.  dc.w 1     ; ioa_Cycles
  2359.  
  2360. voice_hit
  2361.  dc.l 0     ; ioa_Data
  2362.  dc.l 616   ; ioa_Length
  2363.  dc.w 300   ; ioa_Period
  2364.  dc.w 63    ; ioa_Volume
  2365.  dc.w 1     ; ioa_Cycles
  2366.  
  2367. voice_buum
  2368.  dc.l 0     ; ioa_Data
  2369.  dc.l 7634  ; ioa_Length
  2370.  dc.w 300   ; ioa_Period
  2371.  dc.w 63    ; ioa_Volume
  2372.  dc.w 1     ; ioa_Cycles
  2373.  
  2374. voice_boing
  2375.  dc.l 0     ; ioa_Data
  2376.  dc.l 3544  ; ioa_Length
  2377.  dc.w 300   ; ioa_Period
  2378.  dc.w 63    ; ioa_Volume
  2379.  dc.w 1     ; ioa_Cycles
  2380.  
  2381. voice_chiump
  2382.  dc.l 0     ; ioa_Data
  2383.  dc.l 4912  ; ioa_Length
  2384.  dc.w 300   ; ioa_Period
  2385.  dc.w 63    ; ioa_Volume
  2386.  dc.w 1     ; ioa_Cycles
  2387.  
  2388. voice_roar
  2389.  dc.l 0     ; ioa_Data
  2390.  dc.l 3432  ; ioa_Length
  2391.  dc.w 300   ; ioa_Period
  2392.  dc.w 63    ; ioa_Volume
  2393.  dc.w 1     ; ioa_Cycles
  2394.  
  2395. voice_tddup
  2396.  dc.l 0     ; ioa_Data
  2397.  dc.l 49568 ; ioa_Length
  2398.  dc.w 130   ; ioa_Period
  2399.  dc.w 63    ; ioa_Volume
  2400.  dc.w 1     ; ioa_Cycles
  2401.  
  2402. amsg1       dc.b 0,208,11,'Can''t open audio.device !',0,1
  2403. amsglen1    equ *-amsg1
  2404.  
  2405. ;**
  2406. msg0       dc.b 'DekaQuest V1.0 © Leo Puolamaa May 1991',$0a
  2407. msglen0    equ *-msg0
  2408.            dc.b 0
  2409. msg4       dc.b 0,216,11,'Screen won''t open.',0,1
  2410. msglen4    equ *-msg4
  2411. msg5       dc.b 0,216,11,'Out of CHIP_MEM !',0,1
  2412. msglen5    equ *-msg5
  2413. msg6       dc.b 0,216,11,'Map memory won''t open.',0,1
  2414. msglen6    equ *-msg6
  2415. msg7       dc.b ' won''t open.',0,1
  2416. msglen7    equ *-msg7
  2417. msg7b      dc.b 0,172,11,'File '
  2418. msglen7b   equ *-msg7b
  2419. msg8       dc.b 0,216,11,'No sprites !',0,1
  2420. msglen8    equ *-msg8
  2421. msg9       dc.b 'Level :'
  2422. msglen9    equ *-msg9
  2423.            dc.b 0
  2424. msg10      dc.b 'DiamondQuest © Leo Puolamaa'
  2425. msglen10   equ *-msg10
  2426.            dc.b 0
  2427. msg11      dc.b 'GAME PAUSED'
  2428. msglen11   equ *-msg11
  2429.            dc.b 0
  2430. msg12      dc.b 0,172,21,'Press a mouse button to continue...',0,0
  2431. msglen12   equ *-msg12
  2432. msg13      dc.b 'Amazing,how on earth did you do it?!'
  2433. msglen13   equ *-msg13
  2434.            dc.b 0
  2435.  cnop 0,2
  2436. info
  2437.  dc.l info0
  2438.  dc.l info1
  2439.  dc.l info2
  2440.  dc.l info3
  2441.  dc.l info4
  2442.  dc.l info5
  2443.  dc.l info6
  2444.  dc.l info7
  2445.  dc.l info8
  2446.  dc.l info9
  2447.  dc.l info10
  2448.  dc.l info11
  2449.  dc.l info12
  2450.  dc.l info13
  2451.  dc.l info14
  2452.  dc.l info15
  2453.  dc.l info16
  2454.  dc.l info17
  2455.  dc.l info18
  2456.  dc.l info19
  2457.  dc.l info20
  2458.  dc.l info21
  2459.  dc.l info22
  2460.  dc.l info23
  2461.  dc.l info24
  2462.  dc.l info25
  2463.  dc.l info26
  2464.  
  2465. infolen
  2466.  dc.b infolen0
  2467.  dc.b infolen1
  2468.  dc.b infolen2
  2469.  dc.b infolen3
  2470.  dc.b infolen4
  2471.  dc.b infolen5
  2472.  dc.b infolen6
  2473.  dc.b infolen7
  2474.  dc.b infolen8
  2475.  dc.b infolen9
  2476.  dc.b infolen10
  2477.  dc.b infolen11
  2478.  dc.b infolen12
  2479.  dc.b infolen13
  2480.  dc.b infolen14
  2481.  dc.b infolen15
  2482.  dc.b infolen16
  2483.  dc.b infolen17
  2484.  dc.b infolen18
  2485.  dc.b infolen19
  2486.  dc.b infolen20
  2487.  dc.b infolen21
  2488.  dc.b infolen22
  2489.  dc.b infolen23
  2490.  dc.b infolen24
  2491.  dc.b infolen25
  2492.  dc.b infolen26
  2493.  
  2494. info0       dc.b '          «** DiamondQuest **»'
  2495. infolen0    equ *-info0
  2496. info1       dc.b '          --------------------'
  2497. infolen1    equ *-info1
  2498. info2       dc.b '  Welcome to the world of games. This'
  2499. infolen2    equ *-info2
  2500. info3       dc.b 'time you are a grey ball and have just'
  2501. infolen3    equ *-info3
  2502. info4       dc.b 'entered a great maze to pick up some'
  2503. infolen4    equ *-info4
  2504. info5       dc.b 'diamonds and get rich.  There are 20'
  2505. infolen5    equ *-info5
  2506. info6       dc.b 'levels each containing five diamonds.'
  2507. infolen6    equ *-info6
  2508. info7       dc.b 'Exit to the next level becomes available'
  2509. infolen7    equ *-info7
  2510. info8       dc.b 'after you have collected all diamonds'
  2511. infolen8    equ *-info8
  2512. info9       dc.b 'on the current level.  Although you are'
  2513. infolen9    equ *-info9
  2514. info10      dc.b 'not immortal, you still have four lives.'
  2515. infolen10   equ *-info10
  2516. info11      dc.b 'To roll around you drag the mouse to the'
  2517. infolen11   equ *-info11
  2518. info12      dc.b 'desired direction.  To perform some'
  2519. infolen12   equ *-info12
  2520. info13      dc.b 'important actions you may use these'
  2521. infolen13   equ *-info13
  2522. info14      dc.b 'commands :'
  2523. infolen14   equ *-info14
  2524. info15      dc.b ' '
  2525. infolen15   equ *-info15
  2526. info16      dc.b ' - Left mouse button to pick up things'
  2527. infolen16   equ *-info16
  2528. info17      dc.b ' - Right button to drop a handgrenade'
  2529. infolen17   equ *-info17
  2530. info18      dc.b ' - Esc for suicide'
  2531. infolen18   equ *-info18
  2532. info19      dc.b ' - "p" to start and end pause mode'
  2533. infolen19   equ *-info19
  2534. info20      dc.b ' - Help for this information'
  2535. infolen20   equ *-info20
  2536. info21      dc.b ' - Left & right Amiga + ctrl to reset'
  2537. infolen21   equ *-info21
  2538. info22      dc.b ' '
  2539. infolen22   equ *-info22
  2540. info23      dc.b ' © Leo Puolamaa June 1991 ,Oulu Finland'
  2541. infolen23   equ *-info23
  2542. info24      dc.b ' '
  2543. infolen24   equ *-info24
  2544. info25      dc.b ' '
  2545. infolen25   equ *-info25
  2546. info26      dc.b ' HIT A KEY...'
  2547. infolen26   equ *-info26
  2548.  
  2549. maps        dc.b 'DQ:maps'
  2550. mapslen     equ *-maps
  2551.             dc.b 0
  2552. bell        dc.b 'DQ:Bell.sound'
  2553. belllen     equ *-bell
  2554.             dc.b 0
  2555. aaah        dc.b 'DQ:Aaah.sound'
  2556. aaahlen     equ *-aaah
  2557.             dc.b 0
  2558. hit         dc.b 'DQ:Hit.sound'
  2559. hitlen      equ *-hit
  2560.             dc.b 0
  2561. buum        dc.b 'DQ:Buum.sound'
  2562. buumlen     equ *-buum
  2563.             dc.b 0
  2564. boing       dc.b 'DQ:Boing.sound'
  2565. boinglen    equ *-boing
  2566.             dc.b 0
  2567. chiump      dc.b 'DQ:Chiump.sound'
  2568. chiumplen   equ *-chiump
  2569.             dc.b 0
  2570. roar        dc.b 'DQ:Roar.sound'
  2571. roarlen     equ *-roar
  2572.             dc.b 0
  2573. tddup       dc.b 'DQ:TDDUP.sound'
  2574. tdduplen    equ *-tddup
  2575.             dc.b 0
  2576. image       dc.b 'DQ:images'
  2577. imagelen    equ *-image
  2578.             dc.b 0
  2579.  
  2580.  
  2581. pointer2       dc.l 0
  2582.  
  2583.  end
  2584.  
  2585.