diff --git a/android/app/build.gradle b/android/app/build.gradle index 49656f5..f75918b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -35,7 +35,7 @@ android { if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) { sourceSets.main { jniLibs.srcDir 'libs' - assets.srcDir '../../fonts' + assets.srcDir '../../resources' } aaptOptions { // Disable asset compression for fonts. diff --git a/fonts/MTLc3m.ttf b/resources/fonts/MTLc3m.ttf similarity index 100% rename from fonts/MTLc3m.ttf rename to resources/fonts/MTLc3m.ttf diff --git a/fonts/MTLc3m.ttf.license b/resources/fonts/MTLc3m.ttf.license similarity index 100% rename from fonts/MTLc3m.ttf.license rename to resources/fonts/MTLc3m.ttf.license diff --git a/src/res3/AMUS_AB.MDA b/resources/mda/AMUS_AB.MDA similarity index 100% rename from src/res3/AMUS_AB.MDA rename to resources/mda/AMUS_AB.MDA diff --git a/src/res3/AMUS_AL1.MDA b/resources/mda/AMUS_AL1.MDA similarity index 100% rename from src/res3/AMUS_AL1.MDA rename to resources/mda/AMUS_AL1.MDA diff --git a/src/res3/AMUS_AL2.MDA b/resources/mda/AMUS_AL2.MDA similarity index 100% rename from src/res3/AMUS_AL2.MDA rename to resources/mda/AMUS_AL2.MDA diff --git a/src/res3/AMUS_AL3.MDA b/resources/mda/AMUS_AL3.MDA similarity index 100% rename from src/res3/AMUS_AL3.MDA rename to resources/mda/AMUS_AL3.MDA diff --git a/src/res3/AMUS_ALL.MDA b/resources/mda/AMUS_ALL.MDA similarity index 100% rename from src/res3/AMUS_ALL.MDA rename to resources/mda/AMUS_ALL.MDA diff --git a/src/res3/AMUS_AMB.MDA b/resources/mda/AMUS_AMB.MDA similarity index 100% rename from src/res3/AMUS_AMB.MDA rename to resources/mda/AMUS_AMB.MDA diff --git a/src/res3/AMUS_AT.MDA b/resources/mda/AMUS_AT.MDA similarity index 100% rename from src/res3/AMUS_AT.MDA rename to resources/mda/AMUS_AT.MDA diff --git a/src/res3/AMUS_AYM.MDA b/resources/mda/AMUS_AYM.MDA similarity index 100% rename from src/res3/AMUS_AYM.MDA rename to resources/mda/AMUS_AYM.MDA diff --git a/src/res3/AMUS_BEE.MDA b/resources/mda/AMUS_BEE.MDA similarity index 100% rename from src/res3/AMUS_BEE.MDA rename to resources/mda/AMUS_BEE.MDA diff --git a/src/res3/AMUS_CRS.MDA b/resources/mda/AMUS_CRS.MDA similarity index 100% rename from src/res3/AMUS_CRS.MDA rename to resources/mda/AMUS_CRS.MDA diff --git a/src/res3/AMUS_DLK.MDA b/resources/mda/AMUS_DLK.MDA similarity index 100% rename from src/res3/AMUS_DLK.MDA rename to resources/mda/AMUS_DLK.MDA diff --git a/src/res3/AMUS_DPS.MDA b/resources/mda/AMUS_DPS.MDA similarity index 100% rename from src/res3/AMUS_DPS.MDA rename to resources/mda/AMUS_DPS.MDA diff --git a/src/res3/AMUS_DRS.MDA b/resources/mda/AMUS_DRS.MDA similarity index 100% rename from src/res3/AMUS_DRS.MDA rename to resources/mda/AMUS_DRS.MDA diff --git a/src/res3/AMUS_INT.MDA b/resources/mda/AMUS_INT.MDA similarity index 100% rename from src/res3/AMUS_INT.MDA rename to resources/mda/AMUS_INT.MDA diff --git a/src/res3/AMUS_KNG.MDA b/resources/mda/AMUS_KNG.MDA similarity index 100% rename from src/res3/AMUS_KNG.MDA rename to resources/mda/AMUS_KNG.MDA diff --git a/src/res3/AMUS_LP2.MDA b/resources/mda/AMUS_LP2.MDA similarity index 100% rename from src/res3/AMUS_LP2.MDA rename to resources/mda/AMUS_LP2.MDA diff --git a/src/res3/AMUS_MGN.MDA b/resources/mda/AMUS_MGN.MDA similarity index 100% rename from src/res3/AMUS_MGN.MDA rename to resources/mda/AMUS_MGN.MDA diff --git a/src/res3/AMUS_OTM.MDA b/resources/mda/AMUS_OTM.MDA similarity index 100% rename from src/res3/AMUS_OTM.MDA rename to resources/mda/AMUS_OTM.MDA diff --git a/src/res3/AMUS_OY.MDA b/resources/mda/AMUS_OY.MDA similarity index 100% rename from src/res3/AMUS_OY.MDA rename to resources/mda/AMUS_OY.MDA diff --git a/src/res3/AMUS_PSG.MDA b/resources/mda/AMUS_PSG.MDA similarity index 100% rename from src/res3/AMUS_PSG.MDA rename to resources/mda/AMUS_PSG.MDA diff --git a/src/res3/AMUS_R3H.MDA b/resources/mda/AMUS_R3H.MDA similarity index 100% rename from src/res3/AMUS_R3H.MDA rename to resources/mda/AMUS_R3H.MDA diff --git a/src/res3/AMUS_R4.MDA b/resources/mda/AMUS_R4.MDA similarity index 100% rename from src/res3/AMUS_R4.MDA rename to resources/mda/AMUS_R4.MDA diff --git a/src/res3/AMUS_R41.MDA b/resources/mda/AMUS_R41.MDA similarity index 100% rename from src/res3/AMUS_R41.MDA rename to resources/mda/AMUS_R41.MDA diff --git a/src/res3/AMUS_R42.MDA b/resources/mda/AMUS_R42.MDA similarity index 100% rename from src/res3/AMUS_R42.MDA rename to resources/mda/AMUS_R42.MDA diff --git a/src/res3/AMUS_RG2.MDA b/resources/mda/AMUS_RG2.MDA similarity index 100% rename from src/res3/AMUS_RG2.MDA rename to resources/mda/AMUS_RG2.MDA diff --git a/src/res3/AMUS_SDP.MDA b/resources/mda/AMUS_SDP.MDA similarity index 100% rename from src/res3/AMUS_SDP.MDA rename to resources/mda/AMUS_SDP.MDA diff --git a/src/res3/AMUS_SG.MDA b/resources/mda/AMUS_SG.MDA similarity index 100% rename from src/res3/AMUS_SG.MDA rename to resources/mda/AMUS_SG.MDA diff --git a/src/res3/AMUS_T1.MDA b/resources/mda/AMUS_T1.MDA similarity index 100% rename from src/res3/AMUS_T1.MDA rename to resources/mda/AMUS_T1.MDA diff --git a/src/res3/AMUS_T2.MDA b/resources/mda/AMUS_T2.MDA similarity index 100% rename from src/res3/AMUS_T2.MDA rename to resources/mda/AMUS_T2.MDA diff --git a/src/res3/AMUS_VX.MDA b/resources/mda/AMUS_VX.MDA similarity index 100% rename from src/res3/AMUS_VX.MDA rename to resources/mda/AMUS_VX.MDA diff --git a/src/res3/BMUS_AKA.MDA b/resources/mda/BMUS_AKA.MDA similarity index 100% rename from src/res3/BMUS_AKA.MDA rename to resources/mda/BMUS_AKA.MDA diff --git a/src/res3/BMUS_ANT.MDA b/resources/mda/BMUS_ANT.MDA similarity index 100% rename from src/res3/BMUS_ANT.MDA rename to resources/mda/BMUS_ANT.MDA diff --git a/src/res3/BMUS_FAH.MDA b/resources/mda/BMUS_FAH.MDA similarity index 100% rename from src/res3/BMUS_FAH.MDA rename to resources/mda/BMUS_FAH.MDA diff --git a/src/res3/BMUS_KAM.MDA b/resources/mda/BMUS_KAM.MDA similarity index 100% rename from src/res3/BMUS_KAM.MDA rename to resources/mda/BMUS_KAM.MDA diff --git a/src/res3/BMUS_KAT.MDA b/resources/mda/BMUS_KAT.MDA similarity index 100% rename from src/res3/BMUS_KAT.MDA rename to resources/mda/BMUS_KAT.MDA diff --git a/src/res3/BMUS_MTK.MDA b/resources/mda/BMUS_MTK.MDA similarity index 100% rename from src/res3/BMUS_MTK.MDA rename to resources/mda/BMUS_MTK.MDA diff --git a/src/res3/BMUS_NAI.MDA b/resources/mda/BMUS_NAI.MDA similarity index 100% rename from src/res3/BMUS_NAI.MDA rename to resources/mda/BMUS_NAI.MDA diff --git a/src/res3/BMUS_NOB.MDA b/resources/mda/BMUS_NOB.MDA similarity index 100% rename from src/res3/BMUS_NOB.MDA rename to resources/mda/BMUS_NOB.MDA diff --git a/src/res3/BMUS_RAB.MDA b/resources/mda/BMUS_RAB.MDA similarity index 100% rename from src/res3/BMUS_RAB.MDA rename to resources/mda/BMUS_RAB.MDA diff --git a/src/res3/BMUS_SIN.MDA b/resources/mda/BMUS_SIN.MDA similarity index 100% rename from src/res3/BMUS_SIN.MDA rename to resources/mda/BMUS_SIN.MDA diff --git a/src/res3/BMUS_SOT.MDA b/resources/mda/BMUS_SOT.MDA similarity index 100% rename from src/res3/BMUS_SOT.MDA rename to resources/mda/BMUS_SOT.MDA diff --git a/src/res3/BMUS_TNM.MDA b/resources/mda/BMUS_TNM.MDA similarity index 100% rename from src/res3/BMUS_TNM.MDA rename to resources/mda/BMUS_TNM.MDA diff --git a/src/res3/CMUS_T1.MDA b/resources/mda/CMUS_T1.MDA similarity index 100% rename from src/res3/CMUS_T1.MDA rename to resources/mda/CMUS_T1.MDA diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7f4d15f..1cf3635 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,6 +17,7 @@ if (ANDROID) android/mako.cpp ) target_link_libraries(system3 PRIVATE SDL2 SDL2_ttf) + set(DEFAULT_FONT_PATH fonts/) elseif (EMSCRIPTEN) add_executable(system3) @@ -49,12 +50,6 @@ else() # NOT (ANDROID OR EMSCRIPTEN) pkg_check_modules(SDL2TTF REQUIRED IMPORTED_TARGET SDL2_ttf) target_link_libraries(system3 PRIVATE PkgConfig::SDL2 PkgConfig::SDL2TTF) - set(DEFAULT_FONT_PATH ${CMAKE_INSTALL_PREFIX}/share/system3/fonts/) - - install(TARGETS system3 RUNTIME DESTINATION bin) - install(FILES ../fonts/MTLc3m.ttf ../fonts/MTLc3m.ttf.license - DESTINATION share/system3/fonts) - if (CMAKE_SYSTEM_NAME STREQUAL "Windows") target_sources(system3 PRIVATE win/nact_win.cpp win/mako.cpp res3/Script1.rc) target_link_libraries(system3 PRIVATE winmm) @@ -62,6 +57,12 @@ else() # NOT (ANDROID OR EMSCRIPTEN) pkg_check_modules(SDL2MIXER REQUIRED IMPORTED_TARGET SDL2_mixer) target_sources(system3 PRIVATE linux/nact_linux.cpp linux/mako.cpp) target_link_libraries(system3 PRIVATE PkgConfig::SDL2MIXER) + set(RESOURCE_PATH ${CMAKE_INSTALL_PREFIX}/share/system3/) + set(DEFAULT_FONT_PATH ${CMAKE_INSTALL_PREFIX}/share/system3/fonts/) + install(TARGETS system3 RUNTIME DESTINATION bin) + install(DIRECTORY ../resources/ + DESTINATION share/system3 + FILES_MATCHING PATTERN *.MDA) endif() endif() @@ -93,6 +94,6 @@ target_sources(system3 PRIVATE target_compile_definitions(system3 PRIVATE $<$:_DEBUG_CONSOLE> - DEFAULT_FONT_PATH="${DEFAULT_FONT_PATH}") + DEFAULT_FONT_PATH="${DEFAULT_FONT_PATH}" + RESOURCE_PATH="${RESOURCE_PATH}") target_include_directories(system3 PRIVATE . sys) -target_compile_definitions(system3 PRIVATE) diff --git a/src/res3/Script1.rc b/src/res3/Script1.rc index 810eb1a..51a671c 100644 --- a/src/res3/Script1.rc +++ b/src/res3/Script1.rc @@ -92,49 +92,49 @@ IDI_ICON1 ICON DISCARDABLE "icon1.ico" // MDA // -AMUS_AB.MDA MDA DISCARDABLE "AMUS_AB.MDA" -AMUS_AL1.MDA MDA DISCARDABLE "AMUS_AL1.MDA" -AMUS_AL2.MDA MDA DISCARDABLE "AMUS_AL2.MDA" -AMUS_AL3.MDA MDA DISCARDABLE "AMUS_AL3.MDA" -AMUS_ALL.MDA MDA DISCARDABLE "AMUS_ALL.MDA" -AMUS_AMB.MDA MDA DISCARDABLE "AMUS_AMB.MDA" -AMUS_AT.MDA MDA DISCARDABLE "AMUS_AT.MDA" -AMUS_AYM.MDA MDA DISCARDABLE "AMUS_AYM.MDA" -AMUS_BEE.MDA MDA DISCARDABLE "AMUS_BEE.MDA" -AMUS_CRS.MDA MDA DISCARDABLE "AMUS_CRS.MDA" -AMUS_DLK.MDA MDA DISCARDABLE "AMUS_DLK.MDA" -AMUS_DPS.MDA MDA DISCARDABLE "AMUS_DPS.MDA" -AMUS_DRS.MDA MDA DISCARDABLE "AMUS_DRS.MDA" -AMUS_INT.MDA MDA DISCARDABLE "AMUS_INT.MDA" -AMUS_KNG.MDA MDA DISCARDABLE "AMUS_KNG.MDA" -AMUS_LP2.MDA MDA DISCARDABLE "AMUS_LP2.MDA" -AMUS_MGN.MDA MDA DISCARDABLE "AMUS_MGN.MDA" -AMUS_OTM.MDA MDA DISCARDABLE "AMUS_OTM.MDA" -AMUS_OY.MDA MDA DISCARDABLE "AMUS_OY.MDA" -AMUS_PSG.MDA MDA DISCARDABLE "AMUS_PSG.MDA" -AMUS_R3H.MDA MDA DISCARDABLE "AMUS_R3H.MDA" -AMUS_R4.MDA MDA DISCARDABLE "AMUS_R4.MDA" -AMUS_R41.MDA MDA DISCARDABLE "AMUS_R41.MDA" -AMUS_R42.MDA MDA DISCARDABLE "AMUS_R42.MDA" -AMUS_RG2.MDA MDA DISCARDABLE "AMUS_RG2.MDA" -AMUS_SDP.MDA MDA DISCARDABLE "AMUS_SDP.MDA" -AMUS_SG.MDA MDA DISCARDABLE "AMUS_SG.MDA" -AMUS_T1.MDA MDA DISCARDABLE "AMUS_T1.MDA" -AMUS_T2.MDA MDA DISCARDABLE "AMUS_T2.MDA" -AMUS_VX.MDA MDA DISCARDABLE "AMUS_VX.MDA" -BMUS_AKA.MDA MDA DISCARDABLE "BMUS_AKA.MDA" -BMUS_ANT.MDA MDA DISCARDABLE "BMUS_ANT.MDA" -BMUS_FAH.MDA MDA DISCARDABLE "BMUS_FAH.MDA" -BMUS_KAM.MDA MDA DISCARDABLE "BMUS_KAM.MDA" -BMUS_KAT.MDA MDA DISCARDABLE "BMUS_KAT.MDA" -BMUS_MTK.MDA MDA DISCARDABLE "BMUS_MTK.MDA" -BMUS_NAI.MDA MDA DISCARDABLE "BMUS_NAI.MDA" -BMUS_NOB.MDA MDA DISCARDABLE "BMUS_NOB.MDA" -BMUS_RAB.MDA MDA DISCARDABLE "BMUS_RAB.MDA" -BMUS_SIN.MDA MDA DISCARDABLE "BMUS_SIN.MDA" -BMUS_SOT.MDA MDA DISCARDABLE "BMUS_SOT.MDA" -BMUS_TNM.MDA MDA DISCARDABLE "BMUS_TNM.MDA" -CMUS_T1.MDA MDA DISCARDABLE "CMUS_T1.MDA" +AMUS_AB.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AB.MDA" +AMUS_AL1.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AL1.MDA" +AMUS_AL2.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AL2.MDA" +AMUS_AL3.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AL3.MDA" +AMUS_ALL.MDA MDA DISCARDABLE "../../resources/mda/AMUS_ALL.MDA" +AMUS_AMB.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AMB.MDA" +AMUS_AT.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AT.MDA" +AMUS_AYM.MDA MDA DISCARDABLE "../../resources/mda/AMUS_AYM.MDA" +AMUS_BEE.MDA MDA DISCARDABLE "../../resources/mda/AMUS_BEE.MDA" +AMUS_CRS.MDA MDA DISCARDABLE "../../resources/mda/AMUS_CRS.MDA" +AMUS_DLK.MDA MDA DISCARDABLE "../../resources/mda/AMUS_DLK.MDA" +AMUS_DPS.MDA MDA DISCARDABLE "../../resources/mda/AMUS_DPS.MDA" +AMUS_DRS.MDA MDA DISCARDABLE "../../resources/mda/AMUS_DRS.MDA" +AMUS_INT.MDA MDA DISCARDABLE "../../resources/mda/AMUS_INT.MDA" +AMUS_KNG.MDA MDA DISCARDABLE "../../resources/mda/AMUS_KNG.MDA" +AMUS_LP2.MDA MDA DISCARDABLE "../../resources/mda/AMUS_LP2.MDA" +AMUS_MGN.MDA MDA DISCARDABLE "../../resources/mda/AMUS_MGN.MDA" +AMUS_OTM.MDA MDA DISCARDABLE "../../resources/mda/AMUS_OTM.MDA" +AMUS_OY.MDA MDA DISCARDABLE "../../resources/mda/AMUS_OY.MDA" +AMUS_PSG.MDA MDA DISCARDABLE "../../resources/mda/AMUS_PSG.MDA" +AMUS_R3H.MDA MDA DISCARDABLE "../../resources/mda/AMUS_R3H.MDA" +AMUS_R4.MDA MDA DISCARDABLE "../../resources/mda/AMUS_R4.MDA" +AMUS_R41.MDA MDA DISCARDABLE "../../resources/mda/AMUS_R41.MDA" +AMUS_R42.MDA MDA DISCARDABLE "../../resources/mda/AMUS_R42.MDA" +AMUS_RG2.MDA MDA DISCARDABLE "../../resources/mda/AMUS_RG2.MDA" +AMUS_SDP.MDA MDA DISCARDABLE "../../resources/mda/AMUS_SDP.MDA" +AMUS_SG.MDA MDA DISCARDABLE "../../resources/mda/AMUS_SG.MDA" +AMUS_T1.MDA MDA DISCARDABLE "../../resources/mda/AMUS_T1.MDA" +AMUS_T2.MDA MDA DISCARDABLE "../../resources/mda/AMUS_T2.MDA" +AMUS_VX.MDA MDA DISCARDABLE "../../resources/mda/AMUS_VX.MDA" +BMUS_AKA.MDA MDA DISCARDABLE "../../resources/mda/BMUS_AKA.MDA" +BMUS_ANT.MDA MDA DISCARDABLE "../../resources/mda/BMUS_ANT.MDA" +BMUS_FAH.MDA MDA DISCARDABLE "../../resources/mda/BMUS_FAH.MDA" +BMUS_KAM.MDA MDA DISCARDABLE "../../resources/mda/BMUS_KAM.MDA" +BMUS_KAT.MDA MDA DISCARDABLE "../../resources/mda/BMUS_KAT.MDA" +BMUS_MTK.MDA MDA DISCARDABLE "../../resources/mda/BMUS_MTK.MDA" +BMUS_NAI.MDA MDA DISCARDABLE "../../resources/mda/BMUS_NAI.MDA" +BMUS_NOB.MDA MDA DISCARDABLE "../../resources/mda/BMUS_NOB.MDA" +BMUS_RAB.MDA MDA DISCARDABLE "../../resources/mda/BMUS_RAB.MDA" +BMUS_SIN.MDA MDA DISCARDABLE "../../resources/mda/BMUS_SIN.MDA" +BMUS_SOT.MDA MDA DISCARDABLE "../../resources/mda/BMUS_SOT.MDA" +BMUS_TNM.MDA MDA DISCARDABLE "../../resources/mda/BMUS_TNM.MDA" +CMUS_T1.MDA MDA DISCARDABLE "../../resources/mda/CMUS_T1.MDA" ///////////////////////////////////////////////////////////////////////////// // diff --git a/src/sys/dri.cpp b/src/sys/dri.cpp index c6943f6..f744dc9 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -7,55 +7,34 @@ #ifdef _WIN32 #include #undef ERROR -#include #endif #include "dri.h" #include "crc32.h" #include "../fileio.h" -extern SDL_Window* g_window; +namespace { +SDL_RWops* open_resource(const char* name, const char* type) { #ifdef _WIN32 - -uint8* load_resource(const char* name, const char* type) { - SDL_SysWMinfo info; - SDL_VERSION(&info.version); - if (!SDL_GetWindowWMInfo(g_window, &info)) { - WARNING("SDL_GetWindowWMInfo failed: %s", SDL_GetError()); - return NULL; - } - HINSTANCE hInst = info.info.win.hinstance; - HGLOBAL hGlobal = LoadResource(hInst, FindResource(hInst, name, type)); + // On Windows, read from resource. + HINSTANCE hInst = GetModuleHandle(NULL); + HRSRC hRes = FindResource(hInst, name, type); + HGLOBAL hGlobal = LoadResource(hInst, hRes); if (!hGlobal) { WARNING("Cannot load resource %s (type: %s)", name, type); return NULL; } - return (uint8*)LockResource(hGlobal); -} - -void free_resource(uint8* data) { -} - + return SDL_RWFromConstMem(LockResource(hGlobal), SizeofResource(hInst, hRes)); #else - -uint8* load_resource(const char* name, const char* type) { - FILE* fp = fopen(name, "rb"); - if (!fp) - return NULL; - fseek(fp, 0, SEEK_END); - long len = ftell(fp); - fseek(fp, 0, SEEK_SET); - uint8* buf = (uint8*)malloc(len); - fread(buf, 1, len, fp); - fclose(fp); - return buf; -} - -void free_resource(uint8* data) { - free(data); -} - + // On Android, read from APK assets. + // On other platforms, read from a file under RESOURCE_PATH. + char path[_MAX_PATH]; + sprintf_s(path, _MAX_PATH, "%s%s/%s", RESOURCE_PATH, type, name); + return SDL_RWFromFile(path, "rb"); #endif +} + +} // namespace uint8* DRI::load(const char* file_name, int page, int* size) { @@ -243,33 +222,37 @@ uint8* DRI::load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size) return NULL; } - uint8 *data = load_resource(name, "mda"); - if(!data) { + SDL_RWops* rw = open_resource(name, "mda"); + if (!rw) return NULL; - } + uint8 buf[4]; // ページの位置を取得 - int link_sector = data[0] | (data[1] << 8); - int data_sector = data[2] | (data[3] << 8); + SDL_RWread(rw, buf, 4, 1); + int link_sector = buf[0] | (buf[1] << 8); + int data_sector = buf[2] | (buf[3] << 8); if(page > (data_sector - link_sector) * 128 - 1) { // ページ番号不正 - free_resource(data); + SDL_RWclose(rw); return NULL; } - int disk_index = data[(link_sector - 1) * 256 + (page - 1) * 2 + 0]; - int link_index = data[(link_sector - 1) * 256 + (page - 1) * 2 + 1]; + SDL_RWseek(rw, (link_sector - 1) * 256 + (page - 1) * 2, RW_SEEK_SET); + SDL_RWread(rw, buf, 2, 1); + + int disk_index = buf[0]; + int link_index = buf[1]; if(disk_index == 0 || disk_index == 0x1a) { // 欠番 - free_resource(data); + SDL_RWclose(rw); return NULL; } // AMUS.MDA以外にリンクされている場合はリソースを開き直す if(disk_index == 2) { - free_resource(data); + SDL_RWclose(rw); switch(crc32_b) { case CRC32_DPS_SG_FAHREN: // D.P.S. SG - Fahren Fliegen name = "BMUS_FAH"; @@ -314,11 +297,11 @@ uint8* DRI::load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size) if(name == NULL) { return NULL; } - if((data = load_resource(name, "mda")) == NULL) { + if((rw = open_resource(name, "mda")) == NULL) { return NULL; } } else if(disk_index == 3) { - free_resource(data); + SDL_RWclose(rw); switch(crc32_a) { case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク name = "CMUS_T1"; @@ -330,28 +313,31 @@ uint8* DRI::load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size) if(name == NULL) { return NULL; } - if((data = load_resource(name, "mda")) == NULL) { + if((rw = open_resource(name, "mda")) == NULL) { return NULL; } } else if(disk_index != 1) { // AMUS.MDA以外にリンクされている場合は失敗 - free_resource(data); + SDL_RWclose(rw); return NULL; } // データ取得 - int start_sector = data[link_index * 2 + 0] | (data[link_index * 2 + 1] << 8); - int end_sector = data[link_index * 2 + 2] | (data[link_index * 2 + 3] << 8); + SDL_RWseek(rw, link_index * 2, RW_SEEK_SET); + SDL_RWread(rw, buf, 4, 1); + int start_sector = buf[0] | (buf[1] << 8); + int end_sector = buf[2] | (buf[3] << 8); if((*size = (end_sector - start_sector) * 256) == 0) { // サイズ不正 - free_resource(data); + SDL_RWclose(rw); return NULL; } uint8* buffer = (uint8*)malloc(*size); - memcpy(buffer, &data[(start_sector - 1) * 256], *size); + SDL_RWseek(rw, (start_sector - 1) * 256, RW_SEEK_SET); + SDL_RWread(rw, buffer, *size, 1); - free_resource(data); + SDL_RWclose(rw); return buffer; }