?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.         module SPLIT
  2. ;       Ёрчфхы хЄ яЁюїюф ∙шщ ётюч№ юс·хъЄ эр 2 юс·хъЄр.
  3. ;       юфшэ шч юс·хъЄют яюыєўрхЄ шэтхЁЄшЁютрээюх эряЁртыхэшх фтшцхэш .
  4. ;       ъюэЄЁюы№ чр яЁхт√°хэшхь ышьшЄр юс·хъЄют эр ърЁЄх эх юёє∙хёЄты хЄё .
  5. ;----------------------------------------------------------
  6. init:
  7.         SET_EXEC_IX update
  8.         xor a
  9.         ld (ix+oData.isMovable),a
  10.         ld (ix+oData.accelerate),a
  11.         ld (ix+oData.drawMethod),a
  12.         ld (ix+oData.color),3
  13.         jp OBJECTS.setObjectId
  14.  
  15. ;----------------------------------------------------------
  16. update:
  17.         ld a,(ix+oData.isDestroyed)
  18.         or a
  19.         jp nz,ENEMY_SKULL.destroyThis
  20.  
  21.  
  22.  
  23.         ret
  24. ;----------------------------------------------------------
  25. splitObject:
  26.         ; IY - this object
  27.         ; IX - other object
  28.         ld (hl),0               ; reset split on cell
  29.         ld (iy+oData.isDestroyed),1
  30.         ld (iy+oData.color),7
  31.         call findEmptyObject    ; new IY
  32.         ld a,iyh
  33.         or a
  34.         ret z           ; WARNING - no empty objects !!!!!!
  35.         ; duplicate object
  36.         push iy
  37.         pop de
  38.         push ix
  39.         pop hl
  40.         ld bc,OBJECT_DATA_SIZE
  41.         ldir
  42.  
  43. ;       ld (iy+oData.color),4
  44. ;       inc (iy+oData.id)
  45.  
  46.         ld (iy+oData.accelerate),1
  47.         ld a,(ix+oData.x)
  48.         ld (iy+oData.x),a
  49.         ld a,(ix+oData.y)
  50.         ld (iy+oData.y),a
  51.  
  52. ;       0,1,2,4,8
  53. ;       0,2,1,8,4
  54.         ; inverse direction (direction necessarily exists)
  55.         ld c,%00000011
  56.         ld a,(iy+oData.direction)
  57.         cp DIRECTION.UP
  58.         jr c,.next
  59.         rlc c
  60.         rlc c
  61. .next:
  62.         xor c
  63.         ld (iy+oData.direction),a
  64.         ret
  65. ;----------------------------------------------------------
  66. findEmptyObject:
  67.         ; return IY = address of first empty object, or IY = 0
  68.         ; if IY == 0 -> no empty objects
  69.         ld iy,objectsData
  70.         ld de,OBJECT_DATA_SIZE
  71.         ld b,MAX_OBJECTS
  72.         xor a
  73. .loop:
  74.         cp (iy+oData.cellId)    ; cell ID == 0 if object is empty.
  75.         ret z
  76.         add iy,de
  77.         djnz .loop
  78.         ld iyh,a
  79.         ret
  80. ;----------------------------------------------------------
  81.  
  82.         endmodule
  83.