2 Copyright (C) 2004-2011 Parallel Realities
3 Copyright (C) 2011-2015 Perpendicular Dimensions
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 completedWorld = false;
29 void GameData::clear()
34 void GameData::destroy()
39 void GameData::addCompletedObjective(const char *key, const char *value, int current, int target)
41 Data *data = (Data*)dataList.getHead();
43 while (data->next != NULL)
45 data = (Data*)data->next;
46 if (strcmp(key, data->key) == 0)
48 if (strcmp(value, data->value) == 0)
50 data->set(key, value, current, target);
57 data->set(key, value, current, target);
62 void GameData::addCompletedObjective(Data *newData)
64 Data *data = (Data*)dataList.getHead();
66 while (data->next != NULL)
68 data = (Data*)data->next;
69 if (strcmp(data->key, newData->key) == 0)
71 if (strcmp(data->value, newData->value) == 0)
73 data->set(newData->key, newData->value, newData->current, newData->target);
79 dataList.add(newData);
82 void GameData::setMIARescueCount(const char *key, int rescues, int total)
84 Data *data = (Data*)dataList.getHead();
87 snprintf(newKey, sizeof newKey, "%s MIAs", key);
89 while (data->next != NULL)
91 data = (Data*)data->next;
92 if (strcmp(newKey, data->key) == 0)
94 strlcpy(data->value, "MIAs", sizeof data->value);
95 data->current = rescues;
103 data->set(newKey, "MIAs", rescues, total);
108 bool GameData::MIARescued(const char *stageName, char *name)
110 Data *data = (Data*)dataList.getHead();
113 snprintf(newName, sizeof newName, "MIA_%s", name);
115 while (data->next != NULL)
117 data = (Data*)data->next;
118 if (strcmp(data->key, stageName) == 0)
120 if (strcmp(data->value, newName) == 0)
122 return data->isComplete();
130 bool GameData::objectiveCompleted(const char *stageName, const char *name)
132 Data *data = (Data*)dataList.getHead();
134 while (data->next != NULL)
136 data = (Data*)data->next;
137 if (strcmp(data->key, stageName) == 0)
139 if (strcmp(data->value, name) == 0)
141 return (data->current == data->target);
149 void GameData::getObjectiveValues(const char *stageName, const char *name, int *current, int *target)
154 Data *data = (Data*)dataList.getHead();
156 while (data->next != NULL)
158 data = (Data*)data->next;
159 if (strcmp(data->key, stageName) == 0)
161 if (strcmp(data->value, name) == 0)
163 data->getCurrentTarget(current, target);
170 bool GameData::stagePreviouslyCleared(const char *stageName)
172 Data *data = (Data*)dataList.getHead();
174 while (data->next != NULL)
176 data = (Data*)data->next;
177 if (strcmp(data->key, stageName) == 0)
186 bool GameData::isCompleted(const char *key, const char *value)
188 Data *data = (Data*)dataList.getHead();
190 while (data->next != NULL)
192 data = (Data*)data->next;
193 if (strcmp(key, data->key) == 0)
195 if (strcmp(value, data->value) == 0)
203 bool GameData::levelPrefectlyCleared(const char *level)
205 Data *data = (Data*)dataList.getHead();
209 while (data->next != NULL)
211 data = (Data*)data->next;
213 if (strcmp(data->key, level) == 0)
217 if (!data->isComplete())
228 bool GameData::requiredLevelCleared(const char *requiredLevel)
230 Data *data = (Data*)dataList.getHead();
232 while (data->next != NULL)
234 data = (Data*)data->next;
236 if (strcmp(data->key, requiredLevel) == 0)
246 Whether or not all the levels in the game have been unlocked
248 void GameData::calculateWorldCompleted()
250 completedWorld = false;
252 Data *data = (Data*)dataList.getHead();
254 while (data->next != NULL)
256 data = (Data*)data->next;
258 if (strcmp(data->key, "BioMech HQ") == 0)
260 completedWorld = true;
265 int GameData::getPercentageComplete()
267 float percentage, total, completed;
269 total = completed = percentage = 0;
271 Data *data = (Data*)dataList.getHead();
273 while (data->next != NULL)
275 data = (Data*)data->next;
279 if (data->isComplete())
283 if ((total == 0) || (completed == 0))
286 percentage = (completed / total);
289 return (int)percentage;