*480
*a000
               org $480
               opt %10101

portA          equ 54016
strig          equ 644

right          equ %00001000
left           equ %00000100
down           equ %00000010
up             equ %00000001


fzstpleft      equ 16
fzstpright     equ 17


pmadres        equ $b000
__zero         equ $f0
_memory        equ __zero+2
reals          equ __zero+4

               lda <pl1
               sta reals
               lda >pl1
               sta reals+1

               jsr init
               jsr dli_on
               jsr translacja

               lda #0
               ldx #0
_clear         sta pmadres+1024,x
               sta pmadres+1280,x
               sta pmadres+1536,x
               sta pmadres+1792,x
               sta msadres,x
               inx
               bne _clear

               lda #3
               sta 53277
               lda #8
               sta 704
               lda #6
               sta 705
               lda #15
               sta 706
               lda #2
               sta 707
               lda #12
               sta 711
               lda 623
               ora #%00010001
               sta 623
               lda >pmadres
               sta 54279


loop           equ *

               lda _fz05
               eor #255
               sta _fz05

        lda _service_nr
        beq _lot
        jsr _joystick
        jsr _main
        jsr _pmxy
        jmp _ptl
_lot    jsr _air_hero
        jsr _pmXY

_ptl           lda 20
_ptl2          cmp 20
               beq _ptl2
               lda _service_nr
               beq _ptl3
               jsr pociski
               jmp _ptl4

_ptl3          jsr _movemissile
               jsr _miskolision
_ptl4          inc licz
               lda licz
               cmp #2
               bne _ptl
               lda #0
               sta licz
               jmp loop

licz dta b(0)

_joystick      equ *

               lda portA
               and #%00001111
               eor #%00001111
               sta _new_joy
               and #down
               bne _air_service

               lda _old_joy
               and #up
               bne _notchange
               lda _new_joy
               sta _old_joy
_notchange     rts




_air_service   equ *

               lda _old_joy
               and #up
               beq _notup
               rts

_notup         lda strig
               beq _yes
               rts

_yes           lda #1
               jsr _Y_rozpisz
               lda #$3c
               jsr _X_rozpisz
               jsr _loc
               bne _yes2
               rts

_yes2          lda _service_nr
               eor #255
               sta _service_nr
               jsr _air_fire
               rts



_skrajna_wart  equ *

               lda _faza_nr
               and #%00000111
               bne _skrexit
               lda _faza_nr
               sec
               sbc #8
               sta _faza_nr
_skrexit       rts



_rig           jmp _right
_lft           jmp _left

_main          equ *

               jsr _ch_obs

               lda _st_move
               beq _m2
               dec _st_move
               lda _faza_nr
               cmp #16
               beq _lft
               cmp #8
               bcs _rig
               bcc _lft

_m2            lda #0
               jsr _drop
               cpy #1
               bne _m3
               rts

_m3            lda _old_joy
               and #right
               bne _rig
               lda _old_joy
               and #left
               bne _lft
               lda _old_joy
               and #up
               bne _up

               lda _faza_nr

               cmp #fzstpleft
               beq _ex_stp
               cmp #fzstpright
               beq _ex_stp

               cmp #8
               bcs _stp_right
               lda #fzstpleft
               sta _faza_nr
_ex_stp        rts
_stp_right     lda #fzstpright
               sta _faza_nr
               rts




_up            equ *

jmp_max  equ 30


               lda _faza_nr
               cmp #16
               bne _stop_spr
               lda #0
               sta _faza_nr
               jmp _up_continue
_stop_spr      cmp #17
               bne _up_continue
               lda #8
               sta _faza_nr

_up_continue   equ *

               lda _jmp_counter
               cmp #jmp_max
               bne _readY
_no            lda #0
               sta _jmp_counter
               lda _old_joy
               and #%11111110
               sta _old_joy
               lda #255
               jsr _drop
               rts
_readY         ldy _jmp_counter
               lda _jmp_table,y
               sta _jmpposition

               jsr _jmp_kolisions
               cmp #0
               beq _read2Y
               lda _jmp_counter
               cmp #1
               bcs _ye
               lda #0
               sta _jmp_Yposition
               jmp _no
_ye            inc _jmp_counter
               jmp _readY

_read2Y        ldy _jmp_counter
               lda _jmp_table,y
               sta _jmp_Yposition

_not_readY     inc _fz0_5
               lda _fz0_5
               cmp #4
               beq _next_faza
               inc _jmp_counter
               jsr _stand
               rts

_next_faza     lda #0
               sta _fz0_5
               inc _faza_nr
               jsr _skrajna_wart
               inc _jmp_counter
               jsr _stand
               rts




_left          equ *

               lda _faza_nr
               cmp #8
               bcc _notr_change
               lda #0
               sta _faza_nr
               rts

_notr_change   jsr _alf_kolision

_verify_up     equ *

               lda _old_joy
               and #up
               bne __up
               lda _fz05
               beq _ex_left
               inc _faza_nr
               jsr _skrajna_wart
_ex_left       rts

__up           jmp _up

_right         equ *

               lda _faza_nr
               cmp #fzstpleft
               beq _l2_change
               cmp #fzstpright
               beq _l2_change
               cmp #8
               bcs _notl_change
_l2_change     lda #8
               sta _faza_nr
               rts
_notl_change   jsr _arh_kolision
               jmp _verify_up









*end

 org $9d00

 icl 'AIR_FIR4'


_X_rozpisz     equ *

 sta granica

 lda _pos_X
 sec
 sbc granica
 lsr @
 lsr @
 lsr @
 sta _posX
 rts

_Y_rozpisz     equ *

 sta granica

 lda _pos_Y
 sec
 sbc _jmp_Yposition
 sec
 sbc granica
 lsr @
 lsr @
 lsr @
 lsr @
 sta _posY
 rts

_Y_2rozpisz    equ *

 sta granica

 lda _pos_Y
 sec
 sbc _jmpposition
 sec
 sbc granica
 lsr @
 lsr @
 lsr @
 lsr @
 sta _posY
 rts

*detekcja kolizji przy ruchu w gore

_aup_kolision  equ *

         lda #$1d
         sta glowa
         lda #$18
         sta butla
         jsr _aupd_kolision
         cmp #0
         bne _aupexit
         dec _pos_Y
_aupexit rts

_ado_kolision  equ *

         lda #1
         sta glowa
         lda #8
         sta butla
         jsr _aupd_kolision
         cmp #0
         bne _adoexit
         inc _pos_Y
_adoexit rts


_jmp_kolisions equ *

        lda #$1d-2
        sta glowa
        lda #$18-2
        sta butla

        lda glowa
        jsr _Y_2rozpisz
        lda #$3d
        jsr _X_rozpisz
        jsr _loc
        sta _upbyte
        lda #$3b
        jsr _rozp

        lda _faza_nr
        cmp #8
        bcs _gl_4up

_gl_3up lda #$40
        jsr _rozp
        jmp _2battle

_gl_4up lda #$39
        jsr _rozp

_2battle lda butla
         jsr _Y_2rozpisz
         lda #$39
         jsr _rozp
         lda #$40
         jsr _rozp
         rts


_aupd_kolision equ *

        lda glowa
        jsr _Y_rozpisz
        lda #$3d
        jsr _X_rozpisz
        jsr _loc
        sta _upbyte

        lda #$3b
        jsr _rozp

        lda _faza_nr
        cmp #2+18
        beq _gl_2up
        cmp #5+18
        beq _gl_up
        cmp #3+18
        beq _gl_up
        cmp #4+18
        beq _gl_up

_gl_2up lda #$40
        jsr _rozp
        jmp _battle

_gl_up  lda #$39
        jsr _rozp

_battle lda butla
        jsr _Y_rozpisz
        lda #$39
        jsr _rozp

        lda #$40
        jsr _rozp
        rts

_upbyte dta b(0)
glowa   dta b(0)
butla   dta b(0)
_jmpposition   dta b(0)
_st_move       dta b(0)

_arh_kolision  equ *

       lda #$38
       sta _upbyte
       jsr _arl_kolision
       cmp #0
       bne _arhex
       inc _pos_X
_arhex rts

_alf_kolision  equ *

       lda #$41
       sta _upbyte
       jsr _arl_kolision
       cmp #0
       bne _alfex
       dec _pos_X
_alfex rts


_arl_kolision  equ *

 lda _upbyte
 jsr _X_rozpisz
 lda #$1d-1
 jsr _Y_rozpisz
 jsr _loc
 sta _upbyte

 lda #$1+1
 jsr _rozpY

 lda #$1+16
 jsr _rozpY
 rts

_stand         equ *

               lda _jmp_counter
               cmp #23
               beq _st67
               cmp #30
               bne _st2



_st67          lda _old_joy
               and #%11111110
               beq _st2

     lda _faza_nr    *zabezpieczenie przed naskokiem na
     cmp #8          *krawedz wysokiej sciany
     bcs _st9

     lda #$41
     sta _upbyte
     jsr _arl_kolision
     cmp #0
     bne _st2
     beq _st8

_st9 lda #$38
     sta _upbyte
     jsr _arl_kolision
     cmp #0
     bne _st2

_st8           lda #1
               jsr _Y_2rozpisz

               lda _faza_nr
               cmp #8
               bcs _st_left

               lda #$41
               jsr _X_rozpisz
               jsr _loc
               sta _upbyte
               jmp _st

_st_left       lda #$38
               jsr _X_rozpisz
               jsr _loc
               sta _upbyte

_st            lda _upbyte
               cmp #0
               beq _st2

               lda _jmp_counter
               cmp #30
               beq _st64

               lda _pos_Y
               sec
               sbc #16
               sta _pos_Y

_st64          lda #4        (4 kroki)
               sta _st_move  (po naskoczeniu na element)

               lda #0
               sta _jmp_counter
               sta _jmp_Yposition
               lda _old_joy
               and #%11111110
               sta _old_joy
_st2           rts


_loc           equ *

               ldy _posY
               ldx _posX
               jsr locate
               jsr rozpelement
               rts

_rozp          equ *

               jsr _X_rozpisz
               jsr _loc
               ora _upbyte
               sta _upbyte
               rts

_rozpY         equ *

               jsr _Y_rozpisz
               jsr _loc
               ora _upbyte
               sta _upbyte
               rts

__nodrop       jmp _nodrop

_drop          equ *

               sta drop_up
               lda _jmp_counter
               cmp #0
               bne __nodrop

               lda #1
               jsr _Y_rozpisz

               lda _faza_nr
               cmp #17
               beq _dr3
               cmp #16
               beq _dr4
               cmp #8
               bcs _dr3
_dr4           lda #$3d
               jmp _dr2
_dr3           lda #$3c

_dr2           jsr _X_rozpisz
               jsr _loc
               bne _nodrop

               lda drop_up
               cmp #255
               beq _dr6
               lda drop_counter
               bne _dr6

               lda _old_joy
               and #right
               bne _dr5
               lda _old_joy
               and #left
               beq _dr98

_dr5           lda #3
               jmp _dr99

_dr98          lda #5
_dr99          sta _st_move
               lda #4
               sta drop_znacznik
               inc drop_counter
               rts

_dr6           lda _pos_Y
               clc
               adc #4
               sta _pos_Y

               inc drop_counter

               inc _fz0_5
               lda _fz0_5
               cmp #4
               bne _no_machaj
               lda #0
               sta _fz0_5
               inc _faza_nr
               jsr _skrajna_wart

_no_machaj     lda drop_counter
               cmp #5
               bcs _no_mv
               lda drop_up
               cmp #255
               beq _no_mv

               lda drop_znacznik
               beq _dr10
               dec drop_znacznik
               jmp _no_mv

_dr10          lda _faza_nr
               cmp #8
               bcs _mv_lf
               jsr _alf_kolision
               jmp _no_mv
_mv_lf         jsr _arh_kolision
_no_mv         ldy #1
               rts
_nodrop        lda #0
               sta drop_counter
               rts

_ch_obs        equ *

               lda _faza_nr
               cmp #19
               beq _ccl
               cmp #20
               beq _ccl
               cmp #22
               beq _ccp
               cmp #23
               beq _ccp
               rts
_ccl           lda #16
               sta _faza_nr
               rts
_ccp           lda #17
               sta _faza_nr
               rts

rozpelement    equ *

               ldx #0
rozel2         cmp eltable,x
               beq _nokol
               inx
               cpx #7
               bne rozel2
               lda #1
               rts
_nokol         lda #0
               rts


eltable        dta b(0),b(16),b(18),b(20),b(22),b(24),b(26)
               dta b(28),b(44)

drop_up        dta b(0)
drop_counter   dta b(0)
drop_znacznik  dta b(0)

               org $a400
               icl 'DANE3'

               icl 'GAMEFONT'
