Compare commits

..

8 Commits

5 changed files with 89 additions and 76 deletions

View File

@ -1,4 +1,5 @@
@echo off & setlocal @echo off & setlocal
cd %~dp0
pushd ..\.. pushd ..\..
iw4x -zonebuilder +set fs_game "mods\Hide and Seek v2" +buildzone "..\mods\Hide and Seek v2\mod" +quit iw4x -zonebuilder +set fs_game "mods\Hide and Seek v2" +buildzone "..\mods\Hide and Seek v2\mod" +quit
popd popd

4
build_iwd.cmd Normal file
View File

@ -0,0 +1,4 @@
@echo off & setlocal
cd %~dp0
git-bash ./build_iwd.sh
endlocal

View File

@ -1,16 +1,22 @@
#!/bin/bash -e #!/bin/bash -e
iwd_target_filename="z_svr_hns.iwd" iwd_sv_target_filename="z_svr_hns.iwd"
iwd_cl_target_filename="hns.iwd"
if [ -z "${WORKSPACE}" ]; then if [ -z "${WORKSPACE}" ]; then
export WORKSPACE="$(pwd)" WORKSPACE="$(pwd)"
fi fi
export WORKSPACE
iwd_files() iwd_files() {
{ negate=""
if [ "$1" = "server" ]; then
negate="-not"
fi
find "${WORKSPACE}/" -type f \ find "${WORKSPACE}/" -type f \
! -path "*.git*" \ ! -path "*.git*" \
! -name "README*" \ ! -name "README*" \
! -name "LICENSE*" \
! -name "mod.*" \ ! -name "mod.*" \
! -name "_modversion.gsc" \ ! -name "_modversion.gsc" \
! -name "missingasset.csv" \ ! -name "missingasset.csv" \
@ -20,18 +26,34 @@ iwd_files()
! -name "*.sh" \ ! -name "*.sh" \
! -name "*.bat" \ ! -name "*.bat" \
! -name "*.cmd" \ ! -name "*.cmd" \
! -name "*.iwd" |\ ! -name "*.iwd" \
sed "s;${WORKSPACE}/;;g" ! -name "*.str" \
-and $negate \( \
-name "*.menu" \
-or -name "*.txt" \
\) \
| sed "s;${WORKSPACE}/;;g"
} }
iwd_filelist="$(mktemp)" iwd_cl_filelist="$(mktemp)"
iwd_files > "$iwd_filelist" iwd_sv_filelist="$(mktemp)"
echo ""
echo "== CLIENT =="
iwd_files client | tee "$iwd_cl_filelist"
echo "== SERVER =="
iwd_files server | tee "$iwd_sv_filelist"
echo ""
modversion_txt_file="maps/mp/mods/_modversion.gsc" modversion_txt_file="maps/mp/mods/_modversion.gsc"
echo "getModVersionString(){return \"$(git describe --tags --always --dirty)\";}" > "$modversion_txt_file" version="$(git describe --tags --always --dirty)"
echo "$modversion_txt_file" >> "$iwd_filelist" echo "getModVersionString(){return \"$version\";}" > "$modversion_txt_file"
(echo "LICENSE.txt") >> "$iwd_cl_filelist"
(echo "$modversion_txt_file" && echo "LICENSE.txt") >> "$iwd_sv_filelist"
rm -f "${iwd_target_filename}" rm -f "${iwd_sv_target_filename}" "${iwd_cl_target_filename}"
7z a -tzip -mx9 "${iwd_target_filename}" @"$iwd_filelist" 7z a -tzip -mx9 "${iwd_sv_target_filename}" @"$iwd_sv_filelist"
7z a -tzip -mx9 "${iwd_cl_target_filename}" @"$iwd_cl_filelist"
rm -f "$iwd_filelist" "$modversion_txt_file" rm -f "$iwd_sv_filelist" "$iwd_cl_filelist"
git checkout HEAD -- $modversion_txt_file

View File

@ -89,8 +89,8 @@ main()
// Specific DVars for this gametype // Specific DVars for this gametype
registerPrereleaseDvar(level.gameType, 30, 0, 300); registerPrereleaseDvar(level.gameType, 30, 0, 300);
registerSeekersPrimaryWeaponDvar(level.gameType, "ak47_reflex_mp"); setDvarIfUninitialized("scr_" + level.gameType + "_seekers_primary_weapon", "ak47_reflex_mp");
registerSeekersSecondaryWeaponDvar(level.gameType, "deserteagle_tactical_mp"); setDvarIfUninitialized("scr_" + level.gameType + "_seekers_secondary_weapon", "deserteagle_tactical_mp");
// Don't show perks // Don't show perks
SetDvar("scr_showperksonspawn", 0); SetDvar("scr_showperksonspawn", 0);
@ -151,7 +151,7 @@ main()
onPrecacheGametype() onPrecacheGametype()
{ {
logPrint("onPrecacheGametype called"); logPrint("onPrecacheGametype called\n");
game["seekers_released_sound"] = "mp_war_objective_taken"; game["seekers_released_sound"] = "mp_war_objective_taken";
game["seekers_blind_sound"] = "elev_run_end"; game["seekers_blind_sound"] = "elev_run_end";
@ -179,7 +179,7 @@ onPrecacheGametype()
registerPrereleaseDvar(dvarString, defaultValue, minValue, maxValue) registerPrereleaseDvar(dvarString, defaultValue, minValue, maxValue)
{ {
logPrint("registerPrereleaseDvar called"); logPrint("registerPrereleaseDvar called\n");
registerWatchDvarInt("prereleasetime", defaultValue); registerWatchDvarInt("prereleasetime", defaultValue);
@ -200,23 +200,9 @@ registerPrereleaseDvar(dvarString, defaultValue, minValue, maxValue)
} }
} }
registerSeekersPrimaryWeaponDvar(dvarString, defaultValue)
{
logPrint("registerSeekersPrimaryWeaponDvar called");
maps\mp\gametypes\_tweakables::registerTweakable("game", "seekers_primary_weapon", "scr_" + dvarString + "_seekers_primary_weapon", "ak47_reflex_mp");
}
registerSeekersSecondaryWeaponDvar(dvarString, defaultValue)
{
logPrint("registerSeekersSecondaryWeaponDvar called");
maps\mp\gametypes\_tweakables::registerTweakable("game", "seekers_secondary_weapon", "scr_" + dvarString + "_seekers_secondary_weapon", "deserteagle_tactical_mp");
}
updateGametypeDvars() updateGametypeDvars()
{ {
logPrint("updateGametypeDvars called"); logPrint("updateGametypeDvars called\n");
// no time <= {prereleasetime} <= 5 minutes // no time <= {prereleasetime} <= 5 minutes
level.preReleaseTime = dvarIntValue("prereleasetime", 30, 0, 5 * 60); level.preReleaseTime = dvarIntValue("prereleasetime", 30, 0, 5 * 60);
@ -224,7 +210,7 @@ updateGametypeDvars()
onStartGameType() onStartGameType()
{ {
logPrint("onStartGameType called"); logPrint("onStartGameType called\n");
// Make DVars available // Make DVars available
setDvarIfUninitialized("scr_hns_roundswitch", 1); setDvarIfUninitialized("scr_hns_roundswitch", 1);
@ -234,8 +220,6 @@ onStartGameType()
setDvarIfUninitialized("scr_hns_winlimit", 4); setDvarIfUninitialized("scr_hns_winlimit", 4);
setDvarIfUninitialized("scr_hns_halftime", 0); setDvarIfUninitialized("scr_hns_halftime", 0);
setDvarIfUninitialized("scr_hns_numlives", 1); setDvarIfUninitialized("scr_hns_numlives", 1);
setDvarIfUninitialized("scr_hns_seekers_primary_weapon", "ak47_reflex_mp");
setDvarIfUninitialized("scr_hns_seekers_secondary_weapon", "deserteagle_tactical_mp");
// reset flags // reset flags
gameFlagClear("seekers_released"); gameFlagClear("seekers_released");
@ -330,7 +314,7 @@ levelShowModelsOnMinimap()
getSpawnPoint() getSpawnPoint()
{ {
logPrint("getSpawnPoint called"); logPrint("getSpawnPoint called\n");
if (self.pers["team"] == game["seekers"]) if (self.pers["team"] == game["seekers"])
spawnPointName = "mp_sd_spawn_attacker"; spawnPointName = "mp_sd_spawn_attacker";
@ -346,7 +330,7 @@ getSpawnPoint()
onSpawnPlayer() onSpawnPlayer()
{ {
logPrint("onSpawnPlayer called"); logPrint("onSpawnPlayer called\n");
player = self; player = self;
@ -375,7 +359,7 @@ onSpawnPlayer()
onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId) onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId)
{ {
logPrint("onPlayerKilled called"); logPrint("onPlayerKilled called\n");
player = self; player = self;
@ -392,7 +376,7 @@ onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHit
checkAllowSpectating() checkAllowSpectating()
{ {
logPrint("checkAllowSpectating called"); logPrint("checkAllowSpectating called\n");
wait(0.05); wait(0.05);
@ -412,7 +396,7 @@ checkAllowSpectating()
onDeadEvent(team) onDeadEvent(team)
{ {
logPrint("onDeadEvent called"); logPrint("onDeadEvent called\n");
if (team == "all") if (team == "all")
{ {
@ -431,7 +415,7 @@ onDeadEvent(team)
onTimeLimit() onTimeLimit()
{ {
logPrint("onTimeLimit called"); logPrint("onTimeLimit called\n");
// Hiders win when time limit reached // Hiders win when time limit reached
thread maps\mp\gametypes\_gamelogic::endGame(game["hiders"], game["strings"]["time_limit_reached"]); thread maps\mp\gametypes\_gamelogic::endGame(game["hiders"], game["strings"]["time_limit_reached"]);
@ -440,7 +424,7 @@ onTimeLimit()
onNormalDeath(victim, attacker, lifeId) onNormalDeath(victim, attacker, lifeId)
{ {
logPrint("onNormalDeath called"); logPrint("onNormalDeath called\n");
// Make sure the kill score is set properly // Make sure the kill score is set properly
score = maps\mp\gametypes\_rank::getScoreInfoValue("kill"); score = maps\mp\gametypes\_rank::getScoreInfoValue("kill");
@ -456,7 +440,7 @@ onNormalDeath(victim, attacker, lifeId)
onOneLeftEvent(team) onOneLeftEvent(team)
{ {
logPrint("onOneLeftEvent called"); logPrint("onOneLeftEvent called\n");
player = getLastLivingPlayer(team); player = getLastLivingPlayer(team);
@ -466,7 +450,7 @@ onOneLeftEvent(team)
giveLastOnTeamWarning() giveLastOnTeamWarning()
{ {
logPrint("giveLastOnTeamWarning called"); logPrint("giveLastOnTeamWarning called\n");
player = self; player = self;
@ -484,7 +468,7 @@ giveLastOnTeamWarning()
levelReleaseTimer() levelReleaseTimer()
{ {
logPrint("levelReleaseTimer called"); logPrint("levelReleaseTimer called\n");
gameFlagClear("seekers_prerelease_setup"); gameFlagClear("seekers_prerelease_setup");
gameFlagClear("seekers_released"); gameFlagClear("seekers_released");
@ -553,7 +537,7 @@ levelReleaseTimer()
} }
handleSeeker() { handleSeeker() {
logPrint("handleSeeker called"); logPrint("handleSeeker called\n");
player = self; player = self;
@ -600,20 +584,23 @@ handleSeeker() {
wait 0.5; wait 0.5;
} }
primaryWeapon = GetDvar("scr_" + level.gameType + "_seekers_primary_weapon", "ak47_reflex_mp");
secondaryWeapon = GetDvar("scr_" + level.gameType + "_seekers_secondary_weapon", "deserteagle_tactical_mp");
// random primary weapon // random primary weapon
player GiveWeapon(level.gameTweaks["seekers_primary_weapon"].value, RandomInt(9), false); player GiveWeapon(primaryWeapon, RandomInt(9), false);
player setSpawnWeapon(level.gameTweaks["seekers_primary_weapon"].value); player setSpawnWeapon(primaryWeapon);
player SwitchToWeapon(level.gameTweaks["seekers_primary_weapon"].value); player SwitchToWeapon(primaryWeapon);
// deagle + tactical knife // deagle + tactical knife
player GiveWeapon(level.gameTweaks["seekers_secondary_weapon"].value, 0, false); player GiveWeapon(secondaryWeapon, 0, false);
// single semtex // single semtex
player GiveWeapon("semtex_mp"); player GiveWeapon("semtex_mp");
// ammo // ammo
player GiveMaxAmmo(level.gameTweaks["seekers_primary_weapon"].value); player GiveMaxAmmo(primaryWeapon);
player GiveMaxAmmo(level.gameTweaks["seekers_secondary_weapon"].value); player GiveMaxAmmo(secondaryWeapon);
// gametype-friendly perks // gametype-friendly perks
player GivePerk("specialty_lightweight"); player GivePerk("specialty_lightweight");
@ -632,7 +619,7 @@ handleSeeker() {
} }
handleHider() { handleHider() {
logPrint("handleHider called"); logPrint("handleHider called\n");
player = self; player = self;
@ -686,7 +673,6 @@ handleHider() {
player thread revealWhenGameEnds(); player thread revealWhenGameEnds();
/# /#
player thread enableUnlimitedReload(); player thread enableUnlimitedReload();
player thread enableWeaponDicing("+actionslot 2");
#/ #/
if (!gameFlag("seekers_released")) if (!gameFlag("seekers_released"))
@ -716,7 +702,7 @@ handleHider() {
setDisguiseModel(model) setDisguiseModel(model)
{ {
logPrint("setDisguiseModel called"); logPrint("setDisguiseModel called\n");
player = self; player = self;
@ -753,7 +739,7 @@ setDisguiseModel(model)
setRandomDisguiseModel() setRandomDisguiseModel()
{ {
logPrint("setRandomDisguiseModel called"); logPrint("setRandomDisguiseModel called\n");
player = self; player = self;
@ -765,7 +751,7 @@ setRandomDisguiseModel()
deleteDisguiseModel() deleteDisguiseModel()
{ {
logPrint("deleteDisguiseModel called"); logPrint("deleteDisguiseModel called\n");
player = self; player = self;
@ -781,7 +767,7 @@ deleteDisguiseModel()
updateDisguiseView() updateDisguiseView()
{ {
logPrint("updateDisguiseView called"); logPrint("updateDisguiseView called\n");
player = self; player = self;
@ -810,7 +796,7 @@ updateDisguiseView()
* person view and third person view. * person view and third person view.
*/ */
enableThirdPersonSwitch(playerCommand, value) { enableThirdPersonSwitch(playerCommand, value) {
logPrint("enableThirdPersonSwitch called"); logPrint("enableThirdPersonSwitch called\n");
player = self; player = self;
@ -842,7 +828,7 @@ enableThirdPersonSwitch(playerCommand, value) {
* are looking at. * are looking at.
*/ */
enableModelChange(playerCommand) { enableModelChange(playerCommand) {
logPrint("enableModelChange called"); logPrint("enableModelChange called\n");
player = self; player = self;
@ -977,7 +963,7 @@ handleModelMenuSelection()
*/ */
watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand) watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand)
{ {
logPrint("watchDisguise called"); logPrint("watchDisguise called\n");
player = self; player = self;
@ -1019,7 +1005,7 @@ watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand)
*/ */
watchDisguiseDamage() watchDisguiseDamage()
{ {
logPrint("watchDisguiseDamage called"); logPrint("watchDisguiseDamage called\n");
player = self; player = self;
@ -1053,7 +1039,7 @@ watchDisguiseDamage()
*/ */
enableDisguiseModelAngleModeSwitching(playerCommand) enableDisguiseModelAngleModeSwitching(playerCommand)
{ {
logPrint("enableDisguiseModelAngleModeSwitching called"); logPrint("enableDisguiseModelAngleModeSwitching called\n");
player = self; player = self;
@ -1093,7 +1079,7 @@ enableDisguiseModelAngleModeSwitching(playerCommand)
*/ */
enableDisguiseModelAngleLocking(playerCommand) enableDisguiseModelAngleLocking(playerCommand)
{ {
logPrint("enableDisguiseModelAngleLocking called"); logPrint("enableDisguiseModelAngleLocking called\n");
player = self; player = self;
@ -1126,7 +1112,7 @@ enableDisguiseModelAngleLocking(playerCommand)
*/ */
enableUnlimitedReload() enableUnlimitedReload()
{ {
logPrint("enableUnlimitedReload called"); logPrint("enableUnlimitedReload called\n");
player = self; player = self;
@ -1144,7 +1130,7 @@ enableUnlimitedReload()
*/ */
revealWhenGameEnds() revealWhenGameEnds()
{ {
logPrint("revealWhenGameEnds called"); logPrint("revealWhenGameEnds called\n");
player = self; player = self;

20
mod.csv
View File

@ -13,14 +13,14 @@ localize,MPUI_HIDEANDSEEK_CAPS
localize,MPUI_HIDEANDSEEK_SHORT_CAPS localize,MPUI_HIDEANDSEEK_SHORT_CAPS
localize,OBJECTIVES_HIDEANDSEEK_DEFENDER localize,OBJECTIVES_HIDEANDSEEK_DEFENDER
rawfile,maps/mp/gametypes/_gametypes.txt #rawfile,maps/mp/gametypes/_gametypes.txt
rawfile,maps/mp/gametypes/dm.gsc #rawfile,maps/mp/gametypes/dm.gsc
rawfile,maps/mp/gametypes/hns.gsc #rawfile,maps/mp/gametypes/hns.gsc
rawfile,maps/mp/gametypes/hns.txt #rawfile,maps/mp/gametypes/hns.txt
rawfile,maps/mp/gametypes/war.gsc #rawfile,maps/mp/gametypes/war.gsc
rawfile,maps/mp/mods/_math.gsc #rawfile,maps/mp/mods/_math.gsc
rawfile,maps/mp/mods/_modellist.gsc #rawfile,maps/mp/mods/_modellist.gsc
rawfile,maps/mp/mods/_modversion.gsc #rawfile,maps/mp/mods/_modversion.gsc
rawfile,maps/mp/mods/disableClassMenu.gsc #rawfile,maps/mp/mods/disableClassMenu.gsc
rawfile,maps/mp/mods/helpingHints.gsc #rawfile,maps/mp/mods/helpingHints.gsc

1 rawfile LICENSE.txt
13 localize OBJECTIVES_HIDEANDSEEK_DEFENDER
14 rawfile #rawfile maps/mp/gametypes/_gametypes.txt
15 rawfile #rawfile maps/mp/gametypes/dm.gsc
16 rawfile #rawfile maps/mp/gametypes/hns.gsc
17 rawfile #rawfile maps/mp/gametypes/hns.txt
18 rawfile #rawfile maps/mp/gametypes/war.gsc
19 rawfile #rawfile maps/mp/mods/_math.gsc
20 rawfile #rawfile maps/mp/mods/_modellist.gsc
21 rawfile #rawfile maps/mp/mods/_modversion.gsc
22 rawfile #rawfile maps/mp/mods/disableClassMenu.gsc
23 rawfile #rawfile maps/mp/mods/helpingHints.gsc
24
25
26