static void headDie() { Entity *e; e = self; self = self->target; while (self != NULL) { self->die(); self->dirX = (prand() % 5) * (prand() % 2 == 0 ? -1 : 1); self->dirY = ITEM_JUMP_HEIGHT; self = self->target; } self = e; entityDieNoDrop(); self->dirX = (prand() % 5) * (prand() % 2 == 0 ? -1 : 1); self->dirY = ITEM_JUMP_HEIGHT; }
static void meatFallout() { if (self->environment != WATER) { entityDieNoDrop(); } self->layer = BACKGROUND_LAYER; self->dirX = 0; }
static void die() { self->dirX = 0; self->dirY = 0.5; checkToMap(self); if (self->flags & ON_GROUND) { entityDieNoDrop(); } }
static void dieFinish() { Entity *e; self->thinkTime--; if (self->thinkTime <= 0) { clearContinuePoint(); increaseKillCount(); freeBossHealthBar(); e = addKeyItem("item/heart_container", self->x + self->w / 2, self->y); e->dirY = ITEM_JUMP_HEIGHT; fadeBossMusic(); entityDieNoDrop(); } }
static void dieWait() { Entity *e; checkToMap(self); self->thinkTime--; if (self->thinkTime <= 0) { clearContinuePoint(); increaseKillCount(); freeBossHealthBar(); e = addKeyItem("item/heart_container", self->x + self->w / 2, self->y); e->dirY = ITEM_JUMP_HEIGHT; entityDieNoDrop(); e = self; self = self->target; while (self != NULL) { self->die(); self = self->target; } self = e; } }
static void segmentMove() { int currentFrame, health; if (self->thinkTime <= 0 && self->target->mental >= 2) { currentFrame = self->currentFrame; health = self->health; loadProperties("enemy/green_centipede_segment", self); self->health = health; self->mental = self->target->mental; self->touch = &greenTouch; self->thinkTime = 60 * 30; self->currentFrame = currentFrame; } if (self->mental >= 2) { self->thinkTime--; if (self->thinkTime <= 300) { if (self->thinkTime % 15 == 0) { currentFrame = self->currentFrame; if (self->mental < 4) { setEntityAnimation(self, self->mental == 2 ? "CUSTOM_1" : "CUSTOM_2"); self->mental = self->mental == 2 ? 4 : 5; } else { setEntityAnimation(self, "STAND"); self->mental = self->mental == 4 ? 2 : 3; } self->currentFrame = currentFrame; } if (self->thinkTime <= 0) { currentFrame = self->currentFrame; health = self->health; loadProperties(self->mental % 2 == 0 ? "enemy/yellow_centipede_segment" : "enemy/red_centipede_segment", self); self->health = health; self->mental = self->mental % 2; self->touch = &entityTouch; self->currentFrame = currentFrame; } } } else if (self->mental == 0 && self->head->health <= 0) { self->health = 0; entityDie(); } if (self->target->health <= 0) { if (self->mental == 1) { self->action = &becomeHead; } else { self->health = 0; entityDieNoDrop(); } } /* If segment is facing the same way as the target then just move with it */ if (self->face == LEFT && self->x + self->w <= self->target->x) { self->x = self->target->x - self->w; self->face = self->target->face; } else if (self->face == RIGHT && self->x >= self->target->x + self->target->w) { self->x = self->target->x + self->target->w; self->face = self->target->face; } else { self->dirX = self->face == LEFT ? -self->target->speed : self->target->speed; } checkToMap(self); }
static void spinnerPartDie() { self->head->health--; entityDieNoDrop(); }
static void fallout() { stopSound(self->endX); entityDieNoDrop(); }