Merge fixes.

This commit is contained in:
Steve 2016-03-04 22:11:13 +00:00
parent 159d36017b
commit 599c4fc338
15 changed files with 155 additions and 54 deletions

View File

@ -2,7 +2,7 @@ Changelog
0.6
* Added new game mode: Challenges
* New game mode: Challenges
* Add i18n support
0.51

View File

@ -66,3 +66,4 @@ CC BY-NC-SA 3.0, with the following attribution: Copyright 2015-2016, Stephen J
* track-3.mp3, by Alexandr Zhelanov - https://soundcloud.com/alexandr-zhelanov
* track-4.mp3, by Alexandr Zhelanov - https://soundcloud.com/alexandr-zhelanov
* DST-RailJet-LongSeamlessLoop.ogg, by Deceased Superior Technician - http://opengameart.org/content/railjet-long-seamless-loop
* covert_operations.mp3, by artisticdude - http://opengameart.org/content/covert-operations

View File

@ -270,7 +270,9 @@ enum
WT_BUTTON,
WT_IMG_BUTTON,
WT_SELECT,
WT_SELECT_BUTTON
WT_SELECT_BUTTON,
WT_KEY_CONFIG,
WT_MOUSE_CONFIG
};
enum

View File

@ -311,16 +311,15 @@ static void loadObjectives(cJSON *node)
battle.objectiveTail->next = o;
battle.objectiveTail = o;
o->active = 1;
STRNCPY(o->description, _(cJSON_GetObjectItem(node, "description")->valuestring), MAX_DESCRIPTION_LENGTH);
STRNCPY(o->targetName, cJSON_GetObjectItem(node, "targetName")->valuestring, MAX_NAME_LENGTH);
o->targetValue = cJSON_GetObjectItem(node, "targetValue")->valueint;
o->targetType = lookup(cJSON_GetObjectItem(node, "targetType")->valuestring);
o->active = getJSONValue(node, "active", 0);
o->active = getJSONValue(node, "active", 1);
o->isCondition = getJSONValue(node, "isCondition", 0);
o->isEliminateAll = getJSONValue(node, "isEliminateAll", 0);
if (isEliminateAll)
if (o->isEliminateAll)
{
o->targetValue = 1;
}
@ -378,9 +377,6 @@ static void loadFighters(cJSON *node)
groupName = NULL;
flags = -1;
aiFlags = -1;
scatter = 1;
active = 1;
number = 1;
types = toTypeArray(cJSON_GetObjectItem(node, "types")->valuestring, &numTypes);
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
@ -388,9 +384,9 @@ static void loadFighters(cJSON *node)
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
name = getJSONValueStr(node, "name", NULL);
groupName = getJSONValueStr(node, "groupName", NULL);
number = getJSONValue(node, "number", 0);
scatter = getJSONValue(node, "scatter", 0);
active = getJSONValue(node, "active", 0);
number = getJSONValue(node, "number", 1);
scatter = getJSONValue(node, "scatter", 1);
active = getJSONValue(node, "active", 1);
if (cJSON_GetObjectItem(node, "flags"))
{
@ -484,20 +480,17 @@ static void loadCapitalShips(cJSON *node)
{
name = NULL;
groupName = NULL;
scatter = 1;
active = 1;
number = 1;
flags = -1;
types = toTypeArray(cJSON_GetObjectItem(node, "types")->valuestring, &numTypes);
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
name = cJSON_GetObjectItem(node, "name", NULL);
name = getJSONValueStr(node, "name", NULL);
groupName = getJSONValueStr(node, "groupName", NULL);
number = getJSONValueStr(node, "number", 0);
scatter = getJSONValueStr(node, "scatter", 0);
active = getJSONValue(node, "active", 0);
number = getJSONValue(node, "number", 1);
scatter = getJSONValue(node, "scatter", 1);
active = getJSONValue(node, "active", 1);
if (cJSON_GetObjectItem(node, "flags"))
{
@ -576,19 +569,12 @@ static void loadEntities(cJSON *node)
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
name = NULL;
groupName = NULL;
number = 1;
active = 1;
scatter = 1;
name = getJSONValueStr(node, "name", NULL);
groupName = getJSONValueStr(node, "groupName", NULL);
number = getJSONValue(node, "number", 0);
active = getJSONValue(node, "active", 0);
scatter = getJSONValue(node, "scatter", 0);
number = getJSONValue(node, "number", 1);
active = getJSONValue(node, "active", 1);
scatter = getJSONValue(node, "scatter", 1);
for (i = 0 ; i < number ; i++)
{
@ -659,24 +645,18 @@ static void loadItems(cJSON *node)
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
name = NULL;
groupName = NULL;
number = 1;
active = 1;
name = getJSONValueStr(node, "name", NULL);
groupName = getJSONValueStr(node, "groupName", NULL);
number = getJSONValue(node, "number", 0);
scatter = getJSONValue(node, "scatter", 0);
number = getJSONValue(node, "number", 1);
scatter = getJSONValue(node, "scatter", 1);
active = getJSONValue(node, "active", 1);
if (cJSON_GetObjectItem(node, "flags"))
{
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
}
active = getJSONValue(node, "active", 0);
for (i = 0 ; i < number ; i++)
{
e = spawnItem(type);
@ -734,8 +714,6 @@ static void loadLocations(cJSON *node)
while (node)
{
active = 1;
l = malloc(sizeof(Location));
memset(l, 0, sizeof(Location));
battle.locationTail->next = l;
@ -747,7 +725,7 @@ static void loadLocations(cJSON *node)
l->size = cJSON_GetObjectItem(node, "size")->valueint;
active = getJSONValue(node, "active", 0);
active = getJSONValue(node, "active", 1);
l->x += (SCREEN_WIDTH / 2);
l->y += (SCREEN_HEIGHT / 2);

View File

@ -29,3 +29,43 @@ void clearControl(int type)
{
app.keyboard[app.keyControls[type]] = 0;
}
void initControlsDisplay(void)
{
getWidget("keyMissile", "controls")->value = app.keyControls[CONTROL_MISSILE];
getWidget("keyBoost", "controls")->value = app.keyControls[CONTROL_BOOST];
getWidget("keyECM", "controls")->value = app.keyControls[CONTROL_ECM];
getWidget("keyBrake", "controls")->value = app.keyControls[CONTROL_BRAKE];
getWidget("keyRadar", "controls")->value = app.keyControls[CONTROL_RADAR];
getWidget("keyTarget", "controls")->value = app.keyControls[CONTROL_TARGET];
getWidget("keyGuns", "controls")->value = app.keyControls[CONTROL_GUNS];
getWidget("keyPrevFighter", "controls")->value = app.keyControls[CONTROL_PREV_FIGHTER];
getWidget("keyNextFighter", "controls")->value = app.keyControls[CONTROL_NEXT_FIGHTER];
}
void drawControls(void)
{
SDL_Rect r;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 128);
SDL_RenderFillRect(app.renderer, NULL);
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
r.w = 800;
r.h = 650;
r.x = (SCREEN_WIDTH / 2) - r.w / 2;
r.y = (SCREEN_HEIGHT / 2) - r.h / 2;
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 0);
SDL_RenderFillRect(app.renderer, &r);
SDL_SetRenderDrawColor(app.renderer, 200, 200, 200, 255);
SDL_RenderDrawRect(app.renderer, &r);
drawText(SCREEN_WIDTH / 2, 50, 28, TA_CENTER, colors.white, _("Controls"));
SDL_SetRenderDrawColor(app.renderer, 128, 128, 128, 255);
SDL_RenderDrawLine(app.renderer, r.x, r.y + 65, r.x + r.w, r.y + 65);
drawWidgets("controls");
}

View File

@ -20,5 +20,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../common.h"
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern char *getTranslatedString(char *string);
extern Widget *getWidget(const char *name, const char *group);
extern void drawWidgets(char *groupName);
extern App app;
extern Colors colors;
extern Game game;

View File

@ -91,6 +91,8 @@ void initLookups(void)
addLookup("WT_BUTTON", WT_BUTTON);
addLookup("WT_SELECT", WT_SELECT);
addLookup("WT_IMG_BUTTON", WT_IMG_BUTTON);
addLookup("WT_KEY_CONFIG", WT_KEY_CONFIG);
addLookup("WT_MOUSE_CONFIG", WT_MOUSE_CONFIG);
addLookup("SIDE_ALLIES", SIDE_ALLIES);
addLookup("SIDE_PIRATE", SIDE_PIRATE);

View File

@ -60,7 +60,7 @@ void showOKDialog(void (*callback)(void), const char *format, ...)
ok->action = callback;
enableTimer = FPS;
ok->enabled = okCancelOK = okCancelCancel = 0;
ok->enabled = okCancelOK->enabled = okCancelCancel->enabled = 0;
}
void showOKCancelDialog(void (*okCallback)(void), void (*cancelCallback)(void), const char *format, ...)
@ -81,7 +81,7 @@ void showOKCancelDialog(void (*okCallback)(void), void (*cancelCallback)(void),
okCancelCancel->action = cancelCallback;
enableTimer = FPS;
ok->enabled = okCancelOK = okCancelCancel = 0;
ok->enabled = okCancelOK->enabled = okCancelCancel->enabled = 0;
}
void doModalDialog(void)
@ -93,7 +93,7 @@ void doModalDialog(void)
enableTimer = MAX(enableTimer - 1, 0);
if (!enableTimer)
{
ok->enabled = okCancelOK = okCancelCancel = 1;
ok->enabled = okCancelOK->enabled = okCancelCancel->enabled = 1;
}
}

View File

@ -25,8 +25,12 @@ static void changeSoundVolume(char *value);
static void changeMusicVolume(char *value);
static void changeFullscreen(char *value);
static void ok(void);
static void controlsOK(void);
static void drawMain(void);
static void controls(void);
static void (*returnFromOptions)(void);
static int show;
void initOptions(void (*rtn)(void))
{
@ -38,7 +42,9 @@ void initOptions(void (*rtn)(void))
getWidget("soundVolume", "options")->onChange = changeSoundVolume;
getWidget("musicVolume", "options")->onChange = changeMusicVolume;
getWidget("fullscreen", "options")->onChange = changeFullscreen;
getWidget("controls", "options")->action = controls;
getWidget("ok", "options")->action = ok;
getWidget("ok", "controls")->action = controlsOK;
sprintf(optionStr, "%d x %d", app.winWidth, app.winHeight);
setWidgetOption("windowSize", "options", optionStr);
@ -57,9 +63,25 @@ void initOptions(void (*rtn)(void))
#endif
returnFromOptions = rtn;
show = SHOW_MAIN;
}
void drawOptions(void)
{
switch (show)
{
case SHOW_MAIN:
drawMain();
break;
case SHOW_CONTROLS:
drawControls();
break;
}
}
static void drawMain(void)
{
SDL_Rect r;
@ -95,6 +117,13 @@ void drawOptions(void)
limitTextWidth(0);
}
static void controls(void)
{
initControlsDisplay();
show = SHOW_CONTROLS;
}
static void changeWindowSize(char *value)
{
sscanf(value, "%d x %d", &app.winWidth, &app.winHeight);
@ -125,3 +154,8 @@ static void ok(void)
returnFromOptions();
}
static void controlsOK(void)
{
show = SHOW_MAIN;
}

View File

@ -22,6 +22,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "SDL2/SDL_mixer.h"
#define SHOW_MAIN 0
#define SHOW_CONTROLS 1
extern void selectWidget(const char *name, const char *group);
extern Widget *getWidget(const char *name, const char *group);
extern void drawWidgets(char *groupName);
@ -30,6 +33,8 @@ extern void drawText(int x, int y, int size, int align, SDL_Color c, const char
extern void saveConfig(void);
extern void limitTextWidth(int width);
extern char *getTranslatedString(char *string);
extern void drawControls(void);
extern void initControlsDisplay(void);
extern App app;
extern Colors colors;

View File

@ -42,8 +42,8 @@ void initResources(void)
backgrounds[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);
sprintf(backgrounds[i], "gfx/backgrounds/%s", filenames[i]);
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "'%s' added to AUTO resources list", filenames[i]);
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Adding AUTO %s", filenames[i]);
free(filenames[i]);
}
@ -56,9 +56,9 @@ void initResources(void)
{
planets[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);
sprintf(planets[i], "gfx/planets/%s", filenames[i]);
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "'%s' added to AUTO resources list", filenames[i]);
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Adding AUTO %s", filenames[i]);
free(filenames[i]);
}
@ -72,9 +72,9 @@ void initResources(void)
{
musicFiles[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);
sprintf(musicFiles[i], "music/battle/%s", filenames[i]);
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "'%s' added to AUTO resources list", filenames[i]);
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Adding AUTO %s", filenames[i]);
free(filenames[i]);
}

View File

@ -25,5 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define MAX_BATTLE_SOUND_DISTANCE 1500
extern int getDistance(int x1, int y1, int x2, int y2);
extern char *getFileLocation(char *filename);
extern Entity *player;

View File

@ -115,10 +115,17 @@ char *getJSONValueStr(cJSON *node, char *name, char *defValue)
int getJSONValue(cJSON *node, char *name, int defValue)
{
char *result = getJSONValueStr(node, name, defValue);
cJSON *child;
if (result)
if (node)
{
return aoti(result);
child = cJSON_GetObjectItem(node, name);
if (child)
{
return child->valueint;
}
}
return defValue;
}

View File

@ -19,3 +19,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"

View File

@ -146,6 +146,18 @@ void drawWidgets(const char *group)
drawText(w->rect.x + 10, w->rect.y + 2, 20, TA_LEFT, colors.white, w->text);
drawText(w->rect.x + w->rect.w - 10, w->rect.y + 2, 20, TA_RIGHT, colors.white, w->options[w->currentOption]);
break;
case WT_KEY_CONFIG:
SDL_RenderDrawRect(app.renderer, &w->rect);
drawText(w->rect.x + 25, w->rect.y + 2, 20, TA_LEFT, colors.white, w->text);
drawText(w->rect.x + w->rect.w - 25, w->rect.y + 2, 20, TA_RIGHT, colors.white, "%d", w->value);
break;
case WT_MOUSE_CONFIG:
SDL_RenderDrawRect(app.renderer, &w->rect);
drawText(w->rect.x + 25, w->rect.y + 2, 20, TA_LEFT, colors.white, w->text);
drawText(w->rect.x + w->rect.w - 25, w->rect.y + 2, 20, TA_RIGHT, colors.white, "%d", w->value);
break;
}
if (!w->enabled)
@ -322,6 +334,18 @@ static void loadWidgetSet(char *filename)
createSelectButtons(w);
createOptions(w, cJSON_GetObjectItem(node, "options")->valuestring);
break;
case WT_KEY_CONFIG:
case WT_MOUSE_CONFIG:
STRNCPY(w->text, _(cJSON_GetObjectItem(node, "text")->valuestring), MAX_NAME_LENGTH);
w->rect.w = cJSON_GetObjectItem(node, "w")->valueint;
w->rect.h = cJSON_GetObjectItem(node, "h")->valueint;
break;
default:
printf("Widget type %d not handled\n", w->type);
exit(1);
break;
}
tail->next = w;