diff --git a/.gitignore b/.gitignore index ade7cab1..06cc0022 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ # Text editor remnants *.swp .vscode/* +.idea/* # General project-specific ignores doxygen/doxygen/* diff --git a/CMakeLists.txt b/CMakeLists.txt index b3b0cbed..8ecdf0f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,24 +1,36 @@ cmake_minimum_required(VERSION 3.12) -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNON_MATCHING -DAVOID_UB") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNON_MATCHING -DAVOID_UB") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNON_MATCHING -DAVOID_UB") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNON_MATCHING -DAVOID_UB") project(sm64pc) set(ROM_VERSION us) +add_compile_definitions(VERSION_US) set(HEXDUMP_PATH "C:/git-sdk-64/usr/bin/hexdump.exe") set(N64GRAPHICS_DIR ${CMAKE_SOURCE_DIR}/tools/n64graphics) set(SKYCONV_DIR ${CMAKE_SOURCE_DIR}/tools/skyconv) set(MIO0_DIR ${CMAKE_SOURCE_DIR}/tools/mio0) set(AIFC_DECODE_DIR ${CMAKE_SOURCE_DIR}/tools/aifc_decode) +set(TEXTCONV_DIR ${CMAKE_SOURCE_DIR}/tools/textconv) -IF(WIN32) +IF (WIN32) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mwindows") set(N64GRAPHICS_DIR ${N64GRAPHICS_DIR}.exe) set(SKYCONV_DIR ${SKYCONV_DIR}.exe) set(MIO0_DIR ${MIO0_DIR}.exe) set(AIFC_DECODE_DIR ${AIFC_DECODE_DIR}.exe) -ENDIF() + set(AIFC_DECODE_DIR ${TEXTCONV_DIR}.exe) + set(LINK_LIBRARIES SDL2main SDL2 glew32 opengl32 m glu32 setupapi dinput8 user32 gdi32 imm32 ole32 oleaut32 shell32 winmm version uuid) + + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_EXE_LINKER_FLAGS "-static") +ELSE () + set(LINK_LIBRARIES SDL2main SDL2 GL m) +ENDIF () + set(N64_TOOLS ${N64GRAPHICS_DIR} ${SKYCONV_DIR} ${MIO0_DIR} ${AIFC_DECODE_DIR}) @@ -32,16 +44,16 @@ include_directories( ${CMAKE_BINARY_DIR}/include ) -SET(HEADER_FILES src/game/memory.h) +set(SOURCES src/pc/pc_main.c) -SET(SOURCES src/pc/gfx/gfx_pc.c - src/pc/pc_main.c - ) - -add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES}) +add_executable(${PROJECT_NAME} ${SOURCES}) +add_subdirectory(include) add_subdirectory(textures) +add_subdirectory(src/audio) add_subdirectory(src/goddard) add_subdirectory(src/pc) +add_subdirectory(src/menu) +add_subdirectory(src/game) -target_link_libraries(${PROJECT_NAME} goddard pc) \ No newline at end of file +target_link_libraries(${PROJECT_NAME} game audio goddard pc menu ${LINK_LIBRARIES}) diff --git a/extract_assets.py b/extract_assets.py index 706fc728..31faadaf 100755 --- a/extract_assets.py +++ b/extract_assets.py @@ -47,6 +47,7 @@ def remove_file(fname): def clean_assets(local_asset_file): assets = set(read_asset_map().keys()) assets.update(read_local_asset_list(local_asset_file)) + local_asset_file.close() for fname in list(assets) + [".assets-local.txt"]: if fname.startswith("@"): continue @@ -153,9 +154,9 @@ def main(): sys.exit(1) # Make sure tools exist - subprocess.check_call( - ["make", "-s", "-C", "tools/", "n64graphics", "skyconv", "mio0", "aifc_decode"] - ) + #subprocess.check_call( + # ["make", "-s", "-C", "tools/", "n64graphics", "skyconv", "mio0", "aifc_decode"] + #) # Go through the assets in roughly alphabetical order (but assets in the same # mio0 file still go together). diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt new file mode 100644 index 00000000..bb7adcd1 --- /dev/null +++ b/include/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.12) + +project(include) + +set(GENERATED_HEADERS + ${PROJECT_BINARY_DIR}/text_strings.h + ${PROJECT_BINARY_DIR}/text_menu_strings.h + ) + +add_custom_target( + ${PROJECT_NAME} + DEPENDS ${GENERATED_HEADERS} +) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/text_strings.h + COMMAND ${TEXTCONV_DIR} charmap.txt ${PROJECT_SOURCE_DIR}/text_strings.h.in ${PROJECT_BINARY_DIR}/text_strings.h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating text_strings.." +) + +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/text_menu_strings.h + COMMAND ${TEXTCONV_DIR} charmap_menu.txt ${PROJECT_SOURCE_DIR}/text_menu_strings.h.in ${PROJECT_BINARY_DIR}/text_menu_strings.h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating text_menu_strings.." +) \ No newline at end of file diff --git a/src/audio/CMakeLists.txt b/src/audio/CMakeLists.txt new file mode 100644 index 00000000..e5524a90 --- /dev/null +++ b/src/audio/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.12) + +project(audio) + + +file(GLOB SOURCES "*.c") + +file(GLOB HEADERS "*.h") + +add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) + diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt new file mode 100644 index 00000000..6f4f85a4 --- /dev/null +++ b/src/game/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.12) + +project(game) + + +file(GLOB_RECURSE SOURCES "*.c") + +file(GLOB_RECURSE HEADERS "*.h") + +add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) + diff --git a/src/goddard/CMakeLists.txt b/src/goddard/CMakeLists.txt index 06af3b2a..ccec16fb 100644 --- a/src/goddard/CMakeLists.txt +++ b/src/goddard/CMakeLists.txt @@ -42,4 +42,6 @@ set(HEADERS skin_movement.h ) -add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) \ No newline at end of file +add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) + +add_dependencies(${PROJECT_NAME} textures) \ No newline at end of file diff --git a/src/menu/CMakeLists.txt b/src/menu/CMakeLists.txt new file mode 100644 index 00000000..86efef77 --- /dev/null +++ b/src/menu/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.12) + +project(menu) + +file(GLOB SOURCES "*.c") + +file(GLOB HEADERS "*.h") + +add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) + +target_include_directories( + ${PROJECT_NAME} PRIVATE + ${CMAKE_BINARY_DIR}/include +) + +add_dependencies(${PROJECT_NAME} include) diff --git a/textures/CMakeLists.txt b/textures/CMakeLists.txt index 5f7646c4..7d6f570b 100644 --- a/textures/CMakeLists.txt +++ b/textures/CMakeLists.txt @@ -14,8 +14,22 @@ add_custom_command( COMMENT "Extracting assets from: baserom.${ROM_VERSION}.z64" ) +add_custom_target( + clean_textures +) + +add_custom_command( + TARGET clean_textures + COMMAND python ${CMAKE_SOURCE_DIR}/extract_assets.py --clean + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + DEPENDS ${N64_TOOLS} + COMMENT "Cleaning textures.." +) + + file(GLOB_RECURSE TEXTURE_PNGS "${PROJECT_SOURCE_DIR}/*.*.png") set(OUTPUT_DUMPED) +set(OUTPUT_HEX) foreach(TEXTURE_PNG ${TEXTURE_PNGS}) file(RELATIVE_PATH TEXTURE_REL_PATH ${PROJECT_SOURCE_DIR} ${TEXTURE_PNG}) @@ -31,14 +45,17 @@ foreach(TEXTURE_PNG ${TEXTURE_PNGS}) DEPENDS ${PROJECT_SOURCE_DIR}/${TEXTURE_REL_PATH} ) list(APPEND OUTPUT_DUMPED ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_DUMPED}) + set(TEXTURE_HEX ${TEXTURE_DUMPED}.inc.c) + add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_HEX} + COMMAND ${HEXDUMP_PATH} -v -e '1/1 \"0x%%X,\"' ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_DUMPED} > ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_HEX} + COMMENT "dumping ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_DUMPED} to ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_HEX}" + DEPENDS ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_DUMPED} + ) + list(APPEND OUTPUT_HEX ${PROJECT_BINARY_DIR}/${REL_PATH}/${TEXTURE_HEX}) endforeach() -add_custom_target( - dump_assets - DEPENDS extract_assets ${OUTPUT_DUMPED} -) - add_custom_target( ${PROJECT_NAME} - DEPENDS extract_assets dump_assets -) \ No newline at end of file + DEPENDS extract_assets ${OUTPUT_DUMPED} ${OUTPUT_HEX} +)