;0 - яєёЄю
;1..127 - юс·хъЄ
;128..254 - яєы
;[255 - яЁхя ЄёЄтшх]
fillcollisionmap
;ld hl,collisionmap
;ld de,collisionmap+1
;ld bc,collisionmapsize-1
;ld (hl),0
;ldir
ld (fillcollisionmapsp),sp
ld sp,collisionmap+collisionmapsize
ld de,0
ld b,collisionmaphgt
fillcollisionmap_clear0
dup collisionmaplinesize/2
push de
edup
djnz fillcollisionmap_clear0
fillcollisionmapsp=$+1
ld sp,0
;яюьхўрхь яєыш
ld ix,bulletlist
ld c,128
fillcollisionmap_bullet0
ld a,(ix+(obj_x+1))
cp TERMINATOR
jr z,fillcollisionmap_bulletq
call calccollisionmapaddr
ld (hl),c
ld de,objsize
add ix,de
inc c
jp fillcollisionmap_bullet0
fillcollisionmap_bulletq
;яюьхўрхь юс·хъЄ√
ld ix,objlist
ld c,1
fillcollisionmap_obj0
ld a,(ix+(obj_x+1))
cp TERMINATOR
ret z
call calccollisionmapaddr
ld de,collisionmaplinesize-2
ld (hl),c
inc hl
ld (hl),c
inc hl
ld (hl),c
add hl,de
ld (hl),c
inc hl
ld (hl),c
inc hl
ld (hl),c
add hl,de
ld (hl),c
inc hl
ld (hl),c
inc hl
ld (hl),c
ld de,objsize
add ix,de
inc c
jp fillcollisionmap_obj0
calccollisionmapaddr
;bc,e эх яюЁЄшь
GETXDE_YHL
if coordsfactor !=4
display "coordsfactor!=4"
endif
ld a,l
rr h
rra
rr h
rra
rra
rra
rra
and #1f
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl ;fillcollisionmaplinesize=32
if coordsfactor !=4
display "coordsfactor!=4"
endif
ld a,e
rr d
rra
rr d
rra
rra
rra
rra
and #1f
add a,l
ld l,a
ld a,collisionmap/256
add a,h
ld h,a
ret
calctilemapaddr_de_hl
;de=x
;hl=y
;bc,e эх яюЁЄшь
if coordsfactor !=4
display "coordsfactor!=4"
endif
ld a,l
rr h
rra
rr h
rra
rra
rra
rra
and #1f
ld l,a
if coordsfactor !=4
display "coordsfactor!=4"
endif
ld a,e
rr d
rra
rr d
rra
rra
rra
rra
and #1f
calctilemapaddr_a_l
ld h,0
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl ;fillcollisionmaplinesize=32
add a,l
ld l,a
ld a,tilemap/256
add a,h
ld h,a
ret
checkbulletcollision
;hl=collisionmapaddr
;out: nc=ъюыышчш
ld a,(hl)
or a ;яєёЄю
;scf
;jr z,$;ret z ;CY=1
jp m,checkbulletcollision_bullet
;1..127 = юс·хъЄ
ld c,a
ld b,0
ld de,objsize
call mulbcde
if 1==1
ld bc,objlist-objsize+obj_energy
add hl,bc
else ;яЁютхЁър яюярфрэш т сыюўъю
;эрфю яЁютхЁшЄ№ x > xbullet > x+tanksize
ld bc,objlist-objsize+obj_x
add hl,bc
ld a,(ix+obj_x) ;xbullet
sub (hl) ;x
ld c,a
inc hl
ld a,(ix+(obj_x+1)) ;xbullet(HSB)
sbc a,(hl) ;x(HSB)
ld b,a ;bc = xbullet-x
scf
ret nz ;bc >= 256 (Єюўэю ьшью)
ld a,c
or a
scf
ret z
cp tankdamagesize*coordsfactor
ccf
ret c ;bc >= tanksize
inc hl
ld a,(ix+obj_y) ;ybullet
sub (hl) ;y
ld c,a
inc hl
ld a,(ix+(obj_y+1)) ;ybullet(HSB)
sbc a,(hl) ;y(HSB)
ld b,a ;bc = ybullet-y
scf
ret nz ;bc >= 256 (Єюўэю ьшью)
ld a,c
or a
scf
ret z
cp tankdamagesize*coordsfactor
ccf
ret c ;bc >= tanksize
ld bc,obj_energy-(obj_y+1)
add hl,bc
endif ;яЁютхЁър яюярфрэш т сыюўъю
ld a,(hl)
sub (ix+obj_energy) ;¤эхЁуш яєыш
ld (hl),a
ret nc ;є юс·хъЄр х∙╕ юёЄрырё№ ¤эхЁуш
push ix
ex de,hl
ld ix,-obj_energy
add ix,de
SETANIM ANIM_DIE
pop ix
or a
ret ;nc
checkbulletcollision_bullet
;128..255 = яєы (т collisionmap тёхуфр тшфэр сюыхх яючфэ яєы , Є.х. х╕ ьюцэю ёьхыю єфры Є№)
sub 128
;push af ;эюьхЁ эрщфхээющ яєыш
;push ix
;pop hl
;ld bc,-bulletlist&#ffff
;add hl,bc
;ld de,objsize
;call divhlde ;hl=эюьхЁ эр°хщ яєыш
;pop af ;эюьхЁ эрщфхээющ яєыш
;cp l ;эюьхЁ эр°хщ яєыш
;scf
;ret z ;CY=1 ;яєы єтшфхыр ёрьр ёхс
ld c,a
ld b,0
ld de,objsize
call mulbcde
ex de,hl
push ix
ld ix,bulletlist
add ix,de
ld hl,curbulletlistend
call delobj ;ъюяшЁєхь шч ix+objsize т ix
pop ix
or a
ret ;nc
checkwalls
;bc=ЁрчьхЁ
;out: nc=ёЄхэр
_=4 ;яюыютшэр ъыхЄюўъш
ld h,(ix+(obj_y+1))
ld a,(ix+obj_y) ;y
srl h
rra
srl h
rra
cp _&#ff
ccf
ret nc ;тхЁїэ ёЄхэр
;т√ўхёЄ№ (bottomwally/coordsfactor-4)-ЁрчьхЁ, ёьюЄЁшь <=
add a,c ;ЁрчьхЁ
_=(bottomwally/coordsfactor-4)+1
cp _&#ff
ret nc ;эшцэ ёЄхэр
_=4 ;яюыютшэр ъыхЄюўъш
ld d,(ix+(obj_x+1))
ld a,(ix+obj_x) ;x
srl d
rra
srl d
rra
cp _&#ff
ccf
ret nc ;ыхтр ёЄхэр
;т√ўхёЄ№ (rightwallx/coordsfactor-4)-ЁрчьхЁ, ёьюЄЁшь <=
add a,c ;ЁрчьхЁ
_=(rightwallx/coordsfactor-4)+1
cp _&#ff
ret ;nc=яЁртр ёЄхэр
checkobstacles_tank
;nc=яЁхя ЄёЄтшх
GETXDE_YHL
ld bc,-4*coordsfactor
ex de,hl
add hl,bc
ex de,hl
add hl,bc
ld a,l
and 8*coordsfactor-1
ld b,3 ;ўшёыю яЁютхЁ хь√ї ёЄЁюъ
jr z,$+3
inc b ;ўшёыю яЁютхЁ хь√ї ёЄЁюъ (ёЄюшь эхЁютэю яю y)
call calctilemapaddr_de_hl ;bc,e эх яюЁЄшь
ld a,e
and 8*coordsfactor-1
jr nz,checkobstacles_tank_lines4 ;ёЄюшь эхЁютэю яю x
ld de,tilemaplinesize-2
checkobstacles_tank_lines30
ld a,(hl)
cp maxemptytile+1
ret nc
inc hl
ld a,(hl)
cp maxemptytile+1
ret nc
inc hl
ld a,(hl)
cp maxemptytile+1
ret nc
add hl,de
djnz checkobstacles_tank_lines30
scf
ret ;CY=1 (эхЄ яЁхя ЄёЄтш )
checkobstacles_tank_lines4
ld de,tilemaplinesize-3
checkobstacles_tank_lines40
ld a,(hl)
cp maxemptytile+1
ret nc
inc hl
ld a,(hl)
cp maxemptytile+1
ret nc
inc hl
ld a,(hl)
cp maxemptytile+1
ret nc
inc hl
ld a,(hl)
cp maxemptytile+1
ret nc
add hl,de
djnz checkobstacles_tank_lines40
scf
ret ;CY=1 (эхЄ яЁхя ЄёЄтш )