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 >
Wrap
Assembly Source File
|
1991-09-17
|
45KB
|
2,585 lines
INCLUDE "exec/types.i"
INCLUDE "exec/ports.i"
INCLUDE "exec/io.i"
INCLUDE "exec/memory.i"
INCLUDE "devices/audio.i"
INCLUDE "libraries/dosextens.i"
INCLUDE "intuition/intuition.i"
INCLUDE "intuition/screens.i"
INCLUDE "graphics/gfx.i"
xref _AbsExecBase
xref _BeginIO
xref _LVOAbortIO
xref _LVOAddPort
xref _LVOAllocMem
xref _LVOAllocSignal
xref _LVOChangeSprite
xref _LVOCheckIO
xref _LVOClose
xref _LVOCloseDevice
xref _LVOCloseLibrary
xref _LVOCloseScreen
xref _LVOCloseWindow
xref _LVODisplayAlert
xref _LVODisplayBeep
xref _LVODoIO
xref _LVODrawImage
xref _LVOFindPort
xref _LVOFindTask
xref _LVOFreeMem
xref _LVOFreeSprite
xref _LVOFreeSignal
xref _LVOGetMsg
xref _LVOGetSprite
xref _LVOInitBitMap
xref _LVOInitRastPort
xref _LVOLoadRGB4
xref _LVOMove
xref _LVOMoveSprite
xref _LVOOpen
xref _LVOOpenDevice
xref _LVOOpenLibrary
xref _LVOOpenScreen
xref _LVOOpenWindow
xref _LVOOutput
xref _LVOPolyDraw
xref _LVOPutMsg
xref _LVORead
xref _LVOReadPixel
xref _LVORectFill
xref _LVORemPort
xref _LVOReplyMsg
xref _LVOSendIO
xref _LVOSetAPen
xref _LVOSetPointer
xref _LVOSetRast
xref _LVOText
xref _LVOViewPortAddress
xref _LVOWait
xref _LVOWaitIO
xref _LVOWaitPort
xref _LVOWrite
xref _LVOWritePixel
section game,CODE
movea.l #intname,a1
moveq #31,d0
movea.l 4,a6
jsr _LVOOpenLibrary(a6)
move.l d0,intbase
beq abort
movea.l #dosname,a1
moveq #0,d0
; movea.l 4,a6
jsr _LVOOpenLibrary(a6)
move.l d0,dosbase
beq abort
movea.l #grname,a1
moveq #0,d0
; movea.l 4,a6
jsr _LVOOpenLibrary(a6)
move.l d0,grbase
beq abort
suba.l a1,a1
jsr _LVOFindTask(a6)
movea.l d0,a4
tst.l pr_CLI(a4)
bne yes_cli
lea pr_MsgPort(a4),a0
jsr _LVOWaitPort(a6)
lea pr_MsgPort(a4),a0
jsr _LVOGetMsg(a6)
move.l d0,returnmsg
yes_cli
;**************
bsr init_audio
tst.l d0
beq vapautukset ; ei vapauteta spritejä
bsr alusta_kentta
tst.l d0
beq vapautukset ;
bsr avaa_ruutu
tst.l d0
beq vapautukset ;
bsr muuta_varit
bsr tee_spritet
tst.l d0
beq vapauta_spritet
bsr game_info_screen
actual_game
move.b #0,nkentta
lea msg9,a0
moveq #msglen9,d7
move.l #186,d0
move.l #244,d1
moveq #9,d6
bsr kirjoita
lea msg10,a0
moveq #msglen10,d7
move.l #100,d0
move.l #254,d1
moveq #14,d6
bsr kirjoita
bsr kirjoita_taso
bsr do_voice_tddup
lea maps,a0
move.l #mapslen,d1
move.l #2940,d6
move.l kenttac,d7
bsr Lataa ; ladataan kartat muistiin
tst.l d0
beq vapauta_spritet ; karttaa ei löytynyt
move.w #17,c_spritex
move.w #17,c_spritey
bsr tee_kentta
bsr energia_mittari
bsr pallo_piirto
move.l intbase,a6 ;hävitetään hiiren pointteri näkyvistä
move.l cwindow,a0
move.l pointer,a1
moveq #1,d0
moveq #1,d1
jsr _LVOSetPointer(a6)
move.b #4,henget
move.b #0,lopetus
move.w #255,energia
move.b #0,kanto
move.w #0,jekut
move.b #0,kivet
move.b #0,hlaskuri
move.l #0,a0
move.l #sprite1,a1
move.w c_spritex,d0
move.w c_spritey,d1
move.l grbase,a6
jsr _LVOMoveSprite(a6)
;************* PELI SILMUKKA **********
loop1
bsr spriteliikku_ohjaus
cmp.l #0,d0
beq no_click
ei_lopeteta
bsr ota_esine
no_click
tst.b lopetus
bne pelin_loppu
sub.b #1,txlaskuri
bsr jekku_ohjaus
bra loop1
;**************
pelin_loppu
move.l #0,a0
move.l grbase,a6
move.w #321,d0
move.l #sprite1,a1
jsr _LVOMoveSprite(a6)
move.l #$7ffff,d0
oloop
sub.l #1,d0
bne oloop
sub.b #1,henget
beq no_lives
bsr pallo_poisto
lea maps,a0
move.l #mapslen,d1
move.l #2940,d6
move.l kenttac,d7
bsr Lataa
sub.b #1,nkentta
move.w a_spritex,c_spritex
move.w a_spritey,c_spritey
bsr uusi_kentta
move.b #0,lopetus
move.l #0,a0
move.l #sprite1,a1
move.w c_spritex,d0
move.w c_spritey,d1
move.l grbase,a6
jsr _LVOMoveSprite(a6)
move.b #0,c_suunta
bra loop1
no_lives
move.l #$cffff,d0
loppuloop
sub.l #1,d0
bne loppuloop
bsr game_over_screen
tst.b d0
bne actual_game
;********* Lopetetaan **************
bsr do_voice_aaah
move.l #180000,d0
loppu_test_loop1
subi.l #1,d0
bne loppu_test_loop1
move.l 4,a6
move.l aumsg,a1
jsr _LVOAbortIO(a6)
vapauta_spritet
lea numsprite,a5
movea.l grbase,a6
moveq #3,d7
loop2
moveq #0,d0
move.b -1(a5,d7.w),d0
cmpi.b #-1,d0
beq.s loop3
jsr _LVOFreeSprite(a6)
loop3
subq #1,d7
bne loop2
vapautukset
bsr free_audio
bsr VapautaMuistit
close_gr
movea.l 4,a6
movea.l grbase,a1
jsr _LVOCloseLibrary(a6)
close_dos
movea.l 4,a6
movea.l dosbase,a1
jsr _LVOCloseLibrary(a6)
close_int
movea.l 4,a6
movea.l intbase,a1
jsr _LVOCloseLibrary(a6)
abort
tst.l returnmsg
beq abort_2
movea.l 4,a6
movea.l returnmsg,a1
jsr _LVOReplyMsg(a6)
abort_2
rts ;**** Palataan CLI:hin ( tai WB:hen )
;*************************
avaa_ruutu
movea.l #newscreen,a0 ;newscreen structure
movea.l intbase,a6
jsr _LVOOpenScreen(a6)
move.l d0,cscreen
beq.s ei_nayttoa ; ei ruutua
move.l d0,rport
add.l #84,rport
move.l d0,vport
add.l #44,vport
move.l #newwindow,a0 ;avataan myös ikkuna
move.l cscreen,nw_Screen(a0)
movea.l intbase,a6
jsr _LVOOpenWindow(a6)
move.l d0,cwindow
beq.s ei_nayttoa ; ei ruutua
avaa_ruutu_pois
rts
ei_nayttoa
lea msg4,a1
move.l #msglen4,d3
bsr valitukset_ei_tiedosto
bsr GURU
moveq #0,d0
bra.s avaa_ruutu_pois
muuta_varit
movea.l grbase,a6
movea.l vport,a0
movea.l #colormap,a1
moveq #32,d0
jsr _LVOLoadRGB4(a6) ; LoadRGB4; muoto: $0RGB
rts
tee_spritet
lea numsprite,a5 ; sisältää kolmen spriten numerot
moveq #1,d0
lea sprite0,a0
bsr.s init_sprite
move.b d0,2(a5)
; cmpi.b #-1,d0
; beq.s ei_spriteja ; itse asiassa tätä spriteä ei tarvita
moveq #-1,d0
lea sprite1,a0
bsr.s init_sprite
move.b d0,(a5)
cmpi.b #-1,d0
beq.s ei_spriteja
moveq #-1,d0
lea sprite2,a0
bsr.s init_sprite
move.b d0,1(a5)
cmpi.b #-1,d0
beq.s ei_spriteja
moveq #-1,d0
rts
ei_spriteja
lea msg8,a1
move.l #msglen8,d3
bsr valitukset_ei_tiedosto
bsr GURU
moveq #0,d0
rts
init_sprite
move.l grbase,a6
jsr _LVOGetSprite(a6)
rts
tee_kentta
move.w c_spritex,a_spritex
move.w c_spritey,a_spritey
tee_kentta_b
;ruudut (20*14) muuttujissa x ja y
move.l rport,a1 ;... mutta ensin siivotaan...
move.l grbase,a6
moveq #0,d0
jsr _LVOSetAPen(a6)
moveq #0,d0
moveq #0,d1
move.w #319,d2
move.w #224,d3
move.l rport,a1
jsr _LVORectFill(a6)
bsr etsi_kenttaos
;nkenttaos on kentän osoite
; - ainoa enää ulkoa tarvittava vakio
move.b #13,y
loopy
move.b #19,x
loopx
; kenttien syvyys on 4 bittiä
; haetaan menossa olevan ruudun arvo
moveq #0,d0
move.b y,d0
mulu #10,d0
moveq #0,d1
move.b x,d1
lsr.b #1,d1
add.w d1,d0
move.l nkenttaos,a0
move.b 0(a0,d0.w),d0
move.b d0,dloop
and.b #$f,d0
bsr draw_box
move.b dloop,d0
lsr.b #4,d0
subi.b #1,x
bsr draw_box
cmp.b #0,x
beq.s looppo
subi.b #1,x
bra loopx
looppo
subi.b #1,y
cmp.b #-1,y
bne loopy
rts
draw_box
move.l rport,a0
move.l intbase,a6
moveq #0,d2
move.b d0,d2
moveq #0,d1
move.b y,d1
lsl.w #4,d1
moveq #0,d0
move.b x,d0
lsl.w #4,d0
cmp.b #0,d2
beq draw_pois
move.l #box_images,a1
lsl.w #2,d2
move.l -4(a1,d2),a1
jsr _LVODrawImage(a6)
draw_pois
rts
;**********************
hextodec ; muutettava luku d1:ssä
move.l d1,d2 ; vain kaksinumeroinen, 0-99
divu #10,d1
andi.l #$f,d1
move.l d1,d3
lsl.w #4,d3 ; d3:ssa BCD luku , kymmenet
mulu #10,d1
sub.b d1,d2 ; d2:ssa BCD luku , ykköset
move #4,CCR ; Extended bit = 0, Zero bit =1
abcd d3,d2 ; BCD yhteenlasku
modify ;muutettava luku d2:ssa
move.l #string,addr
move.l #string,a5 ;merkkijonon osoite, joho luku tulee
moveq #8,d1
loopnum
move.l d2,d0
lsr.l #4,d2
bsr muuta
move.b d0,-1(a5,d1.l)
subi.b #1,d1
bne loopnum
rts
muuta ;muutettava luku d0:ssa
and.b #$f,d0
or.b #$30,d0
cmp.b #$3a,d0
blt poisnum
add.b #7,d0
poisnum
rts
type
move.l grbase,a6
move.l rport,a1
move.b #9,d0
jsr _LVOSetAPen(a6)
move.l rport,a1
move.l addr,a0
move.l lenght,d0
jsr _LVOText(a6)
rts
kirjoita_happo
move.l d0,-(sp)
moveq #0,d1
move.b hlaskuri,d1
bsr hextodec
add.l #6,a5
move.l a5,a0
moveq #2,d7
moveq #16,d0
move.w #236,d1
moveq #9,d6
bsr kirjoita
move.l (sp)+,d0
rts
kirjoita_taso
move.l d0,-(sp)
moveq #0,d1
move.b nkentta,d1
addq #1,d1
bsr hextodec
add.l #6,a5
move.l a5,a0
moveq #2,d7
move.w #252,d0
move.w #244,d1
moveq #9,d6
bsr kirjoita
move.l (sp)+,d0
rts
report_mouse
moveq #0,d7
bsr intuimessage
tst.l d0
beq report_mouse_pois ; ei viestejä
move.b #0,suunta
move.w d7,d3
swap d7
move.w d7,d2
move.b d3,d0
bsr abs_muunnos
move.b d0,d1
move.b d2,d0
bsr abs_muunnos
move.b #1,suunta
cmp.b d1,d0
bgt.s report_a
move.b #2,suunta
move.b d1,d0
move.b d3,d2
report_a
cmp.b #2,d0
bgt.s report_b
move.b #0,suunta
bra.s report_c
report_b
and.b #$80,d2
or.b d2,suunta
report_c
moveq #3,d0
cmp.l #RAWKEY,d5
beq report_keys
cmp.l #MOUSEBUTTONS,d5
bne.s report_mouse_pois2
cmp.w #$c000,d6
beq.s report_mouse_pois
moveq #0,d0
cmp.w #$a000,d6
bne.s report_mouse_pois
bsr ota_kr
report_mouse_pois2
moveq #0,d0
report_mouse_pois
rts
intuimessage
move.l cwindow,a0
move.l $56(a0),a0
movea.l 4,a6
jsr _LVOGetMsg(a6)
tst.l d0
beq.s intuimessage_pois
move.l d0,a1
move.l im_MouseX(a1),d7
move.w im_Qualifier(a1),d6
move.l im_Class(a1),d5
move.w im_Code(a1),d4
jsr _LVOReplyMsg(a6) ;d0:ssa on 0, jos viestejä ei ole saapunut
moveq #-1,d0
intuimessage_pois
rts
passed
lea msg13,a0
move.w #msglen13,d7
moveq #16,d0
moveq #124,d1
moveq #9,d6
bsr kirjoita
rts
report_keys
; d4:ssa näppäimen numero
moveq #0,d0
cmp.w #$45,d4
beq report_esc
cmp.w #$58,d4
beq report_sanct
cmp.w #$2e,d4
beq report_acid
cmp.w #$5f,d4
beq report_info
cmp.w #$19,d4
beq report_pause
rts
report_esc
move.b #-1,lopetus
move.b #1,henget
rts
report_sanct
cmp.b #$9a,d6 ; RSHIFT+CONTROL+LALT+RCOMMAND
bne report_sanct_pois
move.b #4,henget
bsr pallo_piirto
moveq #0,d0
report_sanct_pois
rts
report_acid
cmp.b #$e1,d6 ; LSHIFT+RALT+LCOMMAND+RCOMMAND
bne report_acid_pois
move.b #90,hlaskuri
moveq #0,d0
move.w #224,d1
move.l #happo_i,a1
bsr piirra_image
bsr kirjoita_happo
bset.b #0,kanto
moveq #16,d0
move.w #240,d1
move.l #kranaatti_i,a1
bsr piirra_image
bset.b #2,kanto
moveq #0,d0
move.w #240,d1
move.l #myrkky_i,a1
bsr piirra_image
moveq #0,d0
report_acid_pois
rts
report_info
movem d1-d7/a0-a6,-(sp)
bsr game_info_screen
bsr info_clear
movem (sp)+,d1-d7/a0-a6
moveq #0,d0
rts
report_pause
movea.l rport,a1
movea.l grbase,a6
moveq #0,d0
jsr _LVOSetAPen(a6)
movea.l rport,a1
movea.l grbase,a6
moveq #100,d0
move.w #246,d1
move.w #319,d2
move.w #255,d3
jsr _LVORectFill(a6)
lea msg11,a0
move.w #msglen11,d7
moveq #116,d0
move.l #254,d1
moveq #13,d6
bsr kirjoita
report_pause_loop
bsr intuimessage
tst.l d0
beq report_pause_loop
cmp.l #RAWKEY,d5
bne report_pause_loop
cmp.b #$19,d4
bne report_pause_loop
; puhdistetaan jäljet
movea.l rport,a1
movea.l grbase,a6
lea msg10,a0
moveq #msglen10,d7
moveq #100,d0
move.l #254,d1
moveq #14,d6
bsr kirjoita
rts
etsi_kenttaos
move.l #kentat,a0 ;kentat os. kenttien osoitteiden alkuun
moveq #0,d0
move.b nkentta,d0
lsl.b #2,d0
move.l 0(a0,d0.w),nkenttaos
rts
etsi_ruutu
;etsittävän ruudun koordinaatit muuttujissa x ja y
;kentän osoite valmiina vakiossa nkenttaos
move.l nkenttaos,a0
moveq #0,d1
move.b y,d1
mulu #10,d1
moveq #0,d0
move.b x,d0
lsr.b #1,d0
add.w d1,d0 ;ruudun tavun offset-arvo d0:ssa
move.b 0(a0,d0.w),d0 ;d0:ssa on ruudun tavu
move.b x,d1
and.b #1,d1
cmp.b #1,d1
beq.s etsi_ruutu_pois
lsr.b #4,d0 ;parilliselle x:arvolle 4 ylintä bittiä
etsi_ruutu_pois
and.b #$f,d0 ;lopullinen arvo on d0:ssa
; cmp.b #15,d0
; bne etsi_ruutu_pois2
; move.b #1,d0
etsi_ruutu_pois2
rts
spriteliikku_ohjaus
moveq #0,d0
sub.w #1,solaskuri ;määrätään, kuinka usein spriteä liikutetaan
and.w #$7f,solaskuri
bne spriteliikku_pois2
bsr jekku_testit
bsr report_mouse
tst.l d0
bne spriteliikku_pois2
spriteliikku
bsr energy_loss
bsr gaboom
cmp.b #0,suunta
beq.s spriteliikku_pois
move.b suunta,c_suunta
move.b #9,v_sprite
spriteliikku_pois
tst.b c_suunta
beq spriteliikku_b
move.w c_spritex,d0
move.w c_spritey,d1
move.b c_suunta,sprite_suunta
bsr suunta_lupa
move.l #0,a0
move.l #sprite1,a1
move.w c_spritex,d0
move.w c_spritey,d1
move.l grbase,a6
jsr _LVOMoveSprite(a6)
bsr sprite_paikka
bsr etsi_ruutu
cmp.b #3,d0
bne.s spriteliikku_a
cmp.b #5,kivet
bne.s spriteliikku_b
bsr uusi_kentta
spriteliikku_a
cmp.b #5,d0
bne.s spriteliikku_b
bsr kallot
spriteliikku_b
clr.l d0
spriteliikku_pois2
rts
sprite_paikka
move.w c_spritex,d0
add.w #7,d0
lsr.w #4,d0
move.b d0,x
move.w c_spritey,d0
add.w #7,d0
lsr.w #4,d0
move.b d0,y
rts
suunta_ruudut
;ruudut paikoissa x,y ja xm,ym
;move.w c_spritex,d0
;move.w c_spritey,d1
move.w d0,d2
move.w d1,d3
cmp.b #1,sprite_suunta
bne.s suuntar_a
;suunta oikealle
add.w #15,d0
add.w #1,d1
add.w #15,d2
add.w #14,d3
rts
suuntar_a
cmp.b #$81,sprite_suunta
bne.s suuntar_b
;suunta vasemmalle
add.w #1,d1
add.w #14,d3
rts
suuntar_b
cmp.b #2,sprite_suunta
bne.s suuntar_c
;suunta alas
add.w #15,d1
add.w #14,d2
add.w #15,d3
add.w #1,d0
rts
suuntar_c
;suunta ylös
add.w #1,d0
add.w #14,d2
rts
suunta_xy
bsr suunta_ruudut
lsr.w #4,d0
move.b d0,x
lsr.w #4,d1
move.b d1,y
lsr.w #4,d2
move.b d2,xm
lsr.w #4,d3
move.b d3,ym
bsr etsi_ruutu
rts
suunta_lupa
bsr suunta_xy
bsr pompotus
cmp.b #1,d0
beq.s suunta_loppu
move.b xm,x
move.b ym,y
bsr etsi_ruutu
bsr pompotus
cmp.b #1,d0
beq.s suunta_loppu
move.w c_spritex,d1
move.w c_spritey,d2
move.b c_suunta,d0
bsr vars_sliikku
move.w d1,c_spritex
move.w d2,c_spritey
suunta_loppu
bsr spritehidastuvuus
rts
pompotus
cmp.b #$a,d0
bne.s pompotus_loppu
bsr do_voice_boing
bchg.b #7,suunta
move.b c_suunta,d1
andi.b #$7f,d1
andi.b #$80,suunta
add.b d1,suunta
move.b #$c,v_sprite
move.b #1,d0
pompotus_loppu
rts
vars_sliikku
sub.b #1,nlaskuri ;vähennetään nopeuslaskuria
bne.s vars_sloppu ;ellei nollautunut, mennään y:hyn
bsr spriten_liike
move.b v_sprite,d0
move.b #$b,nlaskuri
sub.b d0,nlaskuri
vars_sloppu
rts
spriten_liike
;suunta d0:ssa, x-paikka d1:ssä, y-paikka d2:ssä
move.w #-1,d4
btst #7,d0
bne spriten_x
move.w #1,d4
spriten_x
btst #0,d0
beq spriten_y
add.w d4,d1
rts
spriten_y
add.w d4,d2
rts
spritehidastuvuus
bsr sprite_paikka ;nopeuden pudotus 'suossa'
bsr etsi_ruutu
cmp.b #2,d0
bne.s spriteh_a
and.b #3,v_sprite
spriteh_a
sub.b #1,vhlaskuri ;määritellään spriten automaattinen hidastuvuus
and.b #$3f,vhlaskuri
bne spriteh_loppu
tst.b v_sprite
beq.s spriteh_stop
sub.b #1,v_sprite
rts
spriteh_stop
move.b #0,c_suunta
spriteh_loppu
rts
uusi_kentta
add.b #1,nkentta
bsr kirjoita_taso
bsr tee_kentta
cmp.b #$14,nkentta
bne uusi_kentta_2
bsr passed
uusi_kentta_2
move.b #0,kivet
move.b #0,kanto
move.b #0,hlaskuri
bsr esine_poisto
move.w #255,energia
bsr energia_mittari
move.w #0,jekut
move.w #321,d0
move.l #0,a0
move.l #sprite2,a1
move.l grbase,a6
jsr _LVOMoveSprite(a6)
rts
ota_esine
move.b #0,v_sprite ; pysäytetään sprite
bsr sprite_paikka
bsr etsi_ruutu
cmp.b #3,d0
bls ei_esinetta
cmp.b #5,d0
beq ei_esinetta
cmp.b #8,d0
beq ei_esinetta
move.l d0,-(sp)
bsr do_voice_bell
bsr pyyhi_ruutu
move.l (sp)+,d0
cmp.b #4,d0
bne.s ota_pullo
add.b #1,kivet
rts
ota_pullo
cmp.b #6,d0
bne.s ota_kranaatti
addi.w #127,energia
cmp.w #$ff,energia
bls.s ota_pallo_a
move.w #$ff,energia
ota_pallo_a
bsr energia_mittari
rts
ota_kranaatti
cmp.b #7,d0
bne.s ota_myrkky
btst.b #0,kanto
bne.s ota_myrkky
bset.b #0,kanto
moveq #16,d0
move.w #240,d1
move.l #kranaatti_i,a1
bsr piirra_image
rts
ota_myrkky
cmp.b #9,d0
bne.s ota_happo
bset.b #2,kanto
moveq #0,d0
move.w #240,d1
move.l #myrkky_i,a1
bsr piirra_image
rts
ota_happo
cmp.b #$b,d0
bne.s ota_pois
addi.b #4,hlaskuri
moveq #0,d0
move.w #224,d1
move.l #happo_i,a1
bsr piirra_image
bsr kirjoita_happo
rts
ota_pois
rts
piirra_image
movea.l rport,a0
movea.l intbase,a6
jsr _LVODrawImage(a6)
rts
ei_esinetta
bsr do_voice_hit
rts
ota_kr
bsr sprite_paikka
btst.b #0,kanto
beq.s ota_kr_pois
moveq #0,d0
move.l rport,a1
move.l grbase,a6
jsr _LVOSetAPen(a6)
moveq #16,d0
move.w #240,d1
moveq #31,d2
move.w #255,d3
move.l rport,a1
move.l grbase,a6
jsr _LVORectFill(a6)
bclr.b #0,kanto
bset.b #1,kanto
move.b x,kpaikkax
move.b y,kpaikkay
moveq #7,d0
bsr draw_box
ota_kr_pois
rts
pyyhi_ruutu
move.l grbase,a6
move.l rport,a1
moveq #0,d0
jsr _LVOSetAPen(a6)
moveq #0,d0 ; nollataan ensin rekisteri, koska x tyyppiä byte
moveq #0,d1 ; nollataan ensin rekisteri, koska y tyyppiä byte
move.b x,d0
move.b y,d1
lsl.w #4,d0
lsl.w #4,d1
move.w d0,d2
add.w #15,d2
move.w d1,d3
add.w #15,d3
move.l rport,a1
jsr _LVORectFill(a6)
bsr nollaa_taulukko
rts
nollaa_taulukko
bsr etsi_kenttaos
move.l nkenttaos,a0
moveq.l #0,d0
move.b x,d0
lsr.b #1,d0
moveq.l #0,d1
move.b y,d1
mulu #10,d1
add.b d1,d0
btst.b #0,x
beq.s nollaa_p
and.b #$f0,0(a0,d0.w)
bra nollaa_pois
nollaa_p
and.b #$f,0(a0,d0.w)
nollaa_pois
rts
energia_mittari
;piirretään muuttujassa energia oleva luku palkkina
movea.l rport,a1
moveq #12,d0
move.l grbase,a6
jsr _LVOSetAPen(a6)
move.l rport,a1
moveq #40,d0
move.w #226,d1
jsr _LVOMove(a6)
move.l rport,a1
moveq #4,d0
move.l #epoints,a0
jsr _LVOPolyDraw(a6)
moveq #0,d0
move.l rport,a1
jsr _LVOSetAPen(a6)
moveq #41,d0
move.w #227,d1
move.w #296,d2
move.w #233,d3
move.l rport,a1
jsr _LVORectFill(a6)
moveq #1,d0
move.l rport,a1
jsr _LVOSetAPen(a6)
moveq #41,d0
move.w #227,d1
move.w d0,d2
move.w #233,d3
add.w energia,d2
move.l rport,a1
jsr _LVORectFill(a6)
move.l rport,a1
moveq #0,d0
jsr _LVOSetAPen(a6)
rts
kallot
move.b #0,v_sprite
move.b #0,suunta
sub.b #1,elaskuri
and.b #$f,elaskuri
bne.s kallot_pois
tst.b hlaskuri
bne happo_laskut
lsr.w energia
lsr.w energia
bsr do_voice_aaah
bsr energia_mittari
move.l intbase,a6
move.l cscreen,a0
jsr _LVODisplayBeep(a6)
kallot_pois
rts
happo_laskut
subi.b #1,hlaskuri
bsr kirjoita_happo
bsr do_voice_chiump
rts
energy_loss
tst.w energia
beq.s energy_loppu
sub.w #1,evlaskuri
and.w #$1ff,evlaskuri
bne kallot_pois
sub.w #1,energia
bsr energia_mittari
rts
energy_loppu
move.b #1,lopetus
rts
gaboom
btst.b #1,kanto
beq gaboom_loppu
sub.b #1,klaskuri
and.b #$7f,klaskuri
bne gaboom_loppu
bsr do_voice_buum
move.l rport,a1
move.b #0,d0
move.l grbase,a6
jsr _LVOSetAPen(a6)
move.b kpaikkax,x
move.b kpaikkay,y
bsr pyyhi_ruutu
add.b #1,x
bsr pyyhi_ruutu
sub.b #2,x
bsr pyyhi_ruutu
add.b #1,x
add.b #1,y
bsr pyyhi_ruutu
sub.b #2,y
bsr pyyhi_ruutu
bclr.b #1,kanto
gaboom_loppu
rts
j1_kohtaaminen
btst #0,jekut
beq j1_kohtaaminen_loppu
bsr sprite_paikka
move.w j1_spritex,d0
add.w #7,d0
lsr.w #4,d0
cmp.b x,d0
bne j1_kohtaaminen_loppu
move.w j1_spritey,d0
add.w #7,d0
lsr.w #4,d0
cmp.b y,d0
bne j1_kohtaaminen_loppu
move.b #0,v_sprite
btst.b #2,kanto
beq.s j1_koht_jatko
moveq #0,d0
move.l rport,a1
move.l grbase,a6
jsr _LVOSetAPen(a6)
moveq #0,d0
move.w #240,d1
moveq #15,d2
move.w #255,d3
move.l rport,a1
move.l grbase,a6
jsr _LVORectFill(a6)
bsr do_voice_chiump
bclr.b #2,kanto
bclr #0,jekut
move.l #0,a0
move.l #sprite2,a1
move.w #321,d0
move.l grbase,a6
jsr _LVOMoveSprite(a6)
rts
j1_koht_jatko
sub.b #1,elaskuri
and.b #$f,elaskuri
bne.s j1_kohtaaminen_loppu
lsr.w energia
bsr do_voice_aaah
bsr energia_mittari
move.l intbase,a6
move.l cscreen,a0
jsr _LVODisplayBeep(a6)
j1_kohtaaminen_loppu
rts
j1_suunta_lupa
move.w j1_spritex,d0
move.w j1_spritey,d1
bsr suunta_xy
cmp.b #1,d0
beq.s j1_suunta_lloppu
cmp.b #5,d0
beq.s j1_suunta_lloppu
cmp.b #8,d0
beq.s j1_suunta_lloppu
cmp.b #10,d0
beq.s j1_suunta_lloppu
move.b xm,x
move.b ym,y
bsr etsi_ruutu
cmp.b #1,d0
beq.s j1_suunta_lloppu
cmp.b #5,d0
beq.s j1_suunta_lloppu
cmp.b #8,d0
beq.s j1_suunta_lloppu
cmp.b #10,d0
beq.s j1_suunta_lloppu
clr.l d0
j1_suunta_lloppu
rts
jekku_testit
btst #0,jekut
bne.s jekku_loppu
sub.w #1,j1laskuri
and.w #$3ff,j1laskuri
bne.s jekku_loppu
bset #0,jekut
move.l #j1_koord,a0
moveq #0,d0
move.b nkentta,d0
lsl.w #2,d0
move.w 0(a0,d0.w),d1
move.w 2(a0,d0.w),d0
move.w d1,j1_spritex
move.w d0,j1_spritey
jekku_loppu
rts
jekku_ohjaus
sub.w #1,jekkulaskuri
and.w #$1ff,jekkulaskuri
bne jekku_loppu
bsr j1_kohtaaminen
btst #0,jekut
beq jekku_loppu
bsr jekku1
rts
jekku1
sub.w #1,animlaskuri ; animlaskuri määrää, kuinka usein haukotellaan
and.w #$ff,animlaskuri
bne jekku1_apois1
move.b #-1,frames ; asetetaan animaatio päälle
move.b #0,frame ; frame antaa imagen numeron
move.w #2,framelaskuri ; määrätään haukotuksen nopeus
bsr do_voice_roar
jekku1_apois1
cmp.b #0,frames
beq jekku1_apois2
bsr jekku_animaatio
jekku1_apois2
bsr j1_suunta_valinta
move.b sprite_suunta,d0
tst.b d0
beq.s jekku1_loppu
move.w j1_spritex,d1
move.w j1_spritey,d2
bsr spriten_liike
move.w d1,j1_spritex
move.w d2,j1_spritey
move.w d1,d0
move.w d2,d1
move.l #0,a0
move.l grbase,a6
move.l #sprite2,a1
jsr _LVOMoveSprite(a6)
jekku1_loppu
rts
jekku_animaatio
subq.w #1,framelaskuri ; framelaskuri määrää, kuinka kauan framea näytetään
bne jekku_animaatio_pois
move.w #2,framelaskuri ; määrätään haukotuksen nopeus
moveq #0,d0
move.b frame,d0
lea spritedata2,a2
move.l 0(a2,d0.w),a2 ; haettiin spritedatan osoite
cmp.l #0,a2
beq jekku_animaatio_stop ; viimeinen frame on jo piirretty
move.l #0,a0
move.l #sprite2,a1
move.l grbase,a6
jsr _LVOChangeSprite(a6)
add.b #4,frame
jekku_animaatio_pois
rts
jekku_animaatio_stop
move.b #0,frames
rts
j_c_sprite_erotus
move.w c_spritey,d0
sub.w j1_spritey,d0
bsr abs_wmuunnos
move.w d0,d1
move.w c_spritex,d0
sub.w j1_spritex,d0
bsr abs_wmuunnos
rts
j1_suunta_valinta
bsr j_c_sprite_erotus
cmp.w d0,d1
bls.s j1_suunta_py
move.b #$81,sprite_suunta
move.w c_spritex,d0
cmp.w j1_spritex,d0
beq.s j1_suunta_py
bls.s j1_suunta_a
move.b #1,sprite_suunta
j1_suunta_a
bsr j1_suunta_lupa
tst.w d0
bne.s j1_suunta_py
rts
j1_suunta_py
move.w c_spritey,d1
move.b #$82,sprite_suunta
cmp.w j1_spritey,d1
beq.s j1_suunta_va
bls.s j1_suunta_b
move.b #2,sprite_suunta
j1_suunta_b
bsr j1_suunta_lupa
tst.w d0
bne.s j1_suunta_va
j1_suunta_pois
rts
j1_suunta_va
move.w c_spritex,d0
move.b #$81,sprite_suunta
cmp.w j1_spritex,d0
beq.s j1_suunta_d
bls.s j1_suunta_c
move.b #1,sprite_suunta
j1_suunta_c
bsr j1_suunta_lupa
tst.w d0
beq j1_suunta_pois
j1_suunta_d
move.b #0,sprite_suunta
rts
abs_muunnos
;otetaan itseisarvo d0:sta
tst.b d0
bmi.s abs_m
bra.s abs_p
abs_m
neg.b d0
abs_p
rts
abs_wmuunnos
;otetaan itseisarvo d0:sta
tst.w d0
bmi.s abs_wm
bra.s abs_wp
abs_wm
neg.w d0
abs_wp
rts
pallo_poisto
move.l rport,a1
move.b #0,d0
move.l grbase,a6
jsr _LVOSetAPen(a6)
moveq #0,d0
move.b henget,d0
mulu #18,d0
add.b #28,d0
move.w #240,d1
move.w d0,d2
add.w #16,d2
move.w #255,d3
move.l rport,a1
jsr _LVORectFill(a6)
rts
pallo_piirto
move.b #46,x
pploop
moveq #0,d0
move.b x,d0
move.w #240,d1
move.l #pallo_i,a1
bsr piirra_image
add.b #18,x
cmp.b #100,x
blt pploop
bsr esine_poisto
rts
esine_poisto
move.l rport,a1
move.l grbase,a6
moveq #0,d0
jsr _LVOSetAPen(a6)
move.l rport,a1
move.l grbase,a6
moveq #0,d0
move.w #224,d1
moveq #31,d2
move.w #255,d3
jsr _LVORectFill(a6)
rts
game_over_screen
move.l intbase,a6 ;hiiren pointteri näkyviin
move.l cwindow,a0
move.l pointer2,a1
moveq #16,d0
moveq #16,d1
moveq #0,d2
moveq #0,d3
jsr _LVOSetPointer(a6)
move.l #0,a0
move.l grbase,a6
move.w #321,d0
move.l #sprite2,a1
jsr _LVOMoveSprite(a6)
move.l grbase,a6
move.l rport,a1
moveq #0,d0
jsr _LVOSetAPen(a6)
move.l rport,a1
moveq #0,d0
moveq #0,d1
move.w #319,d2
move.w #255,d3
jsr _LVORectFill(a6)
move.l rport,a1
moveq #9,d0
jsr _LVOSetAPen(a6)
move.l #msg1,a0
move.w #27,d7
move.w #52,d0
move.w #80,d1
moveq #9,d6
bsr kirjoita
move.l #msg2,a0
moveq #3,d7
move.w #68,d0
move.w #140,d1
moveq #9,d6
bsr kirjoita
move.l #msg3,a0
move.w #6,d7
move.w #216,d0
move.w #140,d1
moveq #9,d6
bsr kirjoita
wait_for_click
bsr intuimessage
tst.l d0
beq wait_for_click
cmp.w #$c000,d6
bne wait_for_click
move.l cwindow,a0
move.l $c(a0),d6
move.w d6,d7
swap d6
cmp.w #122,d6
blt wait_for_click
cmp.w #150,d6
bgt wait_for_click
cmp.w #208,d7
blt yes
cmp.w #272,d7
bgt wait_for_click
moveq #0,d0
rts
yes
cmp.w #104,d7
bgt wait_for_click
cmp.w #56,d7
blt wait_for_click
moveq #1,d0
rts
game_info_screen
move.l #0,a0
move.l grbase,a6
move.w #321,d0
move.l #sprite2,a1
jsr _LVOMoveSprite(a6)
move.l #0,a0
move.l grbase,a6
move.w #321,d0
move.l #sprite1,a1
jsr _LVOMoveSprite(a6)
move.l grbase,a6
move.l rport,a1
moveq #0,d0
jsr _LVOSetAPen(a6)
move.l grbase,a6
move.l rport,a1
moveq #0,d0
moveq #0,d1
move.w #319,d2
move.w #223,d3
jsr _LVORectFill(a6)
;*** seuraavaksi kirjoitetaan tekstit
moveq #108,d4
lea info,a4
lea infolen,a3
moveq #0,d7
info_loop
subq #4,d4
move.l d4,d5
lsr.w #2,d5
move.l 0(a4,d4.w),a0 ; tekstin osoite
move.b 0(a3,d5.w),d7 ; tekstin pituus
moveq #0,d0
moveq #8,d1
move.l d4,d5
lsl.l #1,d5
add.l d5,d1
moveq #11,d6
bsr kirjoita
tst.b d4
bne info_loop
;***
wait_for_key
bsr intuimessage
tst.l d0
beq wait_for_key
cmp.w #RAWKEY,d5
bne wait_for_key
btst.l #7,d4
bne wait_for_key
rts
info_clear
;*** palataan peliin
bsr tee_kentta_b
move.l #0,a0
move.l #sprite1,a1
move.w c_spritex,d0
move.w c_spritey,d1
move.l grbase,a6
jsr _LVOMoveSprite(a6)
move.w j1_spritex,d0
move.w j1_spritey,d1
move.l #0,a0
move.l grbase,a6
move.l #sprite2,a1
jsr _LVOMoveSprite(a6)
rts
kirjoita
;d7:ssa on tekstin pituus
;d6:ssa on väri
;a0:ssa on tekstin osoite
;d0:ssa on x-koord.
;d1:ssa on y-koord.
move.l grbase,a6
move.l rport,a1
jsr _LVOMove(a6)
move.l rport,a1
move.l d6,d0
jsr _LVOSetAPen(a6)
move.l rport,a1
move.w d7,d0
jsr _LVOText(a6)
rts
alusta_kentta
;muistin varaus
move.l #2940,d0 ; 21 kenttää
moveq.l #0,d1
movea.l 4,a6
jsr _LVOAllocMem(a6)
;muistin osoite on d0:ssa
tst.l d0
beq.s ei_kartta_muistia
move.l d0,kenttac
lea kentat,a0
moveq #20,d1
alusta_kentta_loop
move.l d0,(a0)
add.l #140,d0
add.l #4,a0
dbra d1,alusta_kentta_loop
alusta_kentta_pois
rts
ei_kartta_muistia
lea msg6,a1
move.l #msglen6,d3
bsr valitukset_ei_tiedosto
bsr GURU
moveq #0,d0
bra.s alusta_kentta_pois
Lataa
move.l a6,-(sp)
; Argumentit : (name,buffer,length)
; tiedoston nimen osoite a0:ssa
; nimen pituus d1:ssä
; tiedoston koko d6:ssa
; muistin osoite d7:ssa
; avataan tiedosto
; lea maps,a0
move.l d1,nimipituus ; nimen pituus myhempää kirjoittamista varten
move.l a0,tiedosto ; myöhempää nimen kirjoittamista varten
move.l a0,d1 ; Nimen osoite : name
move.l #MODE_OLDFILE,d2 ; accessMode
movea.l dosbase,a6
jsr _LVOOpen(a6)
tst.l d0 ; jos tulos on nolla, tiedostoa ei ole
beq.s ei_tiedostoa
; tiedosto saatiin avattua
move.l d0,filehandle ;tiedoston tunnus muistiin
move.l d0,d1
move.l d7,d2 ; osoite muistiin, jonne kirjoitetaan : buffer
move.l d6,d3 ; muistiblokin koko : length
movea.l dosbase,a6
jsr _LVORead(a6)
cmp.l #0,d0
beq.s ei_tiedostoa
cmp.l #-1,d0
beq.s ei_tiedostoa
; suljetaan tiedosto
move.l filehandle,d1
movea.l dosbase,a6
jsr _LVOClose(a6)
moveq #-1,d0
lataa_loppu
move.l (sp)+,a6
rts
ei_tiedostoa
move.l tiedosto,a1
move.l nimipituus,d3
bsr valitukset
bsr GURU
moveq #0,d0
bra.s lataa_loppu
valitukset
; a1:ssa tiedoston nimi, d3:ssa nimenpituus
moveq #0,d5
lea valitus,a0
lea msg7b,a2 ; "Tiedosto "
move.w #msglen7b,d0
move.w d0,d5
valitukset_loop1
move.b -1(a2,d0.w),-1(a0,d0.w)
subq #1,d0
bne valitukset_loop1
add.w d3,d5
move.l d5,d4
valitukset_loop2
move.b -1(a1,d3.w),-1(a0,d4.w)
subq #1,d4
subq #1,d3
bne valitukset_loop2
lea msg7,a2 ; " ei avaudu."
move.w #msglen7,d0
add.w d0,d5
move.l d5,d4
valitukset_loop3
move.b -1(a2,d0.w),-1(a0,d4.w)
subq #1,d4
subq #1,d0
bne valitukset_loop3
bsr lisaa_hiiri
rts
valitukset_ei_tiedosto
; a1:ssa teksti, d3:ssa tekstinpituus
moveq #0,d5
lea valitus,a0
move.w d3,d5
valitukset_et_loop1
move.b -1(a1,d3.w),-1(a0,d3.w)
subq #1,d3
bne valitukset_et_loop1
bsr lisaa_hiiri
rts
lisaa_hiiri
lea msg12,a2
move.w #msglen12,d0
add.w d0,d5
move.l d5,d4
valitukset_loop4
move.b -1(a2,d0.w),-1(a0,d4.w)
subq #1,d4
subq #1,d0
bne valitukset_loop4
rts
GURU
; d0:ssa AlertNumber,a0:ssa String, d1:ssä Height
movea.l intbase,a6
moveq #0,d0
moveq #28,d1
jsr _LVODisplayAlert(a6)
rts
;******
init_audio
move.l #ioa_SIZEOF,d0
move.l #(MEMF_CLEAR!MEMF_CHIP),d1
move.l 4,a6
jsr _LVOAllocMem(a6)
move.l d0,aumsg
beq ei_chip_muistia
move.l #39184,d0
move.l #MEMF_CHIP,d1
move.l 4,a6
jsr _LVOAllocMem(a6)
move.l d0,audiodata
beq ei_chip_muistia
lea bell,a0
move.l #belllen,d1
move.l #16358,d6
move.l audiodata,d7
move.l d7,voice_bell
bsr Lataa
tst.l d0
beq init_audio_pois
lea aaah,a0
move.l #aaahlen,d1
add.l d6,d7
move.l d7,voice_aaah
move.l #2688,d6
bsr Lataa
tst.l d0
beq init_audio_pois
lea hit,a0
move.l #hitlen,d1
add.l d6,d7
move.l d7,voice_hit
move.l #616,d6
bsr Lataa
tst.l d0
beq init_audio_pois
lea buum,a0
move.l #buumlen,d1
add.l d6,d7
move.l d7,voice_buum
move.l #7634,d6
bsr Lataa
tst.l d0
beq init_audio_pois
lea boing,a0
move.l #boinglen,d1
add.l d6,d7
move.l d7,voice_boing
move.l #3544,d6
bsr Lataa
tst.l d0
beq init_audio_pois
lea chiump,a0
move.l #chiumplen,d1
add.l d6,d7
move.l d7,voice_chiump
move.l #4912,d6
bsr Lataa
tst.l d0
beq init_audio_pois
lea roar,a0
move.l #roarlen,d1
add.l d6,d7
move.l d7,voice_roar
move.l #3432,d6
bsr Lataa
tst.l d0
beq init_audio_pois
move.l #49568,d0
move.l #MEMF_CHIP,d1
move.l 4,a6
jsr _LVOAllocMem(a6)
move.l d0,tddupdata
beq ei_chip_muistia
lea tddup,a0
move.l #tdduplen,d1
move.l d0,d7
move.l d7,voice_tddup
move.l #49568,d6
bsr Lataa
tst.l d0
beq init_audio_pois
move.l #1252,d0
move.l #MEMF_CHIP,d1
move.l 4,a6
jsr _LVOAllocMem(a6)
move.l d0,imagedata
beq ei_chip_muistia
lea image,a0
move.l #imagelen,d1
move.l d0,d7
move.l d0,pointer
add.l #12,d0
move.l d0,spritedata1
add.l #72,d0
move.l d0,spritedata2a
move.l d0,sprite2
add.l #72,d0
move.l d0,spritedata2b
move.l d0,spritedata2bb
add.l #72,d0
move.l d0,spritedata2c
move.l d0,spritedata2cc
add.l #72,d0
move.l d0,spritedata2d
move.l d0,spritedata2dd
add.l #72,d0
move.l d0,spritedata2e
add.l #72,d0
move.l d0,pointer2
add.l #72,d0
move.l d0,suo_id
add.l #32,d0
move.l d0,exit_id
add.l #64,d0
move.l d0,muuri_id
add.l #64,d0
move.l d0,kivi_id
add.l #64,d0
move.l d0,kallo_id
add.l #64,d0
move.l d0,pullo_id
add.l #64,d0
move.l d0,kranaatti_id
add.l #64,d0
move.l d0,portti_id
add.l #64,d0
move.l d0,pallo_id
add.l #64,d0
move.l d0,myrkky_id
add.l #64,d0
move.l d0,linko_id
add.l #64,d0
move.l d0,happo_id
move.l #1252,d6
bsr Lataa
tst.l d0
beq init_audio_pois
move.l aumsg,a1
lea allocbits,a0
move.l a0,ioa_Data(a1)
move.l #4,ioa_Length(a1)
move.l #0,MN_REPLYPORT(a1)
move.b #127,LN_PRI(a1)
move.b #ADIOF_NOWAIT,IO_FLAGS(a1)
lea audioname,a0
moveq #0,d0
moveq #0,d1
move.l 4,a6
jsr _LVOOpenDevice(a6)
tst.l d0
bne ei_audiota
move.l aumsg,a0
move.l IO_UNIT(a0),unit
; move.l #0,MN_REPLYPORT(a0)
move.l IO_DEVICE(a0),audev
move.l ioa_AllocKey(a0),allockey
moveq #-1,d0
init_audio_pois
rts
ei_audiota
lea amsg1,a1
move.l #amsglen1,d3
bsr valitukset_ei_tiedosto
bsr GURU
moveq #0,d0
bra.s init_audio_pois
ei_chip_muistia
lea msg5,a1
move.l #msglen5,d3
bsr valitukset_ei_tiedosto
bsr GURU
moveq #0,d0
bra.s init_audio_pois
voice_out
; annetaan a0:ssa osoite messagedataan
moveq #13,d1
move.l aumsg,a1
voice_out_loop
move.b 0(a0,d1.w),ioa_Data(a1,d1.w)
dbra d1,voice_out_loop
; move.l audiodata,ioa_Data(a1)
; move.w allockey,ioa_AllocKey(a1)
move.w #CMD_WRITE,IO_COMMAND(a1)
; move.l unit,IO_UNIT(a1)
move.b #(ADIOF_NOWAIT!ADIOF_PERVOL),IO_FLAGS(a1)
move.l aumsg,a1
move.l a1,-(sp)
jsr _BeginIO
move.l (sp)+,a1
rts
do_voice_bell
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_bell,a0
bsr voice_out
rts
do_voice_aaah
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_aaah,a0
bsr voice_out
rts
do_voice_hit
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_hit,a0
bsr voice_out
rts
do_voice_buum
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_buum,a0
bsr voice_out
rts
do_voice_boing
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_boing,a0
bsr voice_out
rts
do_voice_chiump
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_chiump,a0
bsr voice_out
rts
do_voice_roar
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_roar,a0
bsr voice_out
rts
do_voice_tddup
move.l aumsg,a1
move.l 4,a6
jsr _LVOAbortIO(a6)
lea voice_tddup,a0
bsr voice_out
rts
free_audio
move.l aumsg,a1
move.l audev,d1
tst.l d1
beq free_audio_pois
move.l 4,a6
; jsr _LVOAbortIO(a6)
; move.w allockey,ioa_AllocKey(a1)
move.w #ADCMD_FREE,IO_COMMAND(a1)
move.b #IOF_QUICK,IO_FLAGS(a1)
; move.l unit,IO_UNIT(a1)
move.l 4,a6
jsr _LVODoIO(a6)
move.l aumsg,a1
move.l 4,a6
jsr _LVOCloseDevice(a6)
free_audio_pois
rts
;******
VapautaMuistit
move.l cwindow,a0
cmpa.l #0,a0
beq VM0
move.l intbase,a6
jsr _LVOCloseWindow(a6)
VM0
move.l cscreen,a0
cmpa.l #0,a0
beq VM1
; move.l intbase,a6
jsr _LVOCloseScreen(a6)
VM1
move.l kenttac,a1
cmpa.l #0,a1
beq VM2
move.l #2940,d0
move.l 4,a6
jsr _LVOFreeMem(a6)
VM2
move.l aumsg,a1
move.l #ioa_SIZEOF,d0
cmpa.l #0,a1
beq VM7
; move.l 4,a6
jsr _LVOFreeMem(a6)
VM7
move.l audiodata,a1
move.l #39184,d0
cmpa.l #0,a1
beq VM8
; move.l 4,a6
jsr _LVOFreeMem(a6)
VM8
move.l tddupdata,a1
move.l #49568,d0
cmpa.l #0,a1
beq VM9
; move.l 4,a6
jsr _LVOFreeMem(a6)
VM9
move.l imagedata,a1
move.l #1252,d0
cmpa.l #0,a1
beq VMA
; move.l 4,a6
jsr _LVOFreeMem(a6)
VMA
rts
;**************************************************
; DATA ALUE
henget dc.b 0
addr dc.l 0
lenght dc.l 0
kanta dc.l 0
returnmsg dc.l 0
string dc.b '********',32,10
intname dc.b 'intuition.library',0
dosname dc.b 'dos.library',0
grname dc.b 'graphics.library',0
audioname dc.b 'audio.device',0
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
dc.l 0,0 ; mahtuu 128 merkkiä
intbase ds.l 1
newwindow
dc.w 0
dc.w 0
dc.w 320
dc.w 256
dc.b -1
dc.b -1
dc.l MOUSEBUTTONS!MOUSEMOVE!RAWKEY!DELTAMOVE
dc.l REPORTMOUSE!BORDERLESS!ACTIVATE!RMBTRAP
dc.l 0
dc.l 0
dc.l 0
dc.l 0 ;screen addr
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w $f
newscreen
dc.w 0
dc.w 0
dc.w 320
dc.w 256
dc.w 4
dc.b 0
dc.b 1
dc.w 0
dc.w $f
dc.l 0
dc.l 0
dc.l 0
dc.l 0
suo_i ;kynät 0 ja 2
dc.w 0,0
dc.w 16,16,1
suo_id dc.l 0
dc.b 2,0
dc.w 0,0
exit_i ;kynät 0, 1, 4 ja 5
dc.w 0,0
dc.w 16,16,2
exit_id dc.l 0
dc.b 5,0
dc.w 0,0
muuri_i ;kynät 1, 3, 5 ja 7
dc.w 0,0
dc.w 16,16,2
muuri_id dc.l 0
dc.b 6,1
dc.w 0,0
kivi_i ;kynät 0, 4, 8 ja 12
dc.w 0,0
dc.w 16,16,2
kivi_id dc.l 0
dc.b 12,0
dc.w 0,0
kallo_i ;kynät 0, 4, 8 ja 12
dc.w 0,0
dc.w 16,16,2
kallo_id dc.l 0
dc.b 12,0
dc.w 0,0
pullo_i ;kynät 0, 2, 8 ja 10
dc.w 0,0
dc.w 16,16,2
pullo_id dc.l 0
dc.b 10,0
dc.w 0,0
kranaatti_i ;kynät 0, 2, 4 ja 6
dc.w 0,0
dc.w 16,16,2
kranaatti_id dc.l 0
dc.b 6,0
dc.w 0,0
portti_i ;kynät 0, 1, 4 ja 5
dc.w 0,0
dc.w 16,16,2
portti_id dc.l 0
dc.b 5,0
dc.w 0,0
pallo_i ;kynät 0, 4, 8 ja 12
dc.w 0,0
dc.w 16,16,2
pallo_id dc.l 0
dc.b 12,0
dc.w 0,0
myrkky_i ;kynät 0, 1, 8 ja 9
dc.w 0,0
dc.w 16,16,2
myrkky_id dc.l 0
dc.b 9,0
dc.w 0,0
linko_i ;kynät 12, 13, 14 ja 15
dc.w 0,0
dc.w 16,16,2
linko_id dc.l 0
dc.b 3,12
dc.w 0,0
happo_i ;kynät 9, 11, 13 ja 15
dc.w 0,0
dc.w 16,16,2
happo_id dc.l 0
dc.b 6,9
dc.w 0,0
spritedata2
spritedata2b dc.l 0
spritedata2c dc.l 0
spritedata2d dc.l 0
spritedata2e dc.l 0
spritedata2dd dc.l 0
spritedata2cc dc.l 0
spritedata2bb dc.l 0
spritedata2a dc.l 0
dc.l 0
sprite1
spritedata1 dc.l 0
dc.w 16
dc.w 20,20,2
cnop 0,2
sprite2
dc.l 0
dc.w 16
dc.w 20,20,3
sprite0
pointer dc.l 0
dc.w 1
dc.w 20,20,1
kentat
dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
colormap
dc.w $0333,$0d86,$0111,$0a64
dc.w $0000,$0742,$0353,$0420
dc.w $023f,$0ff3,$081f,$01f6
dc.w $0fff,$0800,$0f70,$0333
dc.w $0a64,$0cff,$019e,$0f90
dc.w $0444,$0002,$0779,$0ddf
dc.w $0555,$0002,$0779,$0ddf
dc.w $0999,$0002,$0779,$0ddf
epoints
dc.w 297,226
dc.w 297,234
dc.w 40,234
dc.w 40,226
box_images
dc.l muuri_i ; image n:o $1
dc.l suo_i ; image n:o $2
dc.l exit_i ; image n:o $3
dc.l kivi_i ; image n:o $4
dc.l kallo_i ; image n:o $5
dc.l pullo_i ; image n:o $6
dc.l kranaatti_i ; image n:o $7
dc.l portti_i ; image n:o $8
dc.l myrkky_i ; image n:o $9
dc.l linko_i ; image n:o $A
dc.l happo_i ; image n:o $B
j1_koord
dc.w 18,18
dc.w 144,128
dc.w 18,80
dc.w 288,160
dc.w 192,18
dc.w 160,192
dc.w 192,64
dc.w 144,48
dc.w 160,48
dc.w 16,128
dc.w 16,16
dc.w 32,32
dc.w 192,80
dc.w 64,160
dc.w 208,192
dc.w 240,96
dc.w 176,112
dc.w 240,32
dc.w 160,48
dc.w 16,176
dc.w 16,128
kenttac ds.l 1
filehandle dc.l 0
tiedosto dc.l 0
nimipituus dc.l 0
dosbase ds.l 1
grbase ds.l 1
cscreen ds.l 1
cwindow ds.l 1
rport ds.l 1
vport ds.l 1
dloop dc.l 0
x dc.b 0
y dc.b 0
nkentta dc.b 0
numsprite dc.b 0,0,0
nkenttaos dc.l 0
ym dc.l 0
xm dc.l 0
kivet dc.b 0
energia dc.w 255
msg1 dc.b 'Do you want to play again ?'
msg2 dc.b 'YES'
msg3 dc.b '..no..'
;********** GAME CONTROL DATA ************
suunta dc.b 0
sprite_suunta dc.b 0
c_suunta dc.b 0
c_spritex dc.w 321
c_spritey dc.w 0
a_spritex dc.w 0
a_spritey dc.w 0
j1_spritex dc.w 321
j1_spritey dc.w 0
v_sprite dc.b 0
nlaskuri dc.b 1
vhlaskuri dc.b 0
solaskuri dc.w 0
txlaskuri dc.b 0
elaskuri dc.b 0
hlaskuri dc.b 0
evlaskuri dc.w 0
klaskuri dc.b 0
j1laskuri dc.w 0
jekkulaskuri dc.w 0
jekut dc.w 0
kpaikkax dc.b 0
kpaikkay dc.b 0
lopetus dc.b 0
kanto dc.b 0
;********************
audiodata dc.l 0
tddupdata dc.l 0
imagedata dc.l 0
audev dc.l 0
unit dc.l 0
aumsg dc.l 0
allockey dc.w 0
allocbits dc.b 1,2,4,8
animlaskuri dc.w 0
framelaskuri dc.w 0
frames dc.b 0
frame dc.b 0
voice_bell
dc.l 0 ; ioa_Data
dc.l 16358 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_aaah
dc.l 0 ; ioa_Data
dc.l 2688 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_hit
dc.l 0 ; ioa_Data
dc.l 616 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_buum
dc.l 0 ; ioa_Data
dc.l 7634 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_boing
dc.l 0 ; ioa_Data
dc.l 3544 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_chiump
dc.l 0 ; ioa_Data
dc.l 4912 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_roar
dc.l 0 ; ioa_Data
dc.l 3432 ; ioa_Length
dc.w 300 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
voice_tddup
dc.l 0 ; ioa_Data
dc.l 49568 ; ioa_Length
dc.w 130 ; ioa_Period
dc.w 63 ; ioa_Volume
dc.w 1 ; ioa_Cycles
amsg1 dc.b 0,208,11,'Can''t open audio.device !',0,1
amsglen1 equ *-amsg1
;**
msg0 dc.b 'DekaQuest V1.0 © Leo Puolamaa May 1991',$0a
msglen0 equ *-msg0
dc.b 0
msg4 dc.b 0,216,11,'Screen won''t open.',0,1
msglen4 equ *-msg4
msg5 dc.b 0,216,11,'Out of CHIP_MEM !',0,1
msglen5 equ *-msg5
msg6 dc.b 0,216,11,'Map memory won''t open.',0,1
msglen6 equ *-msg6
msg7 dc.b ' won''t open.',0,1
msglen7 equ *-msg7
msg7b dc.b 0,172,11,'File '
msglen7b equ *-msg7b
msg8 dc.b 0,216,11,'No sprites !',0,1
msglen8 equ *-msg8
msg9 dc.b 'Level :'
msglen9 equ *-msg9
dc.b 0
msg10 dc.b 'DiamondQuest © Leo Puolamaa'
msglen10 equ *-msg10
dc.b 0
msg11 dc.b 'GAME PAUSED'
msglen11 equ *-msg11
dc.b 0
msg12 dc.b 0,172,21,'Press a mouse button to continue...',0,0
msglen12 equ *-msg12
msg13 dc.b 'Amazing,how on earth did you do it?!'
msglen13 equ *-msg13
dc.b 0
cnop 0,2
info
dc.l info0
dc.l info1
dc.l info2
dc.l info3
dc.l info4
dc.l info5
dc.l info6
dc.l info7
dc.l info8
dc.l info9
dc.l info10
dc.l info11
dc.l info12
dc.l info13
dc.l info14
dc.l info15
dc.l info16
dc.l info17
dc.l info18
dc.l info19
dc.l info20
dc.l info21
dc.l info22
dc.l info23
dc.l info24
dc.l info25
dc.l info26
infolen
dc.b infolen0
dc.b infolen1
dc.b infolen2
dc.b infolen3
dc.b infolen4
dc.b infolen5
dc.b infolen6
dc.b infolen7
dc.b infolen8
dc.b infolen9
dc.b infolen10
dc.b infolen11
dc.b infolen12
dc.b infolen13
dc.b infolen14
dc.b infolen15
dc.b infolen16
dc.b infolen17
dc.b infolen18
dc.b infolen19
dc.b infolen20
dc.b infolen21
dc.b infolen22
dc.b infolen23
dc.b infolen24
dc.b infolen25
dc.b infolen26
info0 dc.b ' «** DiamondQuest **»'
infolen0 equ *-info0
info1 dc.b ' --------------------'
infolen1 equ *-info1
info2 dc.b ' Welcome to the world of games. This'
infolen2 equ *-info2
info3 dc.b 'time you are a grey ball and have just'
infolen3 equ *-info3
info4 dc.b 'entered a great maze to pick up some'
infolen4 equ *-info4
info5 dc.b 'diamonds and get rich. There are 20'
infolen5 equ *-info5
info6 dc.b 'levels each containing five diamonds.'
infolen6 equ *-info6
info7 dc.b 'Exit to the next level becomes available'
infolen7 equ *-info7
info8 dc.b 'after you have collected all diamonds'
infolen8 equ *-info8
info9 dc.b 'on the current level. Although you are'
infolen9 equ *-info9
info10 dc.b 'not immortal, you still have four lives.'
infolen10 equ *-info10
info11 dc.b 'To roll around you drag the mouse to the'
infolen11 equ *-info11
info12 dc.b 'desired direction. To perform some'
infolen12 equ *-info12
info13 dc.b 'important actions you may use these'
infolen13 equ *-info13
info14 dc.b 'commands :'
infolen14 equ *-info14
info15 dc.b ' '
infolen15 equ *-info15
info16 dc.b ' - Left mouse button to pick up things'
infolen16 equ *-info16
info17 dc.b ' - Right button to drop a handgrenade'
infolen17 equ *-info17
info18 dc.b ' - Esc for suicide'
infolen18 equ *-info18
info19 dc.b ' - "p" to start and end pause mode'
infolen19 equ *-info19
info20 dc.b ' - Help for this information'
infolen20 equ *-info20
info21 dc.b ' - Left & right Amiga + ctrl to reset'
infolen21 equ *-info21
info22 dc.b ' '
infolen22 equ *-info22
info23 dc.b ' © Leo Puolamaa June 1991 ,Oulu Finland'
infolen23 equ *-info23
info24 dc.b ' '
infolen24 equ *-info24
info25 dc.b ' '
infolen25 equ *-info25
info26 dc.b ' HIT A KEY...'
infolen26 equ *-info26
maps dc.b 'DQ:maps'
mapslen equ *-maps
dc.b 0
bell dc.b 'DQ:Bell.sound'
belllen equ *-bell
dc.b 0
aaah dc.b 'DQ:Aaah.sound'
aaahlen equ *-aaah
dc.b 0
hit dc.b 'DQ:Hit.sound'
hitlen equ *-hit
dc.b 0
buum dc.b 'DQ:Buum.sound'
buumlen equ *-buum
dc.b 0
boing dc.b 'DQ:Boing.sound'
boinglen equ *-boing
dc.b 0
chiump dc.b 'DQ:Chiump.sound'
chiumplen equ *-chiump
dc.b 0
roar dc.b 'DQ:Roar.sound'
roarlen equ *-roar
dc.b 0
tddup dc.b 'DQ:TDDUP.sound'
tdduplen equ *-tddup
dc.b 0
image dc.b 'DQ:images'
imagelen equ *-image
dc.b 0
pointer2 dc.l 0
end