Exemple #1
0
int SpecialSyreen(pPlayer pl)
{
	s16 b;
	s16 angle;
	pPlayer opp=(pPlayer)pl->opp;
	int ret=0;
	s32 dist=distanceBetweenPoints(pl->object.xpos,pl->object.ypos,opp->object.xpos,
		opp->object.ypos);
	if (dist<208&&(!(opp->ship_flags & CREW_IMMUNE)))
		{

			s8 crew_loss;
			crew_loss = ((8		* (208 - dist)/ 209));
			if (crew_loss >= opp->crew)
				crew_loss = opp->crew - 1;

	for (int i=0;i<crew_loss&&opp->crew-ret>1;i++)
	{
		b=nextWeapon(pl,4,12);
	if (b>0)
	{
		pl->weapon[b].type=CREW;
		pl->weapon[b].object.life=1;
		pl->weapon[b].status=200;//GUESS
		pl->weapon[b].damage=0;
		pl->weapon[b].target=pl->opp;
		pl->weapon[b].parent=pl;
		pl->weapon[b].damageparent=1;
		pl->weapon[b].movefunc=&MoveCrew;
		pl->weapon[b].hitfunc=&HitCrew;
		pl->weapon[b].object.ignorecollision=0;

		pl->weapon[b].object.size=8;
		pl->weapon[b].object.angle = 0;

		pl->weapon[b].object.xspeed=0;
		pl->weapon[b].object.yspeed=0;

		pl->weapon[b].turn_wait=CREW_WAIT;

	angle=FindAngle(opp->object.xpos,opp->object.ypos,pl->object.xpos,pl->object.ypos);
	angle=ModifyAngle(angle,((i*2)-crew_loss)*20);

		pl->weapon[b].object.xpos = opp->object.xpos+((s32)(opp->offset*3 * SIN[angle])>>8);
		pl->weapon[b].object.ypos = opp->object.ypos-((s32)(opp->offset*3 * COS[angle])>>8);

		drawOnScreen(&pl->weapon[b].object.xscreen,&pl->weapon[b].object.yscreen,
			pl->weapon[b].object.xpos,pl->weapon[b].object.ypos,screenx,screeny,pl->weapon[b].object.size);

	 	sprites[pl->weapon[b].sprite].attribute0 = COLOR_256 | SQUARE | ROTATION_FLAG |SIZE_DOUBLE | MODE_TRANSPARENT | pl->weapon[b].object.yscreen;	//setup sprite info, 256 colour, shape and y-coord
		sprites[pl->weapon[b].sprite].attribute1 =SIZE_8 | ROTDATA(pl->weapon[b].sprite) | pl->weapon[b].object.xscreen;
		sprites[pl->weapon[b].sprite].attribute2 = pl->SpriteStart+66 | PRIORITY(1);
		ret++;

	}
	}	//loop
Exemple #2
0
void Ship::control(ew::ControlContext* context)
{
  if(gameWorld->getPaused())
    return;

  turnLeft(actionKeyDown(ACTION_LEFT, context));
  turnRight(actionKeyDown(ACTION_RIGHT, context));
  accelerate(actionKeyDown(ACTION_ACCELERATE, context));
  shoot(actionKeyDown(ACTION_FIRE, context));

  if(actionKeyPush(ACTION_PREV_WEAPON, context))
    prevWeapon();

  if(actionKeyPush(ACTION_NEXT_WEAPON, context))
    nextWeapon();

  // Cheats
  if(context->keyPush(GLFW_KEY_F1))
  {
    increaseLaserLevel();
    gameWorld->player.cheater = true;
  }
  if(context->keyPush(GLFW_KEY_F2))
  {
    increaseSpreadLevel();
    gameWorld->player.cheater = true;
  }
  if(context->keyPush(GLFW_KEY_F3))
  {
    increaseBeamLevel();
    gameWorld->player.cheater = true;
  }
  if(context->keyPush(GLFW_KEY_F4))
  {
    increasePlasmaLevel();
    gameWorld->player.cheater = true;
  }
  if(context->keyPush(GLFW_KEY_F5))
  {
    shields += 1;
    gameWorld->player.cheater = true;
  }
}
Exemple #3
0
int FireUtwig(pPlayer pl)
{

	s16 b;
	int ret=0;

	
	for (int i=0;i<6;i++)
	{
	b= nextWeapon(pl);
	if (b>=0)
	{
	pl->weapon[b].type=SIMPLE;
	pl->weapon[b].object.life=MISSILE_LIFE;//range
	pl->weapon[b].damage=-1*MISSILE_DAMAGE;//6 suspect 6 was for both guns;
	pl->weapon[b].target=pl->opp;
	pl->weapon[b].parent=pl;
	pl->weapon[b].damageparent=0;
	pl->weapon[b].movefunc=0;
	pl->weapon[b].hitfunc=0;
	pl->weapon[b].object.ignorecollision=0;

	pl->weapon[b].object.size=8;
	pl->weapon[b].object.angle = pl->object.angle;

	s32 speed=20;
	pl->weapon[b].object.xspeed = ((MISSILE_SPEED * (s32)SIN[pl->object.angle])>>8);///SPEED_REDUCT;
	pl->weapon[b].object.yspeed = ((MISSILE_SPEED * (s32)COS[pl->object.angle])>>8);///SPEED_REDUCT;

	//pl->weapon[b].object.xpos = pl->object.xpos+((52 * (s32)SIN[pl->object.angle+(i==0?-30:+30)])>>8)/3;
	//pl->weapon[b].object.ypos = pl->object.ypos-((52 * (s32)COS[pl->object.angle+(i==0?-30:+30)])>>8)/3;

	s16 angle;

	if (i==0)
		angle=ModifyAngle(pl->object.angle,-55);
	else if (i==1)
		angle=ModifyAngle(pl->object.angle,-35);
	else if (i==2)
		angle=ModifyAngle(pl->object.angle,-10);
	else if (i==3)
		angle=ModifyAngle(pl->object.angle,15);
	else if (i==4)
		angle=ModifyAngle(pl->object.angle,45);
	else if (i==5)
		angle=ModifyAngle(pl->object.angle,65);



	pl->weapon[b].object.xpos = pl->object.xpos+((52 * (s32)SIN[angle])>>8)/3;
	pl->weapon[b].object.ypos = pl->object.ypos-((52 * (s32)COS[angle])>>8)/3;

	#ifdef MISSILE_START
	pl->weapon[b].object.xpos-=pl->weapon[b].object.xspeed;
	pl->weapon[b].object.ypos+=pl->weapon[b].object.yspeed;
	#endif

	drawOnScreen(&pl->weapon[b].object.xscreen,&pl->weapon[b].object.yscreen,
		pl->weapon[b].object.xpos,pl->weapon[b].object.ypos,screenx,screeny,pl->weapon[b].object.size);

	sprites[pl->weapon[b].sprite].attribute0 = COLOR_256 | SQUARE | ROTATION_FLAG |SIZE_DOUBLE | MODE_TRANSPARENT | pl->weapon[b].object.yscreen;	//setup sprite info, 256 colour, shape and y-coord
    sprites[pl->weapon[b].sprite].attribute1 =SIZE_8| ROTDATA(pl->weapon[b].sprite) | pl->weapon[b].object.xscreen;
    sprites[pl->weapon[b].sprite].attribute2 = pl->SpriteStart+64 | PRIORITY(1);

    ret++;
	}
	}
Exemple #4
0
/**
 * função que lida com os eventos básicos do megaman
 *
 * @author:	Cantídio Oliveira Fontes
 * @since:	18/06/2008
 * @final:	03/07/2008
 * @param:	megaman *, ponteiro para o megaman
 * @param:	background *, ponteiro para o cenário
 * @param:	gorgonAudio *, ponteiro para o sistema sonoro
 * @return:	int
 */
int megamanNormalEvents(megaman *mega,background *bg)
{
	if(mega->control)
	{
		if(key[mega->controlDef.jump] && key[mega->controlDef.down] && backgroundCollision((int)mega->x-5,(int)mega->y, 10,2,bg))
		{
			mega->control=0;
			megamanChangAnimationIfChange(mega,animSlide,0,0);
		}
		else if(key[mega->controlDef.shot] && canShot(&mega->weapons))
		{
			gorgonPlaySound(mega->sound[soundShot],&mega->audio,3);
			megamanShot(mega);
		}
		else if(key[mega->controlDef.jump] && backgroundCollision((int)mega->x-5,(int)mega->y, 10,2,bg))
		{
				megamanJump(mega);
		}
		else if(key[mega->controlDef.right])
		{
			mega->direction=NORMAL;
			if(mega->lastShot==0 && backgroundCollision((int)mega->x-5,(int)mega->y-2, 10,2,bg))
			{
				if(mega->animationPlaying!=animShotWalking)
					megamanChangAnimationIfChange(mega,animWalk,0,0);
				else
					megamanChangAnimationIfChange(mega,animWalk,mega->animationPack.animation[mega->animationPlaying].frameOn,mega->animationPack.animation[mega->animationPlaying].timeOn);
			}
			if(mega->xPulse<mega->xPulseMax)
			{
				mega->xPulse+=mega->xPulseValue;
			}
		}
		else if(key[mega->controlDef.left])
		{
			mega->direction=H_FLIP;
			if(mega->lastShot==0 && backgroundCollision((int)mega->x-5,(int)mega->y-2, 10,2,bg))
			{
				if(mega->animationPlaying!=animShotWalking)
					megamanChangAnimationIfChange(mega,animWalk,0,0);
				else
					megamanChangAnimationIfChange(mega,animWalk,mega->animationPack.animation[mega->animationPlaying].frameOn,mega->animationPack.animation[mega->animationPlaying].timeOn);
			}
			if(mega->xPulse>-mega->xPulseMax)
			{
				mega->xPulse-=mega->xPulseValue;
			}
		}
		else if(!key[mega->controlDef.right] && mega->xPulse>0)
		{
			megamanChangAnimationIfChange(mega,animStand,0,0);
			mega->xPulse-=mega->xPulseValue;
			if(mega->xPulse<0) mega->xPulse=0;
		}
		else if(!key[mega->controlDef.left] && mega->xPulse<0)
		{
			megamanChangAnimationIfChange(mega,animStand,0,0);
			mega->xPulse+=mega->xPulseValue;
			if(mega->xPulse>0) mega->xPulse=0;
		}
		if(key[mega->controlDef.weaponF])
		{
			nextWeapon(&mega->weapons);
			key[mega->controlDef.weaponF]=0;
		}
		else if(key[mega->controlDef.weaponB])
		{
			previousWeapon(&mega->weapons);
			key[mega->controlDef.weaponB]=0;
		}
	}
	if(mega->lastShot>0) mega->lastShot--;
	if(mega->imortal>0) mega->imortal--;
	megamanAnimationFinishedEvents(mega);
	megamanAnimationRunnigEvents(mega);
	megamanMoveX(mega,bg);
	megamanMoveY(mega,bg);
}