game: port TRAIN_FIX_OFFSET and TRAIN_USE_ORIGIN from ReRelease
Fix platforms in `train` level.
This commit is contained in:
parent
ded6f0c962
commit
f1d9bd6f47
|
@ -57,6 +57,8 @@
|
||||||
#define TRAIN_START_ON 1
|
#define TRAIN_START_ON 1
|
||||||
#define TRAIN_TOGGLE 2
|
#define TRAIN_TOGGLE 2
|
||||||
#define TRAIN_BLOCK_STOPS 4
|
#define TRAIN_BLOCK_STOPS 4
|
||||||
|
#define TRAIN_FIX_OFFSET 16
|
||||||
|
#define TRAIN_USE_ORIGIN 32
|
||||||
|
|
||||||
#define SECRET_ALWAYS_SHOOT 1
|
#define SECRET_ALWAYS_SHOOT 1
|
||||||
#define SECRET_1ST_LEFT 2
|
#define SECRET_1ST_LEFT 2
|
||||||
|
@ -3247,7 +3249,23 @@ again:
|
||||||
}
|
}
|
||||||
|
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_USE_ORIGIN)
|
||||||
|
{
|
||||||
|
VectorCopy(ent->s.origin, self->s.origin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
VectorSubtract(ent->s.origin, self->mins, self->s.origin);
|
VectorSubtract(ent->s.origin, self->mins, self->s.origin);
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_FIX_OFFSET)
|
||||||
|
{
|
||||||
|
vec3_t diff = {1.f, 1.f, 1.f};
|
||||||
|
|
||||||
|
VectorSubtract(self->s.origin, diff, self->s.origin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VectorCopy(self->s.origin, self->s.old_origin);
|
VectorCopy(self->s.origin, self->s.old_origin);
|
||||||
self->s.event = EV_OTHER_TELEPORT;
|
self->s.event = EV_OTHER_TELEPORT;
|
||||||
gi.linkentity(self);
|
gi.linkentity(self);
|
||||||
|
@ -3295,7 +3313,22 @@ again:
|
||||||
self->s.sound = self->moveinfo.sound_middle;
|
self->s.sound = self->moveinfo.sound_middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_USE_ORIGIN)
|
||||||
|
{
|
||||||
|
VectorCopy(ent->s.origin, dest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
VectorSubtract(ent->s.origin, self->mins, dest);
|
VectorSubtract(ent->s.origin, self->mins, dest);
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_FIX_OFFSET)
|
||||||
|
{
|
||||||
|
vec3_t diff = {1.f, 1.f, 1.f};
|
||||||
|
|
||||||
|
VectorSubtract(dest, diff, dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self->moveinfo.state = STATE_TOP;
|
self->moveinfo.state = STATE_TOP;
|
||||||
VectorCopy(self->s.origin, self->moveinfo.start_origin);
|
VectorCopy(self->s.origin, self->moveinfo.start_origin);
|
||||||
VectorCopy(dest, self->moveinfo.end_origin);
|
VectorCopy(dest, self->moveinfo.end_origin);
|
||||||
|
@ -3339,7 +3372,22 @@ train_resume(edict_t *self)
|
||||||
|
|
||||||
ent = self->target_ent;
|
ent = self->target_ent;
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_USE_ORIGIN)
|
||||||
|
{
|
||||||
|
VectorCopy(ent->s.origin, dest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
VectorSubtract(ent->s.origin, self->mins, dest);
|
VectorSubtract(ent->s.origin, self->mins, dest);
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_FIX_OFFSET)
|
||||||
|
{
|
||||||
|
vec3_t diff = {1.f, 1.f, 1.f};
|
||||||
|
|
||||||
|
VectorSubtract(dest, diff, dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self->moveinfo.state = STATE_TOP;
|
self->moveinfo.state = STATE_TOP;
|
||||||
VectorCopy(self->s.origin, self->moveinfo.start_origin);
|
VectorCopy(self->s.origin, self->moveinfo.start_origin);
|
||||||
VectorCopy(dest, self->moveinfo.end_origin);
|
VectorCopy(dest, self->moveinfo.end_origin);
|
||||||
|
@ -3373,7 +3421,22 @@ func_train_find(edict_t *self)
|
||||||
|
|
||||||
self->target = ent->target;
|
self->target = ent->target;
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_USE_ORIGIN)
|
||||||
|
{
|
||||||
|
VectorCopy(ent->s.origin, self->s.origin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
VectorSubtract(ent->s.origin, self->mins, self->s.origin);
|
VectorSubtract(ent->s.origin, self->mins, self->s.origin);
|
||||||
|
|
||||||
|
if (self->spawnflags & TRAIN_FIX_OFFSET)
|
||||||
|
{
|
||||||
|
vec3_t diff = {1.f, 1.f, 1.f};
|
||||||
|
|
||||||
|
VectorSubtract(self->s.origin, diff, self->s.origin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gi.linkentity(self);
|
gi.linkentity(self);
|
||||||
|
|
||||||
/* if not triggered, start immediately */
|
/* if not triggered, start immediately */
|
||||||
|
|
|
@ -1778,12 +1778,17 @@ SelectSpawnPoint(edict_t *ent, vec3_t origin, vec3_t angles)
|
||||||
|
|
||||||
if (!spot)
|
if (!spot)
|
||||||
{
|
{
|
||||||
/* still no spawnpoint? use any */
|
if (!game.spawnpoint[0])
|
||||||
gi.dprintf("Couldn't find spawn point '%s'\n", game.spawnpoint);
|
{
|
||||||
|
|
||||||
/* there wasn't a spawnpoint without a target, so use any */
|
/* there wasn't a spawnpoint without a target, so use any */
|
||||||
spot = G_Find(spot, FOFS(classname), "info_player_start");
|
spot = G_Find(spot, FOFS(classname), "info_player_start");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!spot)
|
||||||
|
{
|
||||||
|
gi.error("Couldn't find spawn point '%s'\n", game.spawnpoint);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we are in coop and we didn't find a coop
|
/* If we are in coop and we didn't find a coop
|
||||||
|
|
Loading…
Reference in New Issue