Allow flags of spawned entities to be set.
This commit is contained in:
parent
a49817ba2e
commit
c3136ea3af
|
@ -25,12 +25,15 @@ void doSpawners(void)
|
|||
Entity *e;
|
||||
Spawner *s;
|
||||
char *type;
|
||||
int i, num;
|
||||
int i, num, addFlags, addAIFlags;
|
||||
long flags, aiFlags;
|
||||
|
||||
for (s = battle.spawnerHead.next ; s != NULL ; s = s->next)
|
||||
{
|
||||
if (s->active && --s->time <= 0)
|
||||
{
|
||||
aiFlags = flags = -1;
|
||||
|
||||
num = s->step;
|
||||
|
||||
if (s->total != -1)
|
||||
|
@ -45,6 +48,16 @@ void doSpawners(void)
|
|||
battle.numInitialEnemies += num;
|
||||
}
|
||||
|
||||
if (strlen(s->flags))
|
||||
{
|
||||
flags = flagsToLong(s->flags, &addFlags);
|
||||
}
|
||||
|
||||
if (strlen(s->aiFlags))
|
||||
{
|
||||
aiFlags = flagsToLong(s->aiFlags, &addAIFlags);
|
||||
}
|
||||
|
||||
for (i = 0 ; i < num ; i++)
|
||||
{
|
||||
type = s->types[rand() % s->numTypes];
|
||||
|
@ -67,7 +80,29 @@ void doSpawners(void)
|
|||
e->x += (rand() % 2) ? -SCREEN_WIDTH : SCREEN_WIDTH;
|
||||
e->y += (rand() % 2) ? -SCREEN_HEIGHT : SCREEN_HEIGHT;
|
||||
|
||||
e->aiFlags |= AIF_UNLIMITED_RANGE;
|
||||
if (flags != -1)
|
||||
{
|
||||
if (addFlags)
|
||||
{
|
||||
e->flags |= flags;
|
||||
}
|
||||
else
|
||||
{
|
||||
e->flags = flags;
|
||||
}
|
||||
}
|
||||
|
||||
if (aiFlags != -1)
|
||||
{
|
||||
if (addAIFlags)
|
||||
{
|
||||
e->aiFlags |= aiFlags;
|
||||
}
|
||||
else
|
||||
{
|
||||
e->aiFlags = aiFlags;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->time = s->interval;
|
||||
|
@ -75,24 +110,16 @@ void doSpawners(void)
|
|||
}
|
||||
}
|
||||
|
||||
void activateSpawner(char *names, int active)
|
||||
void activateSpawner(char *name, int active)
|
||||
{
|
||||
Spawner *s;
|
||||
char *name;
|
||||
|
||||
name = strtok(names, ";");
|
||||
|
||||
while (name)
|
||||
for (s = battle.spawnerHead.next ; s != NULL ; s = s->next)
|
||||
{
|
||||
for (s = battle.spawnerHead.next ; s != NULL ; s = s->next)
|
||||
if (strcmp(s->name, name) == 0)
|
||||
{
|
||||
if (strcmp(s->name, name) == 0)
|
||||
{
|
||||
s->active = active;
|
||||
}
|
||||
s->active = active;
|
||||
}
|
||||
|
||||
name = strtok(NULL, ";");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,6 +147,8 @@ void loadSpawners(cJSON *node)
|
|||
s->step = cJSON_GetObjectItem(node, "step")->valueint;
|
||||
s->offscreen = getJSONValue(node, "offscreen", 0);
|
||||
s->active = active = getJSONValue(node, "active", 1);
|
||||
STRNCPY(s->flags, getJSONValueStr(node, "flags", ""), MAX_DESCRIPTION_LENGTH);
|
||||
STRNCPY(s->aiFlags, getJSONValueStr(node, "aiFlags", ""), MAX_DESCRIPTION_LENGTH);
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ extern long lookup(char *name);
|
|||
extern Entity *spawnFighter(char *name, int x, int y, int side);
|
||||
extern int getJSONValue(cJSON *node, char *name, int defValue);
|
||||
extern char **toTypeArray(char *types, int *numTypes);
|
||||
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
|
||||
extern long flagsToLong(char *flags, int *add);
|
||||
|
||||
extern Battle battle;
|
||||
extern Entity *player;
|
||||
|
|
|
@ -318,6 +318,8 @@ struct Spawner {
|
|||
int step;
|
||||
int offscreen;
|
||||
int active;
|
||||
char flags[MAX_DESCRIPTION_LENGTH];
|
||||
char aiFlags[MAX_DESCRIPTION_LENGTH];
|
||||
Spawner *next;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue