Compare commits

...
7 Commits
Author SHA1 Message Date
kichikuou ba52fbf5e9 Version 2.10.1 2024-01-01 13:17:44 +09:00
kichikuou 85d40701c4 Palette 246-249 should be preserved when loading PMS8 2024-01-01 12:46:13 +09:00
kichikuou 7b535b371a Fix initial palette values
These match the System3.9 default colors that came from the default
system colors in Windows 256-color mode [1].

[1] https://en.wikipedia.org/wiki/List_of_software_palettes#Microsoft_Windows_default_20-color_palette
2024-01-01 12:25:43 +09:00
kichikuou c0dbae8202 Refactor palette data structure 2024-01-01 11:47:11 +09:00
kichikuou ca03450b87 Windows: Add menu command for integer scaling 2023-12-15 10:46:06 +09:00
kichikuou f795a500cf Update emscripten to 3.1.50 2023-12-10 13:24:49 +09:00
kichikuou 3314f00bf8 Fix cdGetMaxTrack for download edition of Daiakuji
It should return the maximum index of the BGM archive.

Fixes #43.
2023-12-09 14:57:01 +09:00
25 changed files with 137 additions and 122 deletions
+2 -2
View File
@@ -2,7 +2,7 @@ name: Emscripten Build
on: [push, pull_request]
env:
EM_VERSION: 3.1.34
EM_VERSION: 3.1.50
EM_CACHE_FOLDER: 'emsdk-cache'
jobs:
@@ -20,7 +20,7 @@ jobs:
key: ${{env.EM_VERSION}}-${{ runner.os }}
- name: Setup Emscripten toolchain
uses: mymindstorm/setup-emsdk@v12
uses: mymindstorm/setup-emsdk@v13
with:
version: ${{ env.EM_VERSION }}
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
+2 -2
View File
@@ -16,8 +16,8 @@ android {
defaultConfig {
minSdkVersion 19
targetSdkVersion 34
versionCode 16
versionName "2.10.0" + gitRevision()
versionCode 17
versionName "2.10.1" + gitRevision()
externalNativeBuild {
cmake {
arguments "-DANDROID_APP_PLATFORM=android-19", "-DANDROID_STL=c++_static"
+1 -1
View File
@@ -1,5 +1,5 @@
#cmakedefine PACKAGE "@PACKAGE@"
#define VERSION "2.10.0"
#define VERSION "2.10.1"
#cmakedefine CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@"
+38 -27
View File
@@ -44,7 +44,6 @@
#include "image.h"
#include "debugger.h"
static Palette256 pal_256;
static boolean need_update = TRUE;
static boolean fade_outed = FALSE;
static int cursor_move_time = 50; /* カーソル移動にかかる時間(ms) */
@@ -54,16 +53,32 @@ static void palette_changed(void) {
dbg_on_palette_change();
}
static void initPal(Palette256 *pal) {
int i;
for (i = 0; i < 256; i++) {
pal->red[i] = 0; pal->green[i] = 0; pal->blue[i] = 0;
}
pal->red[0] = 0; pal->green[0] = 0; pal->blue[0] = 0;
pal->red[7] = 255; pal->green[7] = 255; pal->blue[7] = 255;
pal->red[15] = 255; pal->green[15] = 255; pal->blue[15] = 255;
pal->red[255] = 255; pal->green[255] = 255; pal->blue[255] = 255;
sdl_setPalette(pal, 0, 256);
static void initPal(void) {
static const Color initial_palette[256] = {
[ 0] = { 0, 0, 0},
[ 1] = {128, 0, 0},
[ 2] = { 0, 128, 0},
[ 3] = {128, 128, 0},
[ 4] = { 0, 0, 128},
[ 5] = {128, 0, 128},
[ 6] = { 0, 128, 128},
[ 7] = {192, 192, 192},
[ 8] = {192, 220, 192},
[ 9] = {166, 202, 240},
[ 15] = {255, 255, 255},
[246] = {255, 251, 240},
[247] = {160, 160, 164},
[248] = {128, 128, 128},
[249] = {255, 0, 0},
[250] = { 0, 255, 0},
[251] = {255, 255, 0},
[252] = { 0, 0, 255},
[253] = {255, 0, 255},
[254] = { 0, 255, 255},
[255] = {255, 255, 255},
};
memcpy(nact->ags.pal, initial_palette, sizeof(initial_palette));
sdl_setPalette(nact->ags.pal, 0, 256);
palette_changed();
}
@@ -107,7 +122,6 @@ boolean ags_check_param_xy(int *x, int *y) {
void ags_init(const char *render_driver) {
nact->ags.mouse_warp_enabled = true;
nact->ags.pal = &pal_256;
nact->ags.world_size.width = SYS35_DEFAULT_WIDTH;
nact->ags.world_size.height = SYS35_DEFAULT_HEIGHT;
nact->ags.world_depth = SYS35_DEFAULT_DEPTH;
@@ -119,7 +133,7 @@ void ags_init(const char *render_driver) {
sdl_Initialize(render_driver);
font_init();
initPal(&pal_256);
initPal();
cg_init();
}
@@ -131,7 +145,7 @@ void ags_remove(void) {
void ags_reset(void) {
nact->ags.mouse_warp_enabled = true;
nact->ags.eventcb = NULL;
initPal(&pal_256);
initPal();
cg_reset();
}
@@ -222,20 +236,17 @@ void ags_updateFull() {
sdl_updateArea(&r, &p);
}
void ags_setPalettes(Palette256 *src_pal, int src, int dst, int cnt) {
int i;
for (i = 0; i < cnt; i++) {
nact->ags.pal->red [dst + i] = src_pal->red [src + i];
nact->ags.pal->green[dst + i] = src_pal->green[src + i];
nact->ags.pal->blue [dst + i] = src_pal->blue [src + i];
void ags_setPalettes(Color *src, int dst, int cnt) {
for (int i = 0; i < cnt; i++) {
nact->ags.pal[dst + i] = src[i];
}
palette_changed();
}
void ags_setPalette(int no, int red, int green, int blue) {
nact->ags.pal->red[no] = red;
nact->ags.pal->green[no] = green;
nact->ags.pal->blue[no] = blue;
nact->ags.pal[no].r = red;
nact->ags.pal[no].g = green;
nact->ags.pal[no].b = blue;
palette_changed();
}
@@ -583,9 +594,9 @@ void ags_fadeOut(int rate, boolean flag) {
fade(duration, flag, nact->ags.world_depth == 8 ? EFFECT_FADEOUT : EFFECT_DITHERING_FADEOUT);
if (nact->ags.world_depth == 8) {
Palette256 pal;
Color pal[256];
memset(&pal, 0, sizeof(pal));
sdl_setPalette(&pal, 0, 256);
sdl_setPalette(pal, 0, 256);
}
}
@@ -612,9 +623,9 @@ void ags_whiteOut(int rate, boolean flag) {
fade(duration, flag, nact->ags.world_depth == 8 ? EFFECT_WHITEIN : EFFECT_DITHERING_WHITEOUT);
if (nact->ags.world_depth == 8) {
Palette256 pal;
Color pal[256];
memset(&pal, 255, sizeof(pal));
sdl_setPalette(&pal, 0, 256);
sdl_setPalette(pal, 0, 256);
}
}
+2 -2
View File
@@ -101,7 +101,7 @@ enum agsevent_button {
};
struct _ags {
Palette256 *pal; /* system palette */
Color pal[256]; /* system palette */
boolean pal_changed; /* system palette has changed */
MyDimension world_size; /* size of off-screen */
@@ -143,7 +143,7 @@ extern void ags_updateFull(void);
extern void ags_updateArea(int x, int y, int width, int height);
/* パレット関係 */
extern void ags_setPalettes(Palette256 *src_pal, int src, int dst, int cnt);
extern void ags_setPalettes(Color *src, int dst, int cnt);
extern void ags_setPalette(int no, int red, int green, int blue);
extern void ags_setPaletteToSystem(int src, int cnt);
+1 -1
View File
@@ -108,5 +108,5 @@ void ald_init(int type, const char **file, int cnt, boolean use_mmap) {
int ald_get_maxno(DRIFILETYPE type) {
if (type >= DRIFILETYPEMAX || !dri[type])
return 0;
return dri[type]->nr_files;
return dri[type]->maxno;
}
+8 -11
View File
@@ -36,7 +36,6 @@
* static methods
*/
static bmp_header *extract_header(uint8_t *b);
static void getpal(Palette256 *pal, uint8_t *b);
static void extract_8bit(bmp_header *bmp, uint8_t *pic, uint8_t *b);
static void extract_24bit(bmp_header *bmp, uint16_t *pic, uint8_t *b);
@@ -65,17 +64,16 @@ static bmp_header *extract_header(uint8_t *b) {
/*
* Get palette from raw data
* pal: palette to be stored
* b : raw data (pointer to palette)
*/
static void getpal(Palette256 *pal, uint8_t *b) {
int i;
for (i = 0; i < 256; i++) {
pal->blue[i] = *b++;
pal->red[i] = *b++;
pal->green[i] = *b++;
static Color *getpal(uint8_t *b) {
Color *pal = malloc(sizeof(Color) * 256);
for (int i = 0; i < 256; i++) {
pal[i].b = *b++;
pal[i].r = *b++;
pal[i].g = *b++;
}
return pal;
}
/*
@@ -168,8 +166,7 @@ cgdata *bmp256_extract(uint8_t *data) {
bmp_header *bmp = extract_header(data);
cgdata *cg = calloc(1, sizeof(cgdata));
cg->pal = malloc(sizeof(Palette256));
getpal(cg->pal, data + bmp->bmpPp);
cg->pal = getpal(data + bmp->bmpPp);
/* +10: margin for broken cg */
cg->pic = malloc(sizeof(uint8_t) * ((bmp->bmpXW + 10) * (bmp->bmpYW + 10)));
+3
View File
@@ -22,11 +22,14 @@
#include <stdio.h>
#include "cdrom.h"
#include "ald_manager.h"
#include "music.h"
#include "music_private.h"
static int current_track;
static int cdrom_bgm_init(char *dev) {
prv.cd_maxtrk = ald_get_maxno(DRIFILE_BGM) + 1;
return OK;
}
+9 -14
View File
@@ -293,13 +293,8 @@ void cg_load(int no, int flg) {
bank = cg_vspPB == -1 ? cg->vsp_bank : cg_vspPB;
set_vspbank(cg->pic, bank << 4, cg->width, cg->height);
/* copy palettes 0 -> bank */
{
int i, i_dst = bank << 4;
for (i = 0; i < 16; i++) {
cg->pal->red[i + i_dst] = cg->pal->red[i];
cg->pal->green[i + i_dst] = cg->pal->green[i];
cg->pal->blue[i + i_dst] = cg->pal->blue[i];
}
if (bank != 0) {
memcpy(cg->pal + bank * 16, cg->pal, 16 * sizeof(cg->pal[0]));
}
if (flg != -1) {
flg |= (bank << 4);
@@ -310,22 +305,22 @@ void cg_load(int no, int flg) {
if (GCMD_LOAD_PALETTE(cg_fflg)) {
switch(cg->type) {
case ALCG_VSP:
ags_setPalettes(cg->pal, 0, bank << 4, 16);
ags_setPalettes(cg->pal, bank << 4, 16);
break;
case ALCG_PMS8:
// Avoid changing the Windows' reserved palette area (0-9, 246-255)
if (cg->pms_bank & 1)
ags_setPalettes(cg->pal, 10, 10, 6);
ags_setPalettes(cg->pal + 10, 10, 6);
if (cg->pms_bank & (1 << 15))
//ags_setPalettes(cg->pal, 240, 240, 15);
ags_setPalettes(cg->pal, 240, 240, 10);
ags_setPalettes(cg->pal + 240, 240, 6);
for (i = 1; i < 15; i++) {
if (cg->pms_bank & (1 << i)) {
ags_setPalettes(cg->pal, i * 16, i * 16, 16);
ags_setPalettes(cg->pal + i * 16, i * 16, 16);
}
}
break;
case ALCG_BMP8:
ags_setPalettes(cg->pal, 10, 10, 236);
ags_setPalettes(cg->pal + 10, 10, 236);
break;
default:
break;
@@ -463,7 +458,7 @@ int cg_load_with_filename(char *fname_utf8, int x, int y) {
/* load palette if not extracted */
if (cg->depth == 8) {
if (GCMD_LOAD_PALETTE(cg_fflg))
ags_setPalettes(cg->pal, 10, 10, 236);
ags_setPalettes(cg->pal + 10, 10, 236);
if (GCMD_SET_PALETTE(cg_fflg))
ags_setPaletteToSystem(0, 256);
}
+1 -1
View File
@@ -55,7 +55,7 @@ typedef struct {
uint8_t *pic; // extracted pixel data
uint8_t *alpha; // extracted alpha data if exists
Palette256 *pal; // extracted palette data if exists
Color *pal; // 256-color palette if exists
int vsp_bank; // palette bank for vsp
int pms_bank; // palette bank for pms
+3 -3
View File
@@ -112,9 +112,9 @@ void commandPG() { /* T2 */
int i;
for (i = 0; i < num2; i++) {
*var = nact->ags.pal->red[num1 + i]; var++;
*var = nact->ags.pal->green[num1 + i]; var++;
*var = nact->ags.pal->blue[num1 + i]; var++;
*var++ = nact->ags.pal[num1 + i].r;
*var++ = nact->ags.pal[num1 + i].g;
*var++ = nact->ags.pal[num1 + i].b;
}
DEBUG_COMMAND("PG %p,%d,%d:", var, num1, num2);
}
+3 -3
View File
@@ -488,9 +488,9 @@ static void cmd_palette(cJSON *args, cJSON *resp) {
cJSON_AddNumberToObject(body, "version", palette_version);
cJSON_AddItemToObjectCS(body, "palette", palette = cJSON_CreateArray());
for (int i = 0; i < 256; i++) {
int val = nact->ags.pal->red[i] << 16 |
nact->ags.pal->green[i] << 8 |
nact->ags.pal->blue[i];
int val = nact->ags.pal[i].r << 16 |
nact->ags.pal[i].g << 8 |
nact->ags.pal[i].b;
cJSON_AddItemToArray(palette, cJSON_CreateNumber(val));
}
}
+2
View File
@@ -67,6 +67,8 @@ static bool read_index(int disk, drifiles *d, FILE *fp) {
for (int i = 0; i < nr_files; i++) {
if (disk != ltbl[i * 3] - 1)
continue;
if (d->maxno < i)
d->maxno = i;
d->disk[i] = ltbl[i * 3];
int ptr = LittleEndian_getW(ltbl, i * 3 + 1);
d->offset[i] = LittleEndian_get3B(ptbl, ptr * 3) << 8;
+1
View File
@@ -34,6 +34,7 @@ struct _drifiles {
mmap_t *mmap[DRIFILEMAX];
char *fnames[DRIFILEMAX];
int nr_files; // upper limit on how many files could be referenced by this archive
int maxno;
uint8_t *disk; // file numbers
uint32_t *offset; // offsets in file
};
+4 -4
View File
@@ -28,10 +28,10 @@
#include <SDL_rect.h>
typedef struct {
uint8_t red[256];
uint8_t green[256];
uint8_t blue[256];
} Palette256;
uint8_t r;
uint8_t g;
uint8_t b;
} Color;
typedef struct {
uint8_t r,g,b;
+8 -11
View File
@@ -44,7 +44,6 @@
* static methods
*/
static pms_header *extract_header(uint8_t *b);
static void getpal(Palette256 *pal, uint8_t *b);
static void extract_8bit(pms_header *pms, uint8_t *pic, uint8_t *b);
static void extract_16bit(pms_header *pms, uint16_t *pic, uint8_t *b);
@@ -75,17 +74,16 @@ static pms_header *extract_header(uint8_t *b) {
/*
* Get palette from raw data
* pal: palette to be stored
* b : raw data (pointer to palette)
*/
static void getpal(Palette256 *pal, uint8_t *b) {
int i;
for (i = 0; i < 256; i++) {
pal->red[i] = *b++;
pal->green[i] = *b++;
pal->blue[i] = *b++;
static Color *getpal(uint8_t *b) {
Color *pal = malloc(sizeof(Color) * 256);
for (int i = 0; i < 256; i++) {
pal[i].r = *b++;
pal[i].g = *b++;
pal[i].b = *b++;
}
return pal;
}
/*
@@ -227,8 +225,7 @@ cgdata *pms256_extract(uint8_t *data) {
cgdata *cg = calloc(1, sizeof(cgdata));
pms_header *pms = extract_header(data);
cg->pal = malloc(sizeof(Palette256));
getpal(cg->pal, data + pms->pmsPp);
cg->pal = getpal(data + pms->pmsPp);
/* +10: margin for broken cg */
cg->pic = malloc(sizeof(uint8_t) * ((pms->pmsXW + 10) * (pms->pmsYW + 10)));
+1 -1
View File
@@ -55,7 +55,7 @@ extern void sdl_updateAll(MyRectangle *view_rect);
extern void sdl_updateScreen(void);
/* パレット関係 */
extern void sdl_setPalette(Palette256 *pal, int first, int count);
extern void sdl_setPalette(Color *pal, int first, int count);
/* 描画関係 */
extern void sdl_drawRectangle(int x, int y, int w, int h, uint8_t c);
+7 -10
View File
@@ -118,11 +118,11 @@ void sdl_updateAll(MyRectangle *view_rect) {
}
/* Color の複数個指定 */
void sdl_setPalette(Palette256 *pal, int first, int count) {
void sdl_setPalette(Color *pal, int first, int count) {
for (int i = 0; i < count; i++) {
sdl_col[first + i].r = pal->red [first + i];
sdl_col[first + i].g = pal->green[first + i];
sdl_col[first + i].b = pal->blue [first + i];
sdl_col[first + i].r = pal[first + i].r;
sdl_col[first + i].g = pal[first + i].g;
sdl_col[first + i].b = pal[first + i].b;
}
if (sdl_dib->format->BitsPerPixel == 8)
SDL_SetPaletteColors(sdl_dib->format->palette, &sdl_col[first], first, count);
@@ -227,13 +227,10 @@ void sdl_drawImage8_fromData(cgdata *cg, int dx, int dy, int sprite_color) {
if (sdl_dib->format->BitsPerPixel > 8 && cg->pal) {
SDL_Color *c = s->format->palette->colors;
uint8_t *r = cg->pal->red;
uint8_t *g = cg->pal->green;
uint8_t *b = cg->pal->blue;
for (int i = 0; i < 256; i++) {
c->r = *(r++);
c->g = *(g++);
c->b = *(b++);
c->r = cg->pal[i].r;
c->g = cg->pal[i].g;
c->b = cg->pal[i].b;
c++;
}
} else {
+1 -3
View File
@@ -41,7 +41,6 @@ static void makeDIB(int width, int height, int depth);
struct sdl_private_data *sdl_videodev;
static int joy_device_index = -1;
static boolean integer_scaling = FALSE;
static SDL_Joystick *js;
@@ -152,7 +151,6 @@ static void window_init(const char *render_driver) {
flags);
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderSetIntegerScale(sdl_renderer, integer_scaling);
}
static void makeDIB(int width, int height, int depth) {
@@ -274,7 +272,7 @@ void sdl_setJoyDeviceIndex(int index) {
}
void sdl_setIntegerScaling(boolean enable) {
integer_scaling = enable;
SDL_RenderSetIntegerScale(sdl_renderer, enable);
}
#ifdef __EMSCRIPTEN__
+7 -8
View File
@@ -42,7 +42,6 @@
* static methods
*/
static vsp_header *extract_header(uint8_t *b);
static void getpal(Palette256 *pal, uint8_t *b);
static void extract(vsp_header *vsp, uint8_t *pic, uint8_t *b);
/*
@@ -66,15 +65,16 @@ static vsp_header *extract_header(uint8_t *b) {
/*
* Get palette from raw data
* pal: palette to be stored
* b : raw data (pointer to palette)
*/
static void getpal(Palette256 *pal, uint8_t *b) {
static Color *getpal(uint8_t *b) {
Color *pal = malloc(sizeof(Color) * 256);
for (int i = 0; i < 16; i++) {
pal->blue[i] = b[i * 3 + 0] * 17;
pal->red[i] = b[i * 3 + 1] * 17;
pal->green[i] = b[i * 3 + 2] * 17;
pal[i].b = b[i * 3 + 0] * 17;
pal[i].r = b[i * 3 + 1] * 17;
pal[i].g = b[i * 3 + 2] * 17;
}
return pal;
}
/*
@@ -196,8 +196,7 @@ cgdata *vsp_extract(uint8_t *data) {
cgdata *cg = calloc(1, sizeof(cgdata));
vsp_header *vsp = extract_header(data);
cg->pal = malloc(sizeof(Palette256));
getpal(cg->pal, data + vsp->vspPp);
cg->pal = getpal(data + vsp->vspPp);
/* +10: margin for broken cg */
cg->pic = malloc(sizeof(uint8_t) * ((vsp->vspXW * 8 + 10) * (vsp->vspYW + 10)));
+15 -8
View File
@@ -59,7 +59,7 @@ static void saveScreenshot(void) {
}
}
static void toggle_mouse_warp_mode(void) {
static bool toggle_menu_item(UINT id, bool *checked_out) {
HWND hwnd = get_hwnd(sdl_window);
HMENU hmenu = GetMenu(hwnd);
@@ -67,16 +67,17 @@ static void toggle_mouse_warp_mode(void) {
.cbSize = sizeof(MENUITEMINFO),
.fMask = MIIM_STATE,
};
if (!GetMenuItemInfo(hmenu, ID_OPTION_MOUSE_MOVE, false, &menuitem))
return;
if (!GetMenuItemInfo(hmenu, id, false, &menuitem))
return false;
if (menuitem.fState & MFS_CHECKED) {
nact->ags.mouse_warp_enabled = false;
CheckMenuItem(hmenu, ID_OPTION_MOUSE_MOVE, MF_BYCOMMAND | MFS_UNCHECKED);
CheckMenuItem(hmenu, id, MF_BYCOMMAND | MFS_UNCHECKED);
*checked_out = false;
} else {
nact->ags.mouse_warp_enabled = true;
CheckMenuItem(hmenu, ID_OPTION_MOUSE_MOVE, MF_BYCOMMAND | MFS_CHECKED);
CheckMenuItem(hmenu, id, MF_BYCOMMAND | MFS_CHECKED);
*checked_out = true;
}
return true;
}
void win_menu_init(void) {
@@ -90,6 +91,7 @@ void win_menu_init(void) {
}
void win_menu_onsyswmevent(SDL_SysWMmsg* msg) {
bool checked;
switch (msg->msg.win.msg) {
case WM_COMMAND:
switch (msg->msg.win.wParam) {
@@ -108,8 +110,13 @@ void win_menu_onsyswmevent(SDL_SysWMmsg* msg) {
case ID_SCREEN_FULL:
sdl_setFullscreen(TRUE);
break;
case ID_SCREEN_INTEGER_SCALING:
if (toggle_menu_item(ID_SCREEN_INTEGER_SCALING, &checked))
sdl_setIntegerScaling(checked);
break;
case ID_OPTION_MOUSE_MOVE:
toggle_mouse_warp_mode();
if (toggle_menu_item(ID_OPTION_MOUSE_MOVE, &checked))
nact->ags.mouse_warp_enabled = checked;
break;
case ID_MSGSKIP:
msgskip_activate(!msgskip_isActivated());
+8 -7
View File
@@ -28,12 +28,13 @@
#define IDS_CHOOSE_GAME_FOLDER 1001
#define ID_SCREENSHOT 40001
#define ID_RESTART 40002
#define ID_EXIT 40003
#define ID_SCREEN_WINDOW 40011
#define ID_SCREEN_FULL 40012
#define ID_OPTION_MOUSE_MOVE 40021
#define ID_MSGSKIP 40030
#define ID_SCREENSHOT 40001
#define ID_RESTART 40002
#define ID_EXIT 40003
#define ID_SCREEN_WINDOW 40011
#define ID_SCREEN_FULL 40012
#define ID_SCREEN_INTEGER_SCALING 40013
#define ID_OPTION_MOUSE_MOVE 40021
#define ID_MSGSKIP 40030
#endif /* __RESOURCES_H__ */
+2
View File
@@ -19,6 +19,7 @@ IDR_MENU1 MENU DISCARDABLE
{
MENUITEM "Window", ID_SCREEN_WINDOW
MENUITEM "Fullscreen", ID_SCREEN_FULL
MENUITEM "Integer Scaling", ID_SCREEN_INTEGER_SCALING
}
POPUP "Option"
{
@@ -57,6 +58,7 @@ IDR_MENU1 MENU DISCARDABLE
{
MENUITEM "ウィンドウ", ID_SCREEN_WINDOW
MENUITEM "フルスクリーン", ID_SCREEN_FULL
MENUITEM "整数倍スケーリング", ID_SCREEN_INTEGER_SCALING
}
POPUP "オプション"
{
+5 -3
View File
@@ -97,7 +97,7 @@ static char *fontname_tt[FONTTYPEMAX] = {DEFAULT_GOTHIC_TTF, DEFAULT_MINCHO_TTF}
static char fontface[FONTTYPEMAX];
static boolean font_noantialias;
static bool integer_scaling = false;
/* fullscreen on from command line */
static boolean fs_on;
@@ -311,7 +311,7 @@ static void sys35_ParseOption(int *argc, char **argv) {
puts(VERSION);
exit(0);
} else if (0 == strcmp(argv[i], "-integerscale")) {
sdl_setIntegerScaling(TRUE);
integer_scaling = true;
} else if (0 == strcmp(argv[i], "-game")) {
if (argv[i + 1] != NULL) {
enable_hack_by_gameid(argv[i + 1]);
@@ -401,7 +401,7 @@ static void check_profile() {
param = get_profile("integerscale");
if (param) {
if (0 == strcmp(param, "Yes")) {
sdl_setIntegerScaling(TRUE);
integer_scaling = TRUE;
}
}
/* enable game-specific hacks */
@@ -509,6 +509,8 @@ int main(int argc, char **argv) {
#endif
sys35_init();
if (integer_scaling)
sdl_setIntegerScaling(true);
#ifdef ENABLE_GTK
gtk_init(&argc, &argv);
+3
View File
@@ -19,6 +19,9 @@
#antialias: No
# ------------------------------------------------------------
# Enforce integer scaling
#integerscale: Yes
# ------------------------------------------------------------
# Enables game-specific hacks. Usually auto-detected, but must be