mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Work on CMake conversion: test chambers
Incidental changes along the way: * Move `export_level.lua` to `tools/level_scripts/` * Small reorganizations/fixes to existing `CMakeLists.txt` files * Support passing absolute paths to level export
This commit is contained in:
parent
dea0c3591d
commit
fa0940fe90
|
@ -4,6 +4,7 @@ project(portal64)
|
||||||
# Tools
|
# Tools
|
||||||
# TODO: find automatically
|
# TODO: find automatically
|
||||||
# TODO: test on Windows
|
# TODO: test on Windows
|
||||||
|
set(BLENDER_3_6 "blender")
|
||||||
set(FFMPEG "ffmpeg")
|
set(FFMPEG "ffmpeg")
|
||||||
set(IMAGEMAGICK_CONVERT "convert")
|
set(IMAGEMAGICK_CONVERT "convert")
|
||||||
set(MPG123 "mpg123")
|
set(MPG123 "mpg123")
|
||||||
|
@ -15,6 +16,8 @@ set(VPK "vpk")
|
||||||
set(VTF2PNG "vtf2png")
|
set(VTF2PNG "vtf2png")
|
||||||
|
|
||||||
set(CONVERT_ASSET "${PROJECT_SOURCE_DIR}/tools/convert_asset.py")
|
set(CONVERT_ASSET "${PROJECT_SOURCE_DIR}/tools/convert_asset.py")
|
||||||
|
set(EXPORT_FBX "${PROJECT_SOURCE_DIR}/tools/export_fbx.py")
|
||||||
|
set(GEN_LEVEL_LIST "${PROJECT_SOURCE_DIR}/tools/generate_level_list.js")
|
||||||
set(GEN_SOUND_IDS "${PROJECT_SOURCE_DIR}/tools/generate_sound_ids.js")
|
set(GEN_SOUND_IDS "${PROJECT_SOURCE_DIR}/tools/generate_sound_ids.js")
|
||||||
set(JSOX "${PROJECT_SOURCE_DIR}/tools/jsox.js")
|
set(JSOX "${PROJECT_SOURCE_DIR}/tools/jsox.js")
|
||||||
set(SKELETOOL64 "${PROJECT_SOURCE_DIR}/skelatool64/skeletool64")
|
set(SKELETOOL64 "${PROJECT_SOURCE_DIR}/skelatool64/skeletool64")
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -463,7 +463,7 @@ build/%.fbx: %.blend
|
||||||
$(BLENDER_3_6) $< --background --python tools/export_fbx.py -- $@
|
$(BLENDER_3_6) $< --background --python tools/export_fbx.py -- $@
|
||||||
|
|
||||||
build/assets/test_chambers/%.h build/assets/test_chambers/%_geo.c build/assets/test_chambers/%_anim.c: build/assets/test_chambers/%.fbx assets/test_chambers/%.yaml build/assets/materials/static.h build/src/audio/subtitles.h $(SKELATOOL64) $(TEXTURE_IMAGES) $(LUA_FILES)
|
build/assets/test_chambers/%.h build/assets/test_chambers/%_geo.c build/assets/test_chambers/%_anim.c: build/assets/test_chambers/%.fbx assets/test_chambers/%.yaml build/assets/materials/static.h build/src/audio/subtitles.h $(SKELATOOL64) $(TEXTURE_IMAGES) $(LUA_FILES)
|
||||||
$(SKELATOOL64) --script tools/export_level.lua --fixed-point-scale ${SCENE_SCALE} --model-scale 0.01 --name $(<:build/assets/test_chambers/%.fbx=%) -m assets/materials/static.skm.yaml -o $(<:%.fbx=%.h) $<
|
$(SKELATOOL64) --script tools/level_scripts/export_level.lua --fixed-point-scale ${SCENE_SCALE} --model-scale 0.01 --name $(<:build/assets/test_chambers/%.fbx=%) -m assets/materials/static.skm.yaml -o $(<:%.fbx=%.h) $<
|
||||||
|
|
||||||
build/assets/test_chambers/%.o: build/assets/test_chambers/%.c build/assets/materials/static.h
|
build/assets/test_chambers/%.o: build/assets/test_chambers/%.c build/assets/materials/static.h
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
|
|
|
@ -17,3 +17,4 @@ endif()
|
||||||
|
|
||||||
add_subdirectory(materials)
|
add_subdirectory(materials)
|
||||||
add_subdirectory(sound)
|
add_subdirectory(sound)
|
||||||
|
add_subdirectory(test_chambers)
|
||||||
|
|
|
@ -174,7 +174,14 @@ function(_add_extract_frame_command INPUT_FILE OUTPUT_FILE SECONDS)
|
||||||
COMMAND
|
COMMAND
|
||||||
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
||||||
COMMAND
|
COMMAND
|
||||||
${FFMPEG} -ss 00:00:${SECONDS} -i ${INPUT_FILE} -frames:v 1 -update true -q:v 2 -loglevel quiet -y ${OUTPUT_FILE}
|
${FFMPEG}
|
||||||
|
-ss 00:00:${SECONDS}
|
||||||
|
-i ${INPUT_FILE}
|
||||||
|
-frames:v 1
|
||||||
|
-update true
|
||||||
|
-q:v 2
|
||||||
|
-loglevel error
|
||||||
|
-y ${OUTPUT_FILE}
|
||||||
COMMAND
|
COMMAND
|
||||||
${IMAGEMAGICK_CONVERT} ${OUTPUT_FILE} -crop 491x369+265+202 -resize 160x120 ${OUTPUT_FILE}
|
${IMAGEMAGICK_CONVERT} ${OUTPUT_FILE} -crop 491x369+265+202 -resize 160x120 ${OUTPUT_FILE}
|
||||||
COMMENT
|
COMMENT
|
||||||
|
@ -230,7 +237,8 @@ function(_add_texture_transform_command TEXTURE_SCRIPT OUTPUT_LIST)
|
||||||
OUTPUT
|
OUTPUT
|
||||||
${OUTPUT_FILES}
|
${OUTPUT_FILES}
|
||||||
COMMAND
|
COMMAND
|
||||||
${PYTHON3} ${CONVERT_ASSET} ${IMAGEMAGICK_CONVERT} ${INPUT_FILE} ${TEXTURE_SCRIPT} ${OUTPUT_FILE}
|
${PYTHON3} ${CONVERT_ASSET}
|
||||||
|
${IMAGEMAGICK_CONVERT} ${INPUT_FILE} ${TEXTURE_SCRIPT} ${OUTPUT_FILE}
|
||||||
WORKING_DIRECTORY
|
WORKING_DIRECTORY
|
||||||
# TODO: Change this to PAK_MODIFIED_MATERIALS_DIR and update .ims files with relative path
|
# TODO: Change this to PAK_MODIFIED_MATERIALS_DIR and update .ims files with relative path
|
||||||
${PROJECT_SOURCE_DIR}
|
${PROJECT_SOURCE_DIR}
|
||||||
|
@ -401,7 +409,10 @@ function(_add_material_generate_command INPUT_FILE OUTPUT_LIST)
|
||||||
OUTPUT
|
OUTPUT
|
||||||
${OUTPUT_FILE_H} ${OUTPUT_FILE_C}
|
${OUTPUT_FILE_H} ${OUTPUT_FILE_C}
|
||||||
COMMAND
|
COMMAND
|
||||||
${SKELETOOL64} --name ${MATERIAL_NAME} -m ${INPUT_FILE} --material-output -o ${OUTPUT_FILE_H}
|
${SKELETOOL64}
|
||||||
|
--name ${MATERIAL_NAME}
|
||||||
|
-m ${INPUT_FILE}
|
||||||
|
--material-output -o ${OUTPUT_FILE_H}
|
||||||
COMMENT
|
COMMENT
|
||||||
"Generating materials for $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
"Generating materials for $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
|
|
|
@ -27,7 +27,7 @@ function(_add_extract_video_audio_command INPUT_FILE OUTPUT_FILE)
|
||||||
COMMAND
|
COMMAND
|
||||||
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
||||||
COMMAND
|
COMMAND
|
||||||
${FFMPEG} -i ${INPUT_FILE} -vn -loglevel quiet -y ${OUTPUT_FILE}
|
${FFMPEG} -i ${INPUT_FILE} -vn -loglevel error -y ${OUTPUT_FILE}
|
||||||
COMMENT
|
COMMENT
|
||||||
"Converting $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
"Converting $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
|
@ -424,7 +424,7 @@ set(LANGUAGES_H "${BUILD_AUDIO_DIR}/languages.h")
|
||||||
set(LANGUAGES_C "${BUILD_AUDIO_DIR}/languages.c")
|
set(LANGUAGES_C "${BUILD_AUDIO_DIR}/languages.c")
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
DEPENDS
|
DEPENDS
|
||||||
all_sounds ${SOUND_TABLE_DEPENDENCIES}
|
all_sounds ${GEN_SOUND_IDS} ${SOUND_TABLE_DEPENDENCIES}
|
||||||
OUTPUT
|
OUTPUT
|
||||||
${CLIPS_H} ${LANGUAGES_H} ${LANGUAGES_C}
|
${CLIPS_H} ${LANGUAGES_H} ${LANGUAGES_C}
|
||||||
COMMAND
|
COMMAND
|
||||||
|
|
165
assets/test_chambers/CMakeLists.txt
Normal file
165
assets/test_chambers/CMakeLists.txt
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
cmake_path(
|
||||||
|
RELATIVE_PATH CMAKE_CURRENT_SOURCE_DIR
|
||||||
|
BASE_DIRECTORY "${PROJECT_SOURCE_DIR}"
|
||||||
|
OUTPUT_VARIABLE RELATIVE_CURRENT_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
##################
|
||||||
|
## Level export ##
|
||||||
|
##################
|
||||||
|
|
||||||
|
set(SCENE_SCALE 128)
|
||||||
|
set(MODEL_SCALE 0.01)
|
||||||
|
|
||||||
|
set(LEVELS
|
||||||
|
test_chamber_00
|
||||||
|
test_chamber_01
|
||||||
|
test_chamber_02
|
||||||
|
test_chamber_03
|
||||||
|
test_chamber_04
|
||||||
|
test_chamber_05
|
||||||
|
test_chamber_06
|
||||||
|
test_chamber_07
|
||||||
|
test_chamber_08
|
||||||
|
test_chamber_09
|
||||||
|
test_chamber_10
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LEVEL_MATERIALS
|
||||||
|
${ASSETS_DIR}/materials/static.skm.yaml
|
||||||
|
)
|
||||||
|
|
||||||
|
set(EXPORT_LEVEL ${PROJECT_SOURCE_DIR}/tools/level_scripts/export_level.lua)
|
||||||
|
set(EXPORT_SCRIPTS
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/animation.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/collision_export.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/dynamic_collision_export.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/entities.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/portal_surfaces.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/room_export.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/signals.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/static_export.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/trigger.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/util.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/world.lua
|
||||||
|
${PROJECT_SOURCE_DIR}/tools/level_scripts/yaml_loader.lua
|
||||||
|
)
|
||||||
|
|
||||||
|
function(_add_level_export_command LEVEL_NAME OUTPUT_VARIABLE)
|
||||||
|
set(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${LEVEL_NAME}/${LEVEL_NAME}.blend")
|
||||||
|
set(OUTPUT_FILE "${CMAKE_BINARY_DIR}/${RELATIVE_CURRENT_DIR}/${LEVEL_NAME}/${LEVEL_NAME}.fbx")
|
||||||
|
|
||||||
|
cmake_path(
|
||||||
|
GET OUTPUT_FILE PARENT_PATH
|
||||||
|
OUTPUT_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
DEPENDS
|
||||||
|
${EXPORT_FBX} ${INPUT_FILE}
|
||||||
|
OUTPUT
|
||||||
|
${OUTPUT_FILE}
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
||||||
|
COMMAND
|
||||||
|
${BLENDER_3_6} ${INPUT_FILE} --background --python ${EXPORT_FBX} -- ${OUTPUT_FILE}
|
||||||
|
COMMENT
|
||||||
|
"Exporting $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
set(${OUTPUT_VARIABLE} ${OUTPUT_FILE})
|
||||||
|
return(PROPAGATE ${OUTPUT_VARIABLE})
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(_add_level_generate_command LEVEL_NAME LEVEL_FBX OUTPUT_LIST)
|
||||||
|
set(LEVEL_YAML "${CMAKE_CURRENT_SOURCE_DIR}/${LEVEL_NAME}/${LEVEL_NAME}.yaml")
|
||||||
|
|
||||||
|
cmake_path(
|
||||||
|
REMOVE_EXTENSION LEVEL_FBX
|
||||||
|
OUTPUT_VARIABLE OUTPUT_FILE_NO_EXTENSION
|
||||||
|
)
|
||||||
|
|
||||||
|
set(OUTPUT_FILE_H "${OUTPUT_FILE_NO_EXTENSION}.h")
|
||||||
|
set(OUTPUT_FILE_GEO_C "${OUTPUT_FILE_NO_EXTENSION}_geo.c")
|
||||||
|
|
||||||
|
# TODO: not all levels have animations
|
||||||
|
# set(OUTPUT_FILE_ANIM_C "${OUTPUT_FILE_NO_EXTENSION}_anim.c")
|
||||||
|
|
||||||
|
set(MATERIAL_ARGS "")
|
||||||
|
foreach(MATERIAL ${LEVEL_MATERIALS})
|
||||||
|
list(APPEND MATERIAL_ARGS
|
||||||
|
-m ${MATERIAL}
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
DEPENDS
|
||||||
|
${EXPORT_LEVEL} ${LEVEL_FBX} ${LEVEL_YAML} ${LEVEL_MATERIALS}
|
||||||
|
OUTPUT
|
||||||
|
${OUTPUT_FILE_H} ${OUTPUT_FILE_GEO_C} ${OUTPUT_FILE_ANIM_C}
|
||||||
|
COMMAND
|
||||||
|
${SKELETOOL64}
|
||||||
|
--script ${EXPORT_LEVEL}
|
||||||
|
--fixed-point-scale ${SCENE_SCALE}
|
||||||
|
--model-scale ${MODEL_SCALE}
|
||||||
|
--name ${LEVEL_NAME}
|
||||||
|
${MATERIAL_ARGS}
|
||||||
|
--output ${OUTPUT_FILE_H}
|
||||||
|
${LEVEL_FBX}
|
||||||
|
WORKING_DIRECTORY
|
||||||
|
${PROJECT_SOURCE_DIR}
|
||||||
|
COMMENT
|
||||||
|
"Generating level ${LEVEL_NAME}"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND ${OUTPUT_LIST}
|
||||||
|
${OUTPUT_FILE_H}
|
||||||
|
${OUTPUT_FILE_GEO_C}
|
||||||
|
${OUTPUT_FILE_ANIM_C}
|
||||||
|
)
|
||||||
|
return(PROPAGATE ${OUTPUT_LIST})
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Add commands for exporting level files
|
||||||
|
|
||||||
|
set(LEVEL_GENERATED_FILES "")
|
||||||
|
|
||||||
|
foreach(LEVEL ${LEVELS})
|
||||||
|
_add_level_export_command(${LEVEL} LEVEL_FBX)
|
||||||
|
_add_level_generate_command(${LEVEL} ${LEVEL_FBX} LEVEL_GENERATED_FILES)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_custom_target(
|
||||||
|
all_levels
|
||||||
|
DEPENDS ${LEVEL_GENERATED_FILES}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add command for generating level list header
|
||||||
|
|
||||||
|
set(LEVEL_GENERATED_HEADERS ${LEVEL_GENERATED_FILES})
|
||||||
|
list(FILTER LEVEL_GENERATED_HEADERS INCLUDE REGEX "\.h$")
|
||||||
|
|
||||||
|
set(LEVEL_LIST_OUT_DIR "${CMAKE_BINARY_DIR}/${RELATIVE_CURRENT_DIR}")
|
||||||
|
set(LEVEL_LIST "${LEVEL_LIST_OUT_DIR}/level_list.h")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
DEPENDS
|
||||||
|
${GENERATE_LEVEL_LIST} ${LEVEL_GENERATED_HEADERS}
|
||||||
|
OUTPUT
|
||||||
|
${LEVEL_LIST}
|
||||||
|
COMMAND
|
||||||
|
${NODEJS} ${GEN_LEVEL_LIST} ${LEVEL_LIST} ${LEVEL_GENERATED_HEADERS}
|
||||||
|
WORKING_DIRECTORY
|
||||||
|
${LEVEL_LIST_OUT_DIR}
|
||||||
|
COMMENT
|
||||||
|
"Generating $<PATH:RELATIVE_PATH,${LEVEL_LIST},${PROJECT_SOURCE_DIR}>"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: remove
|
||||||
|
add_custom_target(
|
||||||
|
level_list
|
||||||
|
DEPENDS ${LEVEL_LIST}
|
||||||
|
)
|
|
@ -29,7 +29,13 @@ local function trim(inputstr)
|
||||||
return string.sub(inputstr, start_index, end_index)
|
return string.sub(inputstr, start_index, end_index)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function path_join(...)
|
||||||
|
local dir_sep = package.config:sub(1,1)
|
||||||
|
return table.concat({...}, dir_sep)
|
||||||
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
string_split = string_split,
|
string_split = string_split,
|
||||||
trim = trim,
|
trim = trim,
|
||||||
|
path_join = path_join
|
||||||
}
|
}
|
|
@ -1,7 +1,14 @@
|
||||||
|
local util = require('tools.level_scripts.util')
|
||||||
local yaml = require('yaml')
|
local yaml = require('yaml')
|
||||||
local sk_input = require('sk_input')
|
local sk_input = require('sk_input')
|
||||||
|
|
||||||
local file_location = string.sub(sk_input.input_filename, 7, -4) .. 'yaml'
|
local file_stem = sk_input.input_filename:match(".+[\\/]([^\\.]+)")
|
||||||
|
local file_location = util.path_join(
|
||||||
|
"assets",
|
||||||
|
"test_chambers",
|
||||||
|
file_stem,
|
||||||
|
file_stem .. ".yaml"
|
||||||
|
)
|
||||||
|
|
||||||
local input_file = io.open(file_location, 'r')
|
local input_file = io.open(file_location, 'r')
|
||||||
local json_contents = yaml.parse(input_file:read('a'))
|
local json_contents = yaml.parse(input_file:read('a'))
|
||||||
|
|
Loading…
Reference in a new issue