diff --git a/src/defs.h b/src/defs.h index c9e7418..d640c7b 100644 --- a/src/defs.h +++ b/src/defs.h @@ -199,6 +199,7 @@ enum enum { + MS_LOCKED = -1, MS_INCOMPLETE, MS_PARTIAL, MS_MISSING_HEART_CELL, diff --git a/src/game/game.c b/src/game/game.c index 5587840..e00b732 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -26,6 +26,8 @@ void initGame(void) { memset(&game, 0, sizeof(Game)); + game.missionStatusTail = &game.missionStatusHead; + game.cells = 5; game.hearts = 10; diff --git a/src/hub/hub.c b/src/hub/hub.c index 4762d6f..9635793 100644 --- a/src/hub/hub.c +++ b/src/hub/hub.c @@ -76,7 +76,7 @@ void initHub(void) { mission->status = getMissionStatus(mission->id); - if (mission->unlockCount == 0 && mission->status == -1) + if (mission->unlockCount == 0 && mission->status == MS_LOCKED) { mission->status = MS_INCOMPLETE; unlockMission(mission->id); @@ -95,7 +95,7 @@ void initHub(void) if (mission->status == MS_MISSING_HEART_CELL) { - STRNCPY(mission->description, "All objectives for this misson have been completed. However, there is a Cell or a Heart left to find. See if you can locate it.", MAX_DESCRIPTION_LENGTH); + STRNCPY(mission->description, _("All objectives for this misson have been completed. However, there is a Cell or a Heart left to find. See if you can locate it."), MAX_DESCRIPTION_LENGTH); } } @@ -103,7 +103,7 @@ void initHub(void) for (mission = hubMissionHead.next ; mission != NULL ; mission = mission->next) { - if (mission->status == -1 || mission->status == MS_COMPLETE) + if (mission->status == MS_LOCKED || mission->status == MS_COMPLETE) { if (mission == hubMissionTail) { @@ -131,7 +131,7 @@ static int getMissionStatus(char *id) } } - return -1; + return MS_LOCKED; } static void unlockMission(char *id) @@ -142,10 +142,13 @@ static void unlockMission(char *id) { if (strcmp(t->key, id) == 0) { - if (t->value.i == -1) + if (t->value.i == MS_LOCKED) { t->value.i = MS_INCOMPLETE; + + SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Unlocked mission %s", id); } + return; } } @@ -157,6 +160,8 @@ static void unlockMission(char *id) STRNCPY(t->key, id, MAX_NAME_LENGTH); t->value.i = MS_INCOMPLETE; + + SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Unlocked mission %s", id); } static void unlockAllLevels(void) @@ -165,7 +170,7 @@ static void unlockAllLevels(void) for (mission = hubMissionHead.next ; mission != NULL ; mission = mission->next) { - if (mission->status == -1 || mission->status == MS_INCOMPLETE) + if (mission->status == MS_LOCKED || mission->status == MS_INCOMPLETE) { mission->status = MS_INCOMPLETE; unlockMission(mission->id); @@ -175,6 +180,33 @@ static void unlockAllLevels(void) static void loadMissions(void) { + cJSON *root, *node; + char *text; + HubMission *mission; + + text = readFile("data/hub/missions.json"); + + root = cJSON_Parse(text); + + for (node = cJSON_GetObjectItem(root, "missions")->child ; node != NULL ; node = node->next) + { + mission = malloc(sizeof(HubMission)); + memset(mission, 0, sizeof(HubMission)); + hubMissionTail->next = mission; + hubMissionTail = mission; + + STRNCPY(mission->id, cJSON_GetObjectItem(node, "id")->valuestring, MAX_NAME_LENGTH); + STRNCPY(mission->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH); + STRNCPY(mission->description, cJSON_GetObjectItem(node, "description")->valuestring, MAX_DESCRIPTION_LENGTH); + mission->x = cJSON_GetObjectItem(node, "x")->valueint; + mission->y = cJSON_GetObjectItem(node, "y")->valueint; + mission->status = MS_LOCKED; + mission->unlockCount = cJSON_GetObjectItem(node, "unlockCount")->valueint; + } + + cJSON_Delete(root); + + free(text); } static void unlockNeighbouringMission(HubMission *sourceMission) @@ -205,7 +237,7 @@ static void unlockNeighbouringMission(HubMission *sourceMission) if (mission != NULL) { - if (mission->status == -1 || mission->status == MS_INCOMPLETE) + if (mission->status == MS_LOCKED || mission->status == MS_INCOMPLETE) { mission->status = MS_INCOMPLETE; unlockMission(mission->id); @@ -215,7 +247,7 @@ static void unlockNeighbouringMission(HubMission *sourceMission) if (mission != NULL) { - if (mission->status == -1 || mission->status == MS_INCOMPLETE) + if (mission->status == MS_LOCKED || mission->status == MS_INCOMPLETE) { mission->status = MS_INCOMPLETE; unlockMission(mission->id); diff --git a/src/hub/hub.h b/src/hub/hub.h index fbd7970..de67c21 100644 --- a/src/hub/hub.h +++ b/src/hub/hub.h @@ -19,8 +19,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../common.h" +#include "../json/cJSON.h" extern int getDistance(int x1, int y1, int x2, int y2); +extern char *readFile(const char *filename); +extern char *getTranslatedString(char *string); extern Dev dev; extern Game game; diff --git a/src/system/atlas.c b/src/system/atlas.c index 5d7ba13..01b89ad 100644 --- a/src/system/atlas.c +++ b/src/system/atlas.c @@ -22,7 +22,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static void loadAtlasTexture(void); static void loadAtlasData(void); -static void loadImageData(cJSON *root); static Atlas atlasHead; static Atlas *atlasTail; @@ -64,8 +63,10 @@ static void loadAtlasTexture(void) static void loadAtlasData(void) { + Atlas *atlas; + int x, y, w, h; cJSON *root, *node; - char *text; + char *text, *filename; text = readFile("data/atlas/atlas.json"); @@ -73,34 +74,25 @@ static void loadAtlasData(void) for (node = cJSON_GetObjectItem(root, "images")->child ; node != NULL ; node = node->next) { - loadImageData(node); + filename = cJSON_GetObjectItem(node, "filename")->valuestring; + x = cJSON_GetObjectItem(node, "x")->valueint; + y = cJSON_GetObjectItem(node, "y")->valueint; + w = cJSON_GetObjectItem(node, "w")->valueint; + h = cJSON_GetObjectItem(node, "h")->valueint; + + atlas = malloc(sizeof(Atlas)); + memset(atlas, 0, sizeof(Atlas)); + atlasTail->next = atlas; + atlasTail = atlas; + + STRNCPY(atlas->filename, filename, MAX_FILENAME_LENGTH); + atlas->rect.x = x; + atlas->rect.y = y; + atlas->rect.w = w; + atlas->rect.h = h; } cJSON_Delete(root); free(text); } - -static void loadImageData(cJSON *root) -{ - Atlas *atlas; - char *filename; - int x, y, w, h; - - filename = cJSON_GetObjectItem(root, "filename")->valuestring; - x = cJSON_GetObjectItem(root, "x")->valueint; - y = cJSON_GetObjectItem(root, "y")->valueint; - w = cJSON_GetObjectItem(root, "w")->valueint; - h = cJSON_GetObjectItem(root, "h")->valueint; - - atlas = malloc(sizeof(Atlas)); - memset(atlas, 0, sizeof(Atlas)); - atlasTail->next = atlas; - atlasTail = atlas; - - STRNCPY(atlas->filename, filename, MAX_FILENAME_LENGTH); - atlas->rect.x = x; - atlas->rect.y = y; - atlas->rect.w = w; - atlas->rect.h = h; -} diff --git a/src/test/atlasTest.c b/src/test/atlasTest.c index 019a78e..be1a875 100644 --- a/src/test/atlasTest.c +++ b/src/test/atlasTest.c @@ -29,6 +29,7 @@ static Texture *atlasTexture; void initAtlasTest(void) { initGame(); + initHub(); app.delegate.logic = &logic; app.delegate.draw = &draw; diff --git a/src/test/atlasTest.h b/src/test/atlasTest.h index 13cb4c8..88e2a51 100644 --- a/src/test/atlasTest.h +++ b/src/test/atlasTest.h @@ -25,5 +25,6 @@ extern Texture *getTexture(const char *filename); extern void blitRect(SDL_Texture *texture, int x, int y, SDL_Rect *srcRect, int center); extern void loadMapData(char *filename); extern void initGame(void); +extern void initHub(void); extern App app;