?login_element?

Subversion Repositories NedoOS

Rev

Rev 1107 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         module BOMB
  2. init:
  3.         SET_EXEC_IX update
  4.         xor a
  5.         ld (ix+oData.isMovable),a
  6.        if EGA
  7.         ld (ix+oData.drawMethod),2;a    ; for sprite 2x2 draw
  8.        else
  9.         ld (ix+oData.drawMethod),a      ; for 2x2 draw
  10.        endif
  11.         ld (ix+oData.accelerate),1
  12.         ld (ix+oData.color),%01000010
  13.         ld a,r
  14.         and 3
  15.         ld (ix+oData.animationId),a
  16.         ld c,(ix+oData.cellId)
  17.         call getAttrAddrByCellId
  18.         ld (ix+oData.clrScrAddrL),e
  19.         ld (ix+oData.clrScrAddrH),d
  20.         ld (ix+oData.spriteId),BOOM_01_PBM_ID
  21.         jp OBJECTS.setObjectId
  22. ;-------------------------------------
  23. update:
  24.         ld a,(ix+oData.isDestroyed)
  25.         or a
  26.         jr nz,explosion
  27.  
  28.         ld c,%00000100
  29.         call blink
  30.         call delta7
  31.         ret nz
  32.         ld hl,BOOM_01_PBM
  33.         ld c,4
  34.         jp animation2x2
  35. ;-------------------------------------
  36. blink:
  37.         ; C = XOR value
  38.         ld a,(ix+oData.color)
  39.         xor c
  40.         ld (ix+oData.color),a
  41.         ld l,(ix+oData.clrScrAddrL)
  42.         ld h,(ix+oData.clrScrAddrH)
  43.         jp fillAttr2x2
  44. ;-------------------------------------
  45. cellOffset:     db #00,#01,#FF,#10,#F0
  46. explosion:
  47.         ld d,high levelCells
  48. .mLoop:
  49.         call SYSTEM.int
  50.         ld a,(ix+oData.color)
  51.         sub 1
  52.         jp c,OBJECTS.resetObjectIX
  53.         xor #40
  54.         ld (ix+oData.color),a
  55.         ld b,5
  56.         ld e,(ix+oData.cellId)
  57.         ld hl,cellOffset
  58. .loop:
  59.         push bc
  60.         push hl
  61.         push de
  62.         ld a,e
  63.         add (hl)
  64.         ld e,a
  65.         ld c,a
  66.         ld a,(de)
  67.         inc a
  68.         jr z,.noDestroyCell
  69.         dec a
  70.         exx
  71.         call getObjDataById    
  72.         ld (iy+oData.isDestroyed),1
  73.         exx
  74.         call getAttrAddrByCellId
  75.         ex de,hl
  76.         ld a,(ix+oData.color)
  77.         call fillAttr2x2
  78. .noDestroyCell:
  79.         pop de
  80.         pop hl
  81.         inc hl
  82.         pop bc
  83.         djnz .loop
  84.         exx
  85.         push ix
  86.         call SOUND_PLAYER.play
  87.         call POP_UP_INFO.show
  88.         pop ix
  89.         exx
  90.         jr .mLoop
  91. ;-------------------------------------
  92. setExplosion:
  93.         ; IX - other object
  94.         ; IY - this object
  95.         call OBJECTS.alignToCell
  96.         call OBJECTS.draw.oneObject
  97.         ld (ix+oData.isDestroyed),1
  98.         ld (iy+oData.isDestroyed),1
  99.         ld (iy+oData.color),#40
  100.         call POP_UP_INFO.setExplosion
  101.         jp SOUND_PLAYER.SET_SOUND.explosion
  102. ;-------------------------------------
  103.         endmodule
  104.