Merge pull request #38 from GenZmeY/buildsystem

New build system
This commit is contained in:
GenZmeY 2022-01-16 09:45:48 +03:00 committed by GitHub
commit 48f192e17b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 232 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "tools"]
path = tools
url = https://github.com/GenZmeY/KF2-BuildTools

View File

@ -35,32 +35,35 @@ The full changelog is available on [steam workshop](https://steamcommunity.com/s
# Build
1. Install [Killing Floor 2](https://store.steampowered.com/app/232090/Killing_Floor_2/), Killing Floor 2 - SDK and [git for windows](https://git-scm.com/download/win);
2. Open git-bash in the folder: `C:\Users\<USERNAME>\Documents\My Games\KillingFloor2\KFGame`
2. open git-bash and go to any folder where you want to store ServerExt sources:
`cd <ANY_FOLDER_YOU_WANT>`
3. Clone this repository and go to the source folder:
`git clone https://github.com/GenZmeY/KF2-Server-Extension && cd KF2-Server-Extension`
4. Run make.sh script:
`./make.sh --compile`
4. Download ServerExt dependencies:
`git submodule init && git submodule update`
5. Compile ServerExt:
`./tools/builder -c`
5. The compiled files will be here:
`C:\Users\<USERNAME>\Documents\My Games\KillingFloor2\KFGame\Unpublished\BrewedPC\Script\`
# Testing
You can check your build using the `make.sh` script.
Open git-bash in the source folder and run the script:
`./make.sh --test`
On first launch, the script will create `testing.ini` file and launch the game with the settings from it (KF-Nuked map + ServerExtMut). Edit this file if you need to test the mutator with different parameters.
Open git-bash in the ServerExt source folder and run command:
`./tools/builder -t`
(or `./tools/builder -ct` if you haven't compiled the mutator yet)
A local single-user test will be launched with parameters from `test.cfg` (edit this file if you want to test mutator with different parameters).
# Using and configuring ServerExt
A detailed manual is available on the [mod page](https://steamcommunity.com/sharedfiles/filedetails/?id=2085786712) in the steam workshop.
# Publication in steam workshop
1. Modify the publish files if necessary, they are here:
`C:\Users\<USERNAME>\Documents\My Games\KillingFloor2\KFGame\Src\PublicationContent\`
1. Modify the publish files if necessary, they are in the `PublicationContent`:
> description.txt
> preview.png
> tags.txt
> title.txt
2. Run this command in the source folder:
`./make.sh -c && ./make.sh -bu && ./make.sh -u`
2. Run this command in the source folder: `./tools/builder -cbu`
# Contributing
**Participation is welcome!**

16
build.cfg Normal file
View File

@ -0,0 +1,16 @@
# Build parameters
# If True - compresses the mutator when compiling
# Scripts will be stored in binary form
# (reduces the size of the output file)
StripSource="True"
# Mutators to be compiled
# Specify them with a space as a separator,
# Mutators will be compiled in the specified order
PackageBuildOrder="ServerExt ServerExtMut"
# Mutators that will be uploaded to the workshop
# Specify them with a space as a separator,
# The order doesn't matter
PackageUpload="ServerExt ServerExtMut"

221
make.sh
View File

@ -1,221 +0,0 @@
#!/bin/bash
# Requirements: git-bash
# https://git-scm.com/download/win
set -Eeuo pipefail
trap cleanup SIGINT SIGTERM ERR EXIT
function winpath2unix () # $1: win path
{
echo "$*" | \
sed -r 's|^(.):|\\\1|' | \
sed 's|\\|/|g'
}
function unixpath2win () # $1: unix path
{
echo "$*" | \
sed -r 's|^/(.)|\1:|' | \
sed 's|/|\\|g'
}
function reg_readkey () # $1: path, $2: key
{
winpath2unix $(
reg query "$1" //v "$2" | \
grep -F "$2" | \
awk '{ $1=$2=""; print $0 }' )
}
function show_help ()
{
echo "$ScriptName"
echo "Usage:"
echo "${ScriptName} OPTION"
echo "Options:"
echo " -c, --compile"
echo " -b, --brew"
echo " -bu, --brew-unpublished"
echo " -u, --upload"
echo " -t, --test"
echo " -h, --help"
}
function cleanup()
{
trap - SIGINT SIGTERM ERR EXIT
restore_kfeditorconf
}
function get_latest_multini ()
{
local ApiUrl="https://api.github.com/repos/GenZmeY/multini/releases/latest"
local LatestTag=$(curl --silent "$ApiUrl" | grep -Po '"tag_name": "\K.*?(?=")')
local DownloadUrl="https://github.com/GenZmeY/multini/releases/download/$LatestTag/multini-windows-amd64.exe"
mkdir -p "$ThirdPartyBin"
curl -LJs "$DownloadUrl" -o "$ThirdPartyBin/multini.exe"
}
function backup_kfeditorconf ()
{
cp "$KFEditorConf" "$KFEditorConfBackup"
}
function restore_kfeditorconf ()
{
if [[ -f "$KFEditorConfBackup" ]]; then
mv -f "$KFEditorConfBackup" "$KFEditorConf"
fi
}
function setup_modpackages ()
{
multini --set "$KFEditorConf" 'ModPackages' 'ModPackages' 'ServerExt'
multini --add "$KFEditorConf" 'ModPackages' 'ModPackages' 'ServerExtMut'
multini --set "$KFEditorConf" 'ModPackages' 'ModPackagesInPath' "$(unixpath2win "$MutSource")"
}
function compiled ()
{
test -f "$MutStructScript/ServerExt.u" && test -f "$MutStructScript/ServerExtMut.u"
}
function compile ()
{
if ! command -v multini &> /dev/null; then
get_latest_multini
fi
backup_kfeditorconf && setup_modpackages
rm -rf "$MutUnpublish"
mkdir -p \
"$MutUnpublish" \
"$MutStructScript" \
"$MutStructPackages" \
"$MutStructLocalization"
cp -rf "$MutSource/Localization"/* "$MutStructLocalization"
cp -rf "$MutSource/ServerExtMut"/*.upk "$MutStructPackages"
CMD //C "$(unixpath2win "$KFEditor")" make -useunpublished &
local PID="$!"
while ps -p "$PID" &> /dev/null
do
if compiled ; then
kill "$PID"; break
fi
sleep 2
done
restore_kfeditorconf
}
function brew ()
{
echo "brew command is broken. Use --brew-unpublished or brew from WorkshopUploadToolGUI instead of this."
# CMD //C "$(unixpath2win "$KFEditor")" brewcontent -platform=PC ServerExt ServerExtMut -useunpublished
}
function brew_unpublished ()
{
rm -rf "$MutPublish"
if ! compiled ; then
compile
fi
cp -rf "$MutUnpublish" "$MutPublish"
}
function generate_wsinfo () # $1: package dir
{
local Description=$(cat "$MutPubContent/description.txt")
local Title=$(cat "$MutPubContent/title.txt")
local Preview=$(unixpath2win "$MutPubContent/preview.png")
local Tags=$(cat "$MutPubContent/tags.txt")
local PackageDir=$(unixpath2win "$1")
echo "\$Description \"$Description\"
\$Title \"$Title\"
\$PreviewFile \"$Preview\"
\$Tags \"$Tags\"
\$MicroTxItem \"false\"
\$PackageDirectory \"$PackageDir\"
" > "$MutWsInfo"
}
function upload ()
{
PackageDir=$(mktemp -d -u -p "$KFDoc")
cp -rf "$MutPublish"/* "$PackageDir"
generate_wsinfo "$PackageDir"
CMD //C "$(unixpath2win "$KFWorkshop")" "$MutWsInfoName"
rm -rf "$PackageDir"
rm -f "$MutWsInfo"
}
function create_default_testing_ini ()
{
echo "Map=\"KF-Nuked\"
Game=\"KFGameContent.KFGameInfo_Survival\"
Difficulty=\"0\"
GameLength=\"0\"
Mutators=\"ServerExtMut.ServerExtMut\"
Args=\"\"" > "$MutTestingIni"
}
function game_test ()
{
if ! [[ -r "$MutTestingIni" ]]; then
create_default_testing_ini
fi
source "$MutTestingIni"
CMD //C "$(unixpath2win "$KFGame")" ${Map}?Difficulty=${Difficulty}?GameLength=${GameLength}?Game=${Game}?Mutator=${Mutators}?${Args} -useunpublished -log
}
ScriptFullname=$(readlink -e "$0")
ScriptName=$(basename "$0")
ScriptDir=$(dirname "$ScriptFullname")
SteamPath=$(reg_readkey "HKCU\Software\Valve\Steam" "SteamPath")
DocumentsPath=$(reg_readkey "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Personal")
KFPath="$SteamPath/steamapps/common/killingfloor2"
KFBin="$KFPath/Binaries"
KFEditor="$KFBin/Win64/KFEditor.exe"
KFGame="$KFBin/Win64/KFGame.exe"
KFWorkshop="$KFBin/WorkshopUserTool.exe"
KFDoc="$DocumentsPath/My Games/KillingFloor2"
KFConfig="$KFDoc/KFGame/Config"
KFEditorConf="$KFConfig/KFEditor.ini"
KFEditorConfBackup="${KFEditorConf}.backup"
MutSource="$ScriptDir"
MutPubContent="$MutSource/PublicationContent"
MutUnpublish="$KFDoc/KFGame/Unpublished"
MutPublish="$KFDoc/KFGame/Published"
MutStructScript="$MutUnpublish/BrewedPC/Script"
MutStructPackages="$MutUnpublish/BrewedPC/Packages"
MutStructLocalization="$MutUnpublish/BrewedPC/Localization"
MutTestingIni="$MutSource/testing.ini"
MutWsInfoName="wsinfo_serverext.txt"
MutWsInfo="$KFDoc/$MutWsInfoName"
ThirdPartyBin="$MutSource/3rd-party-bin"
export PATH="$PATH:$ThirdPartyBin"
if [[ $# -eq 0 ]]; then show_help; exit 0; fi
case $1 in
-h|--help ) show_help ; ;;
-c|--compile ) compile ; ;;
-b|--brew ) brew ; ;;
-bu|--brew-unpublished ) brew_unpublished ; ;;
-u|--upload ) upload ; ;;
-t|--test ) game_test ; ;;
* ) echo "Command not recognized: $1"; exit 1;;
esac

31
test.cfg Normal file
View File

@ -0,0 +1,31 @@
# Test parameters
# Map:
Map="KF-Nuked"
# Game:
# Survival: KFGameContent.KFGameInfo_Survival
# WeeklyOutbreak: KFGameContent.KFGameInfo_WeeklySurvival
# Endless: KFGameContent.KFGameInfo_Endless
# Objective: KFGameContent.KFGameInfo_Objective
# Versus: KFGameContent.KFGameInfo_VersusSurvival
Game="KFGameContent.KFGameInfo_Survival"
# Difficulty:
# Normal: 0
# Hard: 1
# Suicide: 2
# Hell: 3
Difficulty="0"
# GameLength:
# 4 waves: 0
# 7 waves: 1
# 10 waves: 2
GameLength="0"
# Mutators
Mutators="ServerExtMut.ServerExtMut"
# Additional parameters
Args=""

1
tools Submodule

@ -0,0 +1 @@
Subproject commit 48b3a87401e97915659b76a7eda915b09c815af8