From cb8a6ed34f2689f0dc862e3a9fa780074bd7cb20 Mon Sep 17 00:00:00 2001 From: gameblabla Date: Tue, 26 Dec 2017 20:53:38 -0500 Subject: GCW0 & DC commits --- .gitignore | 6 +++ Makefile | 71 ++++++++++++++++++++++++++ Makefile.dreamcast | 71 ++++++++++++++++++++++++++ Makefile.gcw0 | 74 ++++++++++++++++++++++++++++ opk/default.gcw0.desktop | 9 ++++ opk/icon.png | Bin 0 -> 330 bytes src/dreamcast_icon.h | 37 ++++++++++++++ src/game.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++- src/ini.c | 9 ++++ src/main.c | 4 +- src/sdl/audio.c | 2 +- src/sdl/input.c | 9 ++++ 12 files changed, 414 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 Makefile.dreamcast create mode 100644 Makefile.gcw0 create mode 100644 opk/default.gcw0.desktop create mode 100644 opk/icon.png create mode 100644 src/dreamcast_icon.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..997334c --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.elf +./opk/data +./opk/data/ +./opk/hcl.elf +*.o +*.opk diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..eb5e6ef --- /dev/null +++ b/Makefile @@ -0,0 +1,71 @@ +CC = gcc + +CFLAGS = -D_SDL -O0 -g -I/usr/include/SDL -Isrc +LDFLAGS = -lSDL -lm -lSDL_mixer + +DEFINES = -Wall +OUTPUT = hcl.elf + +SOURCES = src/collision.c \ +src/effect.c \ +src/enemy.c \ +src/game.c \ +src/hero.c \ +src/ini.c \ +src/inventory.c \ +src/main.c \ +src/object.c \ +src/options.c \ +src/PHL.c \ +src/platform.c \ +src/qda.c \ +src/stagedata.c \ +src/text.c \ +src/titlescreen.c \ +src/weapon.c \ +src/enemies/batboss.c \ +src/enemies/bat.c \ +src/enemies/bee.c \ +src/enemies/boar.c \ +src/enemies/boomknight.c \ +src/enemies/crab.c \ +src/enemies/devil.c \ +src/enemies/dodo.c \ +src/enemies/dog.c \ +src/enemies/firewheel.c \ +src/enemies/fish.c \ +src/enemies/garm.c \ +src/enemies/gas.c \ +src/enemies/ghoul.c \ +src/enemies/golem.c \ +src/enemies/gyra.c \ +src/enemies/heads.c \ +src/enemies/hydra.c \ +src/enemies/jellyfish.c \ +src/enemies/knight.c \ +src/enemies/lolidra.c \ +src/enemies/pendulum.c \ +src/enemies/podoboo.c \ +src/enemies/poisonknight.c \ +src/enemies/pumpkin.c \ +src/enemies/seal.c \ +src/enemies/skeleton.c \ +src/enemies/skull.c \ +src/enemies/slime.c \ +src/enemies/slug.c \ +src/enemies/thwomp.c \ +src/enemies/waterjumper.c \ +src/enemies/wizard.c \ +src/sdl/audio.c \ +src/sdl/graphics.c \ +src/sdl/input.c \ +src/sdl/system.c +OBJS = ${SOURCES:.c=.o} + +all: ${OUTPUT} + +${OUTPUT}:${OBJS} + ${CC} -o ${OUTPUT} ${OBJS} ${CFLAGS} ${LDFLAGS} ${DEFINES} + +clean: + rm src/*.o src/enemies/*.o src/sdl/*.o ${OUTPUT} diff --git a/Makefile.dreamcast b/Makefile.dreamcast new file mode 100644 index 0000000..539a392 --- /dev/null +++ b/Makefile.dreamcast @@ -0,0 +1,71 @@ +CC = gcc + +CFLAGS = -D_SDL -O0 -g -I/usr/include/SDL -Isrc +LDFLAGS = -lSDL -lm -lSDL_mixer + +DEFINES = -Wall +OUTPUT = hcl.elf + +SOURCES = src/collision.c \ +src/effect.c \ +src/enemy.c \ +src/game.c \ +src/hero.c \ +src/ini.c \ +src/inventory.c \ +src/main.c \ +src/object.c \ +src/options.c \ +src/PHL.c \ +src/platform.c \ +src/qda.c \ +src/stagedata.c \ +src/text.c \ +src/titlescreen.c \ +src/weapon.c \ +src/enemies/batboss.c \ +src/enemies/bat.c \ +src/enemies/bee.c \ +src/enemies/boar.c \ +src/enemies/boomknight.c \ +src/enemies/crab.c \ +src/enemies/devil.c \ +src/enemies/dodo.c \ +src/enemies/dog.c \ +src/enemies/firewheel.c \ +src/enemies/fish.c \ +src/enemies/garm.c \ +src/enemies/gas.c \ +src/enemies/ghoul.c \ +src/enemies/golem.c \ +src/enemies/gyra.c \ +src/enemies/heads.c \ +src/enemies/hydra.c \ +src/enemies/jellyfish.c \ +src/enemies/knight.c \ +src/enemies/lolidra.c \ +src/enemies/pendulum.c \ +src/enemies/podoboo.c \ +src/enemies/poisonknight.c \ +src/enemies/pumpkin.c \ +src/enemies/seal.c \ +src/enemies/skeleton.c \ +src/enemies/skull.c \ +src/enemies/slime.c \ +src/enemies/slug.c \ +src/enemies/thwomp.c \ +src/enemies/waterjumper.c \ +src/enemies/wizard.c \ +src/sdl/audio.c \ +src/sdl/graphics.c \ +src/sdl/input.c \ +src/sdl/system.c +OBJS = ${SOURCES:.c=.o} + +all: ${OUTPUT} + +${OUTPUT}:${OBJS} + ${CC} -o ${OUTPUT} ${OBJS} ${CFLAGS} ${LDFLAGS} ${DEFINES} + +clean: + rm src/*.o src/sdl/*.o ${OUTPUT} diff --git a/Makefile.gcw0 b/Makefile.gcw0 new file mode 100644 index 0000000..40ea957 --- /dev/null +++ b/Makefile.gcw0 @@ -0,0 +1,74 @@ +CC = mipsel-linux-gcc + +CFLAGS = -D_SDL -DDINGUX -O2 -mips32r2 -I/usr/include/SDL -Isrc -std=c99 +LDFLAGS = -lSDL -lm -lSDL_mixer + +DEFINES = -Wall +OUTPUT = hcl.elf + +SOURCES = src/collision.c \ +src/effect.c \ +src/enemy.c \ +src/game.c \ +src/hero.c \ +src/ini.c \ +src/inventory.c \ +src/main.c \ +src/object.c \ +src/options.c \ +src/PHL.c \ +src/platform.c \ +src/qda.c \ +src/stagedata.c \ +src/text.c \ +src/titlescreen.c \ +src/weapon.c \ +src/enemies/batboss.c \ +src/enemies/bat.c \ +src/enemies/bee.c \ +src/enemies/boar.c \ +src/enemies/boomknight.c \ +src/enemies/crab.c \ +src/enemies/devil.c \ +src/enemies/dodo.c \ +src/enemies/dog.c \ +src/enemies/firewheel.c \ +src/enemies/fish.c \ +src/enemies/garm.c \ +src/enemies/gas.c \ +src/enemies/ghoul.c \ +src/enemies/golem.c \ +src/enemies/gyra.c \ +src/enemies/heads.c \ +src/enemies/hydra.c \ +src/enemies/jellyfish.c \ +src/enemies/knight.c \ +src/enemies/lolidra.c \ +src/enemies/pendulum.c \ +src/enemies/podoboo.c \ +src/enemies/poisonknight.c \ +src/enemies/pumpkin.c \ +src/enemies/seal.c \ +src/enemies/skeleton.c \ +src/enemies/skull.c \ +src/enemies/slime.c \ +src/enemies/slug.c \ +src/enemies/thwomp.c \ +src/enemies/waterjumper.c \ +src/enemies/wizard.c \ +src/sdl/audio.c \ +src/sdl/graphics.c \ +src/sdl/input.c \ +src/sdl/system.c +OBJS = ${SOURCES:.c=.o} + +all: ${OUTPUT} + +${OUTPUT}:${OBJS} + ${CC} -o ${OUTPUT} ${OBJS} ${CFLAGS} ${LDFLAGS} ${DEFINES} + +pack: + mksquashfs ./opk hydra.opk -all-root -noappend -no-exports -no-xattrs + +clean: + rm src/*.o src/sdl/*.o ${OUTPUT} diff --git a/opk/default.gcw0.desktop b/opk/default.gcw0.desktop new file mode 100644 index 0000000..9575e0b --- /dev/null +++ b/opk/default.gcw0.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Hydra +Comment=Hydra Castle Labyrinth +Exec=hcl.elf +Icon=icon +Terminal=false +Categories=games; +X-OD-NeedsDownscaling=false diff --git a/opk/icon.png b/opk/icon.png new file mode 100644 index 0000000..989e564 Binary files /dev/null and b/opk/icon.png differ diff --git a/src/dreamcast_icon.h b/src/dreamcast_icon.h new file mode 100644 index 0000000..1e1ed7c --- /dev/null +++ b/src/dreamcast_icon.h @@ -0,0 +1,37 @@ +unsigned short vmu_icon_pal[] = { +0xF000, 0xF800, 0xFF00, 0xFFF0, 0xFFFF, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, 0xF000, }; + +unsigned char vmu_icon_img[] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x41,0x00,0x00,0x14,0x10,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x14,0x41,0x00,0x00,0x14,0x41,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x44,0x41,0x00,0x00,0x14,0x44,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x14,0x24,0x41,0x00,0x00,0x14,0x42,0x41,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x14,0x44,0x44,0x10,0x01,0x44,0x44,0x41,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x34,0x44,0x11,0x00,0x00,0x11,0x44,0x43,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x34,0x44,0x10,0x00,0x00,0x01,0x44,0x43,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x33,0x33,0x10,0x00,0x00,0x01,0x33,0x33,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x13,0x33,0x31,0x00,0x00,0x13,0x33,0x31,0x00,0x00,0x00,0x00, +0x00,0x00,0x11,0x11,0x13,0x33,0x33,0x11,0x11,0x33,0x33,0x31,0x11,0x11,0x00,0x00, +0x00,0x01,0x33,0x33,0x11,0x33,0x33,0x32,0x23,0x33,0x33,0x11,0x33,0x33,0x10,0x00, +0x00,0x13,0x32,0x33,0x33,0x23,0x33,0x33,0x33,0x33,0x32,0x33,0x33,0x23,0x31,0x00, +0x01,0x33,0x33,0x33,0x33,0x32,0x33,0x34,0x43,0x33,0x23,0x33,0x33,0x33,0x33,0x10, +0x00,0x11,0x13,0x33,0x33,0x33,0x23,0x34,0x43,0x32,0x33,0x33,0x33,0x31,0x11,0x00, +0x00,0x00,0x13,0x11,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x11,0x31,0x00,0x00, +0x00,0x00,0x01,0x00,0x13,0x33,0x33,0x11,0x11,0x33,0x33,0x31,0x00,0x10,0x00,0x00, +0x00,0x00,0x00,0x00,0x12,0x33,0x31,0x11,0x11,0x13,0x33,0x21,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x23,0x11,0x41,0x14,0x11,0x32,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x22,0x11,0x41,0x14,0x11,0x22,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x22,0x11,0x44,0x44,0x11,0x22,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x12,0x22,0x31,0x14,0x41,0x13,0x22,0x21,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x12,0x22,0x23,0x11,0x11,0x32,0x22,0x21,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x22,0x22,0x22,0x33,0x33,0x22,0x22,0x22,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x22,0x12,0x22,0x22,0x22,0x22,0x21,0x22,0x10,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x12,0x21,0x12,0x22,0x22,0x21,0x12,0x21,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x22,0x21,0x11,0x11,0x12,0x22,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x12,0x10,0x00,0x00,0x01,0x21,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; diff --git a/src/game.c b/src/game.c index c1f74d1..21076a6 100644 --- a/src/game.c +++ b/src/game.c @@ -13,6 +13,12 @@ #include #include #include +#ifdef DREAMCAST +#include +#include "dreamcast_icon.h" +int DC_LoadVMU(void); +int DC_SaveVMU(void); +#endif int gameStep(); void gameDraw(char doDrawHud); @@ -80,6 +86,10 @@ void game() strcpy(savename, "data/save.tmp"); strcpy(savemap, savemap); } + #ifdef DREAMCAST + strcpy(savename, "/ram/save.tmp"); + strcpy(savemap, "/ram/save.map"); + #endif #endif //Setup services PHL_Init(); @@ -1412,6 +1422,9 @@ int writeSave(char* fname) #ifdef _3DS strcat(fullPath, "sdmc:/3ds/appdata/HydraCastleLabyrinth/"); #endif + #ifdef DREAMCAST + strcpy(fullPath, "/ram/"); + #endif strcat(fullPath, fname); if ( (f = fopen(fullPath, "wb")) ) { @@ -1480,6 +1493,10 @@ int writeSave(char* fname) fclose(f); } + #ifdef DREAMCAST + DC_SaveVMU(); + #endif + return result; } @@ -1487,11 +1504,18 @@ void loadSave(char* fname) { FILE* f; + #ifdef DREAMCAST + DC_LoadVMU(); + #endif + char fullPath[128]; strcpy(fullPath, ""); #ifdef _3DS strcat(fullPath, "sdmc:/3ds/appdata/HydraCastleLabyrinth/"); #endif + #ifdef DREAMCAST + strcat(fullPath, "/ram/"); + #endif strcat(fullPath, fname); if ((f = fopen(fullPath, "rb"))) { @@ -1676,4 +1700,104 @@ void loadUncommonImages() if (level == 7 || level == 8) { images[imgMisc6020] = PHL_LoadQDA("chr60x20.bmp"); } -} \ No newline at end of file +} + + +#ifdef DREAMCAST +int DC_LoadVMU(void) { + + unsigned long unzipsize; + uint8* unzipdata; + vmu_pkg_t pkg; + + // Name of the file to open + file_t fd; + if ((fd = fs_open("/vmu/a1/hydracas", O_RDONLY)) == -1) + { + printf("error opening VMU A1, not found.\n"); + return -1; + } + + // Remove VMU header + vmu_pkg_parse(fs_mmap(fd), &pkg); + + // Allocate memory for the uncompressed data + unzipdata = (uint8 *)malloc(524288); //512KB + unzipsize = 524288; + uncompress(unzipdata, &unzipsize, (uint8 *)pkg.data, pkg.data_len); + + // Save buffer into a RAM file + fs_close(fd); + + file_t fd2; + if ((fd2 = fs_open("/ram/save.map", O_WRONLY)) == -1) + { + printf("Can't create RAM file from VMU.\n"); + return -1; + } + fs_write(fd2, unzipdata, unzipsize); + fs_close(fd2); + + // Free unused memory + free(unzipdata); + + return 0; +} + +int DC_SaveVMU(void) { + vmu_pkg_t pkg; + uint8 *pkg_out; + int pkg_size; + file_t ft; + + // Temporal for reading the file + file_t file; + int data_size; + unsigned long zipsize = 0; + uint8 *datasave; + uint8 *zipdata; + + // Open file and copy to buffer + file = fs_open("/ram/save.map", O_RDONLY); + data_size = fs_total(file); + datasave = (uint8 *)malloc(data_size+1); + fs_read(file, datasave, data_size); + fs_close(file); + + // Allocate some memory for compression + zipsize = data_size * 2; + zipdata = (uint8*)malloc(zipsize); + + // The compressed save + compress(zipdata, &zipsize, datasave, data_size); + + // Make the package to the VMU. + strcpy(pkg.desc_short, "hydra"); + strcpy(pkg.desc_long, "Hydra Castle Labyrinth"); + strcpy(pkg.app_id, "hydracas"); + pkg.icon_cnt = 1; + memcpy((void *)&pkg.icon_pal[0],(void *)&vmu_savestate_pal,32); + pkg.icon_data = (const uint8*)&vmu_savestate_data; + pkg.icon_anim_speed = 0; + pkg.eyecatch_type = VMUPKG_EC_NONE; + pkg.data_len = zipsize; + pkg.data = zipdata; + vmu_pkg_build(&pkg, &pkg_out, &pkg_size); + + // Write at A1 port + fs_unlink("/vmu/a1/hydracas"); + ft = fs_open("/vmu/a1/hydracas", O_WRONLY); + if (!ft) { + return -1; + } + fs_write(ft, pkg_out, pkg_size); + fs_close(ft); + + // Free unused memory + free(pkg_out); + free(datasave); + free(zipdata); + + return 0; +} +#endif diff --git a/src/ini.c b/src/ini.c index d2d3f57..47118a2 100644 --- a/src/ini.c +++ b/src/ini.c @@ -30,6 +30,9 @@ void iniInit() strcat(fullPath, "sdmc:/3ds/appdata/HydraCastleLabyrinth/"); #endif strcat(fullPath, "system.ini"); + #ifdef DREAMCAST + strcat(fullPath, "/ram/system.ini"); + #endif } FILE* f; @@ -61,6 +64,9 @@ void saveSettings() strcat(fullPath, "sdmc:/3ds/appdata/HydraCastleLabyrinth/"); #endif strcat(fullPath, "system.ini"); + #ifdef DREAMCAST + strcat(fullPath, "/ram/system.ini"); + #endif } FILE* f; @@ -146,6 +152,9 @@ void loadSettings() strcat(fullPath, "sdmc:/3ds/appdata/HydraCastleLabyrinth/"); #endif strcat(fullPath, "system.ini"); + #ifdef DREAMCAST + strcat(fullPath, "/ram/system.ini"); + #endif } FILE* f; diff --git a/src/main.c b/src/main.c index d772bd0..1aca498 100644 --- a/src/main.c +++ b/src/main.c @@ -61,7 +61,7 @@ int main(int argc, char **argv) #elif defined(ODROID) desktopFS = 1; #else - screenScale = 2; + screenScale = 1; #endif useJoystick = 1; // get command line arguments @@ -128,4 +128,4 @@ int main(int argc, char **argv) #endif return 0; -} \ No newline at end of file +} diff --git a/src/sdl/audio.c b/src/sdl/audio.c index b66ce1e..20b036d 100644 --- a/src/sdl/audio.c +++ b/src/sdl/audio.c @@ -26,7 +26,7 @@ PHL_Music PHL_LoadMusic(char* fname, int loop) char buff[4096]; strcpy(buff, "data/"); strcat(buff, fname); - strcat(buff, ".mid"); + strcat(buff, ".ogg"); ret.snd = Mix_LoadMUS(buff); return ret; } diff --git a/src/sdl/input.c b/src/sdl/input.c index bf9de55..662b85b 100644 --- a/src/sdl/input.c +++ b/src/sdl/input.c @@ -69,6 +69,15 @@ void Input_KeyEvent(SDL_Event* evt) case SDLK_2: bL = w; break; case SDLK_SPACE: bSelect = w; break; case SDLK_RETURN: bStart = w; break; +#elif defined(DINGUX) + case SDLK_LSHIFT: bFaceUp = w; break; + case SDLK_LALT: bFaceDown = w; break; + case SDLK_LCTRL: bFaceLeft = w; break; + case SDLK_SPACE: bFaceRight = w; break; + case SDLK_BACKSPACE: bR = w; break; + case SDLK_TAB: bL = w; break; + case SDLK_ESCAPE: bSelect = w; break; + case SDLK_RETURN: bStart = w; break; #else case SDLK_e: bFaceUp = w; break; case SDLK_x: bFaceDown = w; break; -- cgit v1.2.3