Example #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;
  }
}
Example #2
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"));
  }
}
Example #3
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"));
}
Example #4
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"));
}
Example #5
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"));
}
Example #6
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"));
}
Example #7
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"));
  }
}
Example #8
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;
}
Example #9
0
void CK6_SpawnSatelliteLoading(int tileX, int tileY, int dir)
{
  CK_object *obj = CK_GetNewObj(false);
  obj->active = OBJ_ALWAYS_ACTIVE;
  obj->clipped = CLIP_not;
  obj->zLayer = PRIORITIES - 2;
  obj->type = CT6_SatelliteLoading;
  obj->clipRects.tileX1 = obj->clipRects.tileX2 = tileX;
  obj->clipRects.tileY1 = obj->clipRects.tileY2 = tileY;
  obj->user1 = (dir ^ 1) + 1;
  obj->posX = obj->clipRects.unitX1 = RF_TileToUnit(tileX);
  obj->clipRects.unitX2 = obj->clipRects.unitX1 + 0x100;
  obj->posY = obj->clipRects.unitY1 = RF_TileToUnit(tileY);
  obj->clipRects.unitY2 = obj->clipRects.unitY1 + 0x100;
  CK_SetAction2(obj, CK_GetActionByName("CK6_ACT_SatelliteInvisible0"));
}
Example #10
0
void CK6_SpawnRedStandPlatform(int tileX, int tileY)
{
	CK_object *obj = CK_GetNewObj(false);

	obj->type = 6;
	obj->active = OBJ_ACTIVE;
	obj->zLayer = 0;
	obj->posX = RF_TileToUnit(tileX);
	obj->posY = obj->user1 = RF_TileToUnit(tileY);
	obj->xDirection = 0;
	obj->yDirection = 1;
	obj->clipped = CLIP_not;
	CK_SetAction(obj, CK_GetActionByName("CK6_ACT_redStandPlatform"));
	obj->gfxChunk = obj->currentAction->chunkLeft;
	CA_CacheGrChunk(obj->gfxChunk);
	CK_ResetClipRects(obj);
}
Example #11
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);
}
Example #12
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"));
  }
}
Example #13
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;
}
Example #14
0
void CK6_RocketFly(CK_object *obj)
{
  if (!ck_nextX && !ck_nextY)
  {
    if (!SD_SoundPlaying())
      SD_PlaySound(SOUND_ROCKETFLY);

    int delta = SD_GetSpriteSync() * 32;

    // Will we reach a new tile?
    if (obj->user2 > delta)
    {
      // No... keep moving in the same direction.
      obj->user2 -= delta;

      int dirX = ck_infoplaneArrowsX[obj->user1];
      if (dirX == 1)
      {
        // Moving right.
        ck_nextX += delta;
      }
      else if (dirX == -1)
      {
        // Moving left
        ck_nextX -= delta;
      }

      int dirY = ck_infoplaneArrowsY[obj->user1];
      if (dirY == 1)
      {
        // Moving down
        ck_nextY += delta;
      }
      else if (dirY == -1)
      {
        // Moving up
        ck_nextY -= delta;
      }
    }
    else
    {
      // Move to next tile.
      int dirX = ck_infoplaneArrowsX[obj->user1];
      if (dirX == 1)
      {
        // Moving right.
        ck_nextX += obj->user2;
      }
      else if (dirX == -1)
      {
        // Moving left
        ck_nextX -= obj->user2;
      }

      int dirY = ck_infoplaneArrowsY[obj->user1];
      if (dirY == 1)
      {
        // Moving down
        ck_nextY += obj->user2;
      }
      else if (dirY == -1)
      {
        // Moving up
        ck_nextY -= obj->user2;
      }

      int tileX = (uint16_t)RF_UnitToTile(obj->posX + ck_nextX);
      int tileY = (uint16_t)RF_UnitToTile(obj->posY + ck_nextY);

      obj->user1 = CA_TileAtPos(tileX, tileY, 2) - 0x5B;

      if ((obj->user1 < 0) || (obj->user1 > 8))
      {
        obj->posX += ck_nextX;
        obj->posY += ck_nextY;
        CK_SetAction2(obj, CK_GetActionByName("CK6_ACT_RocketSit0"));

        ck_keenObj->posX = RF_TileToUnit(tileX + 1) + 0x10;
        ck_keenObj->posY = RF_TileToUnit(tileY + 1);
        ck_keenObj->type = CT_Player;
        ck_keenObj->gfxChunk = 0xBD;
        ck_keenObj->clipped = CLIP_normal;
        CK_SetAction(ck_keenObj, CK_GetActionByName("CK_ACT_MapKeenStart"));
        ck_gameState.ep.ck6.inRocket ^= 1;
        return;
      }

      delta -= obj->user2;
      obj->user2 = 256 - delta;

      // Move in the new direction.
      dirX = ck_infoplaneArrowsX[obj->user1];
      if (dirX == 1)
      {
        // Moving right.
        ck_nextX += delta;
      }
      else if (dirX == -1)
      {
        // Moving left
        ck_nextX -= delta;
      }

      dirY = ck_infoplaneArrowsY[obj->user1];
      if (dirY == 1)
      {
        // Moving down
        ck_nextY += delta;
      }
      else if (dirY == -1)
      {
        // Moving up
        ck_nextY -= delta;
      }
    }
  }
}