Compare commits

...
7 Commits
Author SHA1 Message Date
kichikuou 0c1f8f8450 Version 2.5.0 2022-07-17 21:26:48 +09:00
kichikuou 078525e2c2 Reduce console message spam 2022-07-16 21:15:55 +09:00
kichikuou d4a4022894 Enable ARM Neon support in stb_image 2022-07-16 17:46:26 +09:00
kichikuou dc89c92139 Switch JPEG decoder to stb_image
To enable JPEG support on Android without complicating CMake files.
2022-07-16 17:16:44 +09:00
kichikuou 4f351fc767 Improve warning messages 2022-07-16 16:00:24 +09:00
kichikuou 02ef4a1771 Android: Upgrade SDL2_mixer to 2.6.0 2022-07-10 14:42:57 +09:00
kichikuou 4a20d74f1a Do not call sdl_getEvent in sdl_getWheelInfo
This fixes performance regression in Graymerca.
2022-07-02 15:30:18 +09:00
16 changed files with 7944 additions and 85 deletions
-1
View File
@@ -26,7 +26,6 @@ jobs:
SDL2:p
SDL2_ttf:p
SDL2_mixer:p
libjpeg-turbo:p
libwebp:p
cjson:p
nsis:p
-6
View File
@@ -28,7 +28,6 @@ check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION)
check_symbol_exists(uname "sys/utsname.h" HAVE_UNAME)
if (EMSCRIPTEN)
set(HAVE_JPEG 1)
set(DEFAULT_FONT_PATH /fonts/)
elseif (ANDROID)
set(SDL2MIXER_FOUND 1)
@@ -59,11 +58,6 @@ else()
endif()
endif()
include(FindJPEG)
if (JPEG_FOUND)
set(HAVE_JPEG 1)
endif()
optional_pkg_check_modules(WEBP IMPORTED_TARGET libwebp)
if (WEBP_FOUND)
set(HAVE_WEBP 1)
+2 -2
View File
@@ -81,7 +81,7 @@ Run xsystem35 from within the game directory.
[Homebrew](https://brew.sh/index_ja) is needed.
$ brew install cmake pkg-config sdl2 sdl2_mixer sdl2_ttf libjpeg webp cjson
$ brew install cmake pkg-config sdl2 sdl2_mixer sdl2_ttf webp cjson
$ mkdir -p out/debug
$ cd out/debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ../../
@@ -91,7 +91,7 @@ Run xsystem35 from within the game directory.
[MSYS2](https://www.msys2.org) is needed.
$ pacman -S cmake mingw-w64-x86_64-cmake mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-libjpeg-turbo mingw-w64-x86_64-libwebp mingw-w64-x86_64-cjson
$ pacman -S cmake mingw-w64-x86_64-cmake mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-libwebp mingw-w64-x86_64-cjson
$ mkdir -p out/debug
$ cd out/debug
$ cmake -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug ../../
+2 -2
View File
@@ -16,8 +16,8 @@ android {
}
minSdkVersion 19
targetSdkVersion 31
versionCode 8
versionName "2.4.0"
versionCode 9
versionName "2.5.0"
externalNativeBuild {
cmake {
arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
+7 -5
View File
@@ -13,11 +13,10 @@ FetchContent_Declare(
URL https://github.com/libsdl-org/SDL_ttf/archive/refs/tags/release-2.0.18.tar.gz
URL_HASH SHA1=6fc5130757b447d46c3da6abd58687e8576de8b8
)
# TODO: Use SDL2_mixer 2.0.5 once released
FetchContent_Declare(
SDL_mixer
GIT_REPOSITORY https://github.com/libsdl-org/SDL_mixer.git
GIT_TAG 6845d9f3cb3f35542f1ec7e74dba6b30bf968959
URL https://github.com/libsdl-org/SDL_mixer/archive/refs/tags/release-2.6.0.tar.gz
URL_HASH SHA1=a2aef03d74ac3dd9cd0004cff1834602a5dafa66
)
# Compilation of SDL and companion libraries
@@ -34,9 +33,12 @@ endif()
FetchContent_GetProperties(SDL_mixer)
if(NOT sdl_mixer_POPULATED)
FetchContent_Populate(SDL_mixer)
SET(SUPPORT_OGG ON CACHE BOOL "Enable OGG support in SDL_mixer" FORCE)
SET(SDL2MIXER_OPUS OFF CACHE BOOL "Enable Opus music" FORCE)
SET(SDL2MIXER_FLAC OFF CACHE BOOL "Enable FLAC music" FORCE)
SET(SDL2MIXER_MOD OFF CACHE BOOL "Support loading MOD music" FORCE)
SET(SDL2MIXER_MIDI OFF CACHE BOOL "Enable MIDI music" FORCE)
SET(SDL2MIXER_SAMPLES OFF CACHE BOOL "Build the SDL2_mixer sample program(s)" FORCE)
add_subdirectory(${sdl_mixer_SOURCE_DIR} ${sdl_mixer_BINARY_DIR})
target_compile_definitions(SDL2_mixer PRIVATE MUSIC_WAV)
endif()
# The main CMakeLists.txt of xsystem35
+1 -2
View File
@@ -1,5 +1,5 @@
#cmakedefine PACKAGE "@PACKAGE@"
#define VERSION "2.4.0"
#define VERSION "2.5.0"
#cmakedefine CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@"
@@ -25,7 +25,6 @@
#cmakedefine SEQ_DEVICE "@SEQ_DEVICE@"
#cmakedefine HAVE_GETLOGIN @HAVE_GETLOGIN@
#cmakedefine HAVE_JPEG @HAVE_JPEG@
#cmakedefine HAVE_MMAP @HAVE_MMAP@
#cmakedefine HAVE_SIGACTION @HAVE_SIGACTION@
#cmakedefine HAVE_UNAME @HAVE_UNAME@
-5
View File
@@ -102,7 +102,6 @@ target_compile_options(modules PRIVATE -Wno-pointer-sign)
if (EMSCRIPTEN)
set(LIBS
"SHELL:-s USE_ZLIB=1"
"SHELL:-s USE_LIBJPEG=1"
"SHELL:-s USE_SDL=2")
target_compile_options(modules PRIVATE ${LIBS})
target_link_options(modules PRIVATE ${LIBS})
@@ -117,7 +116,3 @@ else()
target_link_libraries(modules PRIVATE PkgConfig::SDL2MIXER)
endif()
endif()
if (HAVE_JPEG AND NOT EMSCRIPTEN)
target_link_libraries(modules PRIVATE JPEG::JPEG)
endif()
-8
View File
@@ -36,11 +36,7 @@
#include "input.h"
#include "ngraph.h"
#include "cg.h"
#ifdef HAVE_JPEG
#include "jpeg.h"
#endif
#ifdef HAVE_JPEG
#define FPS 30
@@ -88,8 +84,6 @@ static void ndd_run(int demonum) {
alk_free(alk);
}
#endif
static void Init() {
int p1 = getCaliValue(); /* ISys3x */
int p2 = getCaliValue(); /* IWinMsg */
@@ -105,9 +99,7 @@ static void Run() {
int p1 = getCaliValue(); // デモ番号 0,1,2
int p2 = getCaliValue();
#ifdef HAVE_JPEG
ndd_run(p1);
#endif
DEBUG_COMMAND("NightDemonDemo.Run %d,%d:\n", p1, p2);
}
+1 -8
View File
@@ -41,13 +41,7 @@ target_sources(xsystem35 PRIVATE
# CG
target_sources(xsystem35 PRIVATE
pms.c vsp.c bmp.c qnt.c)
if (HAVE_JPEG)
target_sources(xsystem35 PRIVATE jpeg.c)
if (NOT EMSCRIPTEN)
target_link_libraries(xsystem35 PRIVATE JPEG::JPEG)
endif()
endif()
pms.c vsp.c bmp.c qnt.c jpeg.c)
if (HAVE_WEBP)
target_sources(xsystem35 PRIVATE webp.c)
target_link_libraries(xsystem35 PRIVATE PkgConfig::WEBP)
@@ -88,7 +82,6 @@ if (EMSCRIPTEN)
set(LIBS
"SHELL:-s USE_ZLIB=1"
"SHELL:-s USE_LIBJPEG=1"
"SHELL:-s USE_SDL=2"
"SHELL:-s USE_SDL_TTF=2")
target_compile_options(xsystem35 PRIVATE ${LIBS})
-8
View File
@@ -33,9 +33,7 @@
#include "pms.h"
#include "bmp.h"
#include "qnt.h"
#ifdef HAVE_JPEG
#include "jpeg.h"
#endif
#include "ald_manager.h"
#include "savedata.h"
#include "cache.h"
@@ -87,10 +85,8 @@ static CG_TYPE check_cgformat(BYTE *data) {
return ALCG_BMP8;
} else if (vsp_checkfmt(data)) {
return ALCG_VSP;
#ifdef HAVE_JPEG
} else if (jpeg_checkfmt(data) && nact->ags.world_depth >= 15) {
return ALCG_JPEG;
#endif
}
WARNING("Unknown Cg Type\n");
return ALCG_UNKNOWN;
@@ -221,11 +217,9 @@ static cgdata *loader(int no) {
case ALCG_QNT:
cg = qnt_extract(dfile->data);
break;
#ifdef HAVE_JPEG
case ALCG_JPEG:
cg = jpeg_extract(dfile->data, dfile->size);
break;
#endif
default:
break;
}
@@ -424,11 +418,9 @@ int cg_load_with_filename(char *fname_utf8, int x, int y) {
case ALCG_BMP24:
cg = bmp16m_extract(data);
break;
#ifdef HAVE_JPEG
case ALCG_JPEG:
cg = jpeg_extract(data, filesize);
break;
#endif
default:
return status;
}
+4 -2
View File
@@ -1336,11 +1336,13 @@ void commands2F79() {
}
void commands2F7A() {
DEBUG_COMMAND_YET("menuFreeShelterDIB:\n");
// no-op
DEBUG_COMMAND("menuFreeShelterDIB:\n");
}
void commands2F7B() {
DEBUG_COMMAND_YET("msgFreeShelterDIB:\n");
// no-op
DEBUG_COMMAND("msgFreeShelterDIB:\n");
}
void commands2F7C() {
+1 -1
View File
@@ -161,7 +161,7 @@ void commandLL() {
DEBUG_COMMAND("LL %d,%d,%d,%d:\n",type, link_no, _var, num);
if (dfile->size < num * sizeof(WORD)) {
WARNING("data shortage (req = %d, result = %d)\n", num, dfile->size/ sizeof(WORD));
WARNING("data shortage (link_no = %d, requested %d, loaded %d)\n", link_no, num, dfile->size/ sizeof(WORD));
/* sysVar[0] = 254; 大嘘*/
/* return; */
num = dfile->size / sizeof(WORD);
+16 -31
View File
@@ -17,16 +17,20 @@
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <jpeglib.h>
#undef max
#undef min
#include <SDL_cpuinfo.h>
#if defined(__ARM_NEON)
#define STBI_NEON
#endif
#define STBI_NO_STDIO
#define STBI_ONLY_JPEG
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#include "config.h"
#include "system.h"
#include "ags.h"
#include "jpeg.h"
boolean jpeg_checkfmt(BYTE *data) {
@@ -34,37 +38,18 @@ boolean jpeg_checkfmt(BYTE *data) {
}
cgdata *jpeg_extract(BYTE *data, size_t size) {
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
// TODO: Error handling
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_mem_src(&cinfo, data, size);
if (jpeg_read_header(&cinfo, TRUE) != JPEG_HEADER_OK) {
WARNING("jpeg_read_header failed\n");
jpeg_destroy_decompress(&cinfo);
int width, height, channels;
BYTE *pixels = stbi_load_from_memory(data, size, &width, &height, &channels, 3);
if (!pixels) {
WARNING("cannot decode jpeg: %s\n", stbi_failure_reason());
return NULL;
}
jpeg_start_decompress(&cinfo);
cgdata *cg = calloc(1, sizeof(cgdata));
cg->type = ALCG_JPEG;
cg->width = cinfo.output_width;
cg->height = cinfo.output_height;
cg->width = width;
cg->height = height;
cg->depth = 24;
cg->pic = malloc(3 * cg->width * cg->height);
int row_stride = cinfo.output_width * cinfo.output_components;
while (cinfo.output_scanline < cinfo.output_height) {
JSAMPROW dst = cg->pic + cinfo.output_scanline * row_stride;
jpeg_read_scanlines(&cinfo, &dst, 1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
cg->pic = pixels;
return cg;
}
-1
View File
@@ -325,7 +325,6 @@ int sdl_getMouseInfo(MyPoint *p) {
}
void sdl_getWheelInfo(int *forward, int *back) {
sdl_getEvent();
*forward = mouse_wheel_up;
*back = mouse_wheel_down;
+7899
View File
File diff suppressed because it is too large Load Diff
+11 -3
View File
@@ -54,6 +54,14 @@ int preVarPage; /* 直前にアクセスした変数のページ */
int preVarIndex; /* 直前にアクセスした変数のINDEX */
int preVarNo; /* 直前にアクセスした変数の番号 */
static const char *varname(int var) {
if (var < nact->ain.varnum)
return nact->ain.var[var];
static char buf[10];
sprintf(buf, "VAR%d", var);
return buf;
}
static char *advance(const char *s, int n) {
while (*s && n > 0) {
s = advance_char(s, nact->encoding);
@@ -78,7 +86,7 @@ int *v_ref(int var) {
int page = attr->page;
int offset = attr->offset;
if (*index + offset >= arrayVarBuffer[page - 1].size) {
WARNING("%03d:%05x: ArrayIndexOutOfBounds (%d, %d, %d, %d)\n", sl_getPage(), sl_getIndex(), var, *index, page, offset);
WARNING("%03d:%05x: Out of bounds array access: %s\n", sl_getPage(), sl_getIndex(), varname(var));
return NULL;
}
preVarIndex = offset + *index;
@@ -93,7 +101,7 @@ int *v_ref_indexed(int var, int index) {
if (attr->page == 0) {
// If VAR_n is not an array variable, VAR_n[i] points to VAR_(n+i).
if ((var + index) >= SYSVAR_MAX) {
WARNING("%03d:%05x: ArrayIndexOutOfBounds (%d, %d)\n", sl_getPage(), sl_getIndex(), var, index);
WARNING("%03d:%05x: Out of bounds index access: %s[%d]\n", sl_getPage(), sl_getIndex(), varname(var), index);
return NULL;
}
preVarIndex = var + index;
@@ -104,7 +112,7 @@ int *v_ref_indexed(int var, int index) {
int page = attr->page;
int offset = attr->offset;
if (offset + index >= arrayVarBuffer[page - 1].size) {
WARNING("%03d:%05x: ArrayIndexOutOfBounds (%d, %d, %d, %d)\n", sl_getPage(), sl_getIndex(), var, index, page, offset);
WARNING("%03d:%05x: Out of bounds index access: %s[%d]\n", sl_getPage(), sl_getIndex(), varname(var), index);
return NULL;
}
preVarIndex = offset + index;