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
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; } }
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++; } }
/** * 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); }