/** * Get a pointer to the value of a named variable/constant. */ void* D_GetVariable(int id) { static float bob[2]; switch(id) { case DD_PLUGIN_NAME: return PLUGIN_NAMETEXT; case DD_PLUGIN_NICENAME: return PLUGIN_NICENAME; case DD_PLUGIN_VERSION_SHORT: return PLUGIN_VERSION_TEXT; case DD_PLUGIN_VERSION_LONG: return PLUGIN_VERSION_TEXTLONG "\n" PLUGIN_DETAILS; case DD_PLUGIN_HOMEURL: return PLUGIN_HOMEURL; case DD_PLUGIN_DOCSURL: return PLUGIN_DOCSURL; case DD_GAME_CONFIG: return gameConfigString; case DD_ACTION_LINK: return actionlinks; case DD_XGFUNC_LINK: return xgClasses; case DD_PSPRITE_BOB_X: R_GetWeaponBob(DISPLAYPLAYER, &bob[0], 0); return &bob[0]; case DD_PSPRITE_BOB_Y: R_GetWeaponBob(DISPLAYPLAYER, 0, &bob[1]); return &bob[1]; case DD_TM_FLOOR_Z: return (void*) &tmFloorZ; case DD_TM_CEILING_Z: return (void*) &tmCeilingZ; default: break; } return 0; }
/** * The player can fire the weapon or change to another weapon at this time. * Follows after getting weapon up, or after previous attack/fire sequence. */ void C_DECL A_WeaponReady(player_t* player, pspdef_t* psp) { weaponmodeinfo_t* wminfo; // Enable the pspr Y offset (might be disabled in A_Lower). DD_SetInteger(DD_WEAPON_OFFSET_SCALE_Y, 1000); // Get out of attack state. if(player->plr->mo->state == &STATES[PCLASS_INFO(player->class_)->attackState] || player->plr->mo->state == &STATES[PCLASS_INFO(player->class_)->attackEndState]) { P_MobjChangeState(player->plr->mo, PCLASS_INFO(player->class_)->normalState); } if(player->readyWeapon != WT_NOCHANGE) { wminfo = WEAPON_INFO(player->readyWeapon, player->class_, 0); // A weaponready sound? if(psp->state == &STATES[wminfo->states[WSN_READY]] && wminfo->readySound) S_StartSound(wminfo->readySound, player->plr->mo); // Check for change. If player is dead, put the weapon away. if(player->pendingWeapon != WT_NOCHANGE || !player->health) { // (pending weapon should allready be validated) P_SetPsprite(player, ps_weapon, wminfo->states[WSN_DOWN]); return; } } // Check for autofire. if(player->brain.attack) { wminfo = WEAPON_INFO(player->readyWeapon, player->class_, 0); if(!player->attackDown || wminfo->autoFire) { player->attackDown = true; P_FireWeapon(player); return; } } else player->attackDown = false; // Bob the weapon based on movement speed. R_GetWeaponBob(player - players, &psp->pos[0], &psp->pos[1]); // Psprite state. player->plr->pSprites[0].state = DDPSP_BOBBING; }