Compare commits

..

No commits in common. "master" and "v0.0.1" have entirely different histories.

5 changed files with 76 additions and 89 deletions

View File

@ -1,5 +1,4 @@
@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

View File

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

View File

@ -1,22 +1,16 @@
#!/bin/bash -e #!/bin/bash -e
iwd_sv_target_filename="z_svr_hns.iwd" iwd_target_filename="z_svr_hns.iwd"
iwd_cl_target_filename="hns.iwd"
if [ -z "${WORKSPACE}" ]; then if [ -z "${WORKSPACE}" ]; then
WORKSPACE="$(pwd)" export 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" \
@ -26,34 +20,18 @@ iwd_files() {
! -name "*.sh" \ ! -name "*.sh" \
! -name "*.bat" \ ! -name "*.bat" \
! -name "*.cmd" \ ! -name "*.cmd" \
! -name "*.iwd" \ ! -name "*.iwd" |\
! -name "*.str" \ sed "s;${WORKSPACE}/;;g"
-and $negate \( \
-name "*.menu" \
-or -name "*.txt" \
\) \
| sed "s;${WORKSPACE}/;;g"
} }
iwd_cl_filelist="$(mktemp)" iwd_filelist="$(mktemp)"
iwd_sv_filelist="$(mktemp)" iwd_files > "$iwd_filelist"
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"
version="$(git describe --tags --always --dirty)" echo "getModVersionString(){return \"$(git describe --tags --always --dirty)\";}" > "$modversion_txt_file"
echo "getModVersionString(){return \"$version\";}" > "$modversion_txt_file" echo "$modversion_txt_file" >> "$iwd_filelist"
(echo "LICENSE.txt") >> "$iwd_cl_filelist"
(echo "$modversion_txt_file" && echo "LICENSE.txt") >> "$iwd_sv_filelist"
rm -f "${iwd_sv_target_filename}" "${iwd_cl_target_filename}" rm -f "${iwd_target_filename}"
7z a -tzip -mx9 "${iwd_sv_target_filename}" @"$iwd_sv_filelist" 7z a -tzip -mx9 "${iwd_target_filename}" @"$iwd_filelist"
7z a -tzip -mx9 "${iwd_cl_target_filename}" @"$iwd_cl_filelist"
rm -f "$iwd_sv_filelist" "$iwd_cl_filelist" rm -f "$iwd_filelist" "$modversion_txt_file"
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);
setDvarIfUninitialized("scr_" + level.gameType + "_seekers_primary_weapon", "ak47_reflex_mp"); registerSeekersPrimaryWeaponDvar(level.gameType, "ak47_reflex_mp");
setDvarIfUninitialized("scr_" + level.gameType + "_seekers_secondary_weapon", "deserteagle_tactical_mp"); registerSeekersSecondaryWeaponDvar(level.gameType, "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\n"); logPrint("onPrecacheGametype called");
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\n"); logPrint("registerPrereleaseDvar called");
registerWatchDvarInt("prereleasetime", defaultValue); registerWatchDvarInt("prereleasetime", defaultValue);
@ -200,9 +200,23 @@ 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\n"); logPrint("updateGametypeDvars called");
// 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);
@ -210,7 +224,7 @@ updateGametypeDvars()
onStartGameType() onStartGameType()
{ {
logPrint("onStartGameType called\n"); logPrint("onStartGameType called");
// Make DVars available // Make DVars available
setDvarIfUninitialized("scr_hns_roundswitch", 1); setDvarIfUninitialized("scr_hns_roundswitch", 1);
@ -220,6 +234,8 @@ 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");
@ -314,7 +330,7 @@ levelShowModelsOnMinimap()
getSpawnPoint() getSpawnPoint()
{ {
logPrint("getSpawnPoint called\n"); logPrint("getSpawnPoint called");
if (self.pers["team"] == game["seekers"]) if (self.pers["team"] == game["seekers"])
spawnPointName = "mp_sd_spawn_attacker"; spawnPointName = "mp_sd_spawn_attacker";
@ -330,7 +346,7 @@ getSpawnPoint()
onSpawnPlayer() onSpawnPlayer()
{ {
logPrint("onSpawnPlayer called\n"); logPrint("onSpawnPlayer called");
player = self; player = self;
@ -359,7 +375,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\n"); logPrint("onPlayerKilled called");
player = self; player = self;
@ -376,7 +392,7 @@ onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHit
checkAllowSpectating() checkAllowSpectating()
{ {
logPrint("checkAllowSpectating called\n"); logPrint("checkAllowSpectating called");
wait(0.05); wait(0.05);
@ -396,7 +412,7 @@ checkAllowSpectating()
onDeadEvent(team) onDeadEvent(team)
{ {
logPrint("onDeadEvent called\n"); logPrint("onDeadEvent called");
if (team == "all") if (team == "all")
{ {
@ -415,7 +431,7 @@ onDeadEvent(team)
onTimeLimit() onTimeLimit()
{ {
logPrint("onTimeLimit called\n"); logPrint("onTimeLimit called");
// 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"]);
@ -424,7 +440,7 @@ onTimeLimit()
onNormalDeath(victim, attacker, lifeId) onNormalDeath(victim, attacker, lifeId)
{ {
logPrint("onNormalDeath called\n"); logPrint("onNormalDeath called");
// 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");
@ -440,7 +456,7 @@ onNormalDeath(victim, attacker, lifeId)
onOneLeftEvent(team) onOneLeftEvent(team)
{ {
logPrint("onOneLeftEvent called\n"); logPrint("onOneLeftEvent called");
player = getLastLivingPlayer(team); player = getLastLivingPlayer(team);
@ -450,7 +466,7 @@ onOneLeftEvent(team)
giveLastOnTeamWarning() giveLastOnTeamWarning()
{ {
logPrint("giveLastOnTeamWarning called\n"); logPrint("giveLastOnTeamWarning called");
player = self; player = self;
@ -468,7 +484,7 @@ giveLastOnTeamWarning()
levelReleaseTimer() levelReleaseTimer()
{ {
logPrint("levelReleaseTimer called\n"); logPrint("levelReleaseTimer called");
gameFlagClear("seekers_prerelease_setup"); gameFlagClear("seekers_prerelease_setup");
gameFlagClear("seekers_released"); gameFlagClear("seekers_released");
@ -537,7 +553,7 @@ levelReleaseTimer()
} }
handleSeeker() { handleSeeker() {
logPrint("handleSeeker called\n"); logPrint("handleSeeker called");
player = self; player = self;
@ -584,23 +600,20 @@ 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(primaryWeapon, RandomInt(9), false); player GiveWeapon(level.gameTweaks["seekers_primary_weapon"].value, RandomInt(9), false);
player setSpawnWeapon(primaryWeapon); player setSpawnWeapon(level.gameTweaks["seekers_primary_weapon"].value);
player SwitchToWeapon(primaryWeapon); player SwitchToWeapon(level.gameTweaks["seekers_primary_weapon"].value);
// deagle + tactical knife // deagle + tactical knife
player GiveWeapon(secondaryWeapon, 0, false); player GiveWeapon(level.gameTweaks["seekers_secondary_weapon"].value, 0, false);
// single semtex // single semtex
player GiveWeapon("semtex_mp"); player GiveWeapon("semtex_mp");
// ammo // ammo
player GiveMaxAmmo(primaryWeapon); player GiveMaxAmmo(level.gameTweaks["seekers_primary_weapon"].value);
player GiveMaxAmmo(secondaryWeapon); player GiveMaxAmmo(level.gameTweaks["seekers_secondary_weapon"].value);
// gametype-friendly perks // gametype-friendly perks
player GivePerk("specialty_lightweight"); player GivePerk("specialty_lightweight");
@ -619,7 +632,7 @@ handleSeeker() {
} }
handleHider() { handleHider() {
logPrint("handleHider called\n"); logPrint("handleHider called");
player = self; player = self;
@ -673,6 +686,7 @@ 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"))
@ -702,7 +716,7 @@ handleHider() {
setDisguiseModel(model) setDisguiseModel(model)
{ {
logPrint("setDisguiseModel called\n"); logPrint("setDisguiseModel called");
player = self; player = self;
@ -739,7 +753,7 @@ setDisguiseModel(model)
setRandomDisguiseModel() setRandomDisguiseModel()
{ {
logPrint("setRandomDisguiseModel called\n"); logPrint("setRandomDisguiseModel called");
player = self; player = self;
@ -751,7 +765,7 @@ setRandomDisguiseModel()
deleteDisguiseModel() deleteDisguiseModel()
{ {
logPrint("deleteDisguiseModel called\n"); logPrint("deleteDisguiseModel called");
player = self; player = self;
@ -767,7 +781,7 @@ deleteDisguiseModel()
updateDisguiseView() updateDisguiseView()
{ {
logPrint("updateDisguiseView called\n"); logPrint("updateDisguiseView called");
player = self; player = self;
@ -796,7 +810,7 @@ updateDisguiseView()
* person view and third person view. * person view and third person view.
*/ */
enableThirdPersonSwitch(playerCommand, value) { enableThirdPersonSwitch(playerCommand, value) {
logPrint("enableThirdPersonSwitch called\n"); logPrint("enableThirdPersonSwitch called");
player = self; player = self;
@ -828,7 +842,7 @@ enableThirdPersonSwitch(playerCommand, value) {
* are looking at. * are looking at.
*/ */
enableModelChange(playerCommand) { enableModelChange(playerCommand) {
logPrint("enableModelChange called\n"); logPrint("enableModelChange called");
player = self; player = self;
@ -963,7 +977,7 @@ handleModelMenuSelection()
*/ */
watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand) watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand)
{ {
logPrint("watchDisguise called\n"); logPrint("watchDisguise called");
player = self; player = self;
@ -1005,7 +1019,7 @@ watchDisguise(angleLockingPlayerCommand, angleModeSwitchPlayerCommand)
*/ */
watchDisguiseDamage() watchDisguiseDamage()
{ {
logPrint("watchDisguiseDamage called\n"); logPrint("watchDisguiseDamage called");
player = self; player = self;
@ -1039,7 +1053,7 @@ watchDisguiseDamage()
*/ */
enableDisguiseModelAngleModeSwitching(playerCommand) enableDisguiseModelAngleModeSwitching(playerCommand)
{ {
logPrint("enableDisguiseModelAngleModeSwitching called\n"); logPrint("enableDisguiseModelAngleModeSwitching called");
player = self; player = self;
@ -1079,7 +1093,7 @@ enableDisguiseModelAngleModeSwitching(playerCommand)
*/ */
enableDisguiseModelAngleLocking(playerCommand) enableDisguiseModelAngleLocking(playerCommand)
{ {
logPrint("enableDisguiseModelAngleLocking called\n"); logPrint("enableDisguiseModelAngleLocking called");
player = self; player = self;
@ -1112,7 +1126,7 @@ enableDisguiseModelAngleLocking(playerCommand)
*/ */
enableUnlimitedReload() enableUnlimitedReload()
{ {
logPrint("enableUnlimitedReload called\n"); logPrint("enableUnlimitedReload called");
player = self; player = self;
@ -1130,7 +1144,7 @@ enableUnlimitedReload()
*/ */
revealWhenGameEnds() revealWhenGameEnds()
{ {
logPrint("revealWhenGameEnds called\n"); logPrint("revealWhenGameEnds called");
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