Routines 
Prev: 26337  Up: Map  Next: 26459 
This updates a set of numerical values which control alien horde data. We have _ALIENS_LEFT_IN_ROWS which holds a 5 entry array containing the number of aliens in each row. One entry in that needs to be decremented. Then there's _ALIENS_LEFT_IN_COLs which holds an 11 entry array containing the number of aliens in each column. Decrement an entry in there too. _LOWEST_ACTIVE_ALIEN_ROW is then recalculated so we know which is the lowest on screen row which still has at least one alien left in it. _LEFTMOST_ACTIVE_ALIEN_COL and _RIGHTMOST_ACTIVE_ALIEN_COL are then recalculated so we know how far across the horde has to move left to right.
Used by the routine at alien_hit.


Start by decrementing the number of aliens in the hit alien's row


recalc_horde_stats  26375  LD HL,_ALIENS_LEFT_IN_ROWS  Find this row's entry in the table which holds the number of aliens left in each row (0 to 11). Decrement it.  
26378  LD A,(_HIT_ALIEN_ROW)  
26381  CALL add_a_to_hl_2  
26384  DEC (HL)  
Now decrement the number of aliens in the hit alien's column


26385  LD HL,_ALIENS_LEFT_IN_COLs  Find the column the hit alien is in and get the aliensleft value for that column (0 to 5). Decrement it. IX value set here appears to be redundant.  
26388  LD IX,_ALIEN_ROW_PTR  
26392  LD A,(_CX_OFFSET_HIT_ALIEN)  
26395  SRL A  
26397  CALL add_a_to_hl_2  
26400  DEC (HL)  
The row and columns tables have been decremented, so now update the values which store the extremes of the horde. If the last alien in a row and/or column was just zapped we need to update these values.
Look for row with at least one alien in it. Work from the bottom row upwards.


26401  LD HL,_ALIENS_LEFT_IN_ROWS  Pick up the numberleftinrows table  
26404  LD A,(_LOWEST_ACTIVE_ALIEN_ROW)  Current lowest screen row with at least one alien left  
26407  INC A  Make it correct for this purpose  
26408  LD B,A  B is the counter for this loop  
26409  CALL add_a_to_hl_2  Find entry in alien rows table  
26412  XOR A  Zero A  
recalc_horde_stats_0  26413  DEC HL  We're going from bottom row to top. HL is now the row above where we last thought the lowest empty row was.  
26414  DEC B  Move up a row  is the number of aliens in this row zero?  
26415  OR (HL)  
26416  JR Z,recalc_horde_stats_0  Yes, jump back to check next row up.  
B now contains index of the lowest nonempty alien row. Update _LOWEST_ACTIVE_ALIEN_ROW with that.


26418  LD A,B  Update value which stores the lowest screen row with at least one alien  
26419  LD (_LOWEST_ACTIVE_ALIEN_ROW),A  
Look for the left most column with an alien still in it


26422  LD B,255  B is 1 for the start of the loop  
26424  LD HL,_ALIENS_LEFT_IN_COLs  HL is number of aliens in column table  
26427  XOR A  Zero A  
26428  DEC HL  Back one, just for the loop  
recalc_horde_stats_1  26429  INC HL  Move along the aliensincols table looking for the first entry with nonzero aliens. That's what we're looking for.  
26430  INC B  
26431  OR (HL)  
26432  JR Z,recalc_horde_stats_1  
Nonempty column on left side found, its index is in B


26434  LD A,B  A contains index of leftmost nonempty alien column. Store that.  
26435  LD (_LEFTMOST_ACTIVE_ALIEN_COL),A  
Look for the right most column with an alien still in it


26438  LD HL,_ALIENS_LEFT_IN_COLs  HL is number of aliens in column table  
26441  LD A,11  B starts at 12  
26443  LD B,A  
26444  INC B  
26445  CALL add_a_to_hl_2  HL contains right most column  
26448  XOR A  Zero A  
recalc_horde_stats_2  26449  DEC HL  Work back leftwards, looking for the first column which has a nonzero number of aliens in it.  
26450  DEC B  
26451  OR (HL)  
26452  JR Z,recalc_horde_stats_2  
Nonempty column on right side found, its index is in B


26454  LD A,B  A contains index of rightmost nonempty alien column. Store that.  
26455  LD (_RIGHTMOST_ACTIVE_ALIEN_COL),A  
26458  RET 
Prev: 26337  Up: Map  Next: 26459 