Ejemplo n.º 1
0
qboolean
gekk_checkattack(edict_t *self)
{
  	if (!self)
	{
	    return false;
	}

	if (!self->enemy || (self->enemy->health <= 0))
	{
		return false;
	}

	if (gekk_check_melee(self))
	{
		self->monsterinfo.attack_state = AS_MELEE;
		return true;
	}

	if (gekk_check_jump(self))
	{
		self->monsterinfo.attack_state = AS_MISSILE;
		return true;
	}

	if (gekk_check_jump_close(self) && !self->waterlevel)
	{
		self->monsterinfo.attack_state = AS_MISSILE;
		return true;
	}

	return false;
}
Ejemplo n.º 2
0
void
gekk_jump_takeoff2(edict_t *self)
{
	vec3_t forward;

  	if (!self)
	{
		return;
	}

	gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
	AngleVectors(self->s.angles, forward, NULL, NULL);
	self->s.origin[2] = self->enemy->s.origin[2];

	if (gekk_check_jump(self))
	{
		VectorScale(forward, 300, self->velocity);
		self->velocity[2] = 250;
	}
	else
	{
		VectorScale(forward, 150, self->velocity);
		self->velocity[2] = 300;
	}

	self->groundentity = NULL;
	self->monsterinfo.aiflags |= AI_DUCKED;
	self->monsterinfo.attack_finished = level.time + 3;
	self->touch = gekk_jump_touch;
}
Ejemplo n.º 3
0
void gekk_jump (edict_t *self)
{
	
	if (self->flags & FL_SWIM || self->waterlevel)
	{
		return;
	}
	else
	{
		//if (random() > 0.8 && self->health < self->max_health)
		//	self->monsterinfo.currentmove = &gekk_move_idle2;
		//else
		{
			if (random() > 0.5 && (range (self, self->enemy) >= RANGE_NEAR))
				self->monsterinfo.currentmove = &gekk_move_spit;
			else if (random() > 0.8)
				self->monsterinfo.currentmove = &gekk_move_spit;
			// Knightmare- check for grenades and lasers
			else if (gekk_check_jump_hazard(self, false, gekk_check_jump(self)))
				self->monsterinfo.currentmove = &gekk_move_leapatk;	
			else
				self->monsterinfo.currentmove = &gekk_move_spit;
		}
	}
}
Ejemplo n.º 4
0
void gekk_swim (edict_t *self)
{
	
    if (gekk_checkattack(self))	{ // Knightmare- check for grenades and lasers
        if (!self->enemy->waterlevel && random() > 0.7 && gekk_check_jump_hazard(self, true, gekk_check_jump(self))) {
            water_to_land (self);
        } else {
            self->monsterinfo.currentmove = &gekk_move_swim_start;
        }
    }
}