home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
556b.lha
/
DiamondQuest_v1.1
/
DekaQuest.asm
< prev
next >
Wrap
Assembly Source File
|
1991-09-17
|
49KB
|
2,716 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_bell
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 d6,d0
bne.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 #39912,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 #16462,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 #2792,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 #720,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 #7738,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 #3648,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 #5016,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 #3536,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
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 #39912,d0
cmpa.l #0,a1
beq VM8
; move.l 4,a6
jsr _LVOFreeMem(a6)
VM8
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
dc.l suo_id
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
dc.l exit_id
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
dc.l muuri_id
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
dc.l kivi_id
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
dc.l kallo_id
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
dc.l pullo_id
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
dc.l kranaatti_id
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
dc.l portti_id
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
dc.l pallo_id
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
dc.l myrkky_id
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
dc.l linko_id
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
dc.l happo_id
dc.b 6,9
dc.w 0,0
spritedata2
dc.l spritedata2b
dc.l spritedata2c
dc.l spritedata2d
dc.l spritedata2e
dc.l spritedata2d
dc.l spritedata2c
dc.l spritedata2b
dc.l spritedata2a
dc.l 0
sprite1
dc.l spritedata1
dc.w 16
dc.w 20,20,2
cnop 0,2
sprite2
dc.l spritedata2a
dc.w 16
dc.w 20,20,3
sprite0
dc.l pointer
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
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 16462 ; 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 2792 ; 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 720 ; 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 7738 ; 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 3648 ; 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 5016 ; 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 3536 ; ioa_Length
dc.w 300 ; 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
SECTION sprites,DATA ; ladataan CHIP -muistiin
pointer
dc.w 0,0,0,0,0,0
spritedata1
dc.w 0,0
dc.w $07e0,$0000
dc.w $1db8,$0240
dc.w $285c,$17a0
dc.w $502e,$2fd0
dc.w $478a,$3ff4
dc.w $9fe3,$7ffc,$bff1,$7ffe,$bff3,$7ffc
dc.w $7ffd,$fffa,$7ffb,$fffc,$7ffd,$fffa
dc.w $7ffa,$7ffc
dc.w $3ff2,$7ffc
dc.w $3ff4,$3ff8
dc.w $1ff8,$1fe0
dc.w $07e0,$0780
dc.w 0,0
spritedata2a
dc.w 0,0
dc.w $03e0,$0000
dc.w $1018,$0fe0
dc.w $066c,$3990
dc.w $4e72,$718c
dc.w $4e72,$718c
dc.w $8c31,$f3ce
dc.w $8001,$fffe
dc.w $a005,$fffe
dc.w $a185,$fe7e
dc.w $a3c5,$fc3e
dc.w $b00d,$fffe
dc.w $581a,$7ffc
dc.w $4ff2,$7ffc
dc.w $27e4,$3ff8
dc.w $1008,$1ff0
dc.w $07c0,$07e0
dc.w 0,0
spritedata2b
dc.w 0,0
dc.w $03e0,$0000
dc.w $1018,$0fe0
dc.w $066c,$3990
dc.w $4e72,$718c
dc.w $4e72,$718c
dc.w $8c31,$f3ce
dc.w $8001,$fffe
dc.w $a185,$fe7e
dc.w $a3c5,$fc3e
dc.w $b00d,$fffe
dc.w $b81d,$fffe
dc.w $5ffa,$7ffc
dc.w $4ff2,$7c3c
dc.w $27e4,$3ff8
dc.w $1008,$1ff0
dc.w $07c0,$07e0
dc.w 0,0
spritedata2c
dc.w 0,0
dc.w $03e0,$0000
dc.w $1018,$0fe0
dc.w $066c,$3990
dc.w $4e72,$718c
dc.w $4e72,$718c
dc.w $8c31,$f3ce
dc.w $8181,$fe7e
dc.w $a3c5,$fc3e
dc.w $b00d,$fffe
dc.w $b81d,$eff6
dc.w $bffd,$f7ee
dc.w $5ffa,$781c
dc.w $4ff2,$7c3c
dc.w $27e4,$3ff8
dc.w $1008,$1ff0
dc.w $07c0,$07e0
dc.w 0,0
spritedata2d
dc.w 0,0
dc.w $03e0,$0000
dc.w $1018,$0fe0
dc.w $066c,$3990
dc.w $4e72,$718c
dc.w $4e72,$718c
dc.w $8c31,$f3ce
dc.w $e3c7,$fc3e
dc.w $f00f,$fffe
dc.w $f81f,$cff2
dc.w $bffd,$e7e6
dc.w $bffd,$f00e
dc.w $5ffa,$781c
dc.w $4ff2,$7c3c
dc.w $27e4,$3c38
dc.w $17e8,$1ff0
dc.w $07c0,$07e0
dc.w 0,0
spritedata2e
dc.w 0,0
dc.w $03e0,$0000
dc.w $1018,$0fe0
dc.w $066c,$3990
dc.w $4e72,$718c
dc.w $4e72,$718c
dc.w $8db1,$f24e
dc.w $e247,$fdbe
dc.w $f81f,$9ff8
dc.w $ffff,$c7e2
dc.w $bffd,$e006
dc.w $bffd,$f00e
dc.w $5ffa,$781c
dc.w $4ff2,$781c
dc.w $27e4,$3c38
dc.w $17e8,$1c30
dc.w $07c0,$07e0
dc.w 0,0
pointer2
dc.w 0,0
dc.w $8000,$0000,$8000,$4000
dc.w $c000,$2000,$4000,$3000
dc.w $6000,$1800,$3000,$0c00
dc.w $1800,$0600,$0c00,$0300
dc.w $0604,$0184,$030e,$00ce
dc.w $019c,$007c,$00e8,$0038
dc.w $0058,$0068,$00fc,$0004
dc.w $018e,$0146,$0086,$0006
dc.w 0,0
suo_id
dc.w $6262,$1919,$9898,$4646
dc.w $6262,$1919,$9898,$4646
dc.w $6262,$1919,$9898,$4646
dc.w $6262,$1919,$9898,$4646
exit_id
dc.w $0000,$0f60,$3ff8,$2ff8
dc.w $7ff4,$f83e,$f39e,$f21e
dc.w $f31e,$f21e,$f39e,$683c
dc.w $7ff6,$3ff8,$1ff8,$07e0
dc.w $07e0,$17f8,$1f7c,$5f76
dc.w $200e,$77cf,$7c6f,$0def
dc.w $7ce1,$7def,$7c6f,$37c6
dc.w $0ef8,$1efc,$06e0,$0000
muuri_id
dc.w $7fff,$3fff,$1fff,$0fff
dc.w $0fff,$081f,$0a1f,$0b9f
dc.w $0b9f,$0bdf,$081f,$0fff
dc.w $1007,$2003,$4001,$8000
dc.w $ffff,$7fff,$3fff,$1fff
dc.w $000f,$07ef,$062f,$062f
dc.w $062f,$07ef,$07ef,$000f
dc.w $000f,$0007,$0003,$0001
kivi_id
dc.w $0000,$0000,$03c0,$07f0
dc.w $07f8,$03f8,$01fc,$01fc
dc.w $3f00,$3f80,$1fc0,$1fe0
dc.w $0fe0,$03c0,$0000,$0000
dc.w $0000,$0000,$03c0,$0fe0
dc.w $1fe0,$1fc0,$3f80,$3f80
dc.w $00fc,$01fc,$03f8,$07f8
dc.w $07f0,$03c0,$0000,$0000
kallo_id
dc.w $0380,$3f60,$7fd0,$6fe8
dc.w $f5f8,$fedc,$fffc,$ffdc
dc.w $7ff4,$1ffe,$03fd,$03fe
dc.w $0195,$01ff,$00fe,$007c
dc.w $03c0,$3ff0,$7ff8,$7ff8
dc.w $fffc,$fff0,$ffe0,$fff0
dc.w $7ffe,$1fff,$027f,$027f
dc.w $0115,$0195,$00ff,$007e
pullo_id
dc.w $0000,$0180,$0720,$0340
dc.w $0340,$0340,$0340,$0340
dc.w $0fb0,$1fe8,$3f64,$3e24
dc.w $3f44,$1fb8,$03c0,$0000
dc.w $0000,$0000,$07c0,$0380
dc.w $0380,$0380,$0380,$0380
dc.w $0fc0,$1ff0,$3ef8,$3df8
dc.w $3ef8,$1fc0,$0300,$0000
kranaatti_id
dc.w $0000,$0000,$6000,$3000
dc.w $1800,$3e00,$37e0,$27f0
dc.w $27f8,$27f8,$27f8,$33fc
dc.w $11fc,$08fc,$0418,$0200
dc.w $1800,$2800,$1000,$0800
dc.w $0400,$05e0,$0610,$07e8
dc.w $07f4,$06f4,$0774,$039a
dc.w $09ea,$04f8,$0200,$01c0
portti_id
dc.w $0490,$e00e,$e00e,$e24e
dc.w $0000,$0000,$4924,$0000
dc.w $0000,$2492,$0000,$0000
dc.w $0240,$e00e,$e00e,$e92e
dc.w $f49f,$7007,$7007,$1241
dc.w $0000,$0000,$4924,$0000
dc.w $0000,$2492,$0000,$0000
dc.w $f24f,$7007,$7007,$1921
pallo_id
dc.w $07e0,$1db8,$285c,$502e
dc.w $478a,$9fe3,$bff1,$bff3
dc.w $7ffd,$7ffb,$7ffd,$7ffa
dc.w $3ff2,$3ff4,$1ff8,$07e0
dc.w $0000,$0240,$17a0,$2fd0
dc.w $3ff4,$7ffc,$7ffe,$7ffc
dc.w $fffa,$fffc,$fffa,$7ffc
dc.w $7ffc,$3ff8,$1fe0,$0780
myrkky_id
dc.w $0000,$07e0,$07e0,$03c0
dc.w $03c0,$03c0,$0ff0,$3ffc
dc.w $7bbe,$7d7e,$7efe,$7d7e
dc.w $3bbc,$1ff8,$07e0,$0000
dc.w $0000,$07c0,$07c0,$0300
dc.w $0380,$0380,$0fc0,$3ff0
dc.w $7ff8,$6ff8,$7ff8,$6ff8
dc.w $3ff0,$1fe0,$0780,$0000
linko_id
dc.w $ffff,$fcff,$ffff,$fe7f
dc.w $f01f,$f0df,$e34f,$c065
dc.w $a021,$a007,$f00f,$f00f
dc.w $fc3f,$feff,$fe7f,$ffff
dc.w $f00f,$ed37,$de7b,$bdbd
dc.w $7fee,$7f2e,$3cb4,$3b9a
dc.w $59dc,$2d3c,$74fe,$77fe
dc.w $bdbd,$de7b,$ecb7,$f00f
happo_id
dc.w $ffff,$fcff,$fcff,$fcff
dc.w $fe7f,$feff,$f1ff,$c7ff
dc.w $ce6f,$cdaf,$cc2f,$e5bf
dc.w $e7df,$f3ff,$f87f,$ffff
dc.w $ffff,$fc3f,$fc3f,$fc3f
dc.w $fe7f,$fe7f,$f00f,$c003
dc.w $c183,$c243,$c3c3,$e247
dc.w $e007,$f00f,$f81f,$ffff
end