Added Locations for use with mission scripting.
This commit is contained in:
parent
15d7faf386
commit
1884c8371e
|
@ -16,7 +16,7 @@ OBJS += fighters.o
|
||||||
OBJS += galacticMap.o game.o grid.o
|
OBJS += galacticMap.o game.o grid.o
|
||||||
OBJS += hud.o
|
OBJS += hud.o
|
||||||
OBJS += init.o input.o io.o items.o
|
OBJS += init.o input.o io.o items.o
|
||||||
OBJS += load.o lookup.o
|
OBJS += load.o locations.o lookup.o
|
||||||
OBJS += main.o messageBox.o mission.o missionInfo.o
|
OBJS += main.o messageBox.o mission.o missionInfo.o
|
||||||
OBJS += objectives.o options.o
|
OBJS += objectives.o options.o
|
||||||
OBJS += player.o
|
OBJS += player.o
|
||||||
|
|
|
@ -46,6 +46,7 @@ void initBattle(void)
|
||||||
battle.entityTail = &battle.entityHead;
|
battle.entityTail = &battle.entityHead;
|
||||||
battle.effectTail = &battle.effectHead;
|
battle.effectTail = &battle.effectHead;
|
||||||
battle.objectiveTail = &battle.objectiveHead;
|
battle.objectiveTail = &battle.objectiveHead;
|
||||||
|
battle.locationTail = &battle.locationHead;
|
||||||
|
|
||||||
app.delegate.logic = &logic;
|
app.delegate.logic = &logic;
|
||||||
app.delegate.draw = &draw;
|
app.delegate.draw = &draw;
|
||||||
|
@ -147,17 +148,17 @@ static void doBattle(void)
|
||||||
|
|
||||||
if (player != NULL)
|
if (player != NULL)
|
||||||
{
|
{
|
||||||
|
doLocations();
|
||||||
|
|
||||||
doMessageBox();
|
doMessageBox();
|
||||||
}
|
|
||||||
|
if (battle.status == MS_IN_PROGRESS)
|
||||||
if (battle.status == MS_IN_PROGRESS)
|
|
||||||
{
|
|
||||||
if (player != NULL)
|
|
||||||
{
|
{
|
||||||
doScript();
|
doScript();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (battle.status != MS_IN_PROGRESS)
|
||||||
{
|
{
|
||||||
battle.missionFinishedTimer--;
|
battle.missionFinishedTimer--;
|
||||||
}
|
}
|
||||||
|
@ -194,6 +195,11 @@ static void draw(void)
|
||||||
|
|
||||||
drawEffects();
|
drawEffects();
|
||||||
|
|
||||||
|
if (dev.debug)
|
||||||
|
{
|
||||||
|
drawLocations();
|
||||||
|
}
|
||||||
|
|
||||||
drawHud();
|
drawHud();
|
||||||
|
|
||||||
if (player != NULL)
|
if (player != NULL)
|
||||||
|
@ -358,6 +364,7 @@ void destroyBattle(void)
|
||||||
Debris *d;
|
Debris *d;
|
||||||
Effect *e;
|
Effect *e;
|
||||||
Objective *o;
|
Objective *o;
|
||||||
|
Location *l;
|
||||||
|
|
||||||
while (battle.entityHead.next)
|
while (battle.entityHead.next)
|
||||||
{
|
{
|
||||||
|
@ -399,6 +406,14 @@ void destroyBattle(void)
|
||||||
}
|
}
|
||||||
battle.objectiveTail = &battle.objectiveHead;
|
battle.objectiveTail = &battle.objectiveHead;
|
||||||
|
|
||||||
|
while (battle.locationHead.next)
|
||||||
|
{
|
||||||
|
l = battle.locationHead.next;
|
||||||
|
battle.locationHead.next = l->next;
|
||||||
|
free(l);
|
||||||
|
}
|
||||||
|
battle.locationTail = &battle.locationHead;
|
||||||
|
|
||||||
cJSON_Delete(battle.missionJSON);
|
cJSON_Delete(battle.missionJSON);
|
||||||
|
|
||||||
resetHud();
|
resetHud();
|
||||||
|
|
|
@ -78,6 +78,8 @@ extern void initBullets(void);
|
||||||
extern void initDebris(void);
|
extern void initDebris(void);
|
||||||
extern void doDebris(void);
|
extern void doDebris(void);
|
||||||
extern void drawDebris(void);
|
extern void drawDebris(void);
|
||||||
|
extern void doLocations(void);
|
||||||
|
extern void drawLocations(void);
|
||||||
|
|
||||||
extern App app;
|
extern App app;
|
||||||
extern Battle battle;
|
extern Battle battle;
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2015 Parallel Realities
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "locations.h"
|
||||||
|
|
||||||
|
void doLocations(void)
|
||||||
|
{
|
||||||
|
Location *l, *prev;
|
||||||
|
|
||||||
|
prev = &battle.locationHead;
|
||||||
|
|
||||||
|
for (l = battle.locationHead.next ; l != NULL ; l = l->next)
|
||||||
|
{
|
||||||
|
if (getDistance(player->x, player->y, l->x, l->y) <= l->size)
|
||||||
|
{
|
||||||
|
runScriptFunction(l->name);
|
||||||
|
|
||||||
|
prev->next = l->next;
|
||||||
|
free(l);
|
||||||
|
l = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
prev = l;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawLocations(void)
|
||||||
|
{
|
||||||
|
Location *l;
|
||||||
|
|
||||||
|
for (l = battle.locationHead.next ; l != NULL ; l = l->next)
|
||||||
|
{
|
||||||
|
drawCircle(l->x - battle.camera.x, l->y - battle.camera.y, l->size, 0, 255, 0, 255);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2015 Parallel Realities
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
extern Battle battle;
|
||||||
|
extern Entity *player;
|
||||||
|
|
||||||
|
extern int getDistance(int x1, int y1, int x2, int y2);
|
||||||
|
extern void runScriptFunction(char *format, ...);
|
||||||
|
extern void drawCircle(int cx, int cy, int radius, int r, int g, int b, int a);
|
|
@ -26,6 +26,7 @@ static void loadFighters(cJSON *node);
|
||||||
static void loadCapitalShips(cJSON *node);
|
static void loadCapitalShips(cJSON *node);
|
||||||
static void loadEntities(cJSON *node);
|
static void loadEntities(cJSON *node);
|
||||||
static void loadItems(cJSON *node);
|
static void loadItems(cJSON *node);
|
||||||
|
static void loadLocations(cJSON *node);
|
||||||
static unsigned long hashcode(const char *str);
|
static unsigned long hashcode(const char *str);
|
||||||
static char **toTypeArray(char *types, int *numTypes);
|
static char **toTypeArray(char *types, int *numTypes);
|
||||||
static void loadEpicData(cJSON *node);
|
static void loadEpicData(cJSON *node);
|
||||||
|
@ -62,6 +63,8 @@ void loadMission(char *filename)
|
||||||
|
|
||||||
loadItems(cJSON_GetObjectItem(root, "items"));
|
loadItems(cJSON_GetObjectItem(root, "items"));
|
||||||
|
|
||||||
|
loadLocations(cJSON_GetObjectItem(root, "locations"));
|
||||||
|
|
||||||
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"))
|
||||||
|
@ -630,6 +633,34 @@ static void loadItems(cJSON *node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void loadLocations(cJSON *node)
|
||||||
|
{
|
||||||
|
Location *l;
|
||||||
|
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
node = node->child;
|
||||||
|
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
l = malloc(sizeof(Location));
|
||||||
|
memset(l, 0, sizeof(Location));
|
||||||
|
battle.locationTail->next = l;
|
||||||
|
battle.locationTail = l;
|
||||||
|
|
||||||
|
STRNCPY(l->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
|
||||||
|
l->x = cJSON_GetObjectItem(node, "x")->valueint * GRID_CELL_WIDTH;
|
||||||
|
l->y = cJSON_GetObjectItem(node, "y")->valueint * GRID_CELL_HEIGHT;
|
||||||
|
l->size = cJSON_GetObjectItem(node, "size")->valueint;
|
||||||
|
|
||||||
|
l->x += (GRID_CELL_WIDTH / 2);
|
||||||
|
l->y += (GRID_CELL_HEIGHT / 2);
|
||||||
|
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static char **toTypeArray(char *types, int *numTypes)
|
static char **toTypeArray(char *types, int *numTypes)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -35,6 +35,7 @@ typedef struct HudMessage HudMessage;
|
||||||
typedef struct MessageBox MessageBox;
|
typedef struct MessageBox MessageBox;
|
||||||
typedef struct GridCell GridCell;
|
typedef struct GridCell GridCell;
|
||||||
typedef struct ScriptRunner ScriptRunner;
|
typedef struct ScriptRunner ScriptRunner;
|
||||||
|
typedef struct Location Location;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int debug;
|
int debug;
|
||||||
|
@ -202,6 +203,14 @@ struct Effect {
|
||||||
Effect *next;
|
Effect *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Location {
|
||||||
|
char name[MAX_NAME_LENGTH];
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int size;
|
||||||
|
Location *next;
|
||||||
|
};
|
||||||
|
|
||||||
struct Objective {
|
struct Objective {
|
||||||
int active;
|
int active;
|
||||||
char description[MAX_DESCRIPTION_LENGTH];
|
char description[MAX_DESCRIPTION_LENGTH];
|
||||||
|
@ -281,6 +290,7 @@ typedef struct {
|
||||||
Debris debrisHead, *debrisTail;
|
Debris debrisHead, *debrisTail;
|
||||||
Effect effectHead, *effectTail;
|
Effect effectHead, *effectTail;
|
||||||
Objective objectiveHead, *objectiveTail;
|
Objective objectiveHead, *objectiveTail;
|
||||||
|
Location locationHead, *locationTail;
|
||||||
struct cJSON *missionJSON;
|
struct cJSON *missionJSON;
|
||||||
unsigned int stats[STAT_MAX];
|
unsigned int stats[STAT_MAX];
|
||||||
GridCell grid[GRID_SIZE][GRID_SIZE];
|
GridCell grid[GRID_SIZE][GRID_SIZE];
|
||||||
|
|
Loading…
Reference in New Issue