mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c1f8f8450 | ||
|
|
078525e2c2 | ||
|
|
d4a4022894 | ||
|
|
dc89c92139 | ||
|
|
4f351fc767 | ||
|
|
02ef4a1771 | ||
|
|
4a20d74f1a |
@@ -26,7 +26,6 @@ jobs:
|
||||
SDL2:p
|
||||
SDL2_ttf:p
|
||||
SDL2_mixer:p
|
||||
libjpeg-turbo:p
|
||||
libwebp:p
|
||||
cjson:p
|
||||
nsis:p
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ../../
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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@
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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})
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+11
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user