Init
This commit is contained in:
commit
d250396f7b
29
LICENSE
Normal file
29
LICENSE
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
BSD 3-Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2022, Edoardo Sanguineti
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
4
README.md
Normal file
4
README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# PlutoIW5Arena
|
||||||
|
|
||||||
|
Build a mod.ff archive using Zonetool
|
||||||
|
* [zoneTool](https://github.com/ZoneTool/zonetool)
|
1
raw/localizedstrings/PRESENCE_ARENA
Normal file
1
raw/localizedstrings/PRESENCE_ARENA
Normal file
@ -0,0 +1 @@
|
|||||||
|
Arena
|
17
raw/maps/mp/gametypes/_gametypes.txt
Normal file
17
raw/maps/mp/gametypes/_gametypes.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
dm
|
||||||
|
dom
|
||||||
|
sd
|
||||||
|
sab
|
||||||
|
war
|
||||||
|
koth
|
||||||
|
dd
|
||||||
|
ctf
|
||||||
|
oic
|
||||||
|
grnd
|
||||||
|
tdef
|
||||||
|
arena
|
||||||
|
conf
|
||||||
|
infect
|
||||||
|
jugg
|
||||||
|
gun
|
||||||
|
tjugg
|
453
raw/maps/mp/gametypes/arena.gsc
Normal file
453
raw/maps/mp/gametypes/arena.gsc
Normal file
@ -0,0 +1,453 @@
|
|||||||
|
// IW5 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
if ( getdvar( "mapname" ) == "mp_background" )
|
||||||
|
return;
|
||||||
|
|
||||||
|
maps\mp\gametypes\_globallogic::init();
|
||||||
|
maps\mp\gametypes\_callbacksetup::SetupCallbacks();
|
||||||
|
maps\mp\gametypes\_globallogic::SetupCallbacks();
|
||||||
|
|
||||||
|
maps\mp\_utility::registerRoundSwitchDvar( level.gameType, 0, 0, 9 );
|
||||||
|
maps\mp\_utility::registerTimeLimitDvar( level.gameType, 10 );
|
||||||
|
maps\mp\_utility::registerScoreLimitDvar( level.gameType, 500 );
|
||||||
|
maps\mp\_utility::registerRoundLimitDvar( level.gameType, 1 );
|
||||||
|
maps\mp\_utility::registerWinLimitDvar( level.gameType, 1 );
|
||||||
|
maps\mp\_utility::registerNumLivesDvar( level.gameType, 0 );
|
||||||
|
maps\mp\_utility::registerHalfTimeDvar( level.gameType, 0 );
|
||||||
|
|
||||||
|
level.teamBased = 1;
|
||||||
|
level.objectiveBased = 1;
|
||||||
|
level.onPrecacheGameType = ::onPrecacheGameType;
|
||||||
|
level.onStartGameType = ::onStartGameType;
|
||||||
|
level.getSpawnPoint = ::getSpawnPoint;
|
||||||
|
level.onSpawnPlayer = ::onSpawnPlayer;
|
||||||
|
level.onNormalDeath = ::onNormalDeath;
|
||||||
|
level.onPlayerKilled = ::onPlayerKilled;
|
||||||
|
level.onDeadEvent = ::onDeadEvent;
|
||||||
|
game["dialog"]["gametype"] = "arena";
|
||||||
|
|
||||||
|
if ( getdvarint( "g_hardcore" ) )
|
||||||
|
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
|
||||||
|
else if ( getdvarint( "camera_thirdPerson" ) )
|
||||||
|
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
|
||||||
|
else if ( getdvarint( "scr_diehard" ) )
|
||||||
|
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
|
||||||
|
|
||||||
|
game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
|
||||||
|
}
|
||||||
|
|
||||||
|
onPrecacheGameType()
|
||||||
|
{
|
||||||
|
precacheshader( "compass_waypoint_captureneutral" );
|
||||||
|
precacheshader( "compass_waypoint_capture" );
|
||||||
|
precacheshader( "compass_waypoint_defend" );
|
||||||
|
precacheshader( "waypoint_captureneutral" );
|
||||||
|
precacheshader( "waypoint_capture" );
|
||||||
|
precacheshader( "waypoint_defend" );
|
||||||
|
}
|
||||||
|
|
||||||
|
onStartGameType()
|
||||||
|
{
|
||||||
|
setclientnamemode( "auto_change" );
|
||||||
|
|
||||||
|
if ( !isdefined( game["switchedsides"] ) )
|
||||||
|
game["switchedsides"] = 0;
|
||||||
|
|
||||||
|
if ( game["switchedsides"] )
|
||||||
|
{
|
||||||
|
var_0 = game["attackers"];
|
||||||
|
var_1 = game["defenders"];
|
||||||
|
game["attackers"] = var_1;
|
||||||
|
game["defenders"] = var_0;
|
||||||
|
}
|
||||||
|
|
||||||
|
maps\mp\_utility::setObjectiveText( "allies", &"OBJECTIVES_ARENA" );
|
||||||
|
maps\mp\_utility::setObjectiveText( "axis", &"OBJECTIVES_ARENA" );
|
||||||
|
|
||||||
|
if ( level.splitscreen )
|
||||||
|
{
|
||||||
|
maps\mp\_utility::setObjectiveScoreText( "allies", &"OBJECTIVES_ARENA" );
|
||||||
|
maps\mp\_utility::setObjectiveScoreText( "axis", &"OBJECTIVES_ARENA" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maps\mp\_utility::setObjectiveScoreText( "allies", &"OBJECTIVES_ARENA_SCORE" );
|
||||||
|
maps\mp\_utility::setObjectiveScoreText( "axis", &"OBJECTIVES_ARENA_SCORE" );
|
||||||
|
}
|
||||||
|
|
||||||
|
maps\mp\_utility::setObjectiveHintText( "allies", &"OBJECTIVES_ARENA_HINT" );
|
||||||
|
maps\mp\_utility::setObjectiveHintText( "axis", &"OBJECTIVES_ARENA_HINT" );
|
||||||
|
level.spawnMins = ( 0, 0, 0 );
|
||||||
|
level.spawnMaxs = ( 0, 0, 0 );
|
||||||
|
maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_allies_start" );
|
||||||
|
maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_axis_start" );
|
||||||
|
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
|
||||||
|
maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
|
||||||
|
level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
|
||||||
|
setmapcenter( level.mapCenter );
|
||||||
|
var_2[0] = "dom";
|
||||||
|
var_2[1] = "airdrop_pallet";
|
||||||
|
var_2[2] = "arena";
|
||||||
|
maps\mp\gametypes\_rank::registerScoreInfo( "capture", 200 );
|
||||||
|
maps\mp\gametypes\_gameobjects::main( var_2 );
|
||||||
|
precacheFlag();
|
||||||
|
thread arenaFlagWaiter();
|
||||||
|
thread arenaTimeFlagWaiter();
|
||||||
|
}
|
||||||
|
|
||||||
|
precacheFlag()
|
||||||
|
{
|
||||||
|
game["flagmodels"] = [];
|
||||||
|
game["flagmodels"]["neutral"] = "prop_flag_neutral";
|
||||||
|
game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
|
||||||
|
game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
|
||||||
|
precachemodel( game["flagmodels"]["neutral"] );
|
||||||
|
precachemodel( game["flagmodels"]["allies"] );
|
||||||
|
precachemodel( game["flagmodels"]["axis"] );
|
||||||
|
precachestring( &"MP_CAPTURING_FLAG" );
|
||||||
|
precachestring( &"MP_LOSING_FLAG" );
|
||||||
|
precachestring( &"MP_DOM_YOUR_FLAG_WAS_CAPTURED" );
|
||||||
|
precachestring( &"MP_DOM_ENEMY_FLAG_CAPTURED" );
|
||||||
|
precachestring( &"MP_DOM_NEUTRAL_FLAG_CAPTURED" );
|
||||||
|
precachestring( &"MP_ENEMY_FLAG_CAPTURED_BY" );
|
||||||
|
precachestring( &"MP_NEUTRAL_FLAG_CAPTURED_BY" );
|
||||||
|
precachestring( &"MP_FRIENDLY_FLAG_CAPTURED_BY" );
|
||||||
|
}
|
||||||
|
|
||||||
|
arenaTimeFlagWaiter()
|
||||||
|
{
|
||||||
|
level endon( "down_to_one" );
|
||||||
|
level endon( "game_end" );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
var_0 = maps\mp\gametypes\_gamelogic::getTimeRemaining();
|
||||||
|
|
||||||
|
if ( var_0 < 61000 )
|
||||||
|
break;
|
||||||
|
|
||||||
|
wait 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
level notify( "arena_flag_time" );
|
||||||
|
thread arenaFlag();
|
||||||
|
}
|
||||||
|
|
||||||
|
arenaFlagWaiter()
|
||||||
|
{
|
||||||
|
level endon( "game_end" );
|
||||||
|
level endon( "arena_flag_time" );
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if ( level.inGracePeriod == 0 )
|
||||||
|
break;
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if ( getteamplayersalive( "axis" ) == 1 )
|
||||||
|
{
|
||||||
|
thread arenaFlag();
|
||||||
|
level notify( "down_to_one" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( getteamplayersalive( "allies" ) == 1 )
|
||||||
|
{
|
||||||
|
thread arenaFlag();
|
||||||
|
level notify( "down_to_one" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getSpawnPoint()
|
||||||
|
{
|
||||||
|
var_0 = self.pers["team"];
|
||||||
|
|
||||||
|
if ( game["switchedsides"] )
|
||||||
|
var_0 = maps\mp\_utility::getOtherTeam( var_0 );
|
||||||
|
|
||||||
|
if ( level.inGracePeriod )
|
||||||
|
{
|
||||||
|
var_1 = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_" + var_0 + "_start" );
|
||||||
|
var_2 = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( var_1 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var_1 = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( var_0 );
|
||||||
|
var_2 = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( var_1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return var_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
onSpawnPlayer()
|
||||||
|
{
|
||||||
|
self.usingObj = undefined;
|
||||||
|
level notify( "spawned_player" );
|
||||||
|
}
|
||||||
|
|
||||||
|
onNormalDeath( var_0, var_1, var_2 )
|
||||||
|
{
|
||||||
|
var_3 = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
|
||||||
|
var_1 maps\mp\gametypes\_gamescore::giveTeamScoreForObjective( var_1.pers["team"], var_3 );
|
||||||
|
var_4 = var_0.team;
|
||||||
|
|
||||||
|
if ( game["state"] == "postgame" )
|
||||||
|
var_1.finalKill = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
onPlayerKilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
|
||||||
|
{
|
||||||
|
thread checkAllowSpectating();
|
||||||
|
}
|
||||||
|
|
||||||
|
onTimeLimit()
|
||||||
|
{
|
||||||
|
if ( game["status"] == "overtime" )
|
||||||
|
var_0 = "forfeit";
|
||||||
|
else if ( game["teamScores"]["allies"] == game["teamScores"]["axis"] )
|
||||||
|
var_0 = "overtime";
|
||||||
|
else if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
|
||||||
|
var_0 = "axis";
|
||||||
|
else
|
||||||
|
var_0 = "allies";
|
||||||
|
|
||||||
|
thread maps\mp\gametypes\_gamelogic::endGame( var_0, game["strings"]["time_limit_reached"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
checkAllowSpectating()
|
||||||
|
{
|
||||||
|
wait 0.05;
|
||||||
|
var_0 = 0;
|
||||||
|
|
||||||
|
if ( !level.aliveCount[game["attackers"]] )
|
||||||
|
{
|
||||||
|
level.spectateOverride[game["attackers"]].allowEnemySpectate = 1;
|
||||||
|
var_0 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !level.aliveCount[game["defenders"]] )
|
||||||
|
{
|
||||||
|
level.spectateOverride[game["defenders"]].allowEnemySpectate = 1;
|
||||||
|
var_0 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( var_0 )
|
||||||
|
maps\mp\gametypes\_spectating::updateSpectateSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
arenaFlag()
|
||||||
|
{
|
||||||
|
level.lastStatus["allies"] = 0;
|
||||||
|
level.lastStatus["axis"] = 0;
|
||||||
|
var_0 = getentarray( "flag_arena", "targetname" );
|
||||||
|
var_1 = getentarray( "flag_primary", "targetname" );
|
||||||
|
var_2 = getentarray( "flag_secondary", "targetname" );
|
||||||
|
|
||||||
|
if ( !isdefined( var_0[0] ) )
|
||||||
|
{
|
||||||
|
if ( var_1.size + var_2.size < 1 )
|
||||||
|
{
|
||||||
|
maps\mp\gametypes\_callbacksetup::AbortLevel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setupDomFlag( var_1, var_2 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
level.arenaFlag = var_0[0];
|
||||||
|
|
||||||
|
var_3 = level.arenaFlag;
|
||||||
|
|
||||||
|
if ( isdefined( var_3.target ) )
|
||||||
|
var_4[0] = getent( var_3.target, "targetname" );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var_4[0] = spawn( "script_model", var_3.origin );
|
||||||
|
var_4[0].angles = var_3.angles;
|
||||||
|
}
|
||||||
|
|
||||||
|
var_4[0] setmodel( game["flagmodels"]["neutral"] );
|
||||||
|
var_0 = maps\mp\gametypes\_gameobjects::createUseObject( "neutral", var_3, var_4, ( 0, 0, 100 ) );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::allowUse( "enemy" );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::setUseTime( 20.0 );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::setUseText( &"MP_CAPTURING_FLAG" );
|
||||||
|
var_5 = var_0 maps\mp\gametypes\_gameobjects::getLabel();
|
||||||
|
var_0.label = var_5;
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_captureneutral" );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_captureneutral" );
|
||||||
|
var_0 maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
|
||||||
|
var_0.onUse = ::onUse;
|
||||||
|
var_0.onBeginUse = ::onBeginUse;
|
||||||
|
var_0.onUseUpdate = ::onUseUpdate;
|
||||||
|
var_0.onEndUse = ::onEndUse;
|
||||||
|
var_0.isArena = 1;
|
||||||
|
iprintlnbold( "Arena flag spawned" );
|
||||||
|
level.arenaFlag playsound( "flag_spawned" );
|
||||||
|
var_6 = var_4[0].origin + ( 0, 0, 32 );
|
||||||
|
var_7 = var_4[0].origin + ( 0, 0, -32 );
|
||||||
|
var_8 = bullettrace( var_6, var_7, 0, undefined );
|
||||||
|
var_9 = vectortoangles( var_8["normal"] );
|
||||||
|
var_0.baseeffectforward = anglestoforward( var_9 );
|
||||||
|
var_0.baseeffectright = anglestoright( var_9 );
|
||||||
|
var_0.baseeffectpos = var_8["position"];
|
||||||
|
var_0.levelFlag = level.arenaFlag;
|
||||||
|
level.arenaFlag = var_0;
|
||||||
|
}
|
||||||
|
|
||||||
|
setupDomFlag( var_0, var_1 )
|
||||||
|
{
|
||||||
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
||||||
|
{
|
||||||
|
var_3 = var_0[var_2].script_label;
|
||||||
|
|
||||||
|
if ( var_3 != "_b" )
|
||||||
|
{
|
||||||
|
var_0[var_2] delete();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.arenaFlag = var_0[var_2];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onDeadEvent( var_0 )
|
||||||
|
{
|
||||||
|
if ( var_0 == game["attackers"] )
|
||||||
|
level thread arena_endGame( game["defenders"], game["strings"][game["attackers"] + "_eliminated"] );
|
||||||
|
else if ( var_0 == game["defenders"] )
|
||||||
|
level thread arena_endGame( game["attackers"], game["strings"][game["defenders"] + "_eliminated"] );
|
||||||
|
}
|
||||||
|
|
||||||
|
arena_endGame( var_0, var_1 )
|
||||||
|
{
|
||||||
|
thread maps\mp\gametypes\_gamelogic::endGame( var_0, var_1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
giveFlagCaptureXP( var_0 )
|
||||||
|
{
|
||||||
|
level endon( "game_ended" );
|
||||||
|
wait 0.05;
|
||||||
|
maps\mp\_utility::WaitTillSlowProcessAllowed();
|
||||||
|
var_1 = getarraykeys( var_0 );
|
||||||
|
|
||||||
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
||||||
|
{
|
||||||
|
var_3 = var_0[var_1[var_2]].player;
|
||||||
|
var_3 thread [[ level.onXPEvent ]]( "capture" );
|
||||||
|
maps\mp\gametypes\_gamescore::givePlayerScore( "capture", var_3 );
|
||||||
|
var_3 thread maps\mp\_matchdata::logGameEvent( "capture", var_3.origin );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onUse( player )
|
||||||
|
{
|
||||||
|
var_1 = player.pers["team"];
|
||||||
|
var_2 = maps\mp\gametypes\_gameobjects::getOwnerTeam();
|
||||||
|
var_3 = maps\mp\gametypes\_gameobjects::getLabel();
|
||||||
|
|
||||||
|
player logString( "flag captured: " + self.label );
|
||||||
|
|
||||||
|
self.captureTime = gettime();
|
||||||
|
maps\mp\gametypes\_gameobjects::setOwnerTeam( var_1 );
|
||||||
|
maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_capture" );
|
||||||
|
maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_capture" );
|
||||||
|
self.visuals[0] setmodel( game["flagmodels"][var_1] );
|
||||||
|
|
||||||
|
if ( var_2 == "neutral" )
|
||||||
|
{
|
||||||
|
var_4 = maps\mp\_utility::getOtherTeam( var_1 );
|
||||||
|
thread maps\mp\_utility::printAndSoundOnEveryone( var_1, var_4, &"MP_NEUTRAL_FLAG_CAPTURED_BY", &"MP_NEUTRAL_FLAG_CAPTURED_BY", "mp_war_objective_taken", undefined, player );
|
||||||
|
statusDialog( "captured_a", var_1 );
|
||||||
|
statusDialog( "enemy_has_a", var_4 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
thread maps\mp\_utility::printAndSoundOnEveryone( var_1, var_2, &"MP_ENEMY_FLAG_CAPTURED_BY", &"MP_FRIENDLY_FLAG_CAPTURED_BY", "mp_war_objective_taken", "mp_war_objective_lost", player );
|
||||||
|
|
||||||
|
thread giveFlagCaptureXP( self.touchList[var_1] );
|
||||||
|
player notify( "objective", "captured" );
|
||||||
|
thread flagCaptured( var_1, &"MP_DOM_NEUTRAL_FLAG_CAPTURED" );
|
||||||
|
}
|
||||||
|
|
||||||
|
onBeginUse( var_0 )
|
||||||
|
{
|
||||||
|
var_1 = maps\mp\gametypes\_gameobjects::getOwnerTeam();
|
||||||
|
self.didStatusNotify = 0;
|
||||||
|
|
||||||
|
if ( var_1 == "neutral" )
|
||||||
|
{
|
||||||
|
var_2 = maps\mp\_utility::getOtherTeam( var_0.pers["team"] );
|
||||||
|
statusDialog( "securing", var_0.pers["team"] );
|
||||||
|
self.objPoints[var_0.pers["team"]] thread maps\mp\gametypes\_objpoints::startFlashing();
|
||||||
|
statusDialog( "enemy_taking", var_2 );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( var_1 == "allies" )
|
||||||
|
var_2 = "axis";
|
||||||
|
else
|
||||||
|
var_2 = "allies";
|
||||||
|
|
||||||
|
self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::startFlashing();
|
||||||
|
self.objPoints["axis"] thread maps\mp\gametypes\_objpoints::startFlashing();
|
||||||
|
}
|
||||||
|
|
||||||
|
onUseUpdate( var_0, var_1, var_2 )
|
||||||
|
{
|
||||||
|
if ( var_1 > 0.05 && var_2 && !self.didStatusNotify )
|
||||||
|
{
|
||||||
|
var_3 = maps\mp\_utility::getOtherTeam( var_0 );
|
||||||
|
statusDialog( "losing_a", var_3 );
|
||||||
|
statusDialog( "securing_a", var_0 );
|
||||||
|
self.didStatusNotify = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onEndUse( var_0, var_1, var_2 )
|
||||||
|
{
|
||||||
|
self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::stopFlashing();
|
||||||
|
self.objPoints["axis"] thread maps\mp\gametypes\_objpoints::stopFlashing();
|
||||||
|
}
|
||||||
|
|
||||||
|
statusDialog( dialog, team )
|
||||||
|
{
|
||||||
|
if ( gettime() < level.lastStatus[team ] + 6000 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
thread delayedLeaderDialog( dialog, team );
|
||||||
|
level.lastStatus[team ] = gettime();
|
||||||
|
}
|
||||||
|
|
||||||
|
delayedLeaderDialog( sound, team )
|
||||||
|
{
|
||||||
|
level endon( "game_ended" );
|
||||||
|
wait 0.1;
|
||||||
|
maps\mp\_utility::WaitTillSlowProcessAllowed();
|
||||||
|
maps\mp\_utility::leaderDialog( sound, team );
|
||||||
|
}
|
||||||
|
|
||||||
|
delayedLeaderDialogBothTeams( sound1, team1, sound2, team2 )
|
||||||
|
{
|
||||||
|
level endon( "game_ended" );
|
||||||
|
wait 0.1;
|
||||||
|
maps\mp\_utility::WaitTillSlowProcessAllowed();
|
||||||
|
maps\mp\_utility::leaderDialogBothTeams( sound1, team1, sound2, team2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
flagCaptured( var_0, var_1 )
|
||||||
|
{
|
||||||
|
maps\mp\gametypes\_gamelogic::endGame( var_0, var_1 );
|
||||||
|
}
|
3
raw/maps/mp/gametypes/arena.txt
Normal file
3
raw/maps/mp/gametypes/arena.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
"MPUI_ARENA"
|
||||||
|
"MPUI_ARENA_RECIPE_NAME"
|
||||||
|
"MPUI_ARENA_RECIPE_DESC"
|
14
raw/mod.csv
Normal file
14
raw/mod.csv
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Add gamemode
|
||||||
|
rawfile,maps/mp/gametypes/_gametypes.txt
|
||||||
|
|
||||||
|
# Gamemode script
|
||||||
|
rawfile,maps/mp/gametypes/arena.gsc
|
||||||
|
|
||||||
|
rawfile,mp/recipes/arena.recipe
|
||||||
|
|
||||||
|
rawfile,mp/basemaps.arena
|
||||||
|
|
||||||
|
rawfile,maps/mp/gametypes/arena.txt
|
||||||
|
|
||||||
|
# Loc
|
||||||
|
localize,PRESENCE_ARENA
|
|
215
raw/mp/basemaps.arena
Normal file
215
raw/mp/basemaps.arena
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
{
|
||||||
|
map "bonus_map"
|
||||||
|
longname "DLC_MAPS"
|
||||||
|
description "DLC_MAPS_DESC"
|
||||||
|
mapimage "loadscreen_mp_bonusmaps"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_seatown"
|
||||||
|
longname "MPUI_SEATOWN"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_SEATOWN"
|
||||||
|
mapimage "preview_mp_seatown"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "sas_urban"
|
||||||
|
axischar "opforce_henchmen"
|
||||||
|
environment "desert"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_dome"
|
||||||
|
longname "MPUI_DOME"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_DOME"
|
||||||
|
mapimage "preview_mp_dome"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_urban"
|
||||||
|
environment "desert"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_plaza2"
|
||||||
|
longname "MPUI_ARKADEN"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_ARKADEN"
|
||||||
|
mapimage "preview_mp_plaza2"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "sas_urban"
|
||||||
|
axischar "opforce_urban"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_mogadishu"
|
||||||
|
longname "MPUI_BAKAARA"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_BAKAARA"
|
||||||
|
mapimage "preview_mp_mogadishu"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "pmc_africa"
|
||||||
|
axischar "opforce_africa"
|
||||||
|
environment "urban_militia"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_paris"
|
||||||
|
longname "MPUI_RESISTANCE"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_RESISTANCE"
|
||||||
|
mapimage "preview_mp_paris"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "gign_paris"
|
||||||
|
axischar "opforce_urban"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_exchange"
|
||||||
|
longname "MPUI_DOWNTURN"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_DOWNTURN"
|
||||||
|
mapimage "preview_mp_exchange"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_air"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_bootleg"
|
||||||
|
longname "MPUI_BOOTLEG"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_BOOTLEG"
|
||||||
|
mapimage "preview_mp_bootleg"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "pmc_africa"
|
||||||
|
axischar "opforce_urban"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_carbon"
|
||||||
|
longname "MPUI_CARBON"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_CARBON"
|
||||||
|
mapimage "preview_mp_carbon"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "pmc_africa"
|
||||||
|
axischar "opforce_africa"
|
||||||
|
environment "forest_militia"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_hardhat"
|
||||||
|
longname "MPUI_HARDHAT"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_HARDHAT"
|
||||||
|
mapimage "preview_mp_hardhat"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_air"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_alpha"
|
||||||
|
longname "MPUI_LOCKDOWN"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_LOCKDOWN"
|
||||||
|
mapimage "preview_mp_alpha"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_urban"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_village"
|
||||||
|
longname "MPUI_VILLAGE"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_VILLAGE"
|
||||||
|
mapimage "preview_mp_village"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "pmc_africa"
|
||||||
|
axischar "opforce_africa"
|
||||||
|
environment "forest_militia"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_lambeth"
|
||||||
|
longname "MPUI_FALLEN"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_FALLEN"
|
||||||
|
mapimage "preview_mp_lambeth"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_woodland"
|
||||||
|
environment "forest"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_radar"
|
||||||
|
longname "MPUI_OUTPOST"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_OUTPOST"
|
||||||
|
mapimage "preview_mp_radar"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_snow"
|
||||||
|
environment "arctic"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_interchange"
|
||||||
|
longname "MPUI_INTERCHANGE"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_INTERCHANGE"
|
||||||
|
mapimage "preview_mp_interchange"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "delta_multicam"
|
||||||
|
axischar "opforce_woodland"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_underground"
|
||||||
|
longname "MPUI_UNDERGROUND"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_UNDERGROUND"
|
||||||
|
mapimage "preview_mp_underground"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "sas_urban"
|
||||||
|
axischar "opforce_air"
|
||||||
|
environment "urban"
|
||||||
|
mappack "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
map "mp_bravo"
|
||||||
|
longname "MPUI_MISSION"
|
||||||
|
gametype "dm war sab sab2 dom sd sd2 hc thc ctf koth arena"
|
||||||
|
description "MPUI_DESC_MAP_MISSION"
|
||||||
|
mapimage "preview_mp_bravo"
|
||||||
|
mapoverlay "compass_overlay_map_blank"
|
||||||
|
allieschar "pmc_africa"
|
||||||
|
axischar "opforce_africa"
|
||||||
|
environment "forest_militia"
|
||||||
|
mappack "0"
|
||||||
|
}
|
BIN
raw/mp/recipes/arena.recipe
Normal file
BIN
raw/mp/recipes/arena.recipe
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user