Example #1
0
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;
	}
}
Example #2
0
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;
	}
}
Example #3
0
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);
}
Example #4
0
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;
		}
	}
}
Example #5
0
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);
}