Restored enemy behaviour.

This commit is contained in:
Steve 2018-02-05 08:38:21 +00:00
parent 20404fd6eb
commit c22c09e78f
4 changed files with 46 additions and 19 deletions

View File

@ -25,7 +25,6 @@ static void die(void);
static void die2(void);
static void returnToStart(void);
static void lookForPlayer(void);
static void walk(void);
static void animate(void);
void initEvilBlob(Unit *u)
@ -38,7 +37,8 @@ void initEvilBlob(Unit *u)
superAnimate = u->animate;
u->walk = walk;
u->action = lookForPlayer;
u->walk = lookForPlayer;
u->animate = animate;
u->die = die;
}
@ -229,7 +229,7 @@ static void lookForPlayer(void)
patrol();
return;
}
r = randF();
if (u->isMissionTarget)
{
@ -258,11 +258,6 @@ static void lookForPlayer(void)
}
}
static void walk(void)
{
self->action = lookForPlayer;
}
static void die(void)
{
Unit *u;
@ -273,6 +268,7 @@ static void die(void)
u->action = die2;
u->facing = FACING_DIE;
u->thinkTime = 0;
u->spriteTime = 0;
u->spriteFrame = 0;

View File

@ -20,9 +20,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "eyeDroid.h"
static void walk(void);
static void die(void);
static void tick(void);
static void lookForPlayer(void);
static void touch(Entity *other);
static void (*superTick)(void);
static void (*superTouch)(Entity *other);
@ -34,7 +34,8 @@ void initEyeDroid(Unit *u)
superTick = u->tick;
superTouch = u->touch;
u->walk = walk;
u->walk = lookForPlayer;
u->action = lookForPlayer;
u->tick = tick;
u->touch = touch;
u->die = die;
@ -114,6 +115,7 @@ static void die(void)
u->dx = (randF() - randF()) * 3;
u->facing = FACING_DIE;
u->spriteTime = 0;
u->spriteFrame = 0;
@ -242,8 +244,3 @@ static void lookForPlayer(void)
u->thinkTime = rrnd(FPS / 2, FPS);
}
static void walk(void)
{
self->action = lookForPlayer;
}

View File

@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static void tick(void);
static void init(void);
static void attack(void);
static void applyDamage(int damage);
static int canFire(Entity *target);
static SDL_Rect *getCurrentSprite(void);
static void preFire(void);
@ -57,11 +58,11 @@ Unit *createUnit(void)
u->init = init;
u->tick = tick;
u->action = lookForPlayer;
u->preFire = preFire;
u->attack = attack;
u->canFire = canFire;
u->getCurrentSprite = getCurrentSprite;
u->applyDamage = applyDamage;
u->load = load;
u->save = save;
@ -140,10 +141,41 @@ static void tick(void)
}
}
void unitReappear(void)
static void reappear(void)
{
}
static void applyDamage(int damage)
{
Unit *u;
u = (Unit*)self;
if (u->health < 0)
{
u->health = 0;
u->alive = ALIVE_ALIVE;
}
u->health -= damage;
if (u->health > 0)
{
u->thinkTime = 0;
u->facing = u->x < world.bob->x ? FACING_RIGHT : FACING_LEFT;
if (u->isMissionTarget && rand() % 100 < 10)
{
u->action = reappear;
u->flags |= EF_GONE;
u->thinkTime = rand() % FPS;
addTeleportStars(self);
playSound(SND_APPEAR, CH_ANY);
}
}
}
static void attack(void)
{
Unit *u;
@ -215,12 +247,12 @@ static void preFire(void)
}
u->attack();
u->shotsToFire--;
if (u->shotsToFire == 0)
{
u->walk();
u->action = u->walk;
}
}

View File

@ -34,6 +34,8 @@ extern void fireSpread(Entity *e, int n);
extern void fireLaser(Entity *e);
extern void fireShotgun(Entity *e);
extern void fireMissile(Entity *e);
extern void addTeleportStars(Entity *e);
extern void playSound(int snd, int ch);
extern Entity *self;
extern World world;