diff --git a/missionpack/g_ai.c b/missionpack/g_ai.c index b58ebe1..1e8c34f 100644 --- a/missionpack/g_ai.c +++ b/missionpack/g_ai.c @@ -60,9 +60,9 @@ void AI_SetSightClient (void) // Do NOT do this for players using a // target_monitor, though... in this case // both player and fake player are ignored. - if(ent->client && ent->client->camplayer) + if (ent->client && ent->client->camplayer) { - if(ent->client->spycam) + if (ent->client->spycam) { level.sight_client = ent->client->camplayer; return; diff --git a/missionpack/g_camera.c b/missionpack/g_camera.c index 8b6aa28..9ac90a3 100644 --- a/missionpack/g_camera.c +++ b/missionpack/g_camera.c @@ -100,9 +100,9 @@ void camera_on (edict_t *ent) // "viewer" can control camera aim (2nd player to come along and use // camera cannot) camera = ent->client->spycam; - if(camera->monsterinfo.aiflags & AI_ACTOR) + if (camera->monsterinfo.aiflags & AI_ACTOR) camera->flags |= FL_ROBOT; - if(!camera->viewer) + if (!camera->viewer) camera->viewer = ent; // save current viewangles and restore them with camera_off @@ -162,16 +162,17 @@ void camera_on (edict_t *ent) // check to see if we're the enemy of any monster. If so, make the // faker the enemy - for(i=maxclients->value+1, monster=g_edicts+i; iinuse) continue; - if(!(monster->svflags & SVF_MONSTER)) continue; - if(monster->enemy == ent) { + for (i=maxclients->value+1, monster=g_edicts+i; iinuse) continue; + if (!(monster->svflags & SVF_MONSTER)) continue; + if (monster->enemy == ent) { monster->enemy = faker; FoundTarget(monster); } } - if(ent->client->spycam->viewmessage) + if (ent->client->spycam->viewmessage) gi.centerprintf(ent,ent->client->spycam->viewmessage); } diff --git a/missionpack/g_func.c b/missionpack/g_func.c index 2ef4ae3..71129d0 100644 --- a/missionpack/g_func.c +++ b/missionpack/g_func.c @@ -3063,8 +3063,8 @@ void train_move_prox (edict_t *self) } } -//Knightmare- this function moves the movewith chilren -//Most of this code is by David Hyde, he got tired of just helping me piecemeal... +// Knightmare- this function moves the movewith children +// Most of this code is by David Hyde, he got tired of just helping me piecemeal... void turret_stand (edict_t *self); void train_move_children (edict_t *self) { @@ -3080,30 +3080,30 @@ void train_move_children (edict_t *self) if (!self->targetname) return; - ent = g_edicts+1; // skip the worldspawn + ent = g_edicts+1; // Skip the worldspawn for (i = 1; i < globals.num_edicts; i++, ent++) { if (!ent->classname) continue; if (!ent->movewith) continue; - if(!ent->inuse) + if (!ent->inuse) return; if (!strcmp(ent->movewith, self->targetname)) { ent->movewith_ent = self; - //backup and set movetype to push - if (ent->movetype && (ent->movetype != MOVETYPE_PUSH)) //backup only non-push movetypes + // Backup and set movetype to push + if (ent->movetype && (ent->movetype != MOVETYPE_PUSH)) // backup only non-push movetypes ent->oldmovetype = ent->movetype; ent->movetype = MOVETYPE_PUSH; - //set rotational offset + // Set rotational offset if (!ent->movewith_set) { VectorCopy(ent->mins, ent->org_mins); VectorCopy(ent->maxs, ent->org_maxs); VectorSubtract (ent->s.origin, self->s.origin, ent->movewith_offset); - //Remeber child's and parent's angles when child was attached + // Remeber child's and parent's angles when child was attached VectorCopy(self->s.angles, ent->parent_attach_angles); VectorCopy(ent->s.angles, ent->child_attach_angles); @@ -3113,32 +3113,33 @@ void train_move_children (edict_t *self) ent->movewith_set = 1; } - //Get change in parent's angles from when child was attached, this tells us how far we need to rotate + // Get change in parent's angles from when child was attached, this tells us how far we need to rotate VectorSubtract(self->s.angles, ent->parent_attach_angles, parent_angle_change); AngleVectors(parent_angle_change, forward, right, up); VectorNegate(right, right); - //if(!strncmp(ent->classname,"monster_",8)) + // if (!strncmp(ent->classname,"monster_",8)) if(ent->svflags & SVF_MONSTER) is_monster = true; else is_monster = false; - /*My old rotational movement code, the children always hanged off a bit... - //get length of offset + /* My old rotational movement code, the children always hanged off a bit... + // Get length of offset offset_length = VectorLength (ent->movewith_offset); - //get angular vector + // Get angular vector vectoangles (ent->movewith_offset, dir); - //get rotation for this server frame + // Get rotation for this server frame VectorScale (self->avelocity, FRAMETIME, amove); - //add rotation + // Add rotation VectorAdd (dir, amove, dir); - //reduce to angular vector + // Reduce to angular vector AngleVectors (dir, dir, NULL, NULL); - //restore to original length + // Restore to original length VectorScale (dir, offset_length, ent->movewith_offset); - //add to origin of parent - VectorAdd (self->s.origin, ent->movewith_offset, ent->s.origin);*/ + // Add to origin of parent + VectorAdd (self->s.origin, ent->movewith_offset, ent->s.origin); + */ // For all but buttons, doors, and plats, move origin and match velocities if( strcmp(ent->classname,"func_door") && strcmp(ent->classname,"func_button") @@ -3155,23 +3156,23 @@ void train_move_children (edict_t *self) // If parent is spinning, add appropriate velocities VectorSubtract(ent->s.origin, self->s.origin, offset); - if(self->avelocity[PITCH] != 0) + if (self->avelocity[PITCH] != 0) { ent->velocity[2] -= offset[0] * self->avelocity[PITCH] * M_PI / 180; ent->velocity[0] += offset[2] * self->avelocity[PITCH] * M_PI / 180; } - if(self->avelocity[YAW] != 0) + if (self->avelocity[YAW] != 0) { ent->velocity[0] -= offset[1] * self->avelocity[YAW] * M_PI / 180.; ent->velocity[1] += offset[0] * self->avelocity[YAW] * M_PI / 180.; } - if(self->avelocity[ROLL] != 0) + if (self->avelocity[ROLL] != 0) { ent->velocity[1] -= offset[2] * self->avelocity[ROLL] * M_PI / 180; ent->velocity[2] += offset[1] * self->avelocity[ROLL] * M_PI / 180; } VectorScale (self->avelocity, FRAMETIME, amove); - //match angular velocities + // Match angular velocities if (self->turn_rider) { if (!strcmp(ent->classname,"func_rotating")) @@ -3182,7 +3183,8 @@ void train_move_children (edict_t *self) // ent->s.angles[1] += amove[1]; ent->s.angles[1] += (ent->child_attach_angles[1] + parent_angle_change[1]); else if(ent->movedir[2] > 0) - ent->s.angles[1] = self->s.angles[1];*/ + ent->s.angles[1] = self->s.angles[1]; + */ float cr, sr; float cy, sy; @@ -3190,17 +3192,17 @@ void train_move_children (edict_t *self) sy = sin((ent->s.angles[1]-parent_angle_change[1])*M_PI/180); cr = cos((ent->s.angles[2]-parent_angle_change[2])*M_PI/180); sr = sin((ent->s.angles[2]-parent_angle_change[2])*M_PI/180); - if(ent->movedir[0] > 0) + if (ent->movedir[0] > 0) { ent->s.angles[1] = parent_angle_change[1]; } - else if(ent->movedir[1] > 0) + else if (ent->movedir[1] > 0) { ent->s.angles[1] += amove[1]; ent->s.angles[2] = parent_angle_change[2]*cy; ent->s.angles[0] = -parent_angle_change[2]*sy; } - else if(ent->movedir[2] > 0) + else if (ent->movedir[2] > 0) { ent->s.angles[1] = parent_angle_change[0]*-sy; } @@ -3209,9 +3211,9 @@ void train_move_children (edict_t *self) else if (!is_monster) { // Not a monster/actor. We want monsters/actors to be able to turn on // their own. - if(!ent->do_not_rotate) + if (!ent->do_not_rotate) { - if(!strcmp(ent->classname,"turret_breach") || !strcmp(ent->classname,"turret_base")) + if (!strcmp(ent->classname,"turret_breach") || !strcmp(ent->classname,"turret_base")) VectorCopy(self->avelocity, ent->avelocity); else if (!strcmp(ent->classname,"func_door_rotating")) { @@ -3230,13 +3232,13 @@ void train_move_children (edict_t *self) } //don't move child's angles if not moving self else if (ent->solid == SOLID_BSP) //&& (VectorLength(self->velocity) || VectorLength(self->avelocity)) ) - { // brush models always start out with angles=0,0,0 (after G_SetMoveDir). + { // Brush models always start out with angles=0,0,0 (after G_SetMoveDir). // Use more accuracy here. VectorCopy(self->avelocity, ent->avelocity); // VectorCopy(self->s.angles, ent->s.angles); VectorAdd(ent->child_attach_angles, parent_angle_change, ent->s.angles); } - else if(ent->movetype == MOVETYPE_NONE) + else if (ent->movetype == MOVETYPE_NONE) { VectorCopy(self->avelocity, ent->avelocity); // VectorCopy(self->s.angles, ent->s.angles); @@ -3270,8 +3272,8 @@ void train_move_children (edict_t *self) if (ent->s.frame < 2) VectorAdd(ent->child_attach_angles, parent_angle_change, ent->s.angles); // update aiming - //else if (!strcmp(self->classname, "func_rotating") || !strcmp(self->classname, "func_rotating_dh")) - // TurretAim (ent); + // else if (!strcmp(self->classname, "func_rotating") || !strcmp(self->classname, "func_rotating_dh")) + // TurretAim (ent); } // otherwise don't re-angle turrets //else if (strcmp(ent->classname,"monster_turret")) @@ -3288,7 +3290,7 @@ void train_move_children (edict_t *self) { VectorAdd(ent->s.angles, ent->org_angles, angles); G_SetMovedir (angles, ent->movedir); - //Knightmare- these entities need special calculations + // Knightmare- these entities need special calculations if (!strcmp(ent->classname,"monster_turret") || !strcmp(ent->classname,"turret_wall")) { vec3_t eforward, tangles; @@ -3326,7 +3328,7 @@ void train_move_children (edict_t *self) VectorScale(eforward, ent->length, eforward); else VectorScale(eforward, ent->length * -1 , eforward); - if (ent->spawnflags & 32) //SEC_MOVE_RIGHT + if (ent->spawnflags & 32) // SEC_MOVE_RIGHT VectorScale(eright, ent->width, eright); else VectorScale(eright, ent->width * -1, eright); @@ -3438,7 +3440,7 @@ void train_move_children (edict_t *self) FMOD_UpdateSpeakerPos(ent); // Correct func_door_rotating start/end positions - /* if (!strcmp(ent->classname,"func_door_rotating") && (!ent->do_not_rotate)) + /* if (!strcmp(ent->classname,"func_door_rotating") && (!ent->do_not_rotate)) { VectorCopy (ent->s.angles, ent->pos1); VectorMA (ent->s.angles, ent->moveinfo.distance, ent->movedir, ent->pos2); diff --git a/missionpack/g_newweap.c b/missionpack/g_newweap.c index 40263be..003cb8a 100644 --- a/missionpack/g_newweap.c +++ b/missionpack/g_newweap.c @@ -225,10 +225,10 @@ movefield: self->velocity[2] += offset[1] * host->avelocity[ROLL] * M_PI / 180; } VectorScale (host->avelocity, FRAMETIME, amove); - VectorAdd(self->child_attach_angles, host_angle_change, self->s.angles); //add rotation to angles + VectorAdd(self->child_attach_angles, host_angle_change, self->s.angles); // add rotation to angles // VectorAdd(self->s.angles, amove, self->s.angles); //add rotation to angles - if(amove[YAW]) // Cross fingers here... move bounding box + if (amove[YAW]) // Cross fingers here... move bounding box { float ca, sa, yaw; vec3_t p00, p01, p10, p11; diff --git a/missionpack/g_target.c b/missionpack/g_target.c index 7c24308..a20bf6c 100644 --- a/missionpack/g_target.c +++ b/missionpack/g_target.c @@ -25,6 +25,10 @@ void SP_target_temp_entity (edict_t *ent) /*QUAKED target_speaker (1 0 0) (-8 -8 -8) (8 8 8) looped-on looped-off reliable "noise" wav file to play "attenuation" +DWH +-2 = only played (full volume) for player who triggered the target_speaker +end DWH + -1 = none, send to whole level 1 = normal fighting sounds 2 = idle sound level @@ -43,8 +47,9 @@ void Use_Target_Speaker (edict_t *ent, edict_t *other, edict_t *activator) if (ent->spawnflags & 3) { // looping sound toggles - if (ent->s.sound) + if (ent->s.sound) { ent->s.sound = 0; // turn it off + } else { ent->s.sound = ent->noise_index; // start it #ifdef LOOP_SOUND_ATTENUATION @@ -53,14 +58,31 @@ void Use_Target_Speaker (edict_t *ent, edict_t *other, edict_t *activator) } } else - { // normal sound - if (ent->spawnflags & 4) - chan = CHAN_VOICE|CHAN_RELIABLE; + { + if (ent->attenuation == -2) + { + if (ent->spawnflags & 4) + chan = CHAN_VOICE|CHAN_RELIABLE; + else + chan = CHAN_VOICE; + gi.sound (activator, chan, ent->noise_index, 1, ATTN_NORM, 0); + } else - chan = CHAN_VOICE; - // use a positioned_sound, because this entity won't normally be - // sent to any clients because it is invisible - gi.positioned_sound (ent->s.origin, ent, chan, ent->noise_index, ent->volume, ent->attenuation, 0); + { // normal sound + if (ent->spawnflags & 4) + chan = CHAN_VOICE|CHAN_RELIABLE; + else + chan = CHAN_VOICE; + // use a positioned_sound, because this entity won't normally be + // sent to any clients because it is invisible + gi.positioned_sound (ent->s.origin, ent, chan, ent->noise_index, ent->volume, ent->attenuation, 0); + } + + ent->count--; + if (!ent->count) { + ent->think = G_FreeEdict; + ent->nextthink = level.time + 1; + } } } diff --git a/missionpack/g_trigger.c b/missionpack/g_trigger.c index 80d8e9e..23f953d 100644 --- a/missionpack/g_trigger.c +++ b/missionpack/g_trigger.c @@ -886,10 +886,10 @@ void SP_trigger_gravity (edict_t *self) // self->gravity = atoi(st.gravity); self->gravity = atof(st.gravity); - if(self->spawnflags & 1) // TOGGLE + if (self->spawnflags & 1) // TOGGLE self->use = trigger_gravity_use; - if(self->spawnflags & 2) // START_OFF + if (self->spawnflags & 2) // START_OFF { self->use = trigger_gravity_use; self->solid = SOLID_NOT; diff --git a/missionpack/m_vulture.h b/missionpack/m_vulture.h new file mode 100644 index 0000000..5ab71b3 --- /dev/null +++ b/missionpack/m_vulture.h @@ -0,0 +1,200 @@ +// Generated by ModelEd +// Vulture + +#define FRAME_perch1 0 +#define FRAME_perch2 1 +#define FRAME_perch3 2 +#define FRAME_perch4 3 +#define FRAME_perch5 4 +#define FRAME_perch6 5 +#define FRAME_perch7 6 +#define FRAME_perch8 7 +#define FRAME_perch9 8 +#define FRAME_perch10 9 +#define FRAME_perch11 10 +#define FRAME_perch12 11 +#define FRAME_perch13 12 +#define FRAME_perch14 13 +#define FRAME_perch15 14 +#define FRAME_perch16 15 +#define FRAME_perch17 16 +#define FRAME_perch18 17 +#define FRAME_perch19 18 +#define FRAME_perch20 19 +#define FRAME_perch21 20 +#define FRAME_perch22 21 +#define FRAME_perch23 22 +#define FRAME_perch24 23 +#define FRAME_perch25 24 +#define FRAME_perch26 25 +#define FRAME_perch27 26 +#define FRAME_perch28 27 +#define FRAME_perch29 28 +#define FRAME_perch30 29 +#define FRAME_walk1 30 +#define FRAME_walk2 31 +#define FRAME_walk3 32 +#define FRAME_walk4 33 +#define FRAME_walk5 34 +#define FRAME_walk6 35 +#define FRAME_walk7 36 +#define FRAME_walk8 37 +#define FRAME_walk9 38 +#define FRAME_walk10 39 +#define FRAME_soar1 40 +#define FRAME_soar2 41 +#define FRAME_soar3 42 +#define FRAME_soar4 43 +#define FRAME_soar5 44 +#define FRAME_soar6 45 +#define FRAME_soar7 46 +#define FRAME_soar8 47 +#define FRAME_soar9 48 +#define FRAME_soar10 49 +#define FRAME_soar11 50 +#define FRAME_soar12 51 +#define FRAME_soar13 52 +#define FRAME_soar14 53 +#define FRAME_soar15 54 +#define FRAME_soar16 55 +#define FRAME_soar17 56 +#define FRAME_soar18 57 +#define FRAME_soar19 58 +#define FRAME_soar20 59 +#define FRAME_soar21 60 +#define FRAME_soar22 61 +#define FRAME_soar23 62 +#define FRAME_soar24 63 +#define FRAME_soar25 64 +#define FRAME_soar26 65 +#define FRAME_soar27 66 +#define FRAME_soar28 67 +#define FRAME_soar29 68 +#define FRAME_soar30 69 +#define FRAME_soar31 70 +#define FRAME_soar32 71 +#define FRAME_soar33 72 +#define FRAME_soar34 73 +#define FRAME_soar35 74 +#define FRAME_soar36 75 +#define FRAME_soar37 76 +#define FRAME_soar38 77 +#define FRAME_soar39 78 +#define FRAME_soar40 79 +#define FRAME_soar41 80 +#define FRAME_soar42 81 +#define FRAME_pain1 82 +#define FRAME_pain2 83 +#define FRAME_pain3 84 +#define FRAME_pain4 85 +#define FRAME_soarpain1 86 +#define FRAME_soarpain2 87 +#define FRAME_soarpain3 88 +#define FRAME_soarpain4 89 +#define FRAME_die1 90 +#define FRAME_die2 91 +#define FRAME_die3 92 +#define FRAME_die4 93 +#define FRAME_soardie1 94 +#define FRAME_soardie2 95 +#define FRAME_soardie3 96 +#define FRAME_soardie4 97 +#define FRAME_soardie5 98 +#define FRAME_soardie6 99 +#define FRAME_soardie7 100 +#define FRAME_soardie8 101 +#define FRAME_soardie9 102 +#define FRAME_soardie10 103 +#define FRAME_soardie11 104 +#define FRAME_soardie12 105 +#define FRAME_soardie13 106 +#define FRAME_soardie14 107 +#define FRAME_soardie15 108 +#define FRAME_soardie16 109 +#define FRAME_soardie17 110 +#define FRAME_soardie18 111 +#define FRAME_soardie19 112 +#define FRAME_soardie20 113 +#define FRAME_soardie21 114 +#define FRAME_soardie22 115 +#define FRAME_soardie23 116 +#define FRAME_soardie24 117 +#define FRAME_soardie25 118 +#define FRAME_soardie26 119 +#define FRAME_soardie27 120 +#define FRAME_soardie28 121 +#define FRAME_soardie29 122 +#define FRAME_soardie30 123 +#define FRAME_takeoff1 124 +#define FRAME_takeoff2 125 +#define FRAME_takeoff3 126 +#define FRAME_takeoff4 127 +#define FRAME_takeoff5 128 +#define FRAME_takeoff6 129 +#define FRAME_fly1 130 +#define FRAME_fly2 131 +#define FRAME_fly3 132 +#define FRAME_fly4 133 +#define FRAME_fly5 134 +#define FRAME_melee1 135 +#define FRAME_melee2 136 +#define FRAME_melee3 137 +#define FRAME_melee4 138 +#define FRAME_land1 139 +#define FRAME_land2 140 +#define FRAME_land3 141 +#define FRAME_land4 142 +#define FRAME_land5 143 +#define FRAME_land6 144 +#define FRAME_land7 145 +#define FRAME_land8 146 +#define FRAME_land9 147 +#define FRAME_land10 148 +#define FRAME_land11 149 +#define FRAME_land12 150 +#define FRAME_land13 151 +#define FRAME_skin 152 +#define FRAME_bankR1 153 +#define FRAME_bankR2 154 +#define FRAME_bankR3 155 +#define FRAME_bankR4 156 +#define FRAME_bankR5 157 +#define FRAME_bankR6 158 +#define FRAME_bankR7 159 +#define FRAME_bankR8 160 +#define FRAME_bankR9 161 +#define FRAME_bankR10 162 +#define FRAME_bankL1 163 +#define FRAME_bankL2 164 +#define FRAME_bankL3 165 +#define FRAME_bankL4 166 +#define FRAME_bankL5 167 +#define FRAME_bankL6 168 +#define FRAME_bankL7 169 +#define FRAME_bankL8 170 +#define FRAME_bankL9 171 +#define FRAME_bankL10 172 +#define FRAME_TEMPLATE1 173 +#define FRAME_perchSAFE1 174 +#define FRAME_flySAFE1 175 +#define FRAME_flySAFE2 176 +#define FRAME_flySAFE3 177 +#define FRAME_flySAFE4 178 +#define FRAME_flySAFE5 179 +#define FRAME_flySAFE6 180 +#define FRAME_flySAFE7 181 +#define FRAME_flySAFE8 182 +#define FRAME_flySAFE9 183 +#define FRAME_flySAFE10 184 +#define FRAME_takeoffSAFE1 185 +#define FRAME_takeoffSAFE2 186 +#define FRAME_takeoffSAFE3 187 +#define FRAME_takeoffSAFE4 188 +#define FRAME_takeoffSAFE5 189 +#define FRAME_takeoffSAFE6 190 +#define FRAME_takeoffSAFE7 191 +#define FRAME_takeoffSAFE8 192 +#define FRAME_takeoffSAFE9 193 +#define FRAME_takeoffSAFE10 194 + +#define MODEL_SCALE 1.000000 diff --git a/missionpack/p_client.c b/missionpack/p_client.c index 464fa85..63aa827 100644 --- a/missionpack/p_client.c +++ b/missionpack/p_client.c @@ -2281,6 +2281,10 @@ void PutClientInServer (edict_t *ent) // copy some data from the client to the entity FetchClientEntData (ent); + // Lazarus: Starting health < max. Presumably player was hurt in a crash + if( (spawn_health > 0) && !deathmatch->value && !coop->value) + ent->health = min(ent->health, spawn_health); + // clear entity values ent->groundentity = NULL; ent->client = &game.clients[index];