void enemybulletThink(entity *self) { self->rotation.y+=50; self->s.x += (float)(cos(self->v.y)*1); self->s.y += (float)(sin(self->v.y)*1); if(self->modelColor[1] >= 0.5f) { self->state = 1; } if(self->modelColor[1] <= 0.0f) { self->state = 0; } if(self->state == 1) { self->modelColor[1] -= 0.1f; } if(self->state == 0) { self->modelColor[1] += 0.1f; } if(self->s.y < -50.0f || self->s.y > 50.0f || self->s.x < -50.0f || self->s.x > 50.0f|| self->health <= 0) { freeEntity(self); } }
bool shoot(Entity shooter, Position shotAt){ if(getEntityAt(shotAt)->type == ET_ZOMBIE){ if(shooter->remainingPoints > 0){ //if the random number is greater than the number of moves, the shot hits unsigned int distance = calculateDistance(shooter->position, shotAt); if((rand()%50) > distance + score*.1){ //hit Entity e = grid[shotAt.x][shotAt.y]; grid[shotAt.x][shotAt.y] = NULL; score++; freeEntity(e); } else{ //miss } shooter->remainingPoints -= 1; return true; } else{ return false; } } else{ return false; } }
void enemy3Think(entity *self) { if(self->cooldown > 0)self->cooldown--; if(self->s.y > 40.0f) { self->shown = 0; self->solid = 0; }else { self->shown = 1; self->solid = 1; } if(self->s.y > 30.0f) { self->s.y -= 1; }else self->s.y -= enemy3speed; if( self->cooldown <= 0) { self->cooldown = 35; spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.3f); spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.5f); spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.7f); spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.1f); spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.9f); } if( self->cooldown == 15) { spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.3f); spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.5f); spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.7f); spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.1f); spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.9f); } if(self->bigcooldown > 0)self->bigcooldown--; if(self->state == HIT) { self->bigcooldown = 3; self->state = -1; self->modelColor[0] = 1.0f; self->modelColor[1] = 0.0f; self->modelColor[2] = 0.0f; self->modelColor[3] = 1.0f; } if(self->bigcooldown <= 0) { self->state = -1; self->modelColor[0] = enemy3Color.x; self->modelColor[1] = enemy3Color.y; self->modelColor[2] = enemy3Color.z; self->modelColor[3] = 1.0f; } if(self->health <= 0 || self->s.y <= -80.0f) { spawnExplosion(self->s.x,self->s.y,self->s.z, 1.0f); if(self->health <= 0) score += 180; freeEntity(self); } }
void freeEntity(entity *e) { if (e == NULL) return; debug(DEBUG_TDS, "\033[01;36mfreeEntity\033[0m"); freeEntity(e->brother); free(e); }
void ClearEntities() { int i; for(i = 0;i < MAXENTITIES;i++) { freeEntity(&EntityList[i]); } }
void enemy1Think(entity *self) { float dy,dx; if(self->s.y > 40.0f) { self->shown = 0; self->solid = 0; }else { self->shown = 1; self->solid = 1; } if(self->cooldown > 0)self->cooldown--; if(self->state2 == 1 && self->cooldown <= 0) { self->s.x += (float)(cos(self->v.y)*enemy1speed); self->s.y += (float)(sin(self->v.y)*enemy1speed); self->rotation.y+=30; }else if(self->cooldown <= 0) { self->s.y -= 1; self->rotation.y+=10; } if(self->state2 == 1 && self->cooldown > 0)self->rotation.y+=10; if(self->s.y < 20.0f && self->state2 == 0) { dy=playerPos.y-self->s.y; dx=playerPos.x-self->s.x; self->v.y=(float)atan2(dy,dx); self->state2 = 1; self->cooldown = 10; } if(self->bigcooldown > 0)self->bigcooldown--; if(self->state == HIT) { self->bigcooldown = 3; self->state = -1; self->modelColor[0] = 1.0f; self->modelColor[1] = 0.0f; self->modelColor[2] = 0.0f; self->modelColor[3] = 1.0f; } if(self->bigcooldown <= 0) { self->state = -1; self->modelColor[0] = enemy1Color.x; self->modelColor[1] = enemy1Color.y; self->modelColor[2] = enemy1Color.z; self->modelColor[3] = 1.0f; } if(((self->s.y < -50.0f || self->s.y > 50.0f || self->s.x < -50.0f || self->s.x > 50.0f) && self->state2 == 1) || self->health <= 0) { spawnExplosion(self->s.x,self->s.y,self->s.z, 0.2f); if(self->health <= 0) score += 30; freeEntity(self); } }
void freeScope(scope *scope) { if (scope == NULL) return; debug(DEBUG_TDS, "\033[01;36mfreeScope\033[0m"); freeScope(scope->children); freeScope(scope->brother); freeEntity(scope->entities); free(scope); }
void mineThink(entity *self) { Coord TempS; /*temp position*/ Coord cam; bsp *node; int i; Coord downvect; self->rotation.z+=10; UpdatePosition(self); cam.x = self->s.x; cam.y = self->s.y; cam.z = self->s.z; downvect.x = 0; downvect.y = 0; downvect.z = -1; node = checkBsp(self->s); for (i = 0; i < node->numTris; i++) { if(RayInTriangle(cam, downvect, node->triList[i]->v1, node->triList[i]->v2, node->triList[i]->v3, &TempS) == -1) { self->s.z=TempS.z+2; break; } } if(self->s.x > maxx || self->s.x < minx || self->s.y > maxy || self->s.y < miny) { if(self->state==Top) { SpawnMine(crandom(w),maxy,0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state); } if(self->state==Bottom) { SpawnMine(crandom(w),miny,0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state); } if(self->state==Right) { SpawnMine(maxx,crandom(h),0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state); } if(self->state==Left) { SpawnMine(minx,crandom(h),0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state); } freeEntity(self); return; } }
void playerupdate(entity *self) { playerPos=self->s; playerlife=self->lives; if(self->deadcool > 0) { self->solid=0; if(self->deadcool%5) { self->modelColor[0] = 1.0f; self->modelColor[1] = 1.0f; self->modelColor[2] = 1.0f; self->modelColor[3] = 0.1f; }else { self->modelColor[0] = playerColor.x; self->modelColor[1] = playerColor.y; self->modelColor[2] = playerColor.z; self->modelColor[3] = 1.0f; } }else { self->solid=1; self->modelColor[0] = playerColor.x; self->modelColor[1] = playerColor.y; self->modelColor[2] = playerColor.z; self->modelColor[3] = 1.0f; } if(self->health <= 0) { spawnExplosion(self->s.x,self->s.y,self->s.z, 1.0f); self->deadcool= 60; self->lives--; if(self->lives < 0) { freeEntity(self); inMenu = 1; return; } self->health = 1; self->s.y = -20; self->s.x = 0; } }
void BossThink(entity *self) { float dy,dx; if(self->s.y > 20.0f) { self->shown = 0; self->solid = 0; self->s.y -= 1; }else { self->shown = 1; self->solid = 1; DrawHealth(self->health*0.15f, self->maxHealth, 1, 0, 0); if(self->cooldown > 0)self->cooldown--; if(self->state2 ==1) { self->s.x-= 0.5f; if(self->s.x <= -20.0f) { self->s.x = -20.0f; self->state2=2; } } if(self->state2 ==2) { self->s.x+= 0.5f; if(self->s.x >= 20.0f) { self->s.x = 20.0f; self->state2=1; } } if(self->cooldown%5==0 && self->cooldown <= 40) { dy=playerPos.y-self->s.y; dx=playerPos.x-self->s.x; self->v.y=(float)atan2(dy,dx); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.8f); } if( self->cooldown <= 200 && self->cooldown>= 115 && self->cooldown%8==0) { dy=playerPos.y-self->s.y; dx=playerPos.x-self->s.x; self->v.y=(float)atan2(dy,dx); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-1.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+1.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-1.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+1.2f); } if( self->cooldown <= 0) { self->cooldown = 195; spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f); } if( self->cooldown == 15) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f); } if( self->cooldown == 100) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f); } if( self->cooldown == 50) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f); } if( self->cooldown == 90) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z, 0.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.8f); } if( self->cooldown == 80) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-3.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.0f); } if( self->cooldown == 70) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f); } if( self->cooldown == 60) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-3.0f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.4f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.6f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.8f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.2f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.0f); } if(self->bigcooldown > 0)self->bigcooldown--; if(self->state == HIT) { self->bigcooldown = 3; self->state = -1; self->modelColor[0] = 1.0f; self->modelColor[1] = 0.0f; self->modelColor[2] = 0.0f; self->modelColor[3] = 1.0f; } if(self->bigcooldown <= 0) { self->state = -1; self->modelColor[0] = bossColor.x; self->modelColor[1] = bossColor.y; self->modelColor[2] = bossColor.z; self->modelColor[3] = 1.0f; } if(self->health <= 0 || self->s.y <= -40.0f) { spawnExplosion(self->s.x,self->s.y,self->s.z, 1.0f); if(self->health <= 0) score += 5000; freeEntity(self); } } }
void enemy2Think(entity *self) { float dy,dx; if(self->cooldown > 0)self->cooldown--; if(self->s.y > 40.0f) { self->shown = 0; self->solid = 0; }else { self->shown = 1; self->solid = 1; } if(self->s.y < 20.0f) { dy=playerPos.y-self->s.y; dx=playerPos.x-self->s.x; self->v.y=(float)atan2(dy,dx); self->rotation.z=(self->v.y*(RadToDeg))-90; self->s.y -= enemy2speed; if( self->cooldown <= 0) { self->cooldown = 55; spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.1f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.1f); } if( self->cooldown == 15) { spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.5f); spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.5f); } }else self->s.y -= 1; if(self->frame < self->totalframes) { self->frame++; }else { self->frame=0; if(self->keyframe == 0) { self->totalframes=10; self->keyframe=1; self->nextkeyframe=0; }else { self->totalframes=20; self->keyframe=0; self->nextkeyframe=1; } } if(self->bigcooldown > 0)self->bigcooldown--; if(self->state == HIT) { self->bigcooldown = 3; self->state = -1; self->modelColor[0] = 1.0f; self->modelColor[1] = 0.0f; self->modelColor[2] = 0.0f; self->modelColor[3] = 1.0f; } if(self->bigcooldown <= 0) { self->state = -1; self->modelColor[0] = enemy2Color.x; self->modelColor[1] = enemy2Color.y; self->modelColor[2] = enemy2Color.z; self->modelColor[3] = 1.0f; } if(self->health <= 0 || self->s.y <= -40.0f) { spawnExplosion(self->s.x,self->s.y,self->s.z, 0.2f); if(self->health <= 0) score += 80; freeEntity(self); } }
void tileThink(entity *self) { Uint8 *keys; Coord TempS; /*temp position*/ Coord cam; char dm[80]; bsp *node; int i; Coord downvect; keys = SDL_GetKeyState(NULL); if(self->state==0) { if(keys[SDLK_LEFT]) { self->v.y-=0.05f; self->v.x+=0.05f; if(self->v.y <= -1) { self->v.y=-1; self->v.x=0; self->state=1; } if(self->v.x >= 1) { self->v.x=1; } } if(keys[SDLK_RIGHT]) { self->v.y+=0.05f; self->v.x+=0.05f; if(self->v.y >= 1) { self->v.y=1; self->v.x=0; self->state=1; } if(self->v.x >= 1) { self->v.x=1; } } } if(self->state==1) { if(keys[SDLK_LEFT]) { self->v.y+=0.05f; self->v.x-=0.05f; if(self->v.y >= 1) { self->v.y=1; self->v.x=0; self->state=0; } if(self->v.x <= -1) { self->v.x=-1; } } if(keys[SDLK_RIGHT]) { self->v.y-=0.05f; self->v.x-=0.05f; if(self->v.y <= -1) { self->v.y=-1; self->v.x=0; self->state=0; } if(self->v.x <= -1) { self->v.x=-1; } } } if(self->state==0) { self->rotation.z=(90*self->v.y)-90; } if(self->state==1) { self->rotation.z=-(90*self->v.y)+90; } UpdatePosition(self); cam.x = self->s.x; cam.y = self->s.y; cam.z = self->s.z; glCamera.position.x= -self->s.x; glCamera.position.y= -self->s.y+100; glCamera.position.z= -self->s.z-50; downvect.x = 0; downvect.y = 0; downvect.z = -1; node = checkBsp(self->s); for (i = 0; i < node->numTris; i++) { //Draw3DThickLine( node->triList[i]->v1, node->triList[i]->v2,1,0,0); //Draw3DThickLine(node->triList[i]->v3, node->triList[i]->v2,1,0,0); //Draw3DThickLine( node->triList[i]->v1, node->triList[i]->v3,1,0,0); if(RayInTriangle(cam, downvect, node->triList[i]->v1, node->triList[i]->v2, node->triList[i]->v3, &TempS) == -1) { self->s.z=TempS.z+2; break; } } //sprintf(dm,"%f %f",self->s.x, self->s.y); //NewMessage(dm,IndexColor(White)); if(self->health <=0 || self->s.x > 310.0f || self->s.x < -190.0f || self->s.y > 310.0f || self->s.y < -220.0f) { freeEntity(self); playdead=1; NewMessage("Game Over! Press Escape to exit",IndexColor(White)); } }