Esempio n. 1
0
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;
}
Esempio n. 2
0
static void meatFallout()
{
	if (self->environment != WATER)
	{
		entityDieNoDrop();
	}

	self->layer = BACKGROUND_LAYER;

	self->dirX = 0;
}
Esempio n. 3
0
static void die()
{
	self->dirX = 0;

	self->dirY = 0.5;

	checkToMap(self);

	if (self->flags & ON_GROUND)
	{
		entityDieNoDrop();
	}
}
Esempio n. 4
0
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();
	}
}
Esempio n. 5
0
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;
    }
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
static void spinnerPartDie()
{
	self->head->health--;

	entityDieNoDrop();
}
Esempio n. 8
0
static void fallout()
{
	stopSound(self->endX);

	entityDieNoDrop();
}