readkeys
;%<>lrduf
	ld a,0xef
	in a,(0xfe)
        or 0xe0
        ld c,a
        ld a,0xfb
	in a,(0xfe)
        and 2
        jr nz,$+4
        res 1,c ;W: up
        ld a,0xfd
	in a,(0xfe)
        rra
        jr c,$+4
        res 6,c ;A: <
        rra
        jr c,$+4
        res 2,c ;S: down
        rra
        jr c,$+4
        res 5,c ;D: >
        ld a,0xdf
	in a,(0xfe)
        rra
        jr c,$+4
        res 3,c ;P: right
        rra
        jr c,$+4
        res 4,c ;O: left
        ld a,0x7f
        in a,(0xfe)
        rra
        jr c,$+4
        res 0,c ;Space: fire
        ld a,c
        ld (joy),a
        ret

movexy_anglea
        push bc
        ld c,a
        ld b,tsindiv2/256 ;достаём синус
        ld a,(bc)
        push bc
         dup 4 ;3 - на сколько быстро приращать единичный вектор перемещения
         sra a
         edup
        ld c,a
        rla
        sbc a,a
        ld b,a
        add hl,bc ;y
        ;sub hl,bc ;y
        pop bc
        ld a,0x40 ; достаём косинус
        sub c
        ld c,a
        ld a,(bc)
         dup 4 ;3 - на сколько быстро приращать единичный вектор перемещения
         sra a
         edup
        ld c,a
        rla
        sbc a,a
        ld b,a
        ex de,hl
        add hl,bc ;x
        ;sub hl,bc ;y
        ex de,hl
        pop bc
        ret

joy
;%<>lrduf
        db 0

movecube
        call readkeys

zspeed=$+1
        ld bc,15 ;z speed - прыжок
        ld hl,(mcamz)
        add hl,bc
        ld de,#016 ;#020 рост
        or a
        sbc hl,de
        add hl,de
        jr nc,move_nofloor
        ex de,hl ;floor
        ld bc,0+1
move_nofloor
        dec bc ;это скорость инкремента полёта прыжка
        ld (mcamz),hl; прыжок отключать здесь ! ---------------------
        ;ld (zspeed),bc
        

       if !TWOAXES
       ld hl,roll
       ld a,0xf7
       in a,(0xfe)
       rra
       jr c,$+3
       inc (hl)
       rra
       jr c,$+3
       dec (hl)
       endif

	;ld bc,3
	;ld a,#ef
	;in a,(#fe)
        ld a,(joy) ;%<>lrduf
oldjoy=$+1
        ld l,0
        ld (oldjoy),a
	rra
        jr c,nojump
        rr l
        jr nc,nojump ;уже в прыжке
        ld bc,12 ;15 высота прыжка
nojump
        ld (zspeed),bc
	ld hl,(camY)
	ld de,(camX)
	rra ;up
	jr c,noup
	;sbc hl,bc
        push af
        ld a,(azimuth)
        add a,0x80
        call movexy_anglea
        pop af
noup
	rra ;down
	jr c,nodown
	;add hl,bc
        push af
        ld a,(azimuth)
        call movexy_anglea
        pop af
nodown
        push af
        cpl
        and 3
        jr nz,nostoprotate
        xor a
        ld (azimuthspeed),a
        ld (azimuthspeed+1),a
nostoprotate
        pop af

	rra ;right
	jr c,noright
        ;ex de,hl
	;add hl,bc
        ;ex de,hl
        push af
        push bc
        push hl
        ld hl,(azimuthspeed)
        ld bc,50
        add hl,bc
        ld (azimuthspeed),hl
        pop hl
        pop bc
        pop af
noright
	rra ;left
	jr c,noleft
        ;ex de,hl
	;sbc hl,bc
        ;ex de,hl
        push af
        push bc
        push hl
        ld hl,(azimuthspeed)
        ld bc,-50
        add hl,bc
        ld (azimuthspeed),hl
        pop hl
        pop bc
        pop af
noleft
	rra ;>
	jr c,nostraferight
        push af
        ld a,(azimuth)
        sub 0x40
        call movexy_anglea
        pop af
nostraferight
	rra ;>
	jr c,nostrafeleft
        push af
        ld a,(azimuth)
        add a,0x40
        call movexy_anglea
        pop af
nostrafeleft
;-------отключаем перемещение игрока ---------
	ld (camY),hl
	ld (camX),de
       ;ret

curmousexy=$+1
         ld de,0
	 ;ld bc,#fbdf ;mouse x
	 ;in a,(c)
         ld a,e ;mouse x
oldfbdf=$+1
	 ld b,0
	 ld (oldfbdf),a
	 sub b
	 sra a
azimuth=$+1 ;yaw ;рыскание
	add a,0;-16 #40 -------------------- УГОЛ КАМЕРЫ ЗДЕСЬ!!!
        ld hl,azimuth
azimuthspeed=$+1
        ld bc,0
        add a,b
	ld (hl),a

	 ;ld bc,#ffdf ;mouse y
	 ;in a,(c)
         ld a,d ;mouse y
oldffdf=$+1
	 ld b,0
	 ld (oldffdf),a
	 sub b
	 neg
	 sra a
tangage=$+1 ;pitch
	add a,0
	 cp -#30
	 jp p,$+3+2
	 ld a,-#30
	 cp #30
	 jp m,$+3+2
	 ld a,#30
	ld (tangage),a ;тангаж

	ret

scripting
curscripttime=$+1
	ld de,0
	ld hl,(timer)
	or a
	sbc hl,de
	ret c
curscriptaddr=$+1
	ld hl,script
	ld e,(hl)
	inc hl
	ld d,(hl)
	inc hl
	ld c,(hl)
	inc hl
	ld b,(hl)
	inc hl
	ld (curscripttime),bc
	ld (curscriptaddr),hl
	ex de,hl
	jp (hl)

script
	;dw initcube

;showcubetime=cubebasetime-20
	;dw showcubetime
	;dw startcube

	dw -1

