Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;0 - яєёЄю
  2. ;1..127 - юс·хъЄ
  3. ;128..254 - яєы 
  4. ;[255 - яЁхя ЄёЄтшх]
  5. fillcollisionmap
  6.         ;ld hl,collisionmap
  7.         ;ld de,collisionmap+1
  8.         ;ld bc,collisionmapsize-1
  9.         ;ld (hl),0
  10.         ;ldir
  11.         ld (fillcollisionmapsp),sp
  12.         ld sp,collisionmap+collisionmapsize
  13.         ld de,0
  14.         ld b,collisionmaphgt
  15. fillcollisionmap_clear0
  16.         dup collisionmaplinesize/2
  17.         push de
  18.         edup
  19.         djnz fillcollisionmap_clear0
  20. fillcollisionmapsp=$+1
  21.         ld sp,0
  22. ;яюьхўрхь яєыш
  23.         ld ix,bulletlist
  24.         ld c,128
  25. fillcollisionmap_bullet0
  26.         ld a,(ix+(obj_x+1))
  27.         cp TERMINATOR
  28.         jr z,fillcollisionmap_bulletq
  29.         call calccollisionmapaddr
  30.         ld (hl),c
  31.         ld de,objsize
  32.         add ix,de
  33.         inc c
  34.         jp fillcollisionmap_bullet0
  35. fillcollisionmap_bulletq
  36. ;яюьхўрхь юс·хъЄ√
  37.         ld ix,objlist
  38.         ld c,1
  39. fillcollisionmap_obj0
  40.         ld a,(ix+(obj_x+1))
  41.         cp TERMINATOR
  42.         ret z
  43.         call calccollisionmapaddr
  44.         ld de,collisionmaplinesize-2
  45.         ld (hl),c
  46.         inc hl
  47.         ld (hl),c
  48.         inc hl
  49.         ld (hl),c
  50.         add hl,de
  51.         ld (hl),c
  52.         inc hl
  53.         ld (hl),c
  54.         inc hl
  55.         ld (hl),c
  56.         add hl,de
  57.         ld (hl),c
  58.         inc hl
  59.         ld (hl),c
  60.         inc hl
  61.         ld (hl),c
  62.         ld de,objsize
  63.         add ix,de
  64.         inc c
  65.         jp fillcollisionmap_obj0
  66.        
  67. calccollisionmapaddr
  68. ;bc,e эх яюЁЄшь
  69.         GETXDE_YHL
  70.         if coordsfactor !=4
  71.         display "coordsfactor!=4"
  72.         endif
  73.         ld a,l
  74.         rr h
  75.         rra
  76.         rr h
  77.         rra
  78.         rra
  79.         rra
  80.         rra
  81.         and #1f
  82.         ld l,a
  83.         ld h,0
  84.         add hl,hl
  85.         add hl,hl
  86.         add hl,hl
  87.         add hl,hl
  88.         add hl,hl ;fillcollisionmaplinesize=32
  89.         if coordsfactor !=4
  90.         display "coordsfactor!=4"
  91.         endif
  92.         ld a,e
  93.         rr d
  94.         rra
  95.         rr d
  96.         rra
  97.         rra
  98.         rra
  99.         rra
  100.         and #1f
  101.         add a,l
  102.         ld l,a
  103.         ld a,collisionmap/256
  104.         add a,h
  105.         ld h,a
  106.         ret
  107.  
  108. calctilemapaddr_de_hl
  109. ;de=x
  110. ;hl=y
  111. ;bc,e эх яюЁЄшь
  112.         if coordsfactor !=4
  113.         display "coordsfactor!=4"
  114.         endif
  115.         ld a,l
  116.         rr h
  117.         rra
  118.         rr h
  119.         rra
  120.         rra
  121.         rra
  122.         rra
  123.         and #1f
  124.         ld l,a
  125.         if coordsfactor !=4
  126.         display "coordsfactor!=4"
  127.         endif
  128.         ld a,e
  129.         rr d
  130.         rra
  131.         rr d
  132.         rra
  133.         rra
  134.         rra
  135.         rra
  136.         and #1f
  137. calctilemapaddr_a_l
  138.         ld h,0
  139.         add hl,hl
  140.         add hl,hl
  141.         add hl,hl
  142.         add hl,hl
  143.         add hl,hl ;fillcollisionmaplinesize=32
  144.         add a,l
  145.         ld l,a
  146.         ld a,tilemap/256
  147.         add a,h
  148.         ld h,a
  149.         ret
  150.  
  151. checkbulletcollision
  152. ;hl=collisionmapaddr
  153. ;out: nc=ъюыышчш 
  154.         ld a,(hl)
  155.         or a ;яєёЄю
  156.         ;scf
  157.         ;jr z,$;ret z ;CY=1
  158.         jp m,checkbulletcollision_bullet
  159. ;1..127 = юс·хъЄ
  160.         ld c,a
  161.         ld b,0
  162.         ld de,objsize
  163.         call mulbcde
  164.        
  165.         if 1==1
  166.         ld bc,objlist-objsize+obj_energy
  167.         add hl,bc
  168.        
  169.         else ;яЁютхЁър яюярфрэш  т  сыюўъю
  170.         ;эрфю яЁютхЁшЄ№ x > xbullet > x+tanksize
  171.         ld bc,objlist-objsize+obj_x
  172.         add hl,bc
  173.         ld a,(ix+obj_x) ;xbullet
  174.         sub (hl) ;x
  175.         ld c,a
  176.         inc hl
  177.         ld a,(ix+(obj_x+1)) ;xbullet(HSB)
  178.         sbc a,(hl) ;x(HSB)
  179.         ld b,a ;bc = xbullet-x
  180.         scf
  181.         ret nz ;bc >= 256 (Єюўэю ьшью)
  182.         ld a,c
  183.         or a
  184.         scf
  185.         ret z
  186.         cp tankdamagesize*coordsfactor
  187.         ccf
  188.         ret c ;bc >= tanksize
  189.         inc hl
  190.         ld a,(ix+obj_y) ;ybullet
  191.         sub (hl) ;y
  192.         ld c,a
  193.         inc hl
  194.         ld a,(ix+(obj_y+1)) ;ybullet(HSB)
  195.         sbc a,(hl) ;y(HSB)
  196.         ld b,a ;bc = ybullet-y
  197.         scf
  198.         ret nz ;bc >= 256 (Єюўэю ьшью)
  199.         ld a,c
  200.         or a
  201.         scf
  202.         ret z
  203.         cp tankdamagesize*coordsfactor
  204.         ccf
  205.         ret c ;bc >= tanksize
  206.         ld bc,obj_energy-(obj_y+1)
  207.         add hl,bc
  208.         endif ;яЁютхЁър яюярфрэш  т  сыюўъю
  209.        
  210.         ld a,(hl)
  211.         sub (ix+obj_energy) ;¤эхЁуш  яєыш
  212.         ld (hl),a
  213.         ret nc ;є юс·хъЄр х∙╕ юёЄрырё№ ¤эхЁуш 
  214.         push ix
  215.         ex de,hl
  216.         ld ix,-obj_energy
  217.         add ix,de
  218.         SETANIM ANIM_DIE
  219.         pop ix
  220.         or a
  221.         ret ;nc
  222. checkbulletcollision_bullet
  223. ;128..255 = яєы  (т collisionmap тёхуфр тшфэр сюыхх яючфэ   яєы , Є.х. х╕ ьюцэю ёьхыю єфры Є№)
  224.         sub 128
  225.         ;push af ;эюьхЁ эрщфхээющ яєыш
  226.         ;push ix
  227.         ;pop hl
  228.         ;ld bc,-bulletlist&#ffff
  229.         ;add hl,bc
  230.         ;ld de,objsize
  231.         ;call divhlde ;hl=эюьхЁ эр°хщ яєыш
  232.         ;pop af ;эюьхЁ эрщфхээющ яєыш
  233.         ;cp l ;эюьхЁ эр°хщ яєыш
  234.         ;scf
  235.         ;ret z ;CY=1 ;яєы  єтшфхыр ёрьр ёхс 
  236.         ld c,a
  237.         ld b,0
  238.         ld de,objsize
  239.         call mulbcde
  240.         ex de,hl
  241.         push ix
  242.         ld ix,bulletlist
  243.         add ix,de
  244.         ld hl,curbulletlistend
  245.         call delobj ;ъюяшЁєхь шч ix+objsize т ix
  246.         pop ix
  247.         or a
  248.         ret ;nc
  249.        
  250. checkwalls
  251. ;bc=ЁрчьхЁ
  252. ;out: nc=ёЄхэр
  253. _=4 ;яюыютшэр ъыхЄюўъш
  254.         ld h,(ix+(obj_y+1))
  255.         ld a,(ix+obj_y) ;y
  256.         srl h
  257.         rra
  258.         srl h
  259.         rra
  260.         cp _&#ff
  261.         ccf
  262.         ret nc ;тхЁїэ   ёЄхэр
  263. ;т√ўхёЄ№ (bottomwally/coordsfactor-4)-ЁрчьхЁ, ёьюЄЁшь <=
  264.         add a,c ;ЁрчьхЁ
  265. _=(bottomwally/coordsfactor-4)+1
  266.         cp _&#ff
  267.         ret nc ;эшцэ   ёЄхэр
  268. _=4 ;яюыютшэр ъыхЄюўъш
  269.         ld d,(ix+(obj_x+1))
  270.         ld a,(ix+obj_x) ;x
  271.         srl d
  272.         rra
  273.         srl d
  274.         rra
  275.         cp _&#ff
  276.         ccf
  277.         ret nc ;ыхтр  ёЄхэр
  278. ;т√ўхёЄ№ (rightwallx/coordsfactor-4)-ЁрчьхЁ, ёьюЄЁшь <=
  279.         add a,c ;ЁрчьхЁ
  280. _=(rightwallx/coordsfactor-4)+1
  281.         cp _&#ff
  282.         ret ;nc=яЁртр  ёЄхэр
  283.        
  284. checkobstacles_tank
  285. ;nc=яЁхя ЄёЄтшх
  286.         GETXDE_YHL
  287.         ld bc,-4*coordsfactor
  288.         ex de,hl
  289.         add hl,bc
  290.         ex de,hl
  291.         add hl,bc
  292.         ld a,l
  293.         and 8*coordsfactor-1
  294.         ld b,3 ;ўшёыю яЁютхЁ хь√ї ёЄЁюъ
  295.         jr z,$+3
  296.         inc b ;ўшёыю яЁютхЁ хь√ї ёЄЁюъ (ёЄюшь эхЁютэю яю y)
  297.         call calctilemapaddr_de_hl ;bc,e эх яюЁЄшь
  298.         ld a,e
  299.         and 8*coordsfactor-1
  300.         jr nz,checkobstacles_tank_lines4 ;ёЄюшь эхЁютэю яю x
  301.         ld de,tilemaplinesize-2
  302. checkobstacles_tank_lines30
  303.         ld a,(hl)
  304.         cp maxemptytile+1
  305.         ret nc
  306.         inc hl
  307.         ld a,(hl)
  308.         cp maxemptytile+1
  309.         ret nc
  310.         inc hl
  311.         ld a,(hl)
  312.         cp maxemptytile+1
  313.         ret nc
  314.         add hl,de
  315.         djnz checkobstacles_tank_lines30
  316.         scf
  317.         ret ;CY=1 (эхЄ яЁхя ЄёЄтш )
  318. checkobstacles_tank_lines4
  319.         ld de,tilemaplinesize-3
  320. checkobstacles_tank_lines40
  321.         ld a,(hl)
  322.         cp maxemptytile+1
  323.         ret nc
  324.         inc hl
  325.         ld a,(hl)
  326.         cp maxemptytile+1
  327.         ret nc
  328.         inc hl
  329.         ld a,(hl)
  330.         cp maxemptytile+1
  331.         ret nc
  332.         inc hl
  333.         ld a,(hl)
  334.         cp maxemptytile+1
  335.         ret nc
  336.         add hl,de
  337.         djnz checkobstacles_tank_lines40
  338.         scf
  339.         ret ;CY=1 (эхЄ яЁхя ЄёЄтш )
  340.