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
|
||||
# TODO: find automatically
|
||||
# TODO: test on Windows
|
||||
set(BLENDER_3_6 "blender")
|
||||
set(FFMPEG "ffmpeg")
|
||||
set(IMAGEMAGICK_CONVERT "convert")
|
||||
set(MPG123 "mpg123")
|
||||
|
@ -15,6 +16,8 @@ set(VPK "vpk")
|
|||
set(VTF2PNG "vtf2png")
|
||||
|
||||
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(JSOX "${PROJECT_SOURCE_DIR}/tools/jsox.js")
|
||||
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 -- $@
|
||||
|
||||
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
|
||||
@mkdir -p $(@D)
|
||||
|
|
|
@ -17,3 +17,4 @@ endif()
|
|||
|
||||
add_subdirectory(materials)
|
||||
add_subdirectory(sound)
|
||||
add_subdirectory(test_chambers)
|
||||
|
|
|
@ -174,7 +174,14 @@ function(_add_extract_frame_command INPUT_FILE OUTPUT_FILE SECONDS)
|
|||
COMMAND
|
||||
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
||||
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
|
||||
${IMAGEMAGICK_CONVERT} ${OUTPUT_FILE} -crop 491x369+265+202 -resize 160x120 ${OUTPUT_FILE}
|
||||
COMMENT
|
||||
|
@ -230,7 +237,8 @@ function(_add_texture_transform_command TEXTURE_SCRIPT OUTPUT_LIST)
|
|||
OUTPUT
|
||||
${OUTPUT_FILES}
|
||||
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
|
||||
# TODO: Change this to PAK_MODIFIED_MATERIALS_DIR and update .ims files with relative path
|
||||
${PROJECT_SOURCE_DIR}
|
||||
|
@ -401,7 +409,10 @@ function(_add_material_generate_command INPUT_FILE OUTPUT_LIST)
|
|||
OUTPUT
|
||||
${OUTPUT_FILE_H} ${OUTPUT_FILE_C}
|
||||
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
|
||||
"Generating materials for $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
||||
VERBATIM
|
||||
|
|
|
@ -27,7 +27,7 @@ function(_add_extract_video_audio_command INPUT_FILE OUTPUT_FILE)
|
|||
COMMAND
|
||||
${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
|
||||
COMMAND
|
||||
${FFMPEG} -i ${INPUT_FILE} -vn -loglevel quiet -y ${OUTPUT_FILE}
|
||||
${FFMPEG} -i ${INPUT_FILE} -vn -loglevel error -y ${OUTPUT_FILE}
|
||||
COMMENT
|
||||
"Converting $<PATH:RELATIVE_PATH,${INPUT_FILE},${PROJECT_SOURCE_DIR}>"
|
||||
VERBATIM
|
||||
|
@ -424,7 +424,7 @@ set(LANGUAGES_H "${BUILD_AUDIO_DIR}/languages.h")
|
|||
set(LANGUAGES_C "${BUILD_AUDIO_DIR}/languages.c")
|
||||
add_custom_command(
|
||||
DEPENDS
|
||||
all_sounds ${SOUND_TABLE_DEPENDENCIES}
|
||||
all_sounds ${GEN_SOUND_IDS} ${SOUND_TABLE_DEPENDENCIES}
|
||||
OUTPUT
|
||||
${CLIPS_H} ${LANGUAGES_H} ${LANGUAGES_C}
|
||||
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)
|
||||
end
|
||||
|
||||
local function path_join(...)
|
||||
local dir_sep = package.config:sub(1,1)
|
||||
return table.concat({...}, dir_sep)
|
||||
end
|
||||
|
||||
return {
|
||||
string_split = string_split,
|
||||
trim = trim,
|
||||
path_join = path_join
|
||||
}
|
|
@ -1,7 +1,14 @@
|
|||
local util = require('tools.level_scripts.util')
|
||||
local yaml = require('yaml')
|
||||
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 json_contents = yaml.parse(input_file:read('a'))
|
||||
|
|
Loading…
Reference in a new issue