Allow for -size to specify custom resolution.
This commit is contained in:
parent
2a71a88371
commit
984a551c80
|
@ -1,5 +1,12 @@
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
1.5
|
||||||
|
|
||||||
|
* Added command line switch -size to allow for custom window sizes.
|
||||||
|
- For example: -size 900x600 for a width and height of 900 x 600.
|
||||||
|
* Graphics and fonts now use texture atlases to help with performance.
|
||||||
|
* Misc. bug fixes.
|
||||||
|
|
||||||
1.4
|
1.4
|
||||||
|
|
||||||
* Add Mac make file
|
* Add Mac make file
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
VERSION = 1.4
|
VERSION = 1.5
|
||||||
REVISION = 3
|
REVISION = 0
|
||||||
LOCALE_MO = $(patsubst %.po,%.mo,$(wildcard locale/*.po))
|
LOCALE_MO = $(patsubst %.po,%.mo,$(wildcard locale/*.po))
|
||||||
|
|
||||||
OUT = bin
|
OUT = bin
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"group" : "options",
|
"group" : "options",
|
||||||
"type" : "WT_SELECT",
|
"type" : "WT_SELECT",
|
||||||
"text" : "Window Size",
|
"text" : "Window Size",
|
||||||
"options" : "640 x 360;1280 x 720;1600 x 900;1920 x 1080;2560 x 1440;3840 x 2160",
|
"options" : "640 x 360;1280 x 720;1600 x 900;1920 x 1080;2560 x 1440;3840 x 2160;",
|
||||||
"x" : -1,
|
"x" : -1,
|
||||||
"y" : 175,
|
"y" : 175,
|
||||||
"w" : 400,
|
"w" : 400,
|
||||||
|
|
|
@ -42,7 +42,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
initLookups();
|
initLookups();
|
||||||
|
|
||||||
initSDL();
|
initSDL(argc, argv);
|
||||||
|
|
||||||
initGameSystem();
|
initGameSystem();
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ extern void init18N(int argc, char *argv[]);
|
||||||
extern void initCredits(void);
|
extern void initCredits(void);
|
||||||
extern void initGameSystem(void);
|
extern void initGameSystem(void);
|
||||||
extern void initLookups(void);
|
extern void initLookups(void);
|
||||||
extern void initSDL(void);
|
extern void initSDL(int argc, char *argv[]);
|
||||||
extern void initTitle(void);
|
extern void initTitle(void);
|
||||||
extern int isControl(int type);
|
extern int isControl(int type);
|
||||||
extern void loadGame(void);
|
extern void loadGame(void);
|
||||||
|
|
|
@ -456,7 +456,6 @@ struct Widget {
|
||||||
char text[MAX_NAME_LENGTH];
|
char text[MAX_NAME_LENGTH];
|
||||||
char **options;
|
char **options;
|
||||||
int numOptions;
|
int numOptions;
|
||||||
int currentOption;
|
|
||||||
int visible;
|
int visible;
|
||||||
int enabled;
|
int enabled;
|
||||||
int isModal;
|
int isModal;
|
||||||
|
|
|
@ -20,10 +20,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
|
||||||
static void loadConfig(void);
|
static void loadConfig(int argc, char *argv[]);
|
||||||
static void loadConfigFile(char *filename);
|
static void loadConfigFile(char *filename);
|
||||||
void saveConfig(void);
|
void saveConfig(void);
|
||||||
static void showLoadingStep(float step, float maxSteps);
|
static void showLoadingStep(float step, float maxSteps);
|
||||||
|
static void handleCommandLineConfig(int argc, char *argv[]);
|
||||||
|
|
||||||
void init18N(int argc, char *argv[])
|
void init18N(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -51,7 +52,7 @@ void init18N(int argc, char *argv[])
|
||||||
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "atof(2.75) is %f", atof("2.75"));
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "atof(2.75) is %f", atof("2.75"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void initSDL(void)
|
void initSDL(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int rendererFlags, windowFlags;
|
int rendererFlags, windowFlags;
|
||||||
|
|
||||||
|
@ -61,9 +62,10 @@ void initSDL(void)
|
||||||
/* done in src/plat/ */
|
/* done in src/plat/ */
|
||||||
createSaveFolder();
|
createSaveFolder();
|
||||||
|
|
||||||
loadConfig();
|
loadConfig(argc, argv);
|
||||||
|
|
||||||
rendererFlags = SDL_RENDERER_ACCELERATED;
|
rendererFlags = SDL_RENDERER_ACCELERATED;
|
||||||
|
|
||||||
if (app.vSync)
|
if (app.vSync)
|
||||||
{
|
{
|
||||||
rendererFlags |= SDL_RENDERER_PRESENTVSYNC;
|
rendererFlags |= SDL_RENDERER_PRESENTVSYNC;
|
||||||
|
@ -140,7 +142,8 @@ void initGameSystem(void)
|
||||||
initStars,
|
initStars,
|
||||||
initControls,
|
initControls,
|
||||||
initTrophies,
|
initTrophies,
|
||||||
initFighterDatabase
|
initFighterDatabase,
|
||||||
|
updateCustomResolutionOption
|
||||||
};
|
};
|
||||||
|
|
||||||
initAtlas();
|
initAtlas();
|
||||||
|
@ -188,7 +191,7 @@ static void showLoadingStep(float step, float maxSteps)
|
||||||
SDL_Delay(1);
|
SDL_Delay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loadConfig(void)
|
static void loadConfig(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *configFilename;
|
char *configFilename;
|
||||||
|
|
||||||
|
@ -203,6 +206,12 @@ static void loadConfig(void)
|
||||||
loadConfigFile(configFilename);
|
loadConfigFile(configFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleCommandLineConfig(argc, argv);
|
||||||
|
|
||||||
|
/* don't go higher than 8K or lower than 320 x 240 */
|
||||||
|
app.winWidth = MIN(MAX(app.winWidth, 320), 7680);
|
||||||
|
app.winHeight = MIN(MAX(app.winHeight, 240), 4320);
|
||||||
|
|
||||||
/* so that the player doesn't get confused if this is a new game */
|
/* so that the player doesn't get confused if this is a new game */
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
@ -223,7 +232,7 @@ static void loadConfigFile(char *filename)
|
||||||
app.musicVolume = cJSON_GetObjectItem(root, "musicVolume")->valueint;
|
app.musicVolume = cJSON_GetObjectItem(root, "musicVolume")->valueint;
|
||||||
app.soundVolume = cJSON_GetObjectItem(root, "soundVolume")->valueint;
|
app.soundVolume = cJSON_GetObjectItem(root, "soundVolume")->valueint;
|
||||||
app.vSync = getJSONValue(root, "vSync", 1);
|
app.vSync = getJSONValue(root, "vSync", 1);
|
||||||
|
|
||||||
controlsJSON = cJSON_GetObjectItem(root, "controls");
|
controlsJSON = cJSON_GetObjectItem(root, "controls");
|
||||||
if (controlsJSON)
|
if (controlsJSON)
|
||||||
{
|
{
|
||||||
|
@ -314,6 +323,19 @@ void saveConfig(void)
|
||||||
free(out);
|
free(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handleCommandLineConfig(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 1 ; i < argc ; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(argv[i], "-size") == 0)
|
||||||
|
{
|
||||||
|
sscanf(argv[i + 1], "%dx%d", &app.winWidth, &app.winHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cleanup(void)
|
void cleanup(void)
|
||||||
{
|
{
|
||||||
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Cleaning up ...");
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Cleaning up ...");
|
||||||
|
|
|
@ -66,6 +66,7 @@ extern void initStars(void);
|
||||||
extern void initStats(void);
|
extern void initStats(void);
|
||||||
extern void initTrophies(void);
|
extern void initTrophies(void);
|
||||||
extern void initWidgets(void);
|
extern void initWidgets(void);
|
||||||
|
extern void updateCustomResolutionOption(void);
|
||||||
extern void loadCapitalShipDefs(void);
|
extern void loadCapitalShipDefs(void);
|
||||||
extern void loadFighterDefs(void);
|
extern void loadFighterDefs(void);
|
||||||
extern void loadItemDefs(void);
|
extern void loadItemDefs(void);
|
||||||
|
|
|
@ -120,6 +120,29 @@ static void drawMain(void)
|
||||||
app.textWidth = 0;
|
app.textWidth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updateCustomResolutionOption(void)
|
||||||
|
{
|
||||||
|
Widget *w;
|
||||||
|
char value[MAX_NAME_LENGTH];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf(value, "%d x %d", app.winWidth, app.winHeight);
|
||||||
|
|
||||||
|
w = getWidget("windowSize", "options");
|
||||||
|
|
||||||
|
for (i = 0 ; i < w->numOptions - 1 ; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(w->options[i], value) == 0)
|
||||||
|
{
|
||||||
|
w->numOptions--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w->options[w->numOptions - 1] = malloc(strlen(value) + 1);
|
||||||
|
strcpy(w->options[w->numOptions - 1], value);
|
||||||
|
}
|
||||||
|
|
||||||
static void controls(void)
|
static void controls(void)
|
||||||
{
|
{
|
||||||
initControlsDisplay();
|
initControlsDisplay();
|
||||||
|
|
|
@ -28,6 +28,7 @@ static void createOptions(Widget *w, char *options);
|
||||||
static void changeSelectedValue(Widget *w, int dir);
|
static void changeSelectedValue(Widget *w, int dir);
|
||||||
static void createSelectButtons(Widget *w);
|
static void createSelectButtons(Widget *w);
|
||||||
static void handleControlWidgets(void);
|
static void handleControlWidgets(void);
|
||||||
|
static void updateSelectWidgets(void);
|
||||||
|
|
||||||
static Widget head;
|
static Widget head;
|
||||||
static Widget *tail;
|
static Widget *tail;
|
||||||
|
@ -56,6 +57,8 @@ void doWidgets(void)
|
||||||
{
|
{
|
||||||
if (drawingWidgets)
|
if (drawingWidgets)
|
||||||
{
|
{
|
||||||
|
updateSelectWidgets();
|
||||||
|
|
||||||
handleMouse();
|
handleMouse();
|
||||||
|
|
||||||
handleKeyboard();
|
handleKeyboard();
|
||||||
|
@ -69,6 +72,29 @@ void doWidgets(void)
|
||||||
drawingWidgets = 0;
|
drawingWidgets = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateSelectWidgets(void)
|
||||||
|
{
|
||||||
|
Widget *w;
|
||||||
|
|
||||||
|
for (w = head.next; w != NULL ; w = w->next)
|
||||||
|
{
|
||||||
|
if (w->type == WT_SELECT_BUTTON && w->parent)
|
||||||
|
{
|
||||||
|
w->visible = 1;
|
||||||
|
|
||||||
|
if (w->value == -1 && w->parent->value == 0)
|
||||||
|
{
|
||||||
|
w->visible = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (w->value == 1 && w->parent->value == w->parent->numOptions - 1)
|
||||||
|
{
|
||||||
|
w->visible = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget *getWidget(const char *name, const char *group)
|
Widget *getWidget(const char *name, const char *group)
|
||||||
{
|
{
|
||||||
Widget *w;
|
Widget *w;
|
||||||
|
@ -150,7 +176,7 @@ void drawWidgets(const char *group)
|
||||||
|
|
||||||
case WT_SELECT:
|
case WT_SELECT:
|
||||||
drawText(w->rect.x + 10, w->rect.y + 2, 20, TA_LEFT, colors.white, w->text);
|
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]);
|
drawText(w->rect.x + w->rect.w - 10, w->rect.y + 2, 20, TA_RIGHT, colors.white, w->options[w->value]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WT_CONTROL_CONFIG:
|
case WT_CONTROL_CONFIG:
|
||||||
|
@ -195,15 +221,15 @@ void drawWidgets(const char *group)
|
||||||
|
|
||||||
static void changeSelectedValue(Widget *w, int dir)
|
static void changeSelectedValue(Widget *w, int dir)
|
||||||
{
|
{
|
||||||
int oldOption = w->currentOption;
|
int oldOption = w->value;
|
||||||
|
|
||||||
w->currentOption += dir;
|
w->value += dir;
|
||||||
|
|
||||||
w->currentOption = MIN(MAX(0, w->currentOption), w->numOptions - 1);
|
w->value = MIN(MAX(0, w->value), w->numOptions - 1);
|
||||||
|
|
||||||
w->onChange(w->options[w->currentOption]);
|
w->onChange(w->options[w->value]);
|
||||||
|
|
||||||
if (oldOption != w->currentOption)
|
if (oldOption != w->value)
|
||||||
{
|
{
|
||||||
playSound(SND_GUI_CLICK);
|
playSound(SND_GUI_CLICK);
|
||||||
}
|
}
|
||||||
|
@ -220,7 +246,7 @@ void setWidgetOption(const char *name, const char *group, const char *value)
|
||||||
{
|
{
|
||||||
if (strcmp(w->options[i], value) == 0)
|
if (strcmp(w->options[i], value) == 0)
|
||||||
{
|
{
|
||||||
w->currentOption = i;
|
w->value = i;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue