You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
337 lines
7.7 KiB
337 lines
7.7 KiB
#include "alien.h" |
|
|
|
int leftLim; |
|
int rightLim; |
|
|
|
void renderAlien(unsigned int* framePointer) { |
|
if(getGuise() == 0) { |
|
setGuise(1); |
|
renderAlien1(framePointer); |
|
}else { |
|
setGuise(0); |
|
renderAlien2(framePointer); |
|
} |
|
} |
|
|
|
void renderAlien1(unsigned int* framePointer) { |
|
short alienx, alieny; |
|
alienx = getAlienBlockPositionX(); |
|
alieny = getAlienBlockPositionY(); |
|
short row=0, col=0; |
|
short line = 0; |
|
short position = 0; |
|
short* aliens = getAliens(); |
|
for(line = 0; line < 10; line++) { |
|
if(line % 2 == 1) { |
|
alieny += 10; |
|
} |
|
else { |
|
if(line == 0) { |
|
for(row=0; row<16; row++) { |
|
short position_helper = -1; |
|
for(col=0; col<352; col++) { |
|
if (((topAlien1[row%16] & (1<<(32-1-col)))) && aliens[position+position_helper] == 1) { |
|
framePointer[alieny*640 + alienx] = 0x00FFFFFF; |
|
} |
|
// else if(aliens[position+position_helper] == 0) { |
|
// |
|
// } |
|
else { |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
} |
|
if(col % 32 == 0) { |
|
position_helper++; |
|
} |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
if(line == 2 || line == 4) { |
|
position += 11; |
|
for(row=0; row<16; row++) { |
|
short position_helper = -1; |
|
for(col=0; col<352; col++) { |
|
if (((middleAlien1[row%16] & (1<<(32-1-col)))) && aliens[position+position_helper] == 1) { |
|
framePointer[alieny*640 + alienx] = 0x00FFFFFF; |
|
} |
|
// else if(aliens[position+position_helper] == 0) { |
|
// |
|
// } |
|
else { |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
} |
|
if(col % 32 == 0) { |
|
position_helper++; |
|
} |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
if(line == 6 || line == 8) { |
|
position += 11; |
|
for(row=0; row<16; row++) { |
|
short position_helper = -1; |
|
for(col=0; col<352; col++) { |
|
if (((bottomAlien1[row%16] & (1<<(32-1-col))))&& aliens[position+position_helper] == 1) { |
|
framePointer[alieny*640 + alienx] = 0x00FFFFFF; |
|
} |
|
// else if( aliens[position+position_helper] == 0) { |
|
// |
|
// } |
|
else { |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
} |
|
if(col % 32 == 0) { |
|
position_helper++; |
|
} |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
void renderAlien2(unsigned int* framePointer) { |
|
short alienx, alieny; |
|
alienx = getAlienBlockPositionX(); |
|
alieny = getAlienBlockPositionY(); |
|
short row=0, col=0; |
|
short line = 0; |
|
short position = 0; |
|
short* aliens = getAliens(); |
|
for(line = 0; line < 10; line++) { |
|
if(line % 2 == 1) { |
|
alieny += 10; |
|
} |
|
else { |
|
if(line == 0) { |
|
for(row=0; row<16; row++) { |
|
short position_helper = -1; |
|
for(col=0; col<352; col++) { |
|
if (((topAlien2[row%16] & (1<<(32-1-col)))) && aliens[position+position_helper] == 1) { |
|
framePointer[alieny*640 + alienx] = 0x00FFFFFF; |
|
} |
|
// else if(aliens[position+position_helper] == 0) { |
|
// |
|
// } |
|
else { |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
} |
|
if(col % 32 == 0) { |
|
position_helper++; |
|
} |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
if(line == 2 || line == 4) { |
|
position += 11; |
|
for(row=0; row<16; row++) { |
|
short position_helper = -1; |
|
for(col=0; col<352; col++) { |
|
if (((middleAlien2[row%16] & (1<<(32-1-col))))&& aliens[position+position_helper] == 1) { |
|
framePointer[alieny*640 + alienx] = 0x00FFFFFF; |
|
} |
|
// else if(aliens[position+position_helper] == 0) { |
|
// |
|
// } |
|
else { |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
} |
|
if(col % 32 == 0) { |
|
position_helper++; |
|
} |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
if(line == 6 || line == 8) { |
|
position += 11; |
|
for(row=0; row<16; row++) { |
|
short position_helper = -1; |
|
for(col=0; col<352; col++) { |
|
if (((bottomAlien2[row%16] & (1<<(32-1-col))))&& aliens[position+position_helper] == 1) { |
|
framePointer[alieny*640 + alienx] = 0x00FFFFFF; |
|
} |
|
// else if(aliens[position+position_helper] == 0) { |
|
// |
|
// } |
|
else { |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
} |
|
if(col % 32 == 0) { |
|
position_helper++; |
|
} |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
void blankAlien(unsigned int* framePointer){ |
|
short alienx, alieny; |
|
alienx = getAlienBlockPositionX(); |
|
alieny = getAlienBlockPositionY(); |
|
short row=0, col=0; |
|
for(row = 0; row < 130; row++){ |
|
for(col = 0; col < 352; col++){ |
|
framePointer[alieny*640 + alienx] = 0x00000000; |
|
alienx++; |
|
} |
|
alienx=getAlienBlockPositionX(); |
|
alieny++; |
|
} |
|
} |
|
|
|
void dyingAlien(unsigned int* framePointer, short alienx, short alieny) { |
|
short row=0, col=0; |
|
for(row = 0; row < 16; row++){ |
|
for(col = 0; col < 32; col++){ |
|
if ((dying_alien[row%16] & (1<<(32-1-col)))) { |
|
framePointer[(alieny+row)*640 + alienx+col] = 0x00FFFFFE; |
|
} else { |
|
framePointer[(alieny+row)*640 + alienx+col] = 0x00000000; |
|
} |
|
} |
|
} |
|
} |
|
|
|
void dyingAlienHelper(unsigned int* framePointer, short alienx, short alieny) { |
|
short row=0, col=0; |
|
for(row = 0; row < 16; row++){ |
|
for(col = 0; col < 32; col++){ |
|
framePointer[(alieny+row)*640 + alienx+col] = 0x00000000; |
|
} |
|
} |
|
} |
|
|
|
int columnCheck(int value) { |
|
short* aliens = getAliens(); |
|
if(aliens[value] == 0 && aliens[value+11] == 0 && aliens[value+22] == 0 && aliens[value+33] == 0 && aliens[value+44] == 0) { |
|
return 0; |
|
} |
|
return 1; |
|
} |
|
|
|
int setRightMax() { |
|
int max = 352; |
|
if(!columnCheck(10)) { |
|
max = 320; |
|
if(!columnCheck(9)) { |
|
max = 288; |
|
if(!columnCheck(8)) { |
|
max = 256; |
|
if(!columnCheck(7)) { |
|
max = 224; |
|
if(!columnCheck(6)) { |
|
max = 192; |
|
if(!columnCheck(5)) { |
|
max = 160; |
|
if(!columnCheck(4)) { |
|
max = 128; |
|
if(!columnCheck(3)) { |
|
max = 96; |
|
if(!columnCheck(2)) { |
|
max = 64; |
|
if(!columnCheck(1)) { |
|
max = 32; |
|
if(!columnCheck(0)) { |
|
max = 0; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return max; |
|
} |
|
|
|
int setLeftMin() { |
|
int min = 0; |
|
if(!columnCheck(0)) { |
|
min = 32; |
|
if(!columnCheck(1)) { |
|
min = 64; |
|
if(!columnCheck(2)) { |
|
min = 96; |
|
if(!columnCheck(3)) { |
|
min = 128; |
|
if(!columnCheck(4)) { |
|
min = 160; |
|
if(!columnCheck(5)) { |
|
min = 192; |
|
if(!columnCheck(6)) { |
|
min = 224; |
|
if(!columnCheck(7)) { |
|
min = 256; |
|
if(!columnCheck(8)) { |
|
min = 288; |
|
if(!columnCheck(9)) { |
|
min = 320; |
|
if(!columnCheck(10)) { |
|
min = 352; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return min; |
|
} |
|
|
|
void moveAlien(unsigned int* framePointer) { |
|
short dir = getDirection(); |
|
short alienx, alieny; |
|
alienx = getAlienBlockPositionX(); |
|
alieny = getAlienBlockPositionY(); |
|
int right = setRightMax(); |
|
if((alienx+right) == 640 && dir == 0) { |
|
setDirection(1); |
|
blankAlien(framePointer); |
|
alieny += 8; |
|
setAlienBlockPosition(alienx, alieny); |
|
|
|
} |
|
int left = 0 - setLeftMin(); |
|
if(alienx == left && dir == 1) { |
|
setDirection(0); |
|
blankAlien(framePointer); |
|
alieny += 8; |
|
setAlienBlockPosition(alienx, alieny); |
|
|
|
} |
|
if(dir == 0) { |
|
alienx += 4; |
|
setAlienBlockPosition(alienx, alieny); |
|
} |
|
else { |
|
alienx -= 4; |
|
setAlienBlockPosition(alienx, alieny); |
|
} |
|
} |
|
|
|
|