diff --git a/Makefile b/Makefile index 3fd8372d..5c97ae75 100644 --- a/Makefile +++ b/Makefile @@ -116,6 +116,7 @@ SOURCES = \ src/Organya \ src/PixTone \ src/Profile \ + src/Resource \ src/SelStage \ src/Shoot \ src/Sound \ @@ -125,6 +126,76 @@ SOURCES = \ src/Triangle \ src/ValueView +RESOURCES = \ + BITMAP/Credit01.bmp \ + BITMAP/Credit02.bmp \ + BITMAP/Credit03.bmp \ + BITMAP/Credit04.bmp \ + BITMAP/Credit05.bmp \ + BITMAP/Credit06.bmp \ + BITMAP/Credit07.bmp \ + BITMAP/Credit08.bmp \ + BITMAP/Credit09.bmp \ + BITMAP/Credit10.bmp \ + BITMAP/Credit11.bmp \ + BITMAP/Credit12.bmp \ + BITMAP/Credit14.bmp \ + BITMAP/Credit15.bmp \ + BITMAP/Credit16.bmp \ + BITMAP/Credit17.bmp \ + BITMAP/Credit18.bmp \ + CURSOR/CURSOR_IKA.bmp \ + CURSOR/CURSOR_NORMAL.bmp \ + ORG/Access.org \ + ORG/Anzen.org \ + ORG/Balcony.org \ + ORG/Ballos.org \ + ORG/BreakDown.org \ + ORG/Cemetery.org \ + ORG/Curly.org \ + ORG/Dr.org \ + ORG/Ending.org \ + ORG/Escape.org \ + ORG/Fanfale1.org \ + ORG/Fanfale2.org \ + ORG/Fanfale3.org \ + ORG/FireEye.org \ + ORG/Gameover.org \ + ORG/Ginsuke.org \ + ORG/Grand.org \ + ORG/Gravity.org \ + ORG/Hell.org \ + ORG/ironH.org \ + ORG/Jenka.org \ + ORG/Jenka2.org \ + ORG/Kodou.org \ + ORG/LastBtl3.org \ + ORG/LastBtl.org \ + ORG/LastCave.org \ + ORG/Marine.org \ + ORG/Maze.org \ + ORG/MDown2.org \ + ORG/Mura.org \ + ORG/Oside.org \ + ORG/Plant.org \ + ORG/quiet.org \ + ORG/Requiem.org \ + ORG/Toroko.org \ + ORG/Vivi.org \ + ORG/Wanpak2.org \ + ORG/Wanpaku.org \ + ORG/Weed.org \ + ORG/White.org \ + ORG/XXXX.org \ + ORG/Zonbie.org \ + WAVE/Wave.dat + +ifeq ($(JAPANESE), 1) + RESOURCES += BITMAP/pixel_jp.bmp +else + RESOURCES += BITMAP/pixel.bmp +endif + ifeq ($(RENDERER), OpenGL3) SOURCES += src/Backends/Rendering/OpenGL3 CXXFLAGS += `pkg-config glew --cflags` @@ -174,6 +245,21 @@ obj/$(FILENAME)/%.o: %.cpp @echo Compiling $< @$(CXX) $(CXXFLAGS) $< -o $@ -c +obj/$(FILENAME)/Resource.o: src/Resource.cpp $(addprefix src/Resource/, $(addsuffix .h, $(RESOURCES))) + @mkdir -p $(@D) + @echo Compiling $< + @$(CXX) $(CXXFLAGS) $< -o $@ -c + +src/Resource/%.h: $(ASSETS_DIRECTORY)/resources/% obj/bin2h + @mkdir -p $(@D) + @echo Converting $< + @obj/bin2h $< $@ + +obj/bin2h: bin2h/bin2h.c + @mkdir -p $(@D) + @echo Compiling $^ + @$(NATIVECC) -O3 -s -std=c90 -Wall -Wextra -pedantic $^ -o $@ + include $(wildcard $(DEPENDENCIES)) obj/$(FILENAME)/windows_resources.o: msvc2003/CSE2.rc diff --git a/msvc2003/CSE2.rc b/msvc2003/CSE2.rc index db40c215..86558005 100644 --- a/msvc2003/CSE2.rc +++ b/msvc2003/CSE2.rc @@ -58,86 +58,6 @@ BEGIN END END - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -CREDIT01 BITMAP "..\\assets\\resources\\BITMAP\\Credit01.bmp" -CREDIT02 BITMAP "..\\assets\\resources\\BITMAP\\Credit02.bmp" -CREDIT03 BITMAP "..\\assets\\resources\\BITMAP\\Credit03.bmp" -CREDIT04 BITMAP "..\\assets\\resources\\BITMAP\\Credit04.bmp" -CREDIT05 BITMAP "..\\assets\\resources\\BITMAP\\Credit05.bmp" -CREDIT06 BITMAP "..\\assets\\resources\\BITMAP\\Credit06.bmp" -CREDIT07 BITMAP "..\\assets\\resources\\BITMAP\\Credit07.bmp" -CREDIT08 BITMAP "..\\assets\\resources\\BITMAP\\Credit08.bmp" -CREDIT09 BITMAP "..\\assets\\resources\\BITMAP\\Credit09.bmp" -CREDIT10 BITMAP "..\\assets\\resources\\BITMAP\\Credit10.bmp" -CREDIT11 BITMAP "..\\assets\\resources\\BITMAP\\Credit11.bmp" -CREDIT12 BITMAP "..\\assets\\resources\\BITMAP\\Credit12.bmp" -CREDIT14 BITMAP "..\\assets\\resources\\BITMAP\\Credit14.bmp" -CREDIT15 BITMAP "..\\assets\\resources\\BITMAP\\Credit15.bmp" -CREDIT16 BITMAP "..\\assets\\resources\\BITMAP\\Credit16.bmp" -CREDIT17 BITMAP "..\\assets\\resources\\BITMAP\\Credit17.bmp" -CREDIT18 BITMAP "..\\assets\\resources\\BITMAP\\Credit18.bmp" -PIXEL BITMAP "..\\assets\\resources\\BITMAP\\pixel.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// ORG -// - -ACCESS ORG "..\\assets\\resources\\ORG\\Access.org" -ANZEN ORG "..\\assets\\resources\\ORG\\Anzen.org" -BALCONY ORG "..\\assets\\resources\\ORG\\Balcony.org" -BALLOS ORG "..\\assets\\resources\\ORG\\Ballos.org" -BDOWN ORG "..\\assets\\resources\\ORG\\BreakDown.org" -CEMETERY ORG "..\\assets\\resources\\ORG\\Cemetery.org" -CURLY ORG "..\\assets\\resources\\ORG\\Curly.org" -DR ORG "..\\assets\\resources\\ORG\\Dr.org" -ENDING ORG "..\\assets\\resources\\ORG\\Ending.org" -ESCAPE ORG "..\\assets\\resources\\ORG\\Escape.org" -FANFALE1 ORG "..\\assets\\resources\\ORG\\Fanfale1.org" -FANFALE2 ORG "..\\assets\\resources\\ORG\\Fanfale2.org" -FANFALE3 ORG "..\\assets\\resources\\ORG\\Fanfale3.org" -FIREEYE ORG "..\\assets\\resources\\ORG\\FireEye.org" -GAMEOVER ORG "..\\assets\\resources\\ORG\\Gameover.org" -GINSUKE ORG "..\\assets\\resources\\ORG\\Ginsuke.org" -GRAND ORG "..\\assets\\resources\\ORG\\Grand.org" -GRAVITY ORG "..\\assets\\resources\\ORG\\Gravity.org" -HELL ORG "..\\assets\\resources\\ORG\\Hell.org" -IRONH ORG "..\\assets\\resources\\ORG\\ironH.org" -JENKA ORG "..\\assets\\resources\\ORG\\Jenka.org" -JENKA2 ORG "..\\assets\\resources\\ORG\\Jenka2.org" -KODOU ORG "..\\assets\\resources\\ORG\\Kodou.org" -LASTBTL ORG "..\\assets\\resources\\ORG\\LastBtl.org" -LASTBT3 ORG "..\\assets\\resources\\ORG\\LastBtl3.org" -LASTCAVE ORG "..\\assets\\resources\\ORG\\LastCave.org" -MARINE ORG "..\\assets\\resources\\ORG\\Marine.org" -MAZE ORG "..\\assets\\resources\\ORG\\Maze.org" -MDOWN2 ORG "..\\assets\\resources\\ORG\\MDown2.org" -OSIDE ORG "..\\assets\\resources\\ORG\\Oside.org" -MURA ORG "..\\assets\\resources\\ORG\\Mura.org" -PLANT ORG "..\\assets\\resources\\ORG\\Plant.org" -QUIET ORG "..\\assets\\resources\\ORG\\quiet.org" -REQUIEM ORG "..\\assets\\resources\\ORG\\Requiem.org" -TOROKO ORG "..\\assets\\resources\\ORG\\Toroko.org" -VIVI ORG "..\\assets\\resources\\ORG\\Vivi.org" -WANPAK2 ORG "..\\assets\\resources\\ORG\\Wanpak2.org" -WANPAKU ORG "..\\assets\\resources\\ORG\\Wanpaku.org" -WEED ORG "..\\assets\\resources\\ORG\\Weed.org" -WHITE ORG "..\\assets\\resources\\ORG\\White.org" -XXXX ORG "..\\assets\\resources\\ORG\\XXXX.org" -ZONBIE ORG "..\\assets\\resources\\ORG\\Zonbie.org" - -///////////////////////////////////////////////////////////////////////////// -// -// WAVE -// - -WAVE100 WAVE "..\\assets\\resources\\WAVE\\Wave.dat" - CURSOR_IKA CURSOR "..\\assets\\resources\\CURSOR\\CURSOR_IKA.cur" CURSOR_NORMAL CURSOR "..\\assets\\resources\\CURSOR\\CURSOR_NORMAL.cur" diff --git a/src/Draw.cpp b/src/Draw.cpp index ecd7b52c..dd0562b8 100644 --- a/src/Draw.cpp +++ b/src/Draw.cpp @@ -13,6 +13,7 @@ #include "Ending.h" #include "Generic.h" #include "MapName.h" +#include "Resource.h" #include "Tags.h" #include "TextScr.h" @@ -211,26 +212,13 @@ BOOL MakeSurface_Resource(const char *name, SurfaceID surf_no) if (surf[surf_no] != NULL) return FALSE; - HRSRC hrscr = FindResourceA(NULL, name, RT_BITMAP); + size_t size; + const unsigned char *data = FindResource(name, "BITMAP", &size); - if (hrscr == NULL) + if (data == NULL) return FALSE; - size_t size = SizeofResource(NULL, hrscr); - const unsigned char *data = (unsigned char*)LockResource(LoadResource(NULL, hrscr)); - - // The bitmap we get from LockResource is incomplete, so we need to restore its missing header here - unsigned char *bmp_buffer = (unsigned char*)malloc(size + 0xE); - - if (bmp_buffer == NULL) - return FALSE; - - const unsigned char bmp_header[0xE] = {0x42, 0x4D, 0x76, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00}; - - memcpy(bmp_buffer, bmp_header, 0xE); - memcpy(bmp_buffer + 0xE, data, size); - - SDL_RWops *fp = SDL_RWFromConstMem(bmp_buffer, size + 0xE); + SDL_RWops *fp = SDL_RWFromConstMem(data, size); SDL_Surface *surface = SDL_LoadBMP_RW(fp, 1); surf[surf_no] = Backend_CreateSurface(surface->w * magnification, surface->h * magnification); @@ -321,26 +309,10 @@ BOOL ReloadBitmap_Resource(const char *name, SurfaceID surf_no) if (surf_no >= SURFACE_ID_MAX) return FALSE; - HRSRC hrscr = FindResourceA(NULL, name, RT_BITMAP); + size_t size; + const unsigned char *data = FindResource(name, "BITMAP", &size); - if (hrscr == NULL) - return FALSE; - - size_t size = SizeofResource(NULL, hrscr); - const unsigned char *data = (unsigned char*)LockResource(LoadResource(NULL, hrscr)); - - // The bitmap we get from LockResource is incomplete, so we need to restore its missing header here - unsigned char *bmp_buffer = (unsigned char*)malloc(size + 0xE); - - if (bmp_buffer == NULL) - return FALSE; - - const unsigned char bmp_header[0xE] = {0x42, 0x4D, 0x76, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00}; - - memcpy(bmp_buffer, bmp_header, 0xE); - memcpy(bmp_buffer + 0xE, data, size); - - SDL_RWops *fp = SDL_RWFromConstMem(bmp_buffer, size + 0xE); + SDL_RWops *fp = SDL_RWFromConstMem(data, size); SDL_Surface *surface = SDL_LoadBMP_RW(fp, 1); if (!ScaleAndUploadSurface(surface, surf_no)) diff --git a/src/Organya.cpp b/src/Organya.cpp index 5df4d760..45e608ef 100644 --- a/src/Organya.cpp +++ b/src/Organya.cpp @@ -14,6 +14,7 @@ #include "WindowsWrapper.h" +#include "Resource.h" #include "Sound.h" #define PANDUMMY 0xFF @@ -358,20 +359,17 @@ signed char wave_data[100][0x100]; BOOL InitWaveData100(void) { - HRSRC hrscr; - DWORD *lpdword; // リソースのアドレス (Resource address) + const DWORD *lpdword; // リソースのアドレス (Resource address) if (lpDS == NULL) return FALSE; // リソースの検索 (Search for resources) - hrscr = FindResourceA(NULL, "WAVE100", "WAVE"); + lpdword = (DWORD*)FindResource("WAVE100", "WAVE", NULL); - if (hrscr == NULL) + if (lpdword == NULL) return FALSE; - // リソースのアドレスを取得 (Get resource address) - lpdword = (DWORD*)LockResource(LoadResource(NULL, hrscr)); memcpy(wave_data, lpdword, 100 * 0x100); return TRUE; @@ -607,12 +605,10 @@ BOOL OrgData::InitMusicData(const char *path) char pass_check[6]; char ver = 0; - HRSRC hrscr = FindResourceA(NULL, path, "ORG"); - if (hrscr == NULL) + const unsigned char *p = FindResource(path, "ORG", NULL); + if (p == NULL) return FALSE; - unsigned char *p = (unsigned char*)LockResource(LoadResource(0, hrscr)); - memcpy(&pass_check[0], p, 6); p += 6; diff --git a/src/Resource.cpp b/src/Resource.cpp new file mode 100644 index 00000000..332aef71 --- /dev/null +++ b/src/Resource.cpp @@ -0,0 +1,166 @@ +#include "Resource.h" + +#include +#include + +#include "Resource/ORG/Access.org.h" +#include "Resource/ORG/Anzen.org.h" +#include "Resource/ORG/Balcony.org.h" +#include "Resource/ORG/Ballos.org.h" +#include "Resource/ORG/BreakDown.org.h" +#include "Resource/ORG/Cemetery.org.h" +#include "Resource/ORG/Curly.org.h" +#include "Resource/ORG/Dr.org.h" +#include "Resource/ORG/Ending.org.h" +#include "Resource/ORG/Escape.org.h" +#include "Resource/ORG/Fanfale1.org.h" +#include "Resource/ORG/Fanfale2.org.h" +#include "Resource/ORG/Fanfale3.org.h" +#include "Resource/ORG/FireEye.org.h" +#include "Resource/ORG/Gameover.org.h" +#include "Resource/ORG/Ginsuke.org.h" +#include "Resource/ORG/Grand.org.h" +#include "Resource/ORG/Gravity.org.h" +#include "Resource/ORG/Hell.org.h" +#include "Resource/ORG/ironH.org.h" +#include "Resource/ORG/Jenka.org.h" +#include "Resource/ORG/Jenka2.org.h" +#include "Resource/ORG/Kodou.org.h" +#include "Resource/ORG/LastBtl3.org.h" +#include "Resource/ORG/LastBtl.org.h" +#include "Resource/ORG/LastCave.org.h" +#include "Resource/ORG/Marine.org.h" +#include "Resource/ORG/Maze.org.h" +#include "Resource/ORG/MDown2.org.h" +#include "Resource/ORG/Mura.org.h" +#include "Resource/ORG/Oside.org.h" +#include "Resource/ORG/Plant.org.h" +#include "Resource/ORG/quiet.org.h" +#include "Resource/ORG/Requiem.org.h" +#include "Resource/ORG/Toroko.org.h" +#include "Resource/ORG/Vivi.org.h" +#include "Resource/ORG/Wanpak2.org.h" +#include "Resource/ORG/Wanpaku.org.h" +#include "Resource/ORG/Weed.org.h" +#include "Resource/ORG/White.org.h" +#include "Resource/ORG/XXXX.org.h" +#include "Resource/ORG/Zonbie.org.h" +#include "Resource/WAVE/Wave.dat.h" +#include "Resource/BITMAP/Credit01.bmp.h" +#include "Resource/BITMAP/Credit02.bmp.h" +#include "Resource/BITMAP/Credit03.bmp.h" +#include "Resource/BITMAP/Credit04.bmp.h" +#include "Resource/BITMAP/Credit05.bmp.h" +#include "Resource/BITMAP/Credit06.bmp.h" +#include "Resource/BITMAP/Credit07.bmp.h" +#include "Resource/BITMAP/Credit08.bmp.h" +#include "Resource/BITMAP/Credit09.bmp.h" +#include "Resource/BITMAP/Credit10.bmp.h" +#include "Resource/BITMAP/Credit11.bmp.h" +#include "Resource/BITMAP/Credit12.bmp.h" +#include "Resource/BITMAP/Credit14.bmp.h" +#include "Resource/BITMAP/Credit15.bmp.h" +#include "Resource/BITMAP/Credit16.bmp.h" +#include "Resource/BITMAP/Credit17.bmp.h" +#include "Resource/BITMAP/Credit18.bmp.h" +#ifdef JAPANESE +#include "Resource/BITMAP/pixel_jp.bmp.h" +#else +#include "Resource/BITMAP/pixel.bmp.h" +#endif + +static const struct +{ + const char *type; + const char *name; + const unsigned char *data; + size_t size; +} resources[] = { + {"ORG", "ACCESS", rAccess, sizeof(rAccess)}, + {"ORG", "ANZEN", rAnzen, sizeof(rAnzen)}, + {"ORG", "BALCONY", rBalcony, sizeof(rBalcony)}, + {"ORG", "BALLOS", rBallos, sizeof(rBallos)}, + {"ORG", "BDOWN", rBreakDown, sizeof(rBreakDown)}, + {"ORG", "CEMETERY", rCemetery, sizeof(rCemetery)}, +#ifdef NONPORTABLE + {"ORG", "Curly", rCurly, sizeof(rCurly)}, +#else + {"ORG", "CURLY", rCurly, sizeof(rCurly)}, +#endif + {"ORG", "DR", rDr, sizeof(rDr)}, + {"ORG", "ENDING", rEnding, sizeof(rEnding)}, + {"ORG", "ESCAPE", rEscape, sizeof(rEscape)}, + {"ORG", "FANFALE1", rFanfale1, sizeof(rFanfale1)}, + {"ORG", "FANFALE2", rFanfale2, sizeof(rFanfale2)}, + {"ORG", "FANFALE3", rFanfale3, sizeof(rFanfale3)}, + {"ORG", "FIREEYE", rFireEye, sizeof(rFireEye)}, + {"ORG", "GAMEOVER", rGameover, sizeof(rGameover)}, + {"ORG", "GINSUKE", rGinsuke, sizeof(rGinsuke)}, + {"ORG", "GRAND", rGrand, sizeof(rGrand)}, + {"ORG", "GRAVITY", rGravity, sizeof(rGravity)}, + {"ORG", "HELL", rHell, sizeof(rHell)}, + {"ORG", "IRONH", rironH, sizeof(rironH)}, + {"ORG", "JENKA", rJenka, sizeof(rJenka)}, + {"ORG", "JENKA2", rJenka2, sizeof(rJenka2)}, + {"ORG", "KODOU", rKodou, sizeof(rKodou)}, + {"ORG", "LASTBT3", rLastBtl3, sizeof(rLastBtl3)}, + {"ORG", "LASTBTL", rLastBtl, sizeof(rLastBtl)}, + {"ORG", "LASTCAVE", rLastCave, sizeof(rLastCave)}, + {"ORG", "MARINE", rMarine, sizeof(rMarine)}, + {"ORG", "MAZE", rMaze, sizeof(rMaze)}, + {"ORG", "MDOWN2", rMDown2, sizeof(rMDown2)}, + {"ORG", "MURA", rMura, sizeof(rMura)}, + {"ORG", "OSIDE", rOside, sizeof(rOside)}, + {"ORG", "PLANT", rPlant, sizeof(rPlant)}, + {"ORG", "QUIET", rquiet, sizeof(rquiet)}, + {"ORG", "REQUIEM", rRequiem, sizeof(rRequiem)}, + {"ORG", "TOROKO", rToroko, sizeof(rToroko)}, + {"ORG", "VIVI", rVivi, sizeof(rVivi)}, + {"ORG", "WANPAK2", rWanpak2, sizeof(rWanpak2)}, + {"ORG", "WANPAKU", rWanpaku, sizeof(rWanpaku)}, + {"ORG", "WEED", rWeed, sizeof(rWeed)}, + {"ORG", "WHITE", rWhite, sizeof(rWhite)}, + {"ORG", "XXXX", rXXXX, sizeof(rXXXX)}, + {"ORG", "ZONBIE", rZonbie, sizeof(rZonbie)}, + + {"WAVE", "WAVE100", rWave, sizeof(rWave)}, + + {"BITMAP", "CREDIT01", rCredit01, sizeof(rCredit01)}, + {"BITMAP", "CREDIT02", rCredit02, sizeof(rCredit02)}, + {"BITMAP", "CREDIT03", rCredit03, sizeof(rCredit03)}, + {"BITMAP", "CREDIT04", rCredit04, sizeof(rCredit04)}, + {"BITMAP", "CREDIT05", rCredit05, sizeof(rCredit05)}, + {"BITMAP", "CREDIT06", rCredit06, sizeof(rCredit06)}, + {"BITMAP", "CREDIT07", rCredit07, sizeof(rCredit07)}, + {"BITMAP", "CREDIT08", rCredit08, sizeof(rCredit08)}, + {"BITMAP", "CREDIT09", rCredit09, sizeof(rCredit09)}, + {"BITMAP", "CREDIT10", rCredit10, sizeof(rCredit10)}, + {"BITMAP", "CREDIT11", rCredit11, sizeof(rCredit11)}, + {"BITMAP", "CREDIT12", rCredit12, sizeof(rCredit12)}, + {"BITMAP", "CREDIT14", rCredit14, sizeof(rCredit14)}, + {"BITMAP", "CREDIT15", rCredit15, sizeof(rCredit15)}, + {"BITMAP", "CREDIT16", rCredit16, sizeof(rCredit16)}, + {"BITMAP", "CREDIT17", rCredit17, sizeof(rCredit17)}, + {"BITMAP", "CREDIT18", rCredit18, sizeof(rCredit18)}, +#ifdef JAPANESE + {"BITMAP", "PIXEL", rpixel_jp, sizeof(rpixel_jp)}, +#else + {"BITMAP", "PIXEL", rpixel, sizeof(rpixel)}, +#endif +}; + +const unsigned char* FindResource(const char *name, const char *type, size_t *size) +{ + for (unsigned int i = 0; i < sizeof(resources) / sizeof(resources[0]); ++i) + { + if (!strcmp(name, resources[i].name) && !strcmp(type, resources[i].type)) + { + if (size) + *size = resources[i].size; + + return resources[i].data; + } + } + + return NULL; +} diff --git a/src/Resource.h b/src/Resource.h new file mode 100644 index 00000000..9f477df6 --- /dev/null +++ b/src/Resource.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +const unsigned char* FindResource(const char *name, const char *type, size_t *size);