void killemerald(int16_t x,int16_t y) { if (emfield[(y+1)*MWIDTH+x]&emmask) { emfield[(y+1)*MWIDTH+x]&=~emmask; eraseemerald(x*20+12,(y+1)*18+21); } }
void killemerald(Sint4 x,Sint4 y) { if (emfield[(y+1)*MWIDTH+x]&emmask) { emfield[(y+1)*MWIDTH+x]&=~emmask; eraseemerald(x*20+12,(y+1)*18+21); } }
bool hitemerald(int16_t x,int16_t y,int16_t rx,int16_t ry,int16_t dir) { bool hit=false; int16_t r; if (dir!=DIR_RIGHT && dir!=DIR_UP && dir!=DIR_LEFT && dir!=DIR_DOWN) return hit; if (dir==DIR_RIGHT && rx!=0) x++; if (dir==DIR_DOWN && ry!=0) y++; if (dir==DIR_RIGHT || dir==DIR_LEFT) r=rx; else r=ry; if (emfield[y*MWIDTH+x]&emmask) { if (r==embox[dir]) { drawemerald(x*20+12,y*18+21); incpenalty(); } if (r==embox[dir+1]) { eraseemerald(x*20+12,y*18+21); incpenalty(); hit=true; emfield[y*MWIDTH+x]&=~emmask; } } return hit; }
bool hitemerald(Sint4 x,Sint4 y,Sint4 rx,Sint4 ry,Sint4 dir) { bool hit=FALSE; Sint4 r; if (dir!=DIR_RIGHT && dir!=DIR_UP && dir!=DIR_LEFT && dir!=DIR_DOWN) return hit; if (dir==DIR_RIGHT && rx!=0) x++; if (dir==DIR_DOWN && ry!=0) y++; if (dir==DIR_RIGHT || dir==DIR_LEFT) r=rx; else r=ry; if (emfield[y*MWIDTH+x]&emmask) { if (r==embox[dir]) { drawemerald(x*20+12,y*18+21); incpenalty(); } if (r==embox[dir+1]) { eraseemerald(x*20+12,y*18+21); incpenalty(); hit=TRUE; emfield[y*MWIDTH+x]&=~emmask; } } return hit; }