diff --git a/CHANGELOG b/CHANGELOG index 617ef3b..af6fa9b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,8 +2,10 @@ Changelog 1.5 + * Game now renders at chosen resolution instead of scaling up from 1280 x 720 * Added command line switch -size to allow for custom window sizes. - For example: -size 900x600 for a width and height of 900 x 600. + * Minimum resolution is now 1280 x 720 * Graphics and fonts now use texture atlases to help with performance. * Misc. bug fixes. diff --git a/src/battle/battle.c b/src/battle/battle.c index fe72c05..61e4e98 100644 --- a/src/battle/battle.c +++ b/src/battle/battle.c @@ -276,12 +276,12 @@ static void drawMenu(void) if (app.modalDialog.type == MD_NONE) { - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - 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); + + SDL_SetRenderTarget(app.renderer, app.uiBuffer); r.w = 400; r.h = 400; diff --git a/src/battle/missionInfo.c b/src/battle/missionInfo.c index 4fc62f7..1600820 100644 --- a/src/battle/missionInfo.c +++ b/src/battle/missionInfo.c @@ -56,8 +56,6 @@ void initMissionInfo(void) void drawMissionInfo(void) { - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - setAtlasColor(255, 255, 255, 255); switch (battle.status) @@ -111,6 +109,8 @@ static void drawMissionSummary(AtlasImage *header) SDL_RenderFillRect(app.renderer, NULL); SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderTarget(app.renderer, app.uiBuffer); + blit(header, UI_WIDTH / 2, 150, 1); if (!game.currentMission->challengeData.isChallenge) diff --git a/src/game/fighterDatabase.c b/src/game/fighterDatabase.c index b62d8bd..edb0bb3 100644 --- a/src/game/fighterDatabase.c +++ b/src/game/fighterDatabase.c @@ -100,13 +100,13 @@ void drawFighterDatabase(void) Entity *fighter; int i, y, numCannons; - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - 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); + SDL_SetRenderTarget(app.renderer, app.uiBuffer); + r.w = 700; r.h = 650; r.x = (UI_WIDTH / 2) - r.w / 2; diff --git a/src/game/options.c b/src/game/options.c index 3559c4f..d846b58 100644 --- a/src/game/options.c +++ b/src/game/options.c @@ -91,12 +91,12 @@ static void drawMain(void) { SDL_Rect r; - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - 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); + + SDL_SetRenderTarget(app.renderer, app.uiBuffer); r.w = 500; r.h = 600; @@ -157,6 +157,11 @@ static void controls(void) static void changeWindowSize(char *value) { sscanf(value, "%d x %d", &app.winWidth, &app.winHeight); + + SDL_SetWindowSize(app.window, app.winWidth, app.winHeight); + + app.uiOffset.x = (app.winWidth / 2) - (UI_WIDTH / 2); + app.uiOffset.y = (app.winHeight / 2) - (UI_HEIGHT / 2); } static void changeSoundVolume(char *value) diff --git a/src/game/stats.c b/src/game/stats.c index 0de9648..29c9a28 100644 --- a/src/game/stats.c +++ b/src/game/stats.c @@ -131,13 +131,13 @@ void drawStats(void) int i, y, startIndex; SDL_Rect r; - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - 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); + SDL_SetRenderTarget(app.renderer, app.uiBuffer); + r.w = 500; r.h = 600; r.x = (UI_WIDTH / 2) - r.w / 2; diff --git a/src/game/trophies.c b/src/game/trophies.c index 325873e..edfa7e9 100644 --- a/src/game/trophies.c +++ b/src/game/trophies.c @@ -133,13 +133,13 @@ void drawTrophies(void) SDL_Rect r; int start, end, i, x, y; - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - 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); + SDL_SetRenderTarget(app.renderer, app.uiBuffer); + r.w = boxWidth; r.h = 650; r.x = (UI_WIDTH / 2) - r.w / 2; diff --git a/src/structs.h b/src/structs.h index 60b3f98..c37d78b 100644 --- a/src/structs.h +++ b/src/structs.h @@ -498,8 +498,7 @@ typedef struct { int saveGame; int winWidth; int winHeight; - PointF scale; - PointF uiScale; + SDL_Point uiOffset; int fullscreen; int musicVolume; int soundVolume; diff --git a/src/system/controls.c b/src/system/controls.c index 3a875bd..d0b08e9 100644 --- a/src/system/controls.c +++ b/src/system/controls.c @@ -152,12 +152,12 @@ void drawControls(void) int i; SDL_Rect r; - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - 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); + + SDL_SetRenderTarget(app.renderer, app.uiBuffer); r.w = 800; r.h = 650; diff --git a/src/system/draw.c b/src/system/draw.c index 6d7a895..194a777 100644 --- a/src/system/draw.c +++ b/src/system/draw.c @@ -73,6 +73,13 @@ void prepareScene(void) void presentScene(void) { + SDL_Rect uiDest; + + uiDest.w = UI_WIDTH; + uiDest.h = UI_HEIGHT; + uiDest.x = (app.winWidth / 2) - (UI_WIDTH / 2); + uiDest.y = (app.winHeight / 2) - (UI_HEIGHT / 2); + if (dev.debug) { drawText(5, app.winHeight - 25, 14, TA_LEFT, colors.white, "DEBUG MODE"); @@ -85,7 +92,7 @@ void presentScene(void) SDL_SetRenderTarget(app.renderer, NULL); SDL_RenderCopy(app.renderer, app.backBuffer, NULL, NULL); - SDL_RenderCopy(app.renderer, app.uiBuffer, NULL, NULL); + SDL_RenderCopy(app.renderer, app.uiBuffer, NULL, &uiDest); if (!app.hideMouse) { drawMouse(); diff --git a/src/system/init.c b/src/system/init.c index 3d7ccfa..efd947a 100644 --- a/src/system/init.c +++ b/src/system/init.c @@ -113,19 +113,13 @@ void initSDL(int argc, char *argv[]) app.backBuffer = SDL_CreateTexture(app.renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, app.winWidth, app.winHeight); - app.scale.x = app.scale.y = 1; - - SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Game scale factor: %.2f,%.2f\n", app.scale.x, app.scale.y); - app.uiBuffer = SDL_CreateTexture(app.renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, UI_WIDTH, UI_HEIGHT); SDL_SetTextureBlendMode(app.uiBuffer, SDL_BLENDMODE_BLEND); - app.uiScale.x = UI_WIDTH; - app.uiScale.x /= app.winWidth; - app.uiScale.y = UI_HEIGHT; - app.uiScale.y /= app.winHeight; + app.uiOffset.x = (app.winWidth / 2) - (UI_WIDTH / 2); + app.uiOffset.y = (app.winHeight / 2) - (UI_HEIGHT / 2); - SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "UI scale factor: %.2f,%.2f\n", app.uiScale.x, app.uiScale.y); + SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "UI offset: %d,%d\n", app.uiOffset.x, app.uiOffset.y); } void initGameSystem(void) diff --git a/src/system/input.c b/src/system/input.c index 93a7b13..f2df4c9 100644 --- a/src/system/input.c +++ b/src/system/input.c @@ -165,12 +165,12 @@ void doInput(void) } SDL_GetMouseState(&x, &y); - - app.mouse.x = x * app.scale.x; - app.mouse.y = y * app.scale.y; - app.uiMouse.x = x * app.uiScale.x; - app.uiMouse.y = y * app.uiScale.y; + app.mouse.x = x; + app.mouse.y = y; + + app.uiMouse.x = x - app.uiOffset.x; + app.uiMouse.y = y - app.uiOffset.y; } void clearInput(void) diff --git a/src/system/modalDialog.c b/src/system/modalDialog.c index 324bd08..42bba12 100644 --- a/src/system/modalDialog.c +++ b/src/system/modalDialog.c @@ -101,13 +101,13 @@ void drawModalDialog(void) { SDL_Rect r; - SDL_SetRenderTarget(app.renderer, app.uiBuffer); - app.textWidth = 700; SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND); SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 96); SDL_RenderFillRect(app.renderer, NULL); + + SDL_SetRenderTarget(app.renderer, app.uiBuffer); r.w = 800; r.h = getWrappedTextHeight(app.modalDialog.message, 24) + 100;