diff --git a/src/main.cpp b/src/main.cpp index 23d6a0050..c05d4dd6f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -545,7 +545,7 @@ void cmdLineHelp() " --aiNP=a,b,... Use the karts a, b, ... for the AI, no additional player kart.\n" " --laps=N Define number of laps to N.\n" " --mode=N N=0 Normal, N=1 Time trial, N=2 Battle, N=3 Soccer,\n" - " N=4 Follow The Leader. In configure server use --battle-mode=n\n" + " N=4 Follow The Leader, N=5 Capture The Flag. In configure server use --battle-mode=n\n" " for battle server and --soccer-timed / goals for soccer server\n" " to control verbosely, see below:\n" " --difficulty=N N=0 Beginner, N=1 Intermediate, N=2 Expert, N=3 SuperTux.\n" @@ -553,6 +553,8 @@ void cmdLineHelp() " 1 is Capture The Flag.\n" " --soccer-timed Use time limit mode in network soccer game.\n" " --soccer-goals Use goals limit mode in network soccer game.\n" + " --capture-limit Specify capture limit for CTF.\n" + " --time-limit Specify time limit for current game mode.\n" " --reverse Play track in reverse (if allowed)\n" " -f, --fullscreen Use fullscreen display.\n" " -w, --windowed Use windowed display (default).\n" @@ -1136,6 +1138,12 @@ int handleCmdLine(bool has_server_config, bool has_parent_process) RaceManager::get()->setMinorMode(RaceManager::MINOR_MODE_FOLLOW_LEADER); break; } + case 5: + { + ServerConfig::m_server_mode = 8; + RaceManager::get()->setMinorMode(RaceManager::MINOR_MODE_CAPTURE_THE_FLAG); + break; + } default: Log::warn("main", "Invalid race mode '%d' - ignored.", n); } @@ -1428,6 +1436,16 @@ int handleCmdLine(bool has_server_config, bool has_parent_process) NetworkConfig::get()->setAutoConnect(true); } + if (CommandLine::has("--capture-limit", &n)) + { + RaceManager::get()->setHitCaptureTime(n, 0.0f); + } + + if (CommandLine::has("--time-limit", &n)) + { + RaceManager::get()->setTimeTarget(n); + } + // Race parameters if(CommandLine::has("--kartsize-debug")) { @@ -1503,6 +1521,14 @@ int handleCmdLine(bool has_server_config, bool has_parent_process) { Log::warn("main", "Can't find track named '%s'.", s.c_str()); } + else if (RaceManager::get()->getMinorMode() == RaceManager::MINOR_MODE_CAPTURE_THE_FLAG) + { + // CTF has no ai support atm + const std::vector l; + RaceManager::get()->setDefaultAIKartList(l); + // Add 1 for the player kart + RaceManager::get()->setNumKarts(1); + } else if (t->isArena()) { //if it's arena, don't create AI karts diff --git a/src/modes/capture_the_flag.cpp b/src/modes/capture_the_flag.cpp index 54b3f5837..298a6e65b 100644 --- a/src/modes/capture_the_flag.cpp +++ b/src/modes/capture_the_flag.cpp @@ -477,6 +477,14 @@ bool CaptureTheFlag::isRaceOver() NetworkConfig::get()->isClient()) return false; + if (RaceManager::get()->getHitCaptureLimit() == 0) + { + // Prevent infinitive game + if (!RaceManager::get()->hasTimeTarget()) + return true; + return m_count_down_reached_zero; + } + if ((m_count_down_reached_zero && RaceManager::get()->hasTimeTarget()) || (m_red_scores >= RaceManager::get()->getHitCaptureLimit() || m_blue_scores >= RaceManager::get()->getHitCaptureLimit()))