A WIP Roguelike game by Adekto, VonBednat, Trelemar and Wuuff made for CGAJam in spring 2017
Dependencies: PokittoLib
Fork of Arcade by
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
Generated on Sun Jul 17 2022 15:24:13 by 1.7.2