void A_SkullAttack(AActor *self, fixed_t speed) { AActor *dest; angle_t an; int dist; // [BC] This is handled server-side. if ( NETWORK_InClientMode() ) { return; } if (!self->target) return; dest = self->target; self->flags |= MF_SKULLFLY; S_Sound (self, CHAN_VOICE, self->AttackSound, 1, ATTN_NORM); // [BC] If we're the server, tell clients play this sound. // [BB] And tell them of MF_SKULLFLY. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { SERVERCOMMANDS_SetThingFlags( self, FLAGSET_FLAGS ); SERVERCOMMANDS_SoundActor( self, CHAN_VOICE, S_GetName( self->AttackSound ), 1, ATTN_NORM ); } A_FaceTarget (self); an = self->angle >> ANGLETOFINESHIFT; self->velx = FixedMul (speed, finecosine[an]); self->vely = FixedMul (speed, finesine[an]); dist = P_AproxDistance (dest->x - self->x, dest->y - self->y); dist = dist / speed; if (dist < 1) dist = 1; self->velz = (dest->z + (dest->height>>1) - self->z) / dist; // [BC] Update the lost soul's momentum. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_MoveThingExact( self, CM_X|CM_Y|CM_Z|CM_MOMX|CM_MOMY|CM_MOMZ ); }
DEFINE_ACTION_FUNCTION(AActor, A_InquisitorJump) { fixed_t dist; fixed_t speed; angle_t an; // [BC] This is handled server-side. if ( NETWORK_InClientMode() ) { return; } if (self->target == NULL) return; S_Sound (self, CHAN_ITEM|CHAN_LOOP, "inquisitor/jump", 1, ATTN_NORM); self->z += 64*FRACUNIT; A_FaceTarget (self); an = self->angle >> ANGLETOFINESHIFT; speed = self->Speed * 2/3; self->velx += FixedMul (speed, finecosine[an]); self->vely += FixedMul (speed, finesine[an]); dist = P_AproxDistance (self->target->x - self->x, self->target->y - self->y); dist /= speed; if (dist < 1) { dist = 1; } self->velz = (self->target->z - self->z) / dist; self->reactiontime = 60; self->flags |= MF_NOGRAVITY; // [BC] If we're the server, update the thing's position. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { SERVERCOMMANDS_MoveThingExact( self, CM_Z|CM_MOMX|CM_MOMY|CM_MOMZ ); // [CW] Also, set the flags to ensure the actor can fly. SERVERCOMMANDS_SetThingFlags( self, FLAGSET_FLAGS ); } }