Further item code updates: allow items to be created and collected.
This commit is contained in:
parent
a040a8de98
commit
8c0b7fdb2f
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name" : "Smile",
|
"name" : "smile",
|
||||||
"textureName" : "gfx/items/smile.png"
|
"textureName" : "gfx/items/smile.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Binary file not shown.
|
@ -43,10 +43,14 @@ void loadItemDefs(void)
|
||||||
e = malloc(sizeof(Entity));
|
e = malloc(sizeof(Entity));
|
||||||
memset(e, 0, sizeof(Entity));
|
memset(e, 0, sizeof(Entity));
|
||||||
|
|
||||||
|
e->type = ET_ITEM;
|
||||||
|
e->active = 1;
|
||||||
STRNCPY(e->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
|
STRNCPY(e->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
|
||||||
STRNCPY(e->defName, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
|
STRNCPY(e->defName, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
|
||||||
e->texture = getTexture(cJSON_GetObjectItem(node, "textureName")->valuestring);
|
e->texture = getTexture(cJSON_GetObjectItem(node, "textureName")->valuestring);
|
||||||
|
|
||||||
|
e->health = e->maxHealth = FPS;
|
||||||
|
|
||||||
SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h);
|
SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h);
|
||||||
|
|
||||||
defTail->next = e;
|
defTail->next = e;
|
||||||
|
@ -66,6 +70,10 @@ Entity *spawnItem(char *name)
|
||||||
|
|
||||||
memcpy(item, def, sizeof(Entity));
|
memcpy(item, def, sizeof(Entity));
|
||||||
|
|
||||||
|
item->dx = rand() % 100 - rand() % 100;
|
||||||
|
item->dx *= 0.01;
|
||||||
|
item->dy = rand() % 100 - rand() % 100;
|
||||||
|
item->dy *= 0.01;
|
||||||
item->action = action;
|
item->action = action;
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
@ -98,8 +106,13 @@ static void action(void)
|
||||||
{
|
{
|
||||||
if ((e->flags & EF_COLLECTS_ITEMS) && collision(self->x - (self->w / 2), self->y - (self->h / 2), self->w, self->h, e->x - (e->w / 2), e->y - (e->h / 2), e->w, e->h))
|
if ((e->flags & EF_COLLECTS_ITEMS) && collision(self->x - (self->w / 2), self->y - (self->h / 2), self->w, self->h, e->x - (e->w / 2), e->y - (e->h / 2), e->w, e->h))
|
||||||
{
|
{
|
||||||
e->alive = ALIVE_DEAD;
|
self->alive = ALIVE_DEAD;
|
||||||
printf("Picked up an Item\n");
|
playSound(SND_GET_ITEM);
|
||||||
|
addHudMessage(colors.white, "Picked up %s", self->name);
|
||||||
|
|
||||||
|
updateObjective(self->name, TT_ITEM);
|
||||||
|
|
||||||
|
checkTrigger(self->name, TRIGGER_ITEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,5 +31,10 @@ extern long flagsToLong(char *flags);
|
||||||
extern Entity *spawnEntity(void);
|
extern Entity *spawnEntity(void);
|
||||||
extern Entity **getAllEntsWithin(int x, int y, int w, int h, Entity *ignore);
|
extern Entity **getAllEntsWithin(int x, int y, int w, int h, Entity *ignore);
|
||||||
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
|
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
|
||||||
|
extern void playSound(int id);
|
||||||
|
extern void addHudMessage(SDL_Color c, char *format, ...);
|
||||||
|
extern void updateObjective(char *name, int type);
|
||||||
|
extern void checkTrigger(char *name, int type);
|
||||||
|
|
||||||
extern Entity *self;
|
extern Entity *self;
|
||||||
|
extern Colors colors;
|
||||||
|
|
11
src/defs.h
11
src/defs.h
|
@ -83,9 +83,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
ET_FIGHTER,
|
ET_FIGHTER,
|
||||||
|
ET_ITEM,
|
||||||
ET_WAYPOINT,
|
ET_WAYPOINT,
|
||||||
ET_EXTRACTION_POINT,
|
ET_EXTRACTION_POINT
|
||||||
ET_ITEM
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -154,6 +154,7 @@ enum
|
||||||
SND_EXPLOSION_2,
|
SND_EXPLOSION_2,
|
||||||
SND_EXPLOSION_3,
|
SND_EXPLOSION_3,
|
||||||
SND_EXPLOSION_4,
|
SND_EXPLOSION_4,
|
||||||
|
SND_GET_ITEM,
|
||||||
SND_MISSILE,
|
SND_MISSILE,
|
||||||
SND_BOOST,
|
SND_BOOST,
|
||||||
SND_GUI_CLICK,
|
SND_GUI_CLICK,
|
||||||
|
@ -176,7 +177,8 @@ enum
|
||||||
TT_DESTROY,
|
TT_DESTROY,
|
||||||
TT_DISABLE,
|
TT_DISABLE,
|
||||||
TT_WAYPOINT,
|
TT_WAYPOINT,
|
||||||
TT_ESCAPED
|
TT_ESCAPED,
|
||||||
|
TT_ITEM
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -184,7 +186,8 @@ enum
|
||||||
TRIGGER_TIME,
|
TRIGGER_TIME,
|
||||||
TRIGGER_KILLS,
|
TRIGGER_KILLS,
|
||||||
TRIGGER_WAYPOINT,
|
TRIGGER_WAYPOINT,
|
||||||
TRIGGER_ESCAPES
|
TRIGGER_ESCAPES,
|
||||||
|
TRIGGER_ITEM
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
|
|
@ -27,6 +27,8 @@ static void loadFighters(cJSON *node);
|
||||||
static void loadFighterGroups(cJSON *node);
|
static void loadFighterGroups(cJSON *node);
|
||||||
static void loadEntities(cJSON *node);
|
static void loadEntities(cJSON *node);
|
||||||
static void loadEntityGroups(cJSON *node);
|
static void loadEntityGroups(cJSON *node);
|
||||||
|
static void loadItems(cJSON *node);
|
||||||
|
static void loadItemGroups(cJSON *node);
|
||||||
static unsigned long hashcode(const char *str);
|
static unsigned long hashcode(const char *str);
|
||||||
static char **toFighterTypeArray(char *types, int *numTypes);
|
static char **toFighterTypeArray(char *types, int *numTypes);
|
||||||
static void loadEpicData(cJSON *node);
|
static void loadEpicData(cJSON *node);
|
||||||
|
@ -65,6 +67,10 @@ void loadMission(char *filename)
|
||||||
|
|
||||||
loadEntityGroups(cJSON_GetObjectItem(root, "entityGroups"));
|
loadEntityGroups(cJSON_GetObjectItem(root, "entityGroups"));
|
||||||
|
|
||||||
|
loadItems(cJSON_GetObjectItem(root, "items"));
|
||||||
|
|
||||||
|
loadItemGroups(cJSON_GetObjectItem(root, "itemGroups"));
|
||||||
|
|
||||||
STRNCPY(music, cJSON_GetObjectItem(root, "music")->valuestring, MAX_NAME_LENGTH);
|
STRNCPY(music, cJSON_GetObjectItem(root, "music")->valuestring, MAX_NAME_LENGTH);
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "epic"))
|
if (cJSON_GetObjectItem(root, "epic"))
|
||||||
|
@ -422,7 +428,87 @@ static void loadEntityGroups(cJSON *node)
|
||||||
STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH);
|
STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
e->id = battle.entId++;
|
e->x = x;
|
||||||
|
e->y = y;
|
||||||
|
|
||||||
|
e->x += (rand() % scatter) - (rand() % scatter);
|
||||||
|
e->y += (rand() % scatter) - (rand() % scatter);
|
||||||
|
|
||||||
|
SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h);
|
||||||
|
}
|
||||||
|
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void loadItems(cJSON *node)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void loadItemGroups(cJSON *node)
|
||||||
|
{
|
||||||
|
Entity *e;
|
||||||
|
char *name, *groupName, *type;
|
||||||
|
int i, scatter, number;
|
||||||
|
long flags;
|
||||||
|
float x, y;
|
||||||
|
|
||||||
|
flags = -1;
|
||||||
|
scatter = 1;
|
||||||
|
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
node = node->child;
|
||||||
|
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
type = cJSON_GetObjectItem(node, "type")->valuestring;
|
||||||
|
number = cJSON_GetObjectItem(node, "number")->valueint;
|
||||||
|
x = cJSON_GetObjectItem(node, "x")->valuedouble * GRID_CELL_WIDTH;
|
||||||
|
y = cJSON_GetObjectItem(node, "y")->valuedouble * GRID_CELL_HEIGHT;
|
||||||
|
name = NULL;
|
||||||
|
groupName = NULL;
|
||||||
|
|
||||||
|
if (cJSON_GetObjectItem(node, "name"))
|
||||||
|
{
|
||||||
|
name = cJSON_GetObjectItem(node, "name")->valuestring;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cJSON_GetObjectItem(node, "groupName"))
|
||||||
|
{
|
||||||
|
groupName = cJSON_GetObjectItem(node, "groupName")->valuestring;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cJSON_GetObjectItem(node, "scatter"))
|
||||||
|
{
|
||||||
|
scatter = cJSON_GetObjectItem(node, "scatter")->valueint;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cJSON_GetObjectItem(node, "flags"))
|
||||||
|
{
|
||||||
|
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0 ; i < number ; i++)
|
||||||
|
{
|
||||||
|
e = spawnItem(type);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
STRNCPY(e->name, name, MAX_NAME_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (groupName)
|
||||||
|
{
|
||||||
|
STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags != -1)
|
||||||
|
{
|
||||||
|
e->flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
e->x = x;
|
e->x = x;
|
||||||
e->y = y;
|
e->y = y;
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ extern Entity *spawnWaypoint(void);
|
||||||
extern void activateNextWaypoint(void);
|
extern void activateNextWaypoint(void);
|
||||||
extern void selectWidget(const char *name, const char *group);
|
extern void selectWidget(const char *name, const char *group);
|
||||||
extern Entity *spawnExtractionPoint(void);
|
extern Entity *spawnExtractionPoint(void);
|
||||||
|
extern Entity *spawnItem(char *type);
|
||||||
extern void failIncompleteObjectives(void);
|
extern void failIncompleteObjectives(void);
|
||||||
extern void fleeAllEnemies(void);
|
extern void fleeAllEnemies(void);
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ void initLookups(void)
|
||||||
addLookup("TT_DISABLE", TT_DISABLE);
|
addLookup("TT_DISABLE", TT_DISABLE);
|
||||||
addLookup("TT_WAYPOINT", TT_WAYPOINT);
|
addLookup("TT_WAYPOINT", TT_WAYPOINT);
|
||||||
addLookup("TT_ESCAPED", TT_ESCAPED);
|
addLookup("TT_ESCAPED", TT_ESCAPED);
|
||||||
|
addLookup("TT_ITEM", TT_ITEM);
|
||||||
|
|
||||||
addLookup("WT_BUTTON", WT_BUTTON);
|
addLookup("WT_BUTTON", WT_BUTTON);
|
||||||
addLookup("WT_SELECT", WT_SELECT);
|
addLookup("WT_SELECT", WT_SELECT);
|
||||||
|
|
|
@ -98,6 +98,7 @@ static void loadSounds(void)
|
||||||
sounds[SND_MISSILE] = Mix_LoadWAV("sound/65787__iwilldstroyu__laserrocket.ogg");
|
sounds[SND_MISSILE] = Mix_LoadWAV("sound/65787__iwilldstroyu__laserrocket.ogg");
|
||||||
sounds[SND_BOOST] = Mix_LoadWAV("sound/18380__inferno__hvrl.ogg");
|
sounds[SND_BOOST] = Mix_LoadWAV("sound/18380__inferno__hvrl.ogg");
|
||||||
/*sounds[SND_ECM] = Mix_LoadWAV("sound/18380__inferno__hvrl.ogg");*/
|
/*sounds[SND_ECM] = Mix_LoadWAV("sound/18380__inferno__hvrl.ogg");*/
|
||||||
|
sounds[SND_GET_ITEM] = Mix_LoadWAV("sound/56246__q-k__latch-04.ogg");
|
||||||
sounds[SND_EXPLOSION_1] = Mix_LoadWAV("sound/162265__qubodup__explosive.ogg");
|
sounds[SND_EXPLOSION_1] = Mix_LoadWAV("sound/162265__qubodup__explosive.ogg");
|
||||||
sounds[SND_EXPLOSION_2] = Mix_LoadWAV("sound/207322__animationisaac__short-explosion.ogg");
|
sounds[SND_EXPLOSION_2] = Mix_LoadWAV("sound/207322__animationisaac__short-explosion.ogg");
|
||||||
sounds[SND_EXPLOSION_3] = Mix_LoadWAV("sound/254071__tb0y298__firework-explosion.ogg");
|
sounds[SND_EXPLOSION_3] = Mix_LoadWAV("sound/254071__tb0y298__firework-explosion.ogg");
|
||||||
|
|
Loading…
Reference in New Issue