void APowerCoupling::Die (AActor *source, AActor *inflictor, int dmgflags) { Super::Die (source, inflictor, dmgflags); int i; for (i = 0; i < MAXPLAYERS; ++i) if (playeringame[i] && players[i].health > 0) break; if (i == MAXPLAYERS) return; // [RH] In case the player broke it with the dagger, alert the guards now. if (LastHeard != source) { P_NoiseAlert (source, this); } EV_DoDoor (DDoor::doorClose, NULL, players[i].mo, 225, 2*FRACUNIT, 0, 0, 0); EV_DoFloor (DFloor::floorLowerToHighest, NULL, 44, FRACUNIT, 0, -1, 0, false); players[i].mo->GiveInventoryType (QuestItemClasses[5]); S_Sound (CHAN_VOICE, "svox/voc13", 1, ATTN_NORM); players[i].SetLogNumber (13); P_DropItem (this, PClass::FindClass("BrokenPowerCoupling"), -1, 256); Destroy (); }
void P_FireWeaponAlt (player_t *player, FState *state) { AWeapon *weapon; // [SO] 9/2/02: People were able to do an awful lot of damage // when they were observers... if (player->Bot == nullptr && bot_observer) { return; } weapon = player->ReadyWeapon; if (weapon == nullptr || weapon->FindState(NAME_AltFire) == nullptr || !weapon->CheckAmmo (AWeapon::AltFire, true)) { return; } player->mo->PlayAttacking (); weapon->bAltFire = true; if (state == nullptr) { state = weapon->GetAltAtkState(!!player->refire); } P_SetPsprite(player, PSP_WEAPON, state); if (!(weapon->WeaponFlags & WIF_NOALERT)) { P_NoiseAlert (player->mo, player->mo, false); } }
void P_FireWeapon (player_t *player, FState *state) { AWeapon *weapon; // [SO] 9/2/02: People were able to do an awful lot of damage // when they were observers... if (!player->isbot && bot_observer) { return; } weapon = player->ReadyWeapon; if (weapon == NULL || !weapon->CheckAmmo (AWeapon::PrimaryFire, true)) { return; } player->mo->PlayAttacking (); weapon->bAltFire = false; if (state == NULL) { state = weapon->GetAtkState(!!player->refire); } P_SetPsprite (player, ps_weapon, state); if (!(weapon->WeaponFlags & WIF_NOALERT)) { P_NoiseAlert (player->mo, player->mo, false); } }
DEFINE_ACTION_FUNCTION(AActor, A_KlaxonBlare) { if (--self->reactiontime < 0) { self->target = NULL; self->reactiontime = self->GetDefault()->reactiontime; CALL_ACTION(A_TurretLook, self); if (self->target == NULL) { self->SetIdle(); } else { self->reactiontime = 50; } } if (self->reactiontime == 2) { // [RH] Unalert monsters near the alarm and not just those in the same sector as it. P_NoiseAlert (NULL, self, false); } else if (self->reactiontime > 50) { S_Sound (self, CHAN_VOICE, "misc/alarm", 1, ATTN_NORM); } }
bool ARaiseAlarm::TryPickup (AActor *&toucher) { P_NoiseAlert (toucher, toucher); CALL_ACTION(A_WakeOracleSpectre, toucher); GoAwayAndDie (); return true; }
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_AlertMonsters) { PARAM_ACTION_PROLOGUE; PARAM_FIXED_OPT(maxdist) { maxdist = 0; } PARAM_INT_OPT(Flags) { Flags = 0; } AActor * target = NULL; AActor * emitter = self; if (self->player != NULL || (Flags & AMF_TARGETEMITTER)) { target = self; } else if (self->target != NULL && (Flags & AMF_TARGETNONPLAYER)) { target = self->target; } else if (self->target != NULL && self->target->player != NULL) { target = self->target; } if (Flags & AMF_EMITFROMTARGET) emitter = target; if (target != NULL && emitter != NULL) { P_NoiseAlert(target, emitter, false, maxdist); } return 0; }
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_AlertMonsters) { ACTION_PARAM_START(1); ACTION_PARAM_FIXED(maxdist, 0); ACTION_PARAM_INT(Flags, 1); AActor * target = NULL; AActor * emitter = self; if (self->player != NULL || (Flags & AMF_TARGETEMITTER)) { target = self; } else if (self->target != NULL && (Flags & AMF_TARGETNONPLAYER)) { target = self->target; } else if (self->target != NULL && self->target->player != NULL) { target = self->target; } if (Flags & AMF_EMITFROMTARGET) emitter = target; if (target != NULL && emitter != NULL) { P_NoiseAlert(target, emitter, false, maxdist); } }
DEFINE_ACTION_FUNCTION(AActor, A_HideDecepticon) { EV_DoDoor (DDoor::doorClose, NULL, self, 999, 8*FRACUNIT, 0, 0, 0); if (self->target != NULL && self->target->player != NULL) { P_NoiseAlert (self->target, self); } }
bool ARaiseAlarm::SpecialDropAction (AActor *dropper) { P_NoiseAlert (dropper->target, dropper->target); if (dropper->target->CheckLocalView (consoleplayer)) { Printf ("You Fool! You've set off the alarm.\n"); } Destroy (); return true; }
bool ACloseDoor222::SpecialDropAction (AActor *dropper) { EV_DoDoor (DDoor::doorClose, NULL, dropper, 222, 2*FRACUNIT, 0, 0, 0); if (dropper->target->CheckLocalView (consoleplayer)) { Printf ("You're dead! You set off the alarm.\n"); } P_NoiseAlert (dropper->target, dropper->target); Destroy (); return true; }
static void P_FireWeapon(player_t *player) { statenum_t newstate; if (!P_CheckAmmo(player)) return; P_SetMobjState(player->mo, S_PLAY_ATK1); newstate = weaponinfo[player->readyweapon].atkstate; P_SetPsprite(player, ps_weapon, newstate); P_NoiseAlert(player->mo, player->mo); }
OVERLAY static void P_FireWeapon(player_t *player) { statenum_t newstate; if (!P_CheckAmmo(player)) return; P_SetMobjState(player->mo, S_PLAY_ATK1); newstate = (statenum_t)weaponinfo[player->readyweapon].atkstate; P_SetPsprite(player, ps_weapon, newstate); P_NoiseAlert(player->mo, player->mo); lastshottic = gametic; // killough 3/22/98 }
void P_FireWeapon(player_t *player) { statenum_t newstate; if(!P_CheckAmmo(player)) return; // Psprite state. player->plr->pSprites[0].state = DDPSP_FIRE; P_MobjChangeState(player->plr->mo, PCLASS_INFO(player->class_)->attackState); newstate = weaponInfo[player->readyWeapon][player->class_].mode[0].states[WSN_ATTACK]; P_SetPsprite(player, ps_weapon, newstate); P_NoiseAlert(player->plr->mo, player->plr->mo); }
// // P_FireWeapon. // void P_FireWeapon(player_t *player) { statenum_t newstate; if (!P_CheckAmmo(player) || (automapactive && !followplayer)) return; P_SetMobjState(player->mo, S_PLAY_ATK1); newstate = (statenum_t)weaponinfo[player->readyweapon].atkstate; P_SetPsprite(player, ps_weapon, newstate); if (player->readyweapon == wp_fist && !linetarget) return; P_NoiseAlert(player->mo, player->mo); }
static void P_FireWeapon(player_t *player) { statenum_t newstate; if (!P_CheckLoaded(player)) return; if (!P_CheckAmmo(player)) return; P_SetMobjState(player->mo, S_PLAY_ATK1); newstate = weaponinfo[player->readyweapon].atkstate; P_SetPsprite(player, ps_weapon, newstate); P_NoiseAlert(player->mo, player->mo); //Melee doesn't need to be reloaded -jukeri12 18.8.2015 if (player->readyweapon != wp_fist) player->weaponloaded[player->readyweapon] = false; }
// // P_FireWeapon. // void P_FireWeapon(player_t* player) { statenum_t newstate; pspdef_t* psp; if (!P_CheckAmmo (player)) return; psp = &player->psprites[ps_weapon]; P_SetMobjState (player->mo, S_006); newstate = weaponinfo[player->readyweapon].atkstate; if(player->refire && player->readyweapon == wp_pistol) newstate++; P_SetPsprite (player, ps_weapon, newstate); P_NoiseAlert (player->mo, player->mo); psp->sx = FRACUNIT; //villsa psp->sy = WEAPONTOP; }
// // P_FireWeapon. // void P_FireWeapon (player_t *player) { statenum_t newstate; if (!P_CheckAmmo (player)) return; // [tm512] Send the client the weapon they just fired so // that they can fix any weapon desyncs that they get - apr 14 2012 if (serverside && !clientside) { MSG_WriteMarker (&player->client.reliablebuf, svc_fireweapon); MSG_WriteByte (&player->client.reliablebuf, player->readyweapon); MSG_WriteLong (&player->client.reliablebuf, player->tic); } P_SetMobjState (player->mo, S_PLAY_ATK1); newstate = weaponinfo[player->readyweapon].atkstate; P_SetPsprite (player, ps_weapon, newstate); P_NoiseAlert (player->mo, player->mo); }
// // P_GiveItemToPlayer // // [STRIFE] New function // haleyjd 09/03/10: Sorts out how to give something to the player. // Not strictly just for inventory items. // villsa 09/09/10: Fleshed out function // boolean P_GiveItemToPlayer(player_t *player, int sprnum, mobjtype_t type) { int i = 0; line_t junk; int sound = sfx_itemup; // haleyjd 09/21/10: different sounds for items // set quest if mf_givequest flag is set if(mobjinfo[type].flags & MF_GIVEQUEST) player->questflags |= 1 << (mobjinfo[type].speed - 1); // check for keys if(type >= MT_KEY_BASE && type <= MT_NEWKEY5) { P_GiveCard(player, type - MT_KEY_BASE); return true; } // check for quest tokens if(type >= MT_TOKEN_QUEST1 && type <= MT_TOKEN_QUEST31) { if(mobjinfo[type].name) { M_StringCopy(pickupstring, DEH_String(mobjinfo[type].name), 39); player->message = pickupstring; } player->questflags |= 1 << (type - MT_TOKEN_QUEST1); if(player == &players[consoleplayer]) S_StartSound(NULL, sound); return true; } // haleyjd 09/22/10: Refactored to give sprites higher priority than // mobjtypes and to implement missing logic. switch(sprnum) { case SPR_HELT: // This is given only by the "DONNYTRUMP" cheat (aka Midas) P_GiveInventoryItem(player, SPR_HELT, MT_TOKEN_TOUGHNESS); P_GiveInventoryItem(player, SPR_GUNT, MT_TOKEN_ACCURACY); // [STRIFE] Bizarre... for(i = 0; i < 5 * player->accuracy + 300; i++) P_GiveInventoryItem(player, SPR_COIN, MT_MONY_1); break; case SPR_ARM1: // Armor 1 if(!P_GiveArmor(player, -2)) P_GiveInventoryItem(player, sprnum, type); break; case SPR_ARM2: // Armor 2 if(!P_GiveArmor(player, -1)) P_GiveInventoryItem(player, sprnum, type); break; case SPR_COIN: // 1 Gold P_GiveInventoryItem(player, SPR_COIN, MT_MONY_1); break; case SPR_CRED: // 10 Gold for(i = 0; i < 10; i++) P_GiveInventoryItem(player, SPR_COIN, MT_MONY_1); break; case SPR_SACK: // 25 gold for(i = 0; i < 25; i++) P_GiveInventoryItem(player, SPR_COIN, MT_MONY_1); break; case SPR_CHST: // 50 gold for(i = 0; i < 50; i++) P_GiveInventoryItem(player, SPR_COIN, MT_MONY_1); case SPR_BBOX: // Box of Bullets if(!P_GiveAmmo(player, am_bullets, 5)) return false; break; case SPR_BLIT: // Bullet Clip if(!P_GiveAmmo(player, am_bullets, 1)) return false; break; case SPR_PMAP: // Map powerup if(!P_GivePower(player, pw_allmap)) return false; sound = sfx_yeah; // bluh-doop! break; case SPR_COMM: // Communicator if(!P_GivePower(player, pw_communicator)) return false; sound = sfx_yeah; // bluh-doop! break; case SPR_MSSL: // Mini-missile if(!P_GiveAmmo(player, am_missiles, 1)) return false; break; case SPR_ROKT: // Crate of missiles if(!P_GiveAmmo(player, am_missiles, 5)) return false; break; case SPR_BRY1: // Battery cell if(!P_GiveAmmo(player, am_cell, 1)) return false; break; case SPR_CPAC: // Cell pack if(!P_GiveAmmo(player, am_cell, 5)) return false; break; case SPR_PQRL: // Poison bolts if(!P_GiveAmmo(player, am_poisonbolts, 5)) return false; break; case SPR_XQRL: // Electric bolts if(!P_GiveAmmo(player, am_elecbolts, 5)) return false; break; case SPR_GRN1: // HE Grenades if(!P_GiveAmmo(player, am_hegrenades, 1)) return false; break; case SPR_GRN2: // WP Grenades if(!P_GiveAmmo(player, am_wpgrenades, 1)) return false; break; case SPR_BKPK: // Backpack (aka Ammo Satchel) if(!player->backpack) { for(i = 0; i < NUMAMMO; i++) player->maxammo[i] *= 2; player->backpack = true; } for(i = 0; i < NUMAMMO; i++) P_GiveAmmo(player, i, 1); break; case SPR_RIFL: // Assault Rifle if(player->weaponowned[wp_rifle]) return false; if(!P_GiveWeapon(player, wp_rifle, false)) return false; sound = sfx_wpnup; // SHK-CHK! break; case SPR_FLAM: // Flamethrower if(player->weaponowned[wp_flame]) return false; if(!P_GiveWeapon(player, wp_flame, false)) return false; sound = sfx_wpnup; // SHK-CHK! break; case SPR_MMSL: // Mini-missile Launcher if(player->weaponowned[wp_missile]) return false; if(!P_GiveWeapon(player, wp_missile, false)) return false; sound = sfx_wpnup; // SHK-CHK! break; case SPR_TRPD: // Mauler if(player->weaponowned[wp_mauler]) return false; if(!P_GiveWeapon(player, wp_mauler, false)) return false; sound = sfx_wpnup; // SHK-CHK! break; case SPR_CBOW: // Here's a crossbow. Just aim straight, and *SPLAT!* if(player->weaponowned[wp_elecbow]) return false; if(!P_GiveWeapon(player, wp_elecbow, false)) return false; sound = sfx_wpnup; // SHK-CHK! break; case SPR_TOKN: // Miscellaneous items - These are determined by thingtype. switch(type) { case MT_KEY_HAND: // Severed hand P_GiveCard(player, key_SeveredHand); break; case MT_MONY_300: // 300 Gold (this is the only way to get it, in fact) for(i = 0; i < 300; i++) P_GiveInventoryItem(player, SPR_COIN, MT_MONY_1); break; case MT_TOKEN_AMMO: // Ammo token - you get this from the Weapons Trainer if(player->ammo[am_bullets] >= 50) return false; player->ammo[am_bullets] = 50; break; case MT_TOKEN_HEALTH: // Health token - from the Front's doctor if(!P_GiveBody(player, healthamounts[gameskill])) return false; break; case MT_TOKEN_ALARM: // Alarm token - particularly from the Oracle. P_NoiseAlert(player->mo, player->mo); A_AlertSpectreC(dialogtalker); // BUG: assumes in a dialog o_O break; case MT_TOKEN_DOOR1: // Door special 1 junk.tag = 222; EV_DoDoor(&junk, vld_open); break; case MT_TOKEN_PRISON_PASS: // Door special 1 - Prison pass junk.tag = 223; EV_DoDoor(&junk, vld_open); if(gamemap == 2) // If on Tarnhill, give Prison pass object P_GiveInventoryItem(player, sprnum, type); break; case MT_TOKEN_SHOPCLOSE: // Door special 3 - "Shop close" - unused? junk.tag = 222; EV_DoDoor(&junk, vld_close); break; case MT_TOKEN_DOOR3: // Door special 4 (or 3? :P ) junk.tag = 224; EV_DoDoor(&junk, vld_close); break; case MT_TOKEN_STAMINA: // Stamina upgrade if(player->stamina >= 100) return false; player->stamina += 10; P_GiveBody(player, 200); // full healing break; case MT_TOKEN_NEW_ACCURACY: // Accuracy upgrade if(player->accuracy >= 100) return false; player->accuracy += 10; break; case MT_SLIDESHOW: // Slideshow (start a finale) gameaction = ga_victory; if(gamemap == 10) P_GiveItemToPlayer(player, SPR_TOKN, MT_TOKEN_QUEST17); break; default: // The default is to just give it as an inventory item. P_GiveInventoryItem(player, sprnum, type); break; } break; default: // The ultimate default: Give it as an inventory item. if(!P_GiveInventoryItem(player, sprnum, type)) return false; break; } // Play sound. if(player == &players[consoleplayer]) S_StartSound(NULL, sound); return true; }