G2A Many GEOs
SHARE
TWEET

Untitled

a guest Mar 31st, 2019 96 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
Ledger Nano X - The secure hardware wallet
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