Add shotgun

main
Jerry Aldrich 11 years ago
parent 6d61c742a0
commit a3cf90b549
  1. 18
      collisionDetection.c
  2. 11
      drawWindows.c
  3. 40
      events.c
  4. 8
      gameLoop.c
  5. 7
      initializeWorld.c
  6. 226
      weaponsSystem.c
  7. 2
      world.h

@ -72,10 +72,26 @@ void checkPlayerCollision(){
addMagazine(&allEntities[0].weapons[1]); addMagazine(&allEntities[0].weapons[1]);
collisionEvent.collidedWithItem->isAlive=0; collisionEvent.collidedWithItem->isAlive=0;
} }
else{ else if(!allEntities[0].weapons[1].isAlive){
allEntities[0].weapons[1].isAlive=1; allEntities[0].weapons[1].isAlive=1;
allEntities[0].weapons[1].curCapacity=allEntities[0].weapons[1].maxCapacity; allEntities[0].weapons[1].curCapacity=allEntities[0].weapons[1].maxCapacity;
if(allEntities[0].curWeapon==0){
allEntities[0].curWeapon=1; allEntities[0].curWeapon=1;
}
collisionEvent.collidedWithItem->isAlive=0;
}
}
if(!strcmp(collisionEvent.collidedWithItem->type,"Shotgun")){
if(allEntities[0].weapons[2].isAlive){
addMagazine(&allEntities[0].weapons[2]);
collisionEvent.collidedWithItem->isAlive=0;
}
else if(!allEntities[0].weapons[2].isAlive){
allEntities[0].weapons[2].isAlive=1;
allEntities[0].weapons[2].curCapacity=allEntities[0].weapons[2].maxCapacity;
if(allEntities[0].curWeapon==0){
allEntities[0].curWeapon=2;
}
collisionEvent.collidedWithItem->isAlive=0; collisionEvent.collidedWithItem->isAlive=0;
} }
} }

@ -95,8 +95,15 @@ void updateInfoWin(){
mvwaddch(infoWin, 2, 31, ACS_VLINE); mvwaddch(infoWin, 2, 31, ACS_VLINE);
mvwaddch(infoWin, 3, 31, ACS_LLCORNER); mvwaddch(infoWin, 3, 31, ACS_LLCORNER);
mvwaddch(infoWin, 1, 32, ACS_HLINE); mvwaddch(infoWin, 1, 32, ACS_HLINE);
if(allEntities[0].weapons[2].type && !strcmp(allEntities[0].weapons[2].type,"Shotgun")){ if(!strcmp(allEntities[0].weapons[2].type,"Shotgun") && allEntities[0].weapons[2].isAlive){
mvwprintw(infoWin, 2, 32, "2"); if(allEntities[0].curWeapon==2){
wattron(infoWin,A_BOLD);
mvwprintw(infoWin, 2, 32, "2" );
wattroff(infoWin,A_BOLD);
}
else{
mvwprintw(infoWin, 2, 32, "2" );
}
} }
mvwaddch(infoWin, 3, 32, ACS_HLINE); mvwaddch(infoWin, 3, 32, ACS_HLINE);
mvwaddch(infoWin, 1, 33, ACS_URCORNER); mvwaddch(infoWin, 1, 33, ACS_URCORNER);

@ -17,16 +17,48 @@ void addItem(char *type, int yPos, int xPos){
} }
} }
} }
if(!strcmp(type,"Shotgun")){
struct Item shotgunItem = {.type="Shotgun", .symbol='s', .isAlive=1, .curXpos=xPos, .curYpos=yPos};
int i;
for (i=0;i<MAX_ITEMS;i++){
if(!allItems[i].isAlive){
allItems[i]=shotgunItem;
break;
}
}
}
} }
void tryRandomEvent(){ void tryRandomEvent(){
int eventTrigger = (rand()%100)+1; int eventTrigger = (rand()%100)+1;
if (eventTrigger < 15+itemModifier){
struct OpenPos openPos = getOpenPos();
addItem("Pistol", openPos.y, openPos.x);
}
if (eventTrigger < 1+zombieModifier){ if (eventTrigger < 1+zombieModifier){
struct OpenPos openPos = getOpenPos(); struct OpenPos openPos = getOpenPos();
addZombie(openPos.y, openPos.x); addZombie(openPos.y, openPos.x);
} }
if (eventTrigger < 5+itemModifier){
int i;
int x=0;
for (i=0;i<MAX_ITEMS;i++){
if(allItems[i].isAlive && !strcmp(allItems[i].type,"Shotgun")){
x++;
}
}
if(x==0){
struct OpenPos openPos = getOpenPos();
addItem("Shotgun", openPos.y, openPos.x);
}
}
if (eventTrigger < 10+itemModifier){
int i;
int x=0;
for (i=0;i<MAX_ITEMS;i++){
if(allItems[i].type && !strcmp(allItems[i].type,"Pistol")){
x++;
}
}
if(x<3){
struct OpenPos openPos = getOpenPos();
addItem("Pistol", openPos.y, openPos.x);
}
}
} }

@ -99,25 +99,25 @@ void gameLoop(){
break; break;
} }
case '1':{ case '1':{
if(allEntities[0].weapons[0].isAlive){ if(allEntities[0].weapons[1].isAlive){
allEntities[0].curWeapon=1; allEntities[0].curWeapon=1;
} }
break; break;
} }
case '2':{ case '2':{
if(allEntities[0].weapons[2].curCapacity > 0 || allEntities[0].weapons[2].curMags > 0){ if(allEntities[0].weapons[2].isAlive){
allEntities[0].curWeapon=2; allEntities[0].curWeapon=2;
} }
break; break;
} }
case '3':{ case '3':{
if(allEntities[0].weapons[3].curCapacity > 0 || allEntities[0].weapons[3].curMags > 0){ if(allEntities[0].weapons[3].isAlive){
allEntities[0].curWeapon=3; allEntities[0].curWeapon=3;
} }
break; break;
} }
case '4':{ case '4':{
if(allEntities[0].weapons[4].curCapacity > 0 || allEntities[0].weapons[4].curMags > 0){ if(allEntities[0].weapons[4].isAlive){
allEntities[0].curWeapon=4; allEntities[0].curWeapon=4;
} }
break; break;

@ -22,9 +22,9 @@ void initializeWorld() {
itemModifier=0; itemModifier=0;
struct Entity player = {.type="player", .symbol='@', .isAlive=1}; struct Entity player = {.type="player", .symbol='@', .isAlive=1};
struct Weapon fists = {.type="Fists", .isAlive=1, .projectileRange=2, .maxCapacity=0, .curCapacity=0, .symbols="-\\|/-\\|/", .projectileSpeed=.03}; struct Weapon fists = {.type="Fists", .isAlive=1, .projectileRange=1, .maxCapacity=0, .curCapacity=0, .symbols="-\\|/-\\|/", .projectileSpeed=.03};
struct Weapon pistol = {.type="Pistol", .isAlive=1, .projectileRange=10, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/", .projectileSpeed=.02}; struct Weapon pistol = {.type="Pistol", .isAlive=0, .projectileRange=10, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/", .projectileSpeed=.03};
struct Weapon shotgun = {.type="Shotgun", .isAlive=0, .projectileRange=1, .maxCapacity=5, .curCapacity=5, .symbols="-\\|/-\\|/", .projectileSpeed=.05};
passableChars="#"; passableChars="#";
unpassableChars="+"; unpassableChars="+";
@ -52,6 +52,7 @@ void initializeWorld() {
allEntities[0].prevXpos=allEntities[0].curXpos; allEntities[0].prevXpos=allEntities[0].curXpos;
allEntities[0].weapons[0]=fists; allEntities[0].weapons[0]=fists;
allEntities[0].weapons[1]=pistol; allEntities[0].weapons[1]=pistol;
allEntities[0].weapons[2]=shotgun;
allEntities[0].curWeapon=0; allEntities[0].curWeapon=0;
updateInfoWin(); updateInfoWin();

@ -52,18 +52,22 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
if(allEntities[0].curWeapon==0){ if(allEntities[0].curWeapon==0){
if(!strcmp(direction,"up")){ if(!strcmp(direction,"up")){
projectile.direction='w'; projectile.direction='w';
projectile.curYpos--;
projectile.symbol=weaponRef->symbols[2]; projectile.symbol=weaponRef->symbols[2];
} }
if(!strcmp(direction,"left")){ if(!strcmp(direction,"left")){
projectile.direction='a'; projectile.direction='a';
projectile.curXpos--;
projectile.symbol=weaponRef->symbols[0]; projectile.symbol=weaponRef->symbols[0];
} }
if(!strcmp(direction,"down")){ if(!strcmp(direction,"down")){
projectile.direction='s'; projectile.direction='s';
projectile.curYpos++;
projectile.symbol=weaponRef->symbols[6]; projectile.symbol=weaponRef->symbols[6];
} }
if(!strcmp(direction,"right")){ if(!strcmp(direction,"right")){
projectile.direction='d'; projectile.direction='d';
projectile.curXpos++;
projectile.symbol=weaponRef->symbols[4]; projectile.symbol=weaponRef->symbols[4];
} }
int i; int i;
@ -74,6 +78,224 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
} }
} }
} }
else if(allEntities[0].curWeapon==2){
if(!strcmp(direction,"up")){
projectile.direction='w';
projectile.curYpos--;
projectile.symbol=weaponRef->symbols[2];
}
if(!strcmp(direction,"left")){
projectile.direction='a';
projectile.curXpos--;
projectile.symbol=weaponRef->symbols[0];
}
if(!strcmp(direction,"down")){
projectile.direction='s';
projectile.curYpos++;
projectile.symbol=weaponRef->symbols[6];
}
if(!strcmp(direction,"right")){
projectile.direction='d';
projectile.curXpos++;
projectile.symbol=weaponRef->symbols[4];
}
int i;
for(i=0;i<MAX_PROJECTILES;i++){
if(!allProjectiles[i].isAlive && !allProjectiles[i+1].isAlive){
allEntities[0].projectilesFired++;
int x;
for(x=0;x<15;x++){
if(!allProjectiles[i+x].isAlive){
allProjectiles[i+x]=projectile;
}
if(x==1){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].symbol='\\';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].symbol='\\';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].symbol='/';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='/';
}
}
if(x==2){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='-';
}
}
if(x==3){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='/';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].symbol='/';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='\\';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='\\';
}
}
if(x==4){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos-=2;
allProjectiles[i+x].curXpos-=2;
allProjectiles[i+x].symbol='\\';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos-=2;
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos+=2;
allProjectiles[i+x].curXpos-=2;
allProjectiles[i+x].symbol='/';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].curXpos+=2;
allProjectiles[i+x].symbol='-';
}
}
if(x==5){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos-=2;
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos-=2;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos+=2;
allProjectiles[i+x].curXpos--;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curXpos+=2;
allProjectiles[i+x].symbol='-';
}
}
if(x==6){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos-=2;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos-=2;
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos+=2;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curXpos+=2;
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].symbol='-';
}
}
if(x==7){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos-=2;
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos-=3;
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos+=2;
allProjectiles[i+x].curXpos++;
allProjectiles[i+x].symbol='|';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curXpos+=3;
allProjectiles[i+x].curYpos--;
allProjectiles[i+x].symbol='-';
}
}
if(x==8){
if(projectile.direction=='w'){
allProjectiles[i+x].curYpos-=2;
allProjectiles[i+x].curXpos+=2;
allProjectiles[i+x].symbol='/';
}
if(projectile.direction=='a'){
allProjectiles[i+x].curXpos-=3;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='s'){
allProjectiles[i+x].curYpos+=2;
allProjectiles[i+x].curXpos+=2;
allProjectiles[i+x].symbol='\\';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curXpos+=3;
allProjectiles[i+x].symbol='-';
}
}
if(x==9){
if(projectile.direction=='a'){
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].curXpos-=3;
allProjectiles[i+x].symbol='-';
}
if(projectile.direction=='d'){
allProjectiles[i+x].curXpos+=3;
allProjectiles[i+x].curYpos++;
allProjectiles[i+x].symbol='-';
}
}
}
}
allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--;
allEntities[0].projectilesFired++;
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity==0 && allEntities[0].weapons[allEntities[0].curWeapon].curMags==0){
allEntities[0].weapons[allEntities[0].curWeapon].isAlive=0;
}
break;
}
}
else{ else{
if(!strcmp(direction,"up")){ if(!strcmp(direction,"up")){
projectile.range*=.4; projectile.range*=.4;
@ -99,11 +321,9 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
allEntities[0].projectilesFired++; allEntities[0].projectilesFired++;
allProjectiles[i]=projectile; allProjectiles[i]=projectile;
allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--; allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--;
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity==0 && allEntities[0].weapons[allEntities[0].curWeapon].curMags==0 if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity==0 && allEntities[0].weapons[allEntities[0].curWeapon].curMags==0){
){
allEntities[0].weapons[allEntities[0].curWeapon].isAlive=0; allEntities[0].weapons[allEntities[0].curWeapon].isAlive=0;
} }
break; break;
} }
} }

@ -21,7 +21,7 @@ int infoWinRows,infoWinCols;
struct Entity allEntities[MAX_ENTITIES]; struct Entity allEntities[MAX_ENTITIES];
struct Item allItems[MAX_ITEMS]; struct Item allItems[MAX_ITEMS];
#define MAX_PROJECTILES 5 #define MAX_PROJECTILES 100
struct Projectile allProjectiles[MAX_PROJECTILES]; struct Projectile allProjectiles[MAX_PROJECTILES];
#define INITIAL_SPAWN_NUM 10 #define INITIAL_SPAWN_NUM 10

Loading…
Cancel
Save