commit
42f9cc4931
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
testing.ini
|
||||
3rd-party-bin
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "tools"]
|
||||
path = tools
|
||||
url = https://github.com/GenZmeY/KF2-BuildTools
|
@ -1,11 +1,10 @@
|
||||
[h1]Warning[/h1]
|
||||
This mod is not whitelisted and will unrank your server. Any XP gained will not be saved.
|
||||
|
||||
[h1]Disclaimer [/h1]
|
||||
[h1]Description:[/h1]
|
||||
This is the same as [url=https://steamcommunity.com/sharedfiles/filedetails/?id=1417081496]Pharrahnox's SetWave[/url], but with some fixes:
|
||||
- fixed starting Dosh for Endless mode.
|
||||
|
||||
[h1]Description:[/h1]
|
||||
A utility mod that allows users to specify the starting wave and the boss that will spawn. Additionally, users can jump between waves during the match with a console command (mutate setwave, see below).
|
||||
The purpose of this mod is to allow mappers to more efficiently test their maps for later waves or for the boss. It could also be used to skip early waves if you find them boring, or to test strategies against a specific boss.
|
||||
It is designed to be compatible with every mutator and wave-based gamemode, and to require little to no maintenance after game updates.
|
||||
|
18
README.md
18
README.md
@ -24,19 +24,23 @@ It is designed to be compatible with every mutator and wave-based gamemode, and
|
||||
|
||||
# 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 sources:
|
||||
`cd <ANY_FOLDER_YOU_WANT>`
|
||||
3. Clone this repository and go to the source folder:
|
||||
`git clone https://github.com/GenZmeY/KF2-StartWave && cd KF2-StartWave`
|
||||
4. Run make.sh script:
|
||||
`./make.sh --compile`
|
||||
4. Download dependencies:
|
||||
`git submodule init && git submodule update`
|
||||
5. Compile:
|
||||
`./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. Edit this file if you need to test the mutator with different parameters.
|
||||
Open git-bash in the 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).
|
||||
|
||||
# Bug reports
|
||||
If you find a bug, go to the [issue page](https://github.com/GenZmeY/KF2-StartWave/issues) and check if there is a description of your bug. If not, create a new issue.
|
||||
|
16
build.cfg
Normal file
16
build.cfg
Normal 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="StartWave"
|
||||
|
||||
# Mutators that will be uploaded to the workshop
|
||||
# Specify them with a space as a separator,
|
||||
# The order doesn't matter
|
||||
PackageUpload="StartWave"
|
220
make.sh
220
make.sh
@ -1,220 +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' 'StartWave'
|
||||
multini --set "$KFEditorConf" 'ModPackages' 'ModPackagesInPath' "$(unixpath2win "$MutSource")"
|
||||
}
|
||||
|
||||
function compiled ()
|
||||
{
|
||||
test -f "$MutStructScript/StartWave.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"
|
||||
|
||||
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
|
||||
|
||||
if ! compiled; then
|
||||
echo "Compilation failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
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-Outpost\"
|
||||
Game=\"KFGameContent.KFGameInfo_Endless\"
|
||||
Difficulty=\"0\"
|
||||
GameLength=\"0\"
|
||||
Mutators=\"StartWave.StartWave\"
|
||||
Args=\"StartWave=7?Dosh=999?bUseDebug=True\"" > "$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
31
test.cfg
Normal file
@ -0,0 +1,31 @@
|
||||
# Test parameters
|
||||
|
||||
# Map:
|
||||
Map="KF-Outpost"
|
||||
|
||||
# Game:
|
||||
# Survival: KFGameContent.KFGameInfo_Survival
|
||||
# WeeklyOutbreak: KFGameContent.KFGameInfo_WeeklySurvival
|
||||
# Endless: KFGameContent.KFGameInfo_Endless
|
||||
# Objective: KFGameContent.KFGameInfo_Objective
|
||||
# Versus: KFGameContent.KFGameInfo_VersusSurvival
|
||||
Game="KFGameContent.KFGameInfo_Endless"
|
||||
|
||||
# Difficulty:
|
||||
# Normal: 0
|
||||
# Hard: 1
|
||||
# Suicide: 2
|
||||
# Hell: 3
|
||||
Difficulty="0"
|
||||
|
||||
# GameLength:
|
||||
# 4 waves: 0
|
||||
# 7 waves: 1
|
||||
# 10 waves: 2
|
||||
GameLength="2"
|
||||
|
||||
# Mutators
|
||||
Mutators="StartWave.StartWave"
|
||||
|
||||
# Additional parameters
|
||||
Args="Dosh=999?StartWave=7?bUseDebug=True"
|
1
tools
Submodule
1
tools
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 3d96a1e6c6e31163266d628c11202479ea429f94
|
Loading…
Reference in New Issue
Block a user