A WIP Roguelike game by Adekto, VonBednat, Trelemar and Wuuff made for CGAJam in spring 2017

Dependencies:   PokittoLib

Fork of Arcade by Pokitto Community Team

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers crapai.h Source File

crapai.h

00001 bool colide(int id, int x, int y, bool c){
00002     if (entities[id].x == x && entities[id].y == y) return false;
00003     else return c;
00004 }
00005 bool bonycolide(int x, int y){
00006     for(int i=0; i<entities.size(); ++i){
00007         if (entities[i].x == x && entities[i].y == y) return false;
00008     }
00009     return true;
00010 }
00011 bool entitiesLogic(int playerX, int playerY){
00012     bool nocolide = true;
00013 
00014     for(int i=0; i<entities.size(); ++i){
00015 
00016         switch(entities[i].id){
00017         case ID_BLOOD:
00018             if(rand()%10 == 1) entities[i].id = ID_BLOOD_SKELETON;
00019             break;
00020         case ID_SCROLL:
00021             playerHP += rand()%100;
00022             if(playerHP > 100){playerHP = 100;}
00023             sprintf(printer,"scroll of healing");
00024             break;
00025         case ID_CHEST:
00026             nocolide = colide(i,playerX,playerY,nocolide); //its wierd but works
00027             if(!colide(i,playerX,playerY,true)){
00028                     entities[i].id = ID_CHEST_OPEN;
00029                     sprintf(printer,"open chest, taken %i gold",  entities[i].hp);
00030                     playerGold += entities[i].hp;
00031                     entities[i].hp = 0;
00032             }
00033             break;
00034         case ID_CHEST_OPEN:
00035 
00036 
00037             break;
00038         case ENTITY_TILES + 15:
00039         case ENTITY_TILES + 16:
00040         case ENTITY_TILES + 17:
00041         case ENTITY_TILES + 18:
00042         case ENTITY_TILES + 19:
00043         case ENTITY_TILES + 20:
00044         case ID_BLOOD_SKELETON:
00045         case ID_RAT:
00046         case ID_GOBLIN_WARRIOR:
00047         case ID_GOBLIN_MAGE:
00048         case ID_SKELETON_MAGE:
00049         case ID_SKELETON_ARCHER:
00050         case ID_SKELETON_WARIOR:
00051         case ID_MIMIC:
00052             nocolide = colide(i,playerX,playerY,nocolide); //its wierd but works
00053             if(entities[i].x > playerX && colide(i,playerX+1,playerY,true)){
00054                 if (!solids[dungeon[entities[i].y][entities[i].x-1]]){
00055                     if(bonycolide(entities[i].x-1, entities[i].y)) entities[i].x-=1;}
00056                 }
00057             else if(!colide(i,playerX+1,playerY,true)) playerHP -=10;
00058 
00059             if(entities[i].x < playerX && colide(i,playerX-1,playerY,true)){
00060                 if (!solids[dungeon[entities[i].y][entities[i].x+1]]){
00061                     if(bonycolide(entities[i].x+1, entities[i].y)) entities[i].x+=1;}
00062                 }
00063             else if(!colide(i,playerX-1,playerY,true)) playerHP -=10;
00064 
00065             if(entities[i].y > playerY && colide(i,playerX,playerY+1,true)){
00066                 if (!solids[dungeon[entities[i].y-1][entities[i].x]])
00067                 {
00068                     if(bonycolide(entities[i].x, entities[i].y-1)) entities[i].y-=1;}
00069                 }
00070             else if(!colide(i,playerX,playerY+1,true)) playerHP -=10;
00071 
00072             if(entities[i].y < playerY && colide(i,playerX,playerY-1,true)){
00073                 if (!solids[dungeon[entities[i].y+1][entities[i].x]]){
00074                     if(bonycolide(entities[i].x, entities[i].y+1)) entities[i].y+=1;}
00075                 }
00076             else if(!colide(i,playerX,playerY-1,true)) playerHP -=10;
00077 
00078             if(!colide(i,playerX,playerY,true)){
00079                 entities[i].hp -= 1;
00080 
00081                 switch(entities[i].id){
00082                     case ID_BLOOD_SKELETON:
00083                         sprintf(printer,"hit blood skeleton, hp: %i",  entities[i].hp);
00084                         break;
00085                     case ID_RAT:
00086                         sprintf(printer,"hit giant rat, hp: %i",  entities[i].hp);
00087                         break;
00088                     case ID_GOBLIN_WARRIOR:
00089                         sprintf(printer,"hit goblin warrior, hp: %i",  entities[i].hp);
00090                         break;
00091                     case ID_GOBLIN_MAGE:
00092                         sprintf(printer,"hit goblin mage, hp: %i",  entities[i].hp);
00093                         break;
00094                     case ID_SKELETON_MAGE:
00095                         sprintf(printer,"hit skeleton mage, hp: %i",  entities[i].hp);
00096                         break;
00097                     case ID_SKELETON_ARCHER:
00098                         sprintf(printer,"hit skeleton archer, hp: %i",  entities[i].hp);
00099                         break;
00100                     case ID_SKELETON_WARIOR:
00101                         sprintf(printer,"hit skeleton warior, hp: %i",  entities[i].hp);
00102                         break;
00103                     case ID_MIMIC:
00104                         sprintf(printer,"hit mimic, hp: %i",  entities[i].hp);
00105                         break;
00106                     case ENTITY_TILES + 15:
00107                         sprintf(printer,"hit zombie, hp: %i",  entities[i].hp);
00108                         break;
00109                     case ENTITY_TILES + 16:
00110                         sprintf(printer,"hit bloated zombie, hp: %i",  entities[i].hp);
00111                         break;
00112                     case ENTITY_TILES + 17:
00113                         sprintf(printer,"hit fog, hp: %i",  entities[i].hp);
00114                         break;
00115                     case ENTITY_TILES + 18:
00116                         sprintf(printer,"hit spirit, hp: %i",  entities[i].hp);
00117                         break;
00118                     case ENTITY_TILES + 19:
00119                         sprintf(printer,"hit spawn, hp: %i",  entities[i].hp);
00120                         break;
00121                     case ENTITY_TILES + 20:
00122                         sprintf(printer,"hit giant worm, hp: %i",  entities[i].hp);
00123                         break;
00124                 }
00125                 if(entities[i].hp <= 0 && entities[i].id == ID_BLOOD_SKELETON){
00126                     entities[i].id = ID_BLOOD;
00127                     entities[i].hp = rand()%5;
00128                 }
00129                 else if(entities[i].hp <= 0){
00130 
00131                     int tpgold = rand()%5;
00132                     playerGold += tpgold;
00133                     sprintf(printer,"killed enemy, gained %i gold",  tpgold);
00134                     removeEntity(i);
00135                 }
00136 
00137             }
00138             break;
00139         default:
00140             printf("unknown entety %i\n", entities[i].id);
00141             break;
00142         }
00143     }
00144     return nocolide;
00145 }
00146 
00147