static void DestroyObject( TObject *o, const int flags, const int playerUID, const int uid) { o->Health = 0; const Vec2i realPos = Vec2iNew(o->tileItem.x, o->tileItem.y); if (!gCampaign.IsClient) { // Update objective UpdateMissionObjective(&gMission, o->tileItem.flags, OBJECTIVE_DESTROY); // Extra score if objective if ((o->tileItem.flags & TILEITEM_OBJECTIVE) && playerUID >= 0) { GameEvent e = GameEventNew(GAME_EVENT_SCORE); e.u.Score.PlayerUID = playerUID; e.u.Score.Score = OBJECT_SCORE; GameEventsEnqueue(&gGameEvents, e); } // Weapons that go off when this object is destroyed const Vec2i fullPos = Vec2iReal2Full(realPos); for (int i = 0; i < (int)o->Class->DestroyGuns.size; i++) { const GunDescription **g = CArrayGet(&o->Class->DestroyGuns, i); GunFire(*g, fullPos, 0, 0, flags, playerUID, uid, true, false); } // A wreck left after the destruction of this object // TODO: doesn't need to be network event GameEvent e = GameEventNew(GAME_EVENT_ADD_BULLET); e.u.AddBullet.UID = MobObjsObjsGetNextUID(); strcpy(e.u.AddBullet.BulletClass, "fireball_wreck"); e.u.AddBullet.MuzzlePos = Vec2i2Net(fullPos); e.u.AddBullet.MuzzleHeight = 0; e.u.AddBullet.Angle = 0; e.u.AddBullet.Elevation = 0; e.u.AddBullet.Flags = 0; e.u.AddBullet.PlayerUID = -1; e.u.AddBullet.ActorUID = -1; GameEventsEnqueue(&gGameEvents, e); } SoundPlayAt(&gSoundDevice, gSoundDevice.wreckSound, realPos); // Turn the object into a wreck, if available if (o->Class->Wreck.Pic) { o->tileItem.flags = TILEITEM_IS_WRECK; } else { ObjDestroy(o->tileItem.id); } // Update pathfinding cache since this object could have blocked a path // before PathCacheClear(&gPathCache); }
static void FireGuns(const TMobileObject *obj, const CArray *guns) { const Vec2i fullPos = Vec2iNew(obj->x, obj->y); const double angle = Vec2iToRadians(obj->vel); for (int i = 0; i < (int)guns->size; i++) { const GunDescription **g = CArrayGet(guns, i); GunFire( *g, fullPos, obj->z, angle, obj->flags, obj->PlayerUID, obj->ActorUID, true, false); } }
//checks the controls and how the affect the player int PlayerCheckControls(int SpriteNum) //returns. 0 - nothing, 1 - a bullet was instantiated { joykey = joypad(); //get joypad //printf("%d", joykey); //check movement if (joykey == 4) //up { if (P_Strafing) { PlayerMoveUp(0, SpriteNum); } else { PlayerMoveUp(1, SpriteNum); } } if (joykey == 8) //down { if (P_Strafing) { PlayerMoveDown(0, SpriteNum); } else { PlayerMoveDown(1, SpriteNum); } } if (joykey == 2) //left { if (P_Strafing) { PlayerMoveLeft(0, SpriteNum); } else { PlayerMoveLeft(1, SpriteNum); } } if (joykey == 1) //right { if (P_Strafing) { PlayerMoveRight(0, SpriteNum); } else { PlayerMoveRight(1, SpriteNum); } } if (joykey == 5) //northeast { if (P_Strafing) { PlayerMoveUp(0, SpriteNum); PlayerMoveRight(0, SpriteNum); } else { PlayerMoveUp(1, SpriteNum); PlayerMoveRight(1, SpriteNum); } } if (joykey == 9) //southeast { if (P_Strafing) { PlayerMoveDown(0, SpriteNum); PlayerMoveRight(0, SpriteNum); } else { PlayerMoveDown(1, SpriteNum); PlayerMoveRight(1, SpriteNum); } } if (joykey == 10) //southwest { if (P_Strafing) { PlayerMoveDown(0, SpriteNum); PlayerMoveLeft(0, SpriteNum); } else { PlayerMoveDown(1, SpriteNum); PlayerMoveLeft(1, SpriteNum); } } if (joykey == 6) //northwest { if (P_Strafing) { PlayerMoveUp(0, SpriteNum); PlayerMoveLeft(0, SpriteNum); } else { PlayerMoveUp(1, SpriteNum); PlayerMoveLeft(1, SpriteNum); } } //bullets and movement if (joykey == 16) //A only { return GunFire(P_PosX, P_PosY, P_Direction); } if (joykey == 20) //A and up { if (P_Strafing) { PlayerMoveUp(0, SpriteNum); } else { PlayerMoveUp(1, SpriteNum); } return GunFire(P_PosX, P_PosY, P_Direction); } if (joykey == 24) //A and down { if (P_Strafing) { PlayerMoveDown(0, SpriteNum); } else { PlayerMoveDown(1, SpriteNum); } return GunFire(P_PosX, P_PosY, P_Direction); } if (joykey == 17) //A and right { if (P_Strafing) { PlayerMoveRight(0, SpriteNum); } else { PlayerMoveRight(1, SpriteNum); } return GunFire(P_PosX, P_PosY, P_Direction); } if (joykey == 18) //A and left { if (P_Strafing) { PlayerMoveLeft(0, SpriteNum); } else { PlayerMoveLeft(1, SpriteNum); } return GunFire(P_PosX, P_PosY, P_Direction); } //strafing if (joykey == 32) //B only { if (P_StrafeToggle) { if (P_Strafing) { P_Strafing = 0; } else { P_Strafing = 1; } P_StrafeToggle = 0; } } if (joykey == 36) //up and B { if (P_StrafeToggle) { if (P_Strafing) { P_Strafing = 0; } else { P_Strafing = 1; } P_StrafeToggle = 0; } PlayerMoveUp(0); } if (joykey == 40) //down and B { if (P_StrafeToggle) { if (P_Strafing) { P_Strafing = 0; } else { P_Strafing = 1; } P_StrafeToggle = 0; } PlayerMoveDown(0); } if (joykey == 33) //right and B { if (P_StrafeToggle) { if (P_Strafing) { P_Strafing = 0; } else { P_Strafing = 1; } P_StrafeToggle = 0; } PlayerMoveRight(0); } if (joykey == 34) //left and B { if (P_StrafeToggle) { if (P_Strafing) { P_Strafing = 0; } else { P_Strafing = 1; } P_StrafeToggle = 0; } PlayerMoveLeft(0); } //reset strafe toggle if ((joykey != 32) && (joykey != 36) && (joykey != 40) && (joykey != 3) && (joykey != 34)) { P_StrafeToggle = 1; } return 0; }