SHARE
TWEET

Untitled

a guest Mar 31st, 2019 88 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;   plot enemies and bullets if visible
  4. ;
  5. ;   depends on xmap,ymap
  6.  
  7. _plot_enemy:
  8.  
  9.     ld  iy,(alt_ram_sat)
  10.     ld  ix,enemies
  11.     ld  bc,max_enem*256+0
  12.    
  13.     ld  hl,(ymap)
  14.     ld  de,-16
  15.     add hl,de
  16.     ld  (tempy),hl
  17.  
  18.     ld  hl,(xmap)
  19.     ld  de,-32
  20.     add hl,de
  21.     ld  (tempx),hl
  22.  
  23. .npc_loop1:
  24.     res 7,(ix+enemy_data.status)    ; set it as invisible
  25.     bit 0,(ix+enemy_data.status)
  26.     jp  z,.next
  27.  
  28.     ld  l,(ix+enemy_data.y)
  29.     ld  h,(ix+enemy_data.y+1)
  30.     ld  de,(tempy)
  31.     and a
  32.     sbc hl,de       ; hl = enemy.y + 16 - ymap <0
  33.     jp  m,.next     ; enemy.y - ymap < -16
  34.  
  35.     ld  de,128+16
  36.     sbc hl,de       ; enemy.y - ymap + 16 - 128 - 16 >= 0
  37.     jp  nc,.next    ; enemy.y - ymap  >= 128
  38.     ld  e,128+64
  39.     add hl,de
  40.     ld  (iy+0),l
  41.     ld  (iy+0+4),l  ; not needed if single layer but in this way it is overall faster
  42.    
  43.     ld  l,(ix+enemy_data.x+0)
  44.     ld  h,(ix+enemy_data.x+1)
  45.     ld  de,(tempx)
  46.     and a          
  47.     sbc hl,de       ; hl = enemy.x + 32 - xmap < 0
  48.     jp  m,.next     ; hl <0  <==> dx = enemy.x - xmap < -32
  49.    
  50.     ld  de,32
  51.     sbc hl,de       ; enemy.x + 32 - xmap - 32 <0
  52.  
  53.     ld  a,(ix+enemy_data.color)
  54.     jp nc,.noec     ; -32< dx <0
  55.     or  128         ; set EC
  56.     add hl,de       ; add 32
  57. .noec
  58.     ld  e,a
  59.     ld  a,h
  60.     and a
  61.     jp  nz,.next    ; dx >255
  62.    
  63.     ld  a,(ix+enemy_data.frame)
  64.     cp  16*4                    ; hard coded in the SPT
  65.     jp  nc,.two_layers
  66.  
  67. .one_layer:
  68.     ld  (iy+1),l                ; write X
  69.     ld  (iy+2),a                ; write shape
  70.     ld  (iy+3),e                ; write colour
  71.     inc c
  72.     ld  e,4
  73.     add iy,de
  74.     set 7,(ix+enemy_data.status)    ; set it as visible
  75.     ; jp    .next
  76. ; .next:
  77.     ld  de,enemy_data
  78.     add ix,de
  79.     djnz    .npc_loop1
  80.     ld  a,c
  81.     ld  (alt_visible_sprts),a
  82.     ret
  83.    
  84. .two_layers:
  85.     ld  (iy+1),l                ; write X
  86.     ld  (iy+2),a                ; write shape
  87.     ld  (iy+3),e                ; write colour
  88.    
  89.     ld  (iy+1+4),l              ; second layer X
  90.     add a,4
  91.     ld  (iy+2+4),a              ; second layer shape
  92.     ld  a,e
  93.     and 0xF0
  94.     inc a                       ; second layer colour ; <--- (previously, "or 1")
  95.     ld  (iy+3+4),a 
  96. [2] inc c
  97.     ld  e,8
  98.     add iy,de
  99.     set 7,(ix+enemy_data.status)    ; set it as visible
  100.     ; jp    .next                   ; <--- (avoid jp)
  101. .next:                              ; <---
  102.     ld  de,enemy_data               ; <---
  103.     add ix,de                       ; <---
  104.     djnz    .npc_loop1              ; <---
  105.     ld  a,c                         ; <---
  106.     ld  (alt_visible_sprts),a       ; <---
  107.     ret                             ; <---
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top