mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba52fbf5e9 | ||
|
|
85d40701c4 | ||
|
|
7b535b371a | ||
|
|
c0dbae8202 | ||
|
|
ca03450b87 | ||
|
|
f795a500cf | ||
|
|
3314f00bf8 |
@@ -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}}
|
||||
|
||||
@@ -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
@@ -1,5 +1,5 @@
|
||||
#cmakedefine PACKAGE "@PACKAGE@"
|
||||
#define VERSION "2.10.0"
|
||||
#define VERSION "2.10.1"
|
||||
|
||||
#cmakedefine CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@"
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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__
|
||||
|
||||
@@ -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
@@ -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
@@ -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__ */
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
#antialias: No
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Enforce integer scaling
|
||||
|
||||
#integerscale: Yes
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Enables game-specific hacks. Usually auto-detected, but must be
|
||||
|
||||
Reference in New Issue
Block a user