diff --git a/.gitignore b/.gitignore index be33cc5..0984c12 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Build files /build-cg /*.g3a +/generated/ # Python bytecode __pycache__/ diff --git a/CMakeLists.txt b/CMakeLists.txt index dc62cfa..391ddda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,19 @@ include(Fxconv) find_package(Gint 2.3 REQUIRED) find_package(LibImg 2.2 REQUIRED) -include_directories(include) +add_custom_target(filepaths + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS generated/filepaths.h + COMMENT "generated/filepaths.h target") + +add_custom_command(OUTPUT "${CMAKE_CURRENT_LIST_DIR}/generated/filepaths.h" + COMMENT "Generate genereated/filepaths.h." + COMMAND mkdir -p generated && + ./make_filepaths.sh > generated/filepaths.h + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + DEPENDS make_filepaths.sh) + +include_directories(include generated) set(SOURCES src/main.c @@ -37,6 +49,7 @@ set(FLAGS fxconv_declare_assets(${ASSETS} WITH_METADATA) add_executable(${PROJECT_NAME} ${SOURCES} ${ASSETS}) +add_dependencies(${PROJECT_NAME} filepaths) target_compile_options(${PROJECT_NAME} PRIVATE ${FLAGS}) target_link_libraries(${PROJECT_NAME} Gint::Gint) target_link_libraries(${PROJECT_NAME} LibImg::LibImg) diff --git a/make_filepaths.sh b/make_filepaths.sh new file mode 100755 index 0000000..465968b --- /dev/null +++ b/make_filepaths.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-3.0-or-later + +printf '/* SPDX-License-Identifier: GPL-3.0-or-later */\n' +printf '#pragma once\n' +printf '#include \n\n' +printf 'static const uint16_t filepaths[][64] = {\n' + +cd assets/levels +for PACK in *; do + PACK_NAME="$(basename $PACK)" + cd "$PACK" + for LEVEL in *; do + LEVEL_NAME="$(basename $LEVEL | cut -c2- | + awk -F '.' '{print $1}')" + [ -z "$LEVEL_NAMES" ] && + LEVEL_NAMES=" + \"$LEVEL_NAME\"" || + LEVEL_NAMES="$LEVEL_NAMES, + \"$LEVEL_NAME\"" + printf 'u"\\\\\\\\fls0\\\\mtem\\\\%s\\\\' "$PACK_NAME" + printf '%s",\n' "$LEVEL" + done + cd .. +done +printf '};\n' + +printf 'static const char level_names[][32] = { %s\n};\n' "$LEVEL_NAMES" diff --git a/src/level/load.c b/src/level/load.c index 99da579..ecf7d9e 100644 --- a/src/level/load.c +++ b/src/level/load.c @@ -3,6 +3,7 @@ #include "level.h" #include "tiles.h" +#include "filepaths.h" #include #include #include @@ -13,10 +14,6 @@ fatal_error_msg = error_msg; \ return; \ } -#define PATH_PREFIX u"\\\\fls0\\mtem\\" - -static const uint16_t filepaths[][32] = { - PATH_PREFIX "pillars.kble", PATH_PREFIX "human.kble", {0}}; /* globals are needed when using gint_switch() */ struct Level level;