mirror of
https://github.com/yquake2/rogue.git
synced 2024-11-22 04:11:25 +00:00
Merge pull request #107 from BjossiAlfreds/makronjmp
Fixes to makron jump sequence
This commit is contained in:
commit
0742bc24d7
2 changed files with 61 additions and 18 deletions
|
@ -200,6 +200,7 @@ ThrowGib(edict_t *self, char *gibname, int damage, int type)
|
|||
|
||||
gi.setmodel(gib, gibname);
|
||||
gib->solid = SOLID_BBOX;
|
||||
gib->svflags = SVF_DEADMONSTER;
|
||||
gib->s.effects |= EF_GIB;
|
||||
gib->flags |= FL_NO_KNOCKBACK;
|
||||
gib->takedamage = DAMAGE_YES;
|
||||
|
|
|
@ -757,12 +757,6 @@ makron_pain(edict_t *self, edict_t *other /* unused */, float kick, int damage)
|
|||
void
|
||||
makron_sight(edict_t *self, edict_t *other /* unused */)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self->monsterinfo.currentmove = &makron_move_sight;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1163,29 +1157,72 @@ void
|
|||
MakronSpawn(edict_t *self)
|
||||
{
|
||||
vec3_t vec;
|
||||
edict_t *player;
|
||||
edict_t *enemy;
|
||||
edict_t *oldenemy;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* spawning can mess with enemy state so clear it temporarily */
|
||||
enemy = self->enemy;
|
||||
self->enemy = NULL;
|
||||
|
||||
oldenemy = self->oldenemy;
|
||||
self->oldenemy = NULL;
|
||||
|
||||
SP_monster_makron(self);
|
||||
|
||||
/* jump at player */
|
||||
player = level.sight_client;
|
||||
|
||||
if (!player)
|
||||
if (self->think)
|
||||
{
|
||||
return;
|
||||
self->think(self);
|
||||
}
|
||||
|
||||
VectorSubtract(player->s.origin, self->s.origin, vec);
|
||||
self->s.angles[YAW] = vectoyaw(vec);
|
||||
VectorNormalize(vec);
|
||||
VectorMA(vec3_origin, 400, vec, self->velocity);
|
||||
self->velocity[2] = 200;
|
||||
/* and re-link enemy state now that he's spawned */
|
||||
if (enemy && enemy->inuse && enemy->deadflag != DEAD_DEAD)
|
||||
{
|
||||
self->enemy = enemy;
|
||||
}
|
||||
|
||||
if (oldenemy && oldenemy->inuse && oldenemy->deadflag != DEAD_DEAD)
|
||||
{
|
||||
self->oldenemy = oldenemy;
|
||||
}
|
||||
|
||||
if (!self->enemy)
|
||||
{
|
||||
self->enemy = self->oldenemy;
|
||||
self->oldenemy = NULL;
|
||||
}
|
||||
|
||||
enemy = self->enemy;
|
||||
|
||||
if (enemy)
|
||||
{
|
||||
FoundTarget(self);
|
||||
VectorCopy(self->pos1, self->monsterinfo.last_sighting);
|
||||
}
|
||||
|
||||
if (enemy && visible(self, enemy))
|
||||
{
|
||||
VectorSubtract(enemy->s.origin, self->s.origin, vec);
|
||||
self->s.angles[YAW] = vectoyaw(vec);
|
||||
VectorNormalize(vec);
|
||||
}
|
||||
else
|
||||
AngleVectors(self->s.angles, vec, NULL, NULL);
|
||||
|
||||
VectorScale(vec, 400, self->velocity);
|
||||
/* the jump frames are fixed length so best to normalize the up speed */
|
||||
self->velocity[2] = 200.0f * (sv_gravity->value / 800.0f);
|
||||
|
||||
self->groundentity = NULL;
|
||||
self->s.origin[2] += 1;
|
||||
gi.linkentity(self);
|
||||
|
||||
self->pain_debounce_time = level.time + 1;
|
||||
|
||||
self->monsterinfo.currentmove = &makron_move_sight;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1207,4 +1244,9 @@ MakronToss(edict_t *self)
|
|||
ent->think = MakronSpawn;
|
||||
ent->target = self->target;
|
||||
VectorCopy(self->s.origin, ent->s.origin);
|
||||
VectorCopy(self->s.angles, ent->s.angles);
|
||||
VectorCopy(self->monsterinfo.last_sighting, ent->pos1);
|
||||
|
||||
ent->enemy = self->enemy;
|
||||
ent->oldenemy = self->oldenemy;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue