void P_SetupPsprites(player_t *player, bool startweaponup) { // Remove all psprites player->DestroyPSprites(); // Spawn the ready weapon player->PendingWeapon = !startweaponup ? player->ReadyWeapon : WP_NOCHANGE; P_BringUpWeapon (player); }
void P_MovePsprites (player_t *player) { int i; pspdef_t *psp; FState *state; // [RH] If you don't have a weapon, then the psprites should be NULL. if (player->ReadyWeapon == NULL && (player->health > 0 || player->mo->DamageType != NAME_Fire)) { P_SetPsprite (player, ps_weapon, NULL); P_SetPsprite (player, ps_flash, NULL); if (player->PendingWeapon != WP_NOCHANGE) { P_BringUpWeapon (player); } } else { psp = &player->psprites[0]; for (i = 0; i < NUMPSPRITES; i++, psp++) { if ((state = psp->state) != NULL && psp->processPending) // a null state means not active { // drop tic count and possibly change state if (psp->tics != -1) // a -1 tic count never changes { psp->tics--; // [BC] Apply double firing speed. if ( psp->tics && (player->cheats & CF_DOUBLEFIRINGSPEED)) psp->tics--; if(!psp->tics) { P_SetPsprite (player, i, psp->state->GetNextState()); } } } } player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx; player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy; P_CheckWeaponSwitch (player); if (player->WeaponState & (WF_WEAPONREADY | WF_WEAPONREADYALT)) { P_CheckWeaponFire (player); } if (player->WeaponState & WF_WEAPONRELOADOK) { P_CheckWeaponReload (player); } if (player->WeaponState & WF_WEAPONZOOMOK) { P_CheckWeaponZoom (player); } } }
DEFINE_ACTION_FUNCTION(AInventory, A_Lower) { PARAM_ACTION_PROLOGUE; player_t *player = self->player; DPSprite *psp; if (nullptr == player) { return 0; } if (nullptr == player->ReadyWeapon) { P_BringUpWeapon(player); return 0; } psp = player->GetPSprite(PSP_WEAPON); if (player->morphTics || player->cheats & CF_INSTANTWEAPSWITCH) { psp->y = WEAPONBOTTOM; } else { psp->y += LOWERSPEED; } if (psp->y < WEAPONBOTTOM) { // Not lowered all the way yet return 0; } if (player->playerstate == PST_DEAD) { // Player is dead, so don't bring up a pending weapon // Player is dead, so keep the weapon off screen P_SetPsprite(player, PSP_FLASH, nullptr); psp->SetState(player->ReadyWeapon->FindState(NAME_DeadLowered)); return 0; } // [RH] Clear the flash state. Only needed for Strife. P_SetPsprite(player, PSP_FLASH, nullptr); P_BringUpWeapon (player); return 0; }
OVERLAY void P_SetupPsprites(player_t *player) { int i; // remove all psprites for (i=0; i<NUMPSPRITES; i++) player->psprites[i].state = NULL; // spawn the gun player->pendingweapon = player->readyweapon; P_BringUpWeapon(player); }
void P_SetupPsprites(player_t *player, bool startweaponup) { int i; // Remove all psprites for (i = 0; i < NUMPSPRITES; i++) { player->psprites[i].state = NULL; } // Spawn the ready weapon player->PendingWeapon = !startweaponup ? player->ReadyWeapon : WP_NOCHANGE; P_BringUpWeapon (player); }
/** * Lowers current weapon, and changes weapon at bottom. */ void C_DECL A_Lower(player_t *player, pspdef_t *psp) { psp->pos[VY] += LOWERSPEED; // Psprite state. player->plr->pSprites[0].state = DDPSP_DOWN; // Should we disable the lowering? if(!cfg.bobWeaponLower || weaponInfo[player->readyWeapon][player->class_].mode[0].staticSwitch) { DD_SetInteger(DD_WEAPON_OFFSET_SCALE_Y, 0); } // Is already down. if(psp->pos[VY] < WEAPONBOTTOM) return; // Player is dead. if(player->playerState == PST_DEAD) { psp->pos[VY] = WEAPONBOTTOM; // Don't bring weapon back up. return; } if(player->readyWeapon == WT_SIXTH) // jd64 P_SetPsprite(player, ps_flash, S_NULL); // The old weapon has been lowered off the screen, so change the weapon // and start raising it. if(!player->health) { // Player is dead, so keep the weapon off screen. P_SetPsprite(player, ps_weapon, S_NULL); return; } player->readyWeapon = player->pendingWeapon; player->update |= PSF_READY_WEAPON; // Should we suddenly lower the weapon? if(cfg.bobWeaponLower && !weaponInfo[player->readyWeapon][player->class_].mode[0].staticSwitch) { DD_SetInteger(DD_WEAPON_OFFSET_SCALE_Y, 1000); } P_BringUpWeapon(player); }
void player_t::TickPSprites() { DPSprite *pspr = psprites; while (pspr) { // Destroy the psprite if it's from a weapon that isn't currently selected by the player // or if it's from an inventory item that the player no longer owns. if ((pspr->Caller == nullptr || (pspr->Caller->IsKindOf(RUNTIME_CLASS(AInventory)) && barrier_cast<AInventory *>(pspr->Caller)->Owner != pspr->Owner->mo) || (pspr->Caller->IsKindOf(RUNTIME_CLASS(AWeapon)) && pspr->Caller != pspr->Owner->ReadyWeapon))) { pspr->Destroy(); } else { pspr->Tick(); } pspr = pspr->Next; } if ((health > 0) || (ReadyWeapon != nullptr && !(ReadyWeapon->WeaponFlags & WIF_NODEATHINPUT))) { if (ReadyWeapon == nullptr) { if (PendingWeapon != WP_NOCHANGE) P_BringUpWeapon(this); } else { P_CheckWeaponSwitch(this); if (WeaponState & (WF_WEAPONREADY | WF_WEAPONREADYALT)) { P_CheckWeaponFire(this); } // Check custom buttons P_CheckWeaponButtons(this); } } }
// // A_Lower // Lowers current weapon, // and changes weapon at bottom. // void A_Lower(player_t* player, pspdef_t* psp) { psp->sy += LOWERSPEED; // Is already down. if(psp->sy < WEAPONBOTTOM ) return; // Player is dead. if(player->playerstate == PST_DEAD) { psp->sy = WEAPONBOTTOM; // don't bring weapon back up return; } // // [d64] stop plasma buzz // if(player->readyweapon == wp_plasma) { pls_buzzing = false; S_StopSound(NULL, sfx_electric); } // The old weapon has been lowered off the screen, // so change the weapon and start raising it if(!player->health) { // Player is dead, so keep the weapon off screen. P_SetPsprite(player, ps_weapon, S_000); return; } P_SetPsprite(player, ps_flash, S_000); //villsa player->readyweapon = player->pendingweapon; P_BringUpWeapon(player); }
// // A_Lower // Lowers current weapon, // and changes weapon at bottom. // void A_Lower (AActor *mo) { player_t *player = mo->player; struct pspdef_s *psp = &player->psprites[player->psprnum]; psp->sy += LOWERSPEED; weapon_ypos[player->id] += LOWERSPEED; // Not yet lowered to the bottom if (weapon_ypos[player->id] < WEAPONBOTTOM) return; // Player is dead. if (player->playerstate == PST_DEAD) { psp->sy = WEAPONBOTTOM; weapon_ypos[player->id] = WEAPONBOTTOM; // don't bring weapon back up return; } // The old weapon has been lowered off the screen, // so change the weapon and start raising it if (player->health <= 0) { // Player is dead, so keep the weapon off screen. P_SetPsprite (player, ps_weapon, S_NULL); return; } // haleyjd 03/28/10: do not assume pendingweapon is valid if (player->pendingweapon < NUMWEAPONS) player->readyweapon = player->pendingweapon; P_BringUpWeapon (player); }
DEFINE_ACTION_FUNCTION(AInventory, A_Lower) { PARAM_ACTION_PROLOGUE; player_t *player = self->player; pspdef_t *psp; if (NULL == player) { return 0; } psp = &player->psprites[ps_weapon]; if (player->morphTics || player->cheats & CF_INSTANTWEAPSWITCH) { psp->sy = WEAPONBOTTOM; } else { psp->sy += LOWERSPEED; } if (psp->sy < WEAPONBOTTOM) { // Not lowered all the way yet return 0; } if (player->playerstate == PST_DEAD) { // Player is dead, so don't bring up a pending weapon psp->sy = WEAPONBOTTOM; // Player is dead, so keep the weapon off screen P_SetPsprite (player, ps_weapon, NULL); return 0; } // [RH] Clear the flash state. Only needed for Strife. P_SetPsprite (player, ps_flash, NULL); P_BringUpWeapon (player); return 0; }
void A_Lower(player_t *player, pspdef_t *psp) { //Added reload speeds for Musket Doom //-jukeri12 26.8.2015 if (player->readyweapon==wp_pistol && player->reloading==true) psp->sy += LOWERSPEED/6; else if (player->readyweapon==wp_shotgun && player->reloading==true) psp->sy += LOWERSPEED/8; else psp->sy += LOWERSPEED/2; // Is already down. if (psp->sy < WEAPONBOTTOM) return; // Player is dead. if (player->playerstate == PST_DEAD) { psp->sy = WEAPONBOTTOM; return; // don't bring weapon back up } // The old weapon has been lowered off the screen, // so change the weapon and start raising it if (!player->health) { // Player is dead, so keep the weapon off screen. P_SetPsprite(player, ps_weapon, S_NULL); return; } player->readyweapon = player->pendingweapon; P_BringUpWeapon(player); }