Exemplo n.º 1
0
// Blooglets
void CK6_SpawnBlooglet(int tileX, int tileY, int type)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->type = CT6_Blooglet;
  obj->active = OBJ_ACTIVE;
  obj->zLayer = PRIORITIES - 4;
  obj->posX = RF_TileToUnit(tileX);
  obj->posY = RF_TileToUnit(tileY) - 0x80;
  obj->xDirection = US_RndT() < 0x80 ? IN_motion_Right : IN_motion_Left;
  obj->yDirection = IN_motion_Down;
  obj->user1 = type;

  switch (type%4)
  {
    case 0:
      CK_SetAction(obj, CK_GetActionByName("CK6_ACT_BloogletRRun0"));
      break;
    case 1:
      CK_SetAction(obj, CK_GetActionByName("CK6_ACT_BloogletYRun0"));
      break;
    case 2:
      CK_SetAction(obj, CK_GetActionByName("CK6_ACT_BloogletBRun0"));
      break;
    case 3:
      CK_SetAction(obj, CK_GetActionByName("CK6_ACT_BloogletGRun0"));
      break;
  }
}
Exemplo n.º 2
0
void CK6_FlectTurn(CK_object *obj)
{
	if (ck_keenObj->posX < obj->posX)
	{
		if (obj->xDirection == IN_motion_Left)
		{
			obj->currentAction = CK_GetActionByName("CK6_ACT_FlectWalk0");
		}
		else
		{
			obj->currentAction = CK_GetActionByName("CK6_ACT_FlectTurn1");
			obj->xDirection = IN_motion_Left;
		}
	}
	else
	{
		if (obj->xDirection == IN_motion_Right)
		{
			obj->currentAction = CK_GetActionByName("CK6_ACT_FlectWalk0");
		}
		else
		{
			obj->currentAction = CK_GetActionByName("CK6_ACT_FlectTurn1");
			obj->xDirection = IN_motion_Right;
		}
	}
}
Exemplo n.º 3
0
void CK6_GikSlide(CK_object *obj)
{
	CK_PhysGravityHigh(obj);

	int topflag = obj->topTI & 7;
	uint16_t di = obj->xDirection == IN_motion_Right ? gikslides_r[topflag] : gikslides_l[topflag];
	if (obj->velX == 0 && obj->topTI)
	{
		// Hit a wall and on the ground
		obj->currentAction = CK_GetActionByName("CK6_ACT_GikEndSlide0");
	}
	else
	{
		// Slide to a halt
		int32_t lastTimeCount = SD_GetLastTimeCount();
		for (int32_t tickCount = lastTimeCount - SD_GetSpriteSync(); tickCount < lastTimeCount; tickCount++)
		{
			if (di)
			{
				uint32_t ddi = di;
				if ((ddi & tickCount) == 0)
				{
					if ((obj->velX < 0 && ++obj->velX == 0) || (obj->velX > 0 && --obj->velX == 0))
					{
						obj->currentAction = CK_GetActionByName("CK6_ACT_GikEndSlide0");
						break;
					}
				}
			}
			ck_nextX += obj->velX;
		}
	}
}
Exemplo n.º 4
0
void CK6_NospikeChargeDraw(CK_object *obj)
{
	if (obj->topTI)
	{
		obj->user1 = 0;
		if (obj->rightTI || obj->leftTI)
		{
			obj->posX -= obj->xDirection * 128;
			CK_SetAction(obj, CK_GetActionByName("CK6_ACT_NospikeSit0")); // Not Setaction2
			RF_AddSpriteDraw(&(obj->sde), obj->posX, obj->posY, obj->gfxChunk, false, obj->zLayer);
			obj->user2 = 0;
			return;
		}
	}
	else if (++obj->user1 == 6)
	{
		CK_SetAction2(obj, CK_GetActionByName("CK6_ACT_NospikeFall0"));
	}

	if (obj->user2 & 0xFF00)
	{
		uint16_t user2 = obj->user2 & 0xFFFF; // Need to use 16-bit arithmetic here
		user2 -= 0x100;
		obj->user2 = user2;
		RF_AddSpriteDraw(&(obj->sde), obj->posX, obj->posY, obj->gfxChunk, true, obj->zLayer);
	}
	else
	{
		RF_AddSpriteDraw(&(obj->sde), obj->posX, obj->posY, obj->gfxChunk, false, obj->zLayer);
	}
}
Exemplo n.º 5
0
void CK6_SpawnMapCliff(int tileX, int tileY, int dir)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->active = OBJ_ACTIVE;
  obj->clipped = CLIP_not;
  obj->zLayer = PRIORITIES - 2;
  obj->type = CT6_MapCliff;
  obj->clipRects.tileX1 = obj->clipRects.tileX2 = tileX;
  obj->clipRects.tileY1 = obj->clipRects.tileY2 = tileY;
  obj->user1 = dir;
  obj->posX = obj->clipRects.unitX1 = RF_TileToUnit(tileX);
  obj->clipRects.unitX2 = obj->clipRects.unitX1 + 0x100;
  if (dir)
    obj->posY = obj->clipRects.unitY1 = RF_TileToUnit(tileY+1) - 1;
  else
    obj->posY = obj->clipRects.unitY1 = RF_TileToUnit(tileY);

  obj->clipRects.unitY2 = obj->clipRects.unitY1 + 1;
  CK_SetAction(obj, CK_GetActionByName("CK6_ACT_MapCliff0"));

  if (ck_gameState.ep.ck6.rope == 2 && dir)
  {
    CK_object *obj = CK_GetNewObj(false);
    obj->active = OBJ_ACTIVE;
    obj->clipped = CLIP_not;
    obj->zLayer = PRIORITIES - 4;
    obj->type = CT_Friendly;
    obj->posX = RF_TileToUnit(tileX);
    obj->posY = RF_TileToUnit(tileY + 1);
    CK_SetAction(obj, CK_GetActionByName("CK6_ACT_RopeOnMap0"));
  }
}
Exemplo n.º 6
0
void CK6_BloogletCol(CK_object *a, CK_object *b)
{
  if (b->type == CT_Player && b->currentAction->collide)
  {
    ck_keenIgnoreVertClip = true;
    CK_PhysPushX(b, a);
    ck_keenIgnoreVertClip = false;
  }
  else if (b->type == CT_Stunner)
  {
    int color = a->user1 & 3;
    if (a->user1 > 3)
    {
      CK_object *gem = CK_GetNewObj(false);
      gem->clipped = CLIP_normal;
      gem->zLayer = PRIORITIES - 2;
      gem->type = CT6_Item;
      gem->posX = a->posX;
      gem->posY = a->posY;
      gem->yDirection = IN_motion_Up;
      gem->velY = -40;
      gem->user1 = color;
      gem->user2 = gem->gfxChunk = *CK_ItemSpriteChunks[color];
      gem->user3 = gem->user2 + 2;
      CK_SetAction(gem, CK_GetActionByName("CK_ACT_fallingitem"));
      SD_PlaySound(SOUND_BLOOGLETGEM);
    }

    CK_StunCreature(a, b, CK_GetActionByName(stunnedBloogletActions[color]));
  }
}
Exemplo n.º 7
0
void CK6_BipshipFly(CK_object *obj)
{
	CK_PhysAccelHorz(obj, obj->xDirection, 20);
	int xdir = obj->xDirection;
	int ycheck = ck_keenObj->clipRects.unitY2 + 0x100 - obj->clipRects.unitY2;
	if (ycheck <= 0x200 && ycheck >= 0)
	{
		// Fire!!
		xdir = (ck_keenObj->posX < obj->posX) ? IN_motion_Left : IN_motion_Right;
		if (obj->xDirection == xdir && US_RndT() < SD_GetSpriteSync() * 2)
		{
			SD_PlaySound(SOUND_KEENSHOOT);
			CK_object *shot = CK_GetNewObj(true);
			shot->type = CT6_EnemyShot;
			shot->active = OBJ_EXISTS_ONLY_ONSCREEN;
			shot->zLayer = PRIORITIES - 3;
			if (obj->xDirection == IN_motion_Right)
			{
				shot->posX = obj->posX + 0x100;
				shot->velX = 64;
			}
			else
			{
				shot->posX = obj->posX;
				shot->velX = -64;
			}

			shot->posY = obj->posY + 0xA0;
			shot->velY = 16;
			CK_SetAction(shot, CK_GetActionByName("CK6_ACT_BipShot0"));
		}
	}

	int startx = obj->clipRects.tileXmid + 2 * xdir;
	int y = obj->clipRects.tileY1;
	uint16_t *tile = CA_TilePtrAtPos(startx, y, 1);

	for (y; y <= obj->clipRects.tileY2; y++, tile += CA_GetMapWidth())
	{
		if (TI_ForeLeft(*tile) || TI_ForeRight(*tile))
		{
			xdir = -xdir;
			goto checkTurn;
		}
	}

	// And turn around at ledge-ends
	if (!TI_ForeTop(*tile))
		xdir = -xdir;

checkTurn:

	if (obj->xDirection != xdir)
	{
		obj->xDirection = xdir;
		CK_SetAction2(obj, CK_GetActionByName("CK6_ACT_BipshipTurn0"));
	}
}
Exemplo n.º 8
0
void CK6_MapCliffCol(CK_object *a, CK_object *b)
{
  if (b->type == CT_Player)
  {
    if (ck_gameState.ep.ck6.rope == 0)
    {
      CA_CacheGrChunk(0x23);

      US_CenterWindow(26, 8);
      VH_DrawBitmap(US_GetWindowX() + US_GetWindowW() - 0x30, US_GetWindowY(), 0x23);
      US_SetWindowW(US_GetWindowW() - 0x30);
      US_SetPrintY(US_GetPrintY() + 15);
      US_CPrint("What a tall cliff!\n"
                "Wish I had a rope\n"
                "and grappling hook.\n");
      VL_Present();
      SD_PlaySound(SOUND_NEEDKEYCARD);
      VL_DelayTics(30); // VW_WaitVBL(30);
      IN_ClearKeysDown();
      IN_WaitButton();
      RF_ForceRefresh();
      ck_nextX = -b->deltaPosX;
      ck_nextY = -b->deltaPosY;
      b->xDirection = b->yDirection = IN_motion_None;
      CK_PhysUpdateNormalObj(b);

    }
    else if (ck_gameState.ep.ck6.rope == 1)
    {
      ck_gameState.ep.ck6.rope++;
      SD_PlaySound(SOUND_KEENTHROWROPE);
      CK_SetAction2(b, CK_GetActionByName("CK6_ACT_MapKeenThrowRope0"));
      b->type = CT_Friendly;
    }
    else if (ck_gameState.ep.ck6.rope == 2)
    {
      if (a->user1)
      {
        b->posY += 0x40;
        b->user4 = 6;
        b->yDirection = IN_motion_Down;
      }
      else
      {
        b->posY -= 0x40;
        b->user4 = 6;
        b->yDirection = IN_motion_Up;
      }

      CK_SetAction(b, CK_GetActionByName("CK6_ACT_MapKeenClimbRope0"));
      b->type = CT_Friendly;
    }
  }
}
Exemplo n.º 9
0
void CK6_OrbatrixFloat(CK_object *obj)
{
	if (US_RndT() < 0x20)
	{
		obj->currentAction = CK_GetActionByName("CK6_ACT_OrbatrixUncurl2");
	}
	else if (obj->clipRects.unitY2 == ck_keenObj->clipRects.unitY2)
	{
		int dx = ck_keenObj->posX - obj->posX;
		obj->xDirection = dx < 0 ? IN_motion_Left : IN_motion_Right;
		if (dx > -0x500 && dx < 0x500)
			obj->currentAction = CK_GetActionByName("CK6_ACT_OrbatrixCurl0");
	}
}
Exemplo n.º 10
0
void CK6_SatelliteCol(CK_object *a, CK_object *b)
{
  if (b->currentAction == CK_GetActionByName("CK6_ACT_SatelliteInvisible0"))
  {
    a->user3 |= b->user1;
  }
  else if (b->type == CT_Player)
  {
    int var2 = a->user3 / 256;
    if (var2 == 0 || a->user4 == var2)
    {
      if (b->currentAction == CK_GetActionByName("CK6_ACT_KeenSatellite0"))
      {
        b->posX = a->posX + 0xC0;
        b->posY = a->posY + 0x100;
        CK_SetAction2(b, b->currentAction);
      }
    }
    else
    {
      SD_PlaySound(SOUND_KEENSATELLITE);
      a->user4 = var2;
      if (ck_keenObj->currentAction == CK_GetActionByName("CK6_ACT_KeenSatellite0"))
      {
        a = ck_keenObj->next;
        while (a)
        {
          if (a->type == CT6_SatelliteLoading && a->user1 == var2)
          {
            b->posX = a->posX;
            b->posY = a->posY;
            b->gfxChunk = 192;
            CK_SetAction2(ck_keenObj, CK_GetActionByName("CK_ACT_MapKeenStart"));
            b->clipped = CLIP_normal;
            break;
          }
          a = a->next;
        }
      }
      else
      {
        b->posX = a->posX + 0xC0;
        b->posY = a->posY + 0x100;
        b->clipped = CLIP_not;
        CK_SetAction2(ck_keenObj, CK_GetActionByName("CK6_ACT_KeenSatellite0"));
      }
    }
  }
}
Exemplo n.º 11
0
void CK6_BloogguardSmash(CK_object *obj)
{
  SD_PlaySound(SOUND_BLOOGGUARDSMASH);
  ck6_smashScreenDistance = 25;
  if (ck_keenObj->topTI)
    CK_SetAction2(ck_keenObj, CK_GetActionByName("CK6_ACT_keenStunned0"));
}
Exemplo n.º 12
0
void CK6_BipshipCol(CK_object *a, CK_object *b)
{
	if (b->type == CT_Stunner)
	{
		CK_ShotHit(b);
		CK_SetAction2(a, CK_GetActionByName("CK6_ACT_BipshipHit0"));
	}
}
Exemplo n.º 13
0
void CK6_OrbatrixCol(CK_object *a, CK_object *b)
{
	if (b->type == CT_Stunner)
	{
		CK_ShotHit(b);
		CK_SetAction2(a, CK_GetActionByName("CK6_ACT_OrbatrixUncurl2"));
	}
}
Exemplo n.º 14
0
void CK6_SpawnAxisPlatform(int tileX, int tileY, int direction, bool purple)
{
	CK_object *obj = CK_GetNewObj(false);

	obj->type = 6;
	obj->active = OBJ_ALWAYS_ACTIVE;
	obj->zLayer = 0;
	obj->posX = RF_TileToUnit(tileX);
	obj->posY = RF_TileToUnit(tileY);

	switch (direction)
	{
	case 0:
		obj->xDirection = 0;
		obj->yDirection = -1;
		break;
	case 1:
		obj->xDirection = 1;
		obj->yDirection = 0;
		break;
	case 2:
		obj->xDirection = 0;
		obj->yDirection = 1;
		break;
	case 3:
		obj->xDirection = -1;
		obj->yDirection = 0;
		break;
	}

	if (purple)
	{
		obj->posX += 0x40;
		obj->posY += 0x40;
		CK_SetAction(obj, CK_GetActionByName("CK6_ACT_purpleAxisPlatform"));
	}
	else
	{

		CK_SetAction(obj, CK_GetActionByName("CK_ACT_AxisPlatform"));
	}
	// TODO: These should *not* be done here.
	obj->gfxChunk = obj->currentAction->chunkLeft;
	CA_CacheGrChunk(obj->gfxChunk);
	CK_ResetClipRects(obj);
}
Exemplo n.º 15
0
void CK6_BipCol(CK_object *a, CK_object *b)
{
	if (b->type == CT_Player && b->deltaPosY == 0)
	{
		SD_PlaySound(SOUND_BIPSQUISH);
		a->type = CT_Friendly;
		CK_SetAction2(a, CK_GetActionByName("CK6_ACT_BipSquished0"));
	}
}
Exemplo n.º 16
0
void CK6_SpawnGrabbiter(int tileX, int tileY)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->active = OBJ_ACTIVE;
  obj->clipped = CLIP_not;
  obj->zLayer = PRIORITIES - 2;
  obj->type = CT6_Grabbiter;
  obj->posX = RF_TileToUnit(tileX);
  obj->posY = RF_TileToUnit(tileY);

  if (ck_gameState.ep.ck6.sandwich == 2)
  {
    CK_SetAction(obj, CK_GetActionByName("CK6_ACT_GrabbiterNapping0"));
  }
  else
  {
    CK_SetAction(obj, CK_GetActionByName("CK6_ACT_GrabbiterHungry0"));
  }
}
Exemplo n.º 17
0
void CK6_SpawnPasscard(int tileX, int tileY)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->clipped = CLIP_not;
  obj->zLayer = PRIORITIES - 2;
  obj->type = CT6_Passcard;
  obj->posX = RF_TileToUnit(tileX);
  obj->posY = RF_TileToUnit(tileY);
  CK_SetAction(obj, CK_GetActionByName("CK6_ACT_Passcard0"));
}
Exemplo n.º 18
0
void CK6_BloogCol(CK_object *a, CK_object *b)
{
  if (b->type == CT_Player)
  {
    CK_KillKeen();
  }
  else if (b->type == CT_Stunner)
  {
    CK_StunCreature(a,b,CK_GetActionByName("CK6_ACT_BloogStunned0"));
  }
}
Exemplo n.º 19
0
void CK6_SpawnBipship(int tileX, int tileY)
{
	CK_object *obj = CK_GetNewObj(false);
	obj->type = CT6_Bipship;
	obj->active = OBJ_ACTIVE;
	obj->posX = RF_TileToUnit(tileX);
	obj->posY = RF_TileToUnit(tileY) - 0x180;
	obj->xDirection = US_RndT() < 0x80 ? IN_motion_Right : IN_motion_Left;
	obj->velX = obj->xDirection * 20;
	CK_SetAction(obj, CK_GetActionByName("CK6_ACT_BipshipFly0"));
}
Exemplo n.º 20
0
void CK6_SpawnBloog(int tileX, int tileY)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->type = CT6_Bloog;
  obj->active = OBJ_ACTIVE;
  obj->zLayer = PRIORITIES - 4;
  obj->posX = RF_TileToUnit(tileX);
  obj->posY = RF_TileToUnit(tileY) - 0x200;
  obj->xDirection = US_RndT() < 0x80 ? IN_motion_Right : IN_motion_Left;
  obj->yDirection = IN_motion_Down;
  CK_SetAction(obj, CK_GetActionByName("CK6_ACT_BloogWalk0"));
}
Exemplo n.º 21
0
void CK6_FlectWalk(CK_object *obj)
{
	if (ck_keenObj->posX < obj->posX && obj->xDirection == IN_motion_Right)
	{
		if (obj->xDirection == IN_motion_Left)
			obj->currentAction = CK_GetActionByName("CK6_ACT_FlectTurn1");

		obj->xDirection = IN_motion_Left;
	}

	if (ck_keenObj->posX > obj->posX && obj->xDirection == IN_motion_Left)
	{
		if (obj->xDirection == IN_motion_Right)
			obj->currentAction = CK_GetActionByName("CK6_ACT_FlectTurn1");

		obj->xDirection = IN_motion_Right;
	}

	if (US_RndT() < 0x20)
		obj->currentAction = CK_GetActionByName("CK6_ACT_FlectTurn0");
}
Exemplo n.º 22
0
void CK6_RocketCol(CK_object *a, CK_object *b)
{
  if (ck_gameState.ep.ck6.passcard == 0)
  {

      CA_CacheGrChunk(0x23);

      US_CenterWindow(26, 8);
      VH_DrawBitmap(US_GetWindowX() + US_GetWindowW() - 0x30, US_GetWindowY(), 0x23);
      US_SetWindowW(US_GetWindowW() - 0x30);
      US_SetPrintY(US_GetPrintY() + 5);
      US_CPrint("The door makes a loud\n"
                "blooping noise.\n"
                "It says,\n"
                "\"Passcard required\n"
                "for entry.\"");
      VL_Present();
      SD_PlaySound(SOUND_NEEDKEYCARD);
      VL_DelayTics(30); // VW_WaitVBL(30);
      IN_ClearKeysDown();
      IN_WaitButton();
      RF_ForceRefresh();
      ck_nextX = -b->deltaPosX;
      ck_nextY = -b->deltaPosY;
      b->xDirection = b->yDirection = IN_motion_None;
      CK_PhysUpdateNormalObj(b);
  }
  else if (ck_gameState.ep.ck6.passcard == 1)
  {
    a->user1 = 0;
    a->user2 = 0x100;
    CK_SetAction2(a, CK_GetActionByName("CK6_ACT_RocketFly0"));
    b->posX = a->posX;
    b->posY = a->posY + 0x100;
    b->clipped = CLIP_not;
    CK_SetAction2(b, CK_GetActionByName("CK6_ACT_MapKeenRocketSit0"));
    SD_PlaySound(SOUND_ROCKETLAUNCH);
    SD_WaitSoundDone();
  }
}
Exemplo n.º 23
0
// Orbatrices
void CK6_SpawnOrbatrix(int tileX, int tileY)
{
	CK_object *obj = CK_GetNewObj(false);
	obj->type = CT6_Orbatrix;
	obj->active = OBJ_ACTIVE;
	obj->zLayer = PRIORITIES - 4;
	obj->posX = RF_TileToUnit(tileX);
	obj->posY = RF_TileToUnit((tileY)) - 0x180;
	obj->xDirection = US_RndT() < 0x80 ? IN_motion_Right : IN_motion_Left;
	obj->yDirection = IN_motion_Down;
	obj->user4 = 1;
	CK_SetAction(obj, CK_GetActionByName("CK6_ACT_OrbatrixFloat0"));
}
Exemplo n.º 24
0
void CK6_MapKeenThrowRope(CK_object *obj)
{
  CK_object *rope = CK_GetNewObj(false);
  rope->active = OBJ_ACTIVE;
  rope->clipped = CLIP_not;
  rope->zLayer = PRIORITIES - 4;
  rope->type = CT_Friendly;
  rope->posX = RF_TileToUnit(obj->clipRects.tileX2);
  rope->posY = obj->posY - 0x200;
  CK_SetAction(rope, CK_GetActionByName("CK6_ACT_RopeOnMap0"));
  obj->type = CT_Player;
  obj->gfxChunk = 192;
}
Exemplo n.º 25
0
void CK6_BipshipCrash(CK_object *obj)
{
	SD_PlaySound(SOUND_BIPSHIPCRASH);

	// Spawn smoke
	CK_object *smoke = CK_GetNewObj(true);
	smoke->type = CT_Friendly;
	smoke->active = OBJ_ACTIVE;
	smoke->zLayer = PRIORITIES - 2;
	smoke->posX = obj->posX;
	smoke->posY = obj->posY - 0x180;
	CK_SetAction(smoke, CK_GetActionByName("CK6_ACT_BipshipSmoke0"));
	smoke->xDirection = US_RndT() < 0x80 ? IN_motion_Right : IN_motion_Left;

	CK_object *bip = CK_GetNewObj(true);
	bip->type = CT6_Bip;
	bip->active = OBJ_ACTIVE;
	bip->zLayer = PRIORITIES - 4;
	bip->posX = obj->posX;
	bip->posY = obj->posY - 0x80;
	bip->xDirection = US_RndT() < 0x80 ? IN_motion_Right : IN_motion_Left;
	CK_SetAction(bip, CK_GetActionByName("CK6_ACT_BipStand0"));
}
Exemplo n.º 26
0
void CK6_NospikeFallDraw2(CK_object *obj)
{
	RF_AddSpriteDraw(&(obj->sde), obj->posX, obj->posY, obj->gfxChunk, false, obj->zLayer);

	if (obj->topTI)
	{
		obj->user1 = obj->user2 = obj->user3;
		obj->user4 = obj->type;
		CK_SetAction2(obj, CK_GetActionByName("CK6_ACT_NospikeStunned0"));
		SD_PlaySound(SOUND_NOSPIKECOLLIDE);
		obj->type = CT6_StunnedCreature;
		obj->velY = -24;
	}
}
Exemplo n.º 27
0
// Rocket ship
void CK6_SpawnRocket(int tileX, int tileY, int dir)
{
  if (ck_gameState.ep.ck6.inRocket == dir)
  {
    CK_object *obj = CK_GetNewObj(false);
    obj->active = OBJ_ACTIVE;
    obj->clipped = CLIP_not;
    obj->zLayer = PRIORITIES - 1;
    obj->type = CT6_Rocket;
    obj->posX = RF_TileToUnit(tileX);
    obj->posY = RF_TileToUnit(tileY);
    CK_SetAction(obj, CK_GetActionByName("CK6_ACT_RocketSit0"));
  }
}
Exemplo n.º 28
0
void CK6_BloogguardWalk(CK_object *obj)
{
  if (US_RndT() < 0x20)
    obj->xDirection = obj->posX < ck_keenObj->posX ? IN_motion_Right : IN_motion_Left;

  if ((obj->xDirection == IN_motion_Right && ck_keenObj->posX > obj->posX) ||
      (obj->xDirection == IN_motion_Left && ck_keenObj->posX < obj->posX))
  {
    if (obj->clipRects.unitY2 == ck_keenObj->clipRects.unitY2)
    {
      if (US_RndT() < 0x20)
        obj->currentAction = CK_GetActionByName("CK6_ACT_BloogguardClub0");
    }
  }
}
Exemplo n.º 29
0
void CK6_SpawnSatellite(int tileX, int tileY)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->clipped = CLIP_not;
  obj->zLayer = PRIORITIES - 2;
  obj->active = OBJ_ALWAYS_ACTIVE;
  obj->type = CT6_Satellite;
  obj->posX = RF_TileToUnit(tileX);
  obj->posY = RF_TileToUnit(tileY);
  CK_SetAction(obj, CK_GetActionByName("CK6_ACT_Satellite0"));
  CA_SetTileAtPos(tileX, tileY, 2, 0x5B + 3);
  obj->user1 = 3;
  obj->user2 = 0x100;
  obj->user4 = 2;
}
Exemplo n.º 30
0
void CK6_GrabbiterCol(CK_object *a, CK_object *b)
{
  if (!ck_gameState.ep.ck6.sandwich)
  {
    CA_CacheGrChunk(0x23);
    SD_PlaySound(SOUND_GRABBITER);

    US_CenterWindow(26, 8);
    VH_DrawBitmap(US_GetWindowX() + US_GetWindowW() - 0x30, US_GetWindowY(), 0x23);
    US_SetWindowW(US_GetWindowW() - 0x30);
    US_SetPrintY(US_GetPrintY() + 5);
    US_CPrint("Oh no!\n"
        "It's a slavering\n"
        "Grabbiter! He says,\n"
        "\"Get me lunch and\n"
        "I'll tell ya a secret!\"");
    VL_Present();
    VL_DelayTics(30); // VW_WaitVBL(30);
    IN_ClearKeysDown();
    IN_WaitButton();
    RF_ForceRefresh();
    ck_nextX = -b->deltaPosX;
    ck_nextY = -b->deltaPosY;
    b->xDirection = b->yDirection = IN_motion_None;
    CK_PhysUpdateNormalObj(b);
  }
  else
  {
    ck_gameState.ep.ck6.sandwich++;
    CA_CacheGrChunk(0x23);
    US_CenterWindow(26, 8);
    VH_DrawBitmap(US_GetWindowX() + US_GetWindowW() - 0x30, US_GetWindowY(), 0x23);
    US_SetWindowW(US_GetWindowW() - 0x30);
    US_SetPrintY(US_GetPrintY() + 2);
    US_CPrint("The Grabbiter grabs\n"
        "the gigantic sandwich,\n"
        "downs it in one bite,\n"
        "and says,\"Here's your\n"
        "secret. Big meals\n"
        "make me sleepy!\n");
    VL_Present();
    VL_DelayTics(30); // VW_WaitVBL(30);
    IN_ClearKeysDown();
    IN_WaitButton();
    CK_SetAction2(a, CK_GetActionByName("CK6_ACT_GrabbiterNapping0"));
    RF_ForceRefresh();
  }
}