static void activate(int val) { if (self->head->active == FALSE) { runScript("rusted"); } else { self->head->action = &fire; setEntityAnimation(self->head, "WALK"); self->head->frameSpeed = 1; setCustomAction(&player, &invulnerableNoFlash, 60, 0, 0); setPlayerStunned(60); player.dirX = 12; player.dirY = -22; self->head->thinkTime = 120; } }
static void stompAttackDrop() { self->thinkTime--; if (self->thinkTime <= 0) { self->flags &= ~FLY; } checkToMap(self); if (self->flags & ON_GROUND) { setEntityAnimation(self, "STAND"); playSoundToMap("sound/common/crash", BOSS_CHANNEL, self->x, self->y, 0); shakeScreen(STRONG, 120); activateEntitiesValueWithObjectiveName("CHAOS_ROCK_DROPPER", 5); if (player.flags & ON_GROUND) { setPlayerStunned(120); } self->thinkTime = 60; self->action = &stompAttackFinish; } }
static void die() { self->flags &= ~FLY; self->weight = 1; playSoundToMap("sound/boss/chaos/die", BOSS_CHANNEL, self->x, self->y, 0); setEntityAnimation(self, "DIE_1"); self->animationCallback = NULL; activateEntitiesWithObjectiveName("CHAOS_VINES", FALSE); self->x = self->startX; if (self->flags & GRABBING) { if (self->face == LEFT) { player.x = self->x + self->w - player.w - self->offsetX; } else { player.x = self->x + self->offsetX; } player.y = self->y + self->offsetY; setCustomAction(&player, &invulnerable, 60, 0, 0); setPlayerStunned(30); player.x -= player.dirX; player.y -= player.dirY; player.dirX = (10 + prand() % 3) * (self->face == LEFT ? -1 : 1); player.dirY = -3; self->touch = &entityTouch; } self->mental = 0; self->thinkTime = 420; self->damage = 0; self->takeDamage = NULL; self->action = &dieWait; fadeOutMusic(3000); checkToMap(self); }
static void dropOnPlayer() { int i; long onGround; self->thinkTime--; if (self->thinkTime <= 0) { self->flags &= ~FLY; onGround = (self->flags & ON_GROUND); checkToMap(self); if (onGround == 0 && (self->flags & ON_GROUND)) { playSoundToMap("sound/common/crash", BOSS_CHANNEL, self->x, self->y, 0); if ((player.flags & ON_GROUND) && !(player.flags & INVULNERABLE)) { setPlayerStunned(150); } shakeScreen(MEDIUM, 15); self->thinkTime = 15; self->action = &dropWait; for (i=0;i<20;i++) { addSmoke(self->x + prand() % self->w, self->y + self->h - prand() % 10, "decoration/dust"); } self->endX--; if (self->endX == 0) { self->mental = 1; self->endX = 4; } self->targetY = self->y; } } }
static void eatAttackWait() { Entity *temp; if (self->face == LEFT) { player.x = self->x + self->w - player.w - self->offsetX; } else { player.x = self->x + self->offsetX; } player.y = self->y + self->offsetY; self->thinkTime--; if (self->thinkTime <= 0) { temp = self; self = &player; self->takeDamage(temp, 3); self = temp; self->thinkTime = 60; if (player.health <= 0) { removeInventoryItemByObjectiveName("Amulet of Resurrection"); self->action = &attackFinished; } } if (self->health <= self->mental) { setEntityAnimation(self, "SPIT_OUT"); if (self->face == LEFT) { player.x = self->x + self->w - player.w - self->offsetX; } else { player.x = self->x + self->offsetX; } player.y = self->y + self->offsetY; setCustomAction(&player, &invulnerable, 60, 0, 0); setPlayerStunned(30); player.x -= player.dirX; player.y -= player.dirY; player.dirX = (10 + prand() % 3) * (self->face == LEFT ? -1 : 1); player.dirY = -3; self->touch = &touch; self->flags &= ~GRABBING; self->thinkTime = 60; self->action = &eatAttackFinish; } self->maxThinkTime--; checkToMap(self); }