Add initial framework for FFA and CTF in network
This commit is contained in:
parent
b755d4d00b
commit
6bdec3d01a
@ -56,11 +56,11 @@
|
||||
</div>
|
||||
|
||||
<div width="100%" proportion="2" layout="horizontal-row">
|
||||
<icon align="center" width="64" height="64" icon="gui/mode_3strikes.png"/>
|
||||
<icon align="center" width="64" height="64" icon="gui/weapons.png"/>
|
||||
<spacer width="25" height="25"/>
|
||||
<bubble proportion="1" height="100%"
|
||||
I18N="In the help menu"
|
||||
text="3 Strikes Battle: Hit others with weapons until they lose all their lives."/>
|
||||
text="There are 3 types of battle mode: In 3 Strikes Battle, you need to hit others with weapons until they lose all their lives. In Free For All, the player who hits others the most will win in a given hit or time limit. In Capture The Flag, your team needs to bring the flag of the other team to your own flag base, as long as your flag is not captured by the other team."/>
|
||||
</div>
|
||||
|
||||
<div width="100%" proportion="2" layout="horizontal-row">
|
||||
|
@ -42,8 +42,8 @@
|
||||
I18N="Multiplayer game mode" text="Normal Race"/>
|
||||
<icon-button id="timetrial" width="128" height="128" icon="gui/mode_tt.png"
|
||||
I18N="Multiplayer game mode" text="Time Trial"/>
|
||||
<icon-button id="3strikes" width="128" height="128" icon="gui/mode_3strikes.png"
|
||||
I18N="Multiplayer game mode" text="3 Strikes Battle"/>
|
||||
<icon-button id="3strikes" width="128" height="128" icon="gui/weapons.png"
|
||||
I18N="Multiplayer game mode" text="Battle"/>
|
||||
<icon-button id="soccer" width="128" height="128" icon="gui/mode_soccer.png"
|
||||
I18N="Multiplayer game mode" text="Soccer"/>
|
||||
</ribbon>
|
||||
|
@ -739,7 +739,27 @@ namespace UserConfigParams
|
||||
&m_network_group, "Only auto start kart selection when number of "
|
||||
"connected player is larger than max player * this value, for "
|
||||
"owner less or ranked server, after start-game-counter."));
|
||||
|
||||
PARAM_PREFIX FloatUserConfigParam m_flag_return_timemout
|
||||
PARAM_DEFAULT(FloatUserConfigParam(20.0f, "flag-return-timemout",
|
||||
&m_network_group, "Time in seconds when a flag is dropped a by player in CTF "
|
||||
"returning to its own base."));
|
||||
PARAM_PREFIX FloatUserConfigParam m_hit_limit_threshold
|
||||
PARAM_DEFAULT(FloatUserConfigParam(5.0f, "hit-limit-threshold",
|
||||
&m_network_group, "Value used to calculate hit limit in free for all, which "
|
||||
"is min(number of players * hit-limit-threshold, 40), negative value to disable hit limit."));
|
||||
PARAM_PREFIX FloatUserConfigParam m_time_limit_threshold_ffa
|
||||
PARAM_DEFAULT(FloatUserConfigParam(0.7f, "time-limit-threshold-ffa",
|
||||
&m_network_group, "Value used to calculate time limit in free for all, which "
|
||||
"is max(number of players * time-limit-threshold-ffa, 2.0) * 60, negative value to disable time limit."));
|
||||
PARAM_PREFIX FloatUserConfigParam m_capture_limit_threshold
|
||||
PARAM_DEFAULT(FloatUserConfigParam(0.5f, "capture-limit-threshold",
|
||||
&m_network_group, "Value used to calculate capture limit in CTF, which "
|
||||
"is max(2.0, number of players * capture-limit-threshold), negative value to disable capture limit."));
|
||||
PARAM_PREFIX FloatUserConfigParam m_time_limit_threshold_ctf
|
||||
PARAM_DEFAULT(FloatUserConfigParam(0.9f, "time-limit-threshold-ctf",
|
||||
&m_network_group, "Value used to calculate time limit in CTF, which "
|
||||
"is max(2.0, number of players * (time-limit-threshold-ctf + flag-return-timemout / 60.0)) * 60.0,"
|
||||
" negative value to disable time limit."));
|
||||
PARAM_PREFIX StringToUIntUserConfigParam m_server_ban_list
|
||||
PARAM_DEFAULT(StringToUIntUserConfigParam("server_ban_list",
|
||||
"LHS: IP in x.x.x.x format, RHS: online id, if 0 than all players "
|
||||
|
@ -396,7 +396,7 @@ void InputManager::handleStaticAction(int key, int value)
|
||||
{
|
||||
AbstractKart* kart = world->getLocalPlayerKart(0);
|
||||
if(control_is_pressed && race_manager->getMinorMode()!=
|
||||
RaceManager::MINOR_MODE_3_STRIKES)
|
||||
RaceManager::MINOR_MODE_BATTLE)
|
||||
kart->setPowerup(PowerupManager::POWERUP_RUBBERBALL,
|
||||
10000);
|
||||
else
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include "karts/controller/controller.hpp"
|
||||
#include "karts/explosion_animation.hpp"
|
||||
#include "karts/kart_properties.hpp"
|
||||
#include "modes/three_strikes_battle.hpp"
|
||||
#include "modes/world.hpp"
|
||||
#include "network/rewind_manager.hpp"
|
||||
#include "physics/triangle_mesh.hpp"
|
||||
@ -343,7 +342,7 @@ void Attachment::hitBanana(ItemState *item_state)
|
||||
|
||||
bool add_a_new_item = true;
|
||||
|
||||
if (dynamic_cast<ThreeStrikesBattle*>(World::getWorld()) != NULL)
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE)
|
||||
{
|
||||
World::getWorld()->kartHit(m_kart->getWorldKartId());
|
||||
ExplosionAnimation::create(m_kart);
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include "graphics/sp/sp_mesh_node.hpp"
|
||||
#include "items/item_manager.hpp"
|
||||
#include "karts/abstract_kart.hpp"
|
||||
#include "modes/three_strikes_battle.hpp"
|
||||
#include "modes/world.hpp"
|
||||
#include "network/rewind_manager.hpp"
|
||||
#include "tracks/arena_graph.hpp"
|
||||
@ -95,7 +94,7 @@ void ItemState::collected(const AbstractKart *kart)
|
||||
m_ticks_till_return = stk_config->time2Ticks(2.0f);
|
||||
}
|
||||
|
||||
if (dynamic_cast<ThreeStrikesBattle*>(World::getWorld()) != NULL)
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE)
|
||||
{
|
||||
m_ticks_till_return *= 3;
|
||||
}
|
||||
|
@ -501,7 +501,7 @@ void PowerupManager::computeWeightsForRace(int num_karts)
|
||||
case RaceManager::MINOR_MODE_TIME_TRIAL: /* fall through */
|
||||
case RaceManager::MINOR_MODE_NORMAL_RACE: class_name="race"; break;
|
||||
case RaceManager::MINOR_MODE_FOLLOW_LEADER: class_name="ftl"; break;
|
||||
case RaceManager::MINOR_MODE_3_STRIKES: class_name="battle"; break;
|
||||
case RaceManager::MINOR_MODE_BATTLE: class_name="battle"; break;
|
||||
case RaceManager::MINOR_MODE_TUTORIAL: class_name="tutorial"; break;
|
||||
case RaceManager::MINOR_MODE_EASTER_EGG: /* fall through */
|
||||
case RaceManager::MINOR_MODE_OVERWORLD:
|
||||
|
@ -238,7 +238,7 @@ bool Swatter::updateAndTestFinished(int ticks)
|
||||
m_animation_phase = SWATTER_FROM_TARGET;
|
||||
const int end_ticks = ticks_start + 60;
|
||||
if (race_manager
|
||||
->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
->getMinorMode()==RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager
|
||||
->getMinorMode()==RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
|
@ -87,7 +87,7 @@ AIBaseLapController::AIBaseLapController(AbstractKart *kart)
|
||||
: AIBaseController(kart)
|
||||
{
|
||||
|
||||
if (race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES &&
|
||||
if (race_manager->getMinorMode()!=RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMinorMode()!=RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
m_world = dynamic_cast<LinearWorld*>(World::getWorld());
|
||||
|
@ -56,7 +56,7 @@ EndController::EndController(AbstractKart *kart,
|
||||
: AIBaseLapController(kart)
|
||||
{
|
||||
m_previous_controller = prev_controller;
|
||||
if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES &&
|
||||
if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMinorMode()!=RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
// Overwrite the random selected default path from AIBaseLapController
|
||||
@ -131,7 +131,7 @@ void EndController::reset()
|
||||
|
||||
m_track_node = Graph::UNKNOWN_SECTOR;
|
||||
// In battle mode there is no quad graph, so nothing to do in this case
|
||||
if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES &&
|
||||
if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMinorMode()!=RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
DriveGraph::get()->findRoadSector(m_kart->getXYZ(), &m_track_node);
|
||||
@ -184,7 +184,7 @@ void EndController::update(int ticks)
|
||||
AIBaseLapController::update(ticks);
|
||||
|
||||
// In case of battle mode: don't do anything
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getMinorMode()==RaceManager::MINOR_MODE_SOCCER ||
|
||||
race_manager->getMinorMode()==RaceManager::MINOR_MODE_EASTER_EGG)
|
||||
{
|
||||
|
@ -971,7 +971,7 @@ void Kart::finishedRace(float time, bool from_server)
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_NORMAL_RACE ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_TIME_TRIAL ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_EASTER_EGG)
|
||||
{
|
||||
@ -1026,7 +1026,7 @@ void Kart::setRaceResult()
|
||||
}
|
||||
}
|
||||
else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES)
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE)
|
||||
{
|
||||
// the kart wins if it isn't eliminated
|
||||
m_race_result = !this->isEliminated();
|
||||
|
@ -91,7 +91,7 @@ RescueAnimation::RescueAnimation(AbstractKart *kart, bool is_auto_rescue)
|
||||
}
|
||||
|
||||
// Add a hit unless it was auto-rescue
|
||||
if (race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES &&
|
||||
if (race_manager->getMinorMode()==RaceManager::MINOR_MODE_BATTLE &&
|
||||
!is_auto_rescue)
|
||||
{
|
||||
ThreeStrikesBattle *world=(ThreeStrikesBattle*)World::getWorld();
|
||||
|
53
src/main.cpp
53
src/main.cpp
@ -612,6 +612,8 @@ void cmdLineHelp()
|
||||
" owner-less server.\n"
|
||||
" --soccer-timed Use time limit mode in network soccer game.\n"
|
||||
" --soccer-goals Use goals limit mode in network soccer game.\n"
|
||||
" --battle-mode=n Specify battle mode in netowrk, 0 is Free For All and\n"
|
||||
" 1 is Capture The Flag.\n"
|
||||
" --network-gp=n Specify number of tracks used in network grand prix.\n"
|
||||
" --no-validation Allow non validated and unencrypted connection in wan.\n"
|
||||
" --ranked Server will submit ranking to stk addons server.\n"
|
||||
@ -973,7 +975,7 @@ int handleCmdLine()
|
||||
if (!CommandLine::has("--track", &track))
|
||||
track = "temple";
|
||||
UserConfigParams::m_arena_ai_stats=true;
|
||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_BATTLE);
|
||||
std::vector<std::string> l;
|
||||
for (int i = 0; i < 8; i++)
|
||||
l.push_back("tux");
|
||||
@ -1029,7 +1031,7 @@ int handleCmdLine()
|
||||
break;
|
||||
case 1: race_manager->setMinorMode(RaceManager::MINOR_MODE_TIME_TRIAL);
|
||||
break;
|
||||
case 2: race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
||||
case 2: race_manager->setMinorMode(RaceManager::MINOR_MODE_BATTLE);
|
||||
break;
|
||||
case 3: race_manager->setMinorMode(RaceManager::MINOR_MODE_SOCCER);
|
||||
break;
|
||||
@ -1263,6 +1265,8 @@ int handleCmdLine()
|
||||
|
||||
const bool is_soccer =
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER;
|
||||
const bool is_battle =
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE;
|
||||
if (CommandLine::has("--soccer-timed") && is_soccer)
|
||||
{
|
||||
LobbyProtocol::get<LobbyProtocol>()->getGameSetup()
|
||||
@ -1284,6 +1288,31 @@ int handleCmdLine()
|
||||
NetworkConfig::get()->setServerMode(race_manager->getMinorMode(),
|
||||
RaceManager::MAJOR_MODE_GRAND_PRIX);
|
||||
}
|
||||
else if (CommandLine::has("--battle-mode", &n) && is_battle)
|
||||
{
|
||||
switch (n)
|
||||
{
|
||||
case 0:
|
||||
NetworkConfig::get()->setServerMode(race_manager->getMinorMode(),
|
||||
RaceManager::MAJOR_MODE_FREE_FOR_ALL);
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_FREE_FOR_ALL);
|
||||
break;
|
||||
case 1:
|
||||
NetworkConfig::get()->setServerMode(race_manager->getMinorMode(),
|
||||
RaceManager::MAJOR_MODE_CAPTURE_THE_FLAG);
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_CAPTURE_THE_FLAG);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (is_battle)
|
||||
{
|
||||
Log::warn("main", "Set to ffa for battle server");
|
||||
NetworkConfig::get()->setServerMode(race_manager->getMinorMode(),
|
||||
RaceManager::MAJOR_MODE_FREE_FOR_ALL);
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_FREE_FOR_ALL);
|
||||
}
|
||||
else if (is_soccer)
|
||||
{
|
||||
Log::warn("main", "Set to goal target for soccer server");
|
||||
@ -1298,6 +1327,24 @@ int handleCmdLine()
|
||||
race_manager->getMinorMode(), RaceManager::MAJOR_MODE_SINGLE);
|
||||
}
|
||||
|
||||
if (is_battle)
|
||||
{
|
||||
if (UserConfigParams::m_hit_limit_threshold < 0.0f &&
|
||||
UserConfigParams::m_time_limit_threshold_ffa < 0.0f)
|
||||
{
|
||||
Log::warn("main", "Reset invalid hit and time limit settings");
|
||||
UserConfigParams::m_hit_limit_threshold.revertToDefaults();
|
||||
UserConfigParams::m_time_limit_threshold_ffa.revertToDefaults();
|
||||
}
|
||||
if (UserConfigParams::m_capture_limit_threshold < 0.0f &&
|
||||
UserConfigParams::m_time_limit_threshold_ctf < 0.0f)
|
||||
{
|
||||
Log::warn("main", "Reset invalid Capture and time limit settings");
|
||||
UserConfigParams::m_capture_limit_threshold.revertToDefaults();
|
||||
UserConfigParams::m_time_limit_threshold_ctf.revertToDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
// The extra server info has to be set before server lobby started
|
||||
if (server_lobby)
|
||||
server_lobby->requestStart();
|
||||
@ -1394,7 +1441,7 @@ int handleCmdLine()
|
||||
race_manager->setDefaultAIKartList(l);
|
||||
// Add 1 for the player kart
|
||||
race_manager->setNumKarts(1);
|
||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_BATTLE);
|
||||
}
|
||||
else if (t->isSoccer())
|
||||
{
|
||||
|
@ -426,7 +426,7 @@ Controller* World::loadAIController(AbstractKart* kart)
|
||||
Controller *controller;
|
||||
int turn=0;
|
||||
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES)
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_BATTLE)
|
||||
turn=1;
|
||||
else if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_SOCCER)
|
||||
turn=2;
|
||||
|
@ -98,7 +98,7 @@ void GameSetup::loadWorld()
|
||||
PlayerManager::getCurrentPlayer()->setCurrentChallenge("");
|
||||
race_manager->setTimeTarget(0.0f);
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES)
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE)
|
||||
{
|
||||
bool prev_val = UserConfigParams::m_random_arena_item;
|
||||
UserConfigParams::m_random_arena_item = m_reverse;
|
||||
|
@ -90,7 +90,7 @@ void NetworkConfig::setServerMode(RaceManager::MinorRaceModeType minor,
|
||||
else if (minor == RaceManager::MINOR_MODE_FOLLOW_LEADER)
|
||||
m_server_mode = 2;
|
||||
}
|
||||
else
|
||||
else if (major == RaceManager::MAJOR_MODE_SINGLE)
|
||||
{
|
||||
if (minor == RaceManager::MINOR_MODE_NORMAL_RACE)
|
||||
m_server_mode = 3;
|
||||
@ -98,10 +98,16 @@ void NetworkConfig::setServerMode(RaceManager::MinorRaceModeType minor,
|
||||
m_server_mode = 4;
|
||||
else if (minor == RaceManager::MINOR_MODE_FOLLOW_LEADER)
|
||||
m_server_mode = 5;
|
||||
else if (minor == RaceManager::MINOR_MODE_3_STRIKES)
|
||||
m_server_mode = 6;
|
||||
else if (minor == RaceManager::MINOR_MODE_SOCCER)
|
||||
m_server_mode = 7;
|
||||
m_server_mode = 6;
|
||||
}
|
||||
else if (major == RaceManager::MAJOR_MODE_FREE_FOR_ALL)
|
||||
{
|
||||
m_server_mode = 7;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_server_mode = 8;
|
||||
}
|
||||
} // setServerMode
|
||||
|
||||
@ -130,11 +136,14 @@ std::pair<RaceManager::MinorRaceModeType, RaceManager::MajorRaceModeType>
|
||||
return { RaceManager::MINOR_MODE_FOLLOW_LEADER,
|
||||
RaceManager::MAJOR_MODE_SINGLE };
|
||||
case 6:
|
||||
return { RaceManager::MINOR_MODE_3_STRIKES,
|
||||
RaceManager::MAJOR_MODE_SINGLE };
|
||||
case 7:
|
||||
return { RaceManager::MINOR_MODE_SOCCER,
|
||||
RaceManager::MAJOR_MODE_SINGLE };
|
||||
case 7:
|
||||
return { RaceManager::MINOR_MODE_BATTLE,
|
||||
RaceManager::MAJOR_MODE_FREE_FOR_ALL };
|
||||
case 8:
|
||||
return { RaceManager::MINOR_MODE_BATTLE,
|
||||
RaceManager::MAJOR_MODE_CAPTURE_THE_FLAG };
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -177,9 +186,13 @@ core::stringw NetworkConfig::getModeName(unsigned id)
|
||||
case 4:
|
||||
return _("Time Trial");
|
||||
case 6:
|
||||
return _("3 Strikes Battle");
|
||||
case 7:
|
||||
return _("Soccer");
|
||||
case 7:
|
||||
// I18n: Free for all means a deathmatch game with battle mode in
|
||||
// networking
|
||||
return _("Free For All");
|
||||
case 8:
|
||||
return _("Capture The Flag");
|
||||
default:
|
||||
return L"";
|
||||
}
|
||||
|
@ -407,12 +407,20 @@ void ClientLobby::displayPlayerVote(Event* event)
|
||||
core::stringw yes = _("Yes");
|
||||
core::stringw no = _("No");
|
||||
core::stringw vote_msg;
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES)
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMajorMode() == RaceManager::MAJOR_MODE_FREE_FOR_ALL)
|
||||
{
|
||||
//I18N: Vote message in network game from a player
|
||||
vote_msg = _("Track: %s,\nrandom item location: %s",
|
||||
track_readable, rev == 1 ? yes : no);
|
||||
}
|
||||
else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMajorMode() ==
|
||||
RaceManager::MAJOR_MODE_CAPTURE_THE_FLAG)
|
||||
{
|
||||
//I18N: Vote message in network game from a player
|
||||
vote_msg = _("Track: %s", track_readable);
|
||||
}
|
||||
else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
if (m_game_setup->isSoccerGoalTarget())
|
||||
@ -527,8 +535,13 @@ void ClientLobby::handleServerInfo(Event* event)
|
||||
NetworkConfig::get()->setServerMode(u_data);
|
||||
auto game_mode = NetworkConfig::get()->getLocalGameMode();
|
||||
race_manager->setMinorMode(game_mode.first);
|
||||
// We use single mode in network even it's grand prix
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE);
|
||||
if (game_mode.first == RaceManager::MINOR_MODE_BATTLE)
|
||||
race_manager->setMajorMode(game_mode.second);
|
||||
else
|
||||
{
|
||||
// We use single mode in network even it's grand prix
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE);
|
||||
}
|
||||
|
||||
//I18N: In the networking lobby
|
||||
core::stringw mode_name = NetworkConfig::get()->getModeName(u_data);
|
||||
|
@ -158,7 +158,7 @@ void ServerLobby::setup()
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RaceManager::MINOR_MODE_3_STRIKES:
|
||||
case RaceManager::MINOR_MODE_BATTLE:
|
||||
{
|
||||
auto it = m_available_kts.second.begin();
|
||||
while (it != m_available_kts.second.end())
|
||||
|
@ -76,6 +76,7 @@ RaceManager::RaceManager()
|
||||
m_started_from_overworld = false;
|
||||
m_have_kart_last_position_on_overworld = false;
|
||||
m_num_local_players = 0;
|
||||
m_hit_capture_limit = 0;
|
||||
setMaxGoal(0);
|
||||
setTimeTarget(0.0f);
|
||||
setReverseTrack(false);
|
||||
@ -521,7 +522,7 @@ void RaceManager::startNextRace()
|
||||
World::setWorld(new StandardRace());
|
||||
else if(m_minor_mode==MINOR_MODE_TUTORIAL)
|
||||
World::setWorld(new TutorialWorld());
|
||||
else if(m_minor_mode==MINOR_MODE_3_STRIKES)
|
||||
else if(m_minor_mode==MINOR_MODE_BATTLE)
|
||||
World::setWorld(new ThreeStrikesBattle());
|
||||
else if(m_minor_mode==MINOR_MODE_SOCCER)
|
||||
World::setWorld(new SoccerWorld());
|
||||
|
@ -89,7 +89,11 @@ public:
|
||||
enum MajorRaceModeType
|
||||
{
|
||||
MAJOR_MODE_GRAND_PRIX,
|
||||
MAJOR_MODE_SINGLE
|
||||
MAJOR_MODE_SINGLE,
|
||||
MAJOR_MODE_FREE_FOR_ALL,
|
||||
MAJOR_MODE_CAPTURE_THE_FLAG,
|
||||
MAJOR_MODE_3_STRIKES
|
||||
|
||||
};
|
||||
|
||||
// quick method to tell the difference between battle modes and race modes
|
||||
@ -112,7 +116,7 @@ public:
|
||||
MINOR_MODE_OVERWORLD = LINEAR_RACE(3, false),
|
||||
MINOR_MODE_TUTORIAL = LINEAR_RACE(4, false),
|
||||
|
||||
MINOR_MODE_3_STRIKES = BATTLE_ARENA(0),
|
||||
MINOR_MODE_BATTLE = BATTLE_ARENA(0),
|
||||
MINOR_MODE_SOCCER = BATTLE_ARENA(1),
|
||||
MINOR_MODE_CUTSCENE = BATTLE_ARENA(2),
|
||||
MINOR_MODE_EASTER_EGG = EASTER_EGG(0)
|
||||
@ -138,7 +142,7 @@ public:
|
||||
case MINOR_MODE_NORMAL_RACE: return IDENT_STD;
|
||||
case MINOR_MODE_TIME_TRIAL: return IDENT_TTRIAL;
|
||||
case MINOR_MODE_FOLLOW_LEADER: return IDENT_FTL;
|
||||
case MINOR_MODE_3_STRIKES: return IDENT_STRIKES;
|
||||
case MINOR_MODE_BATTLE: return IDENT_STRIKES;
|
||||
case MINOR_MODE_EASTER_EGG: return IDENT_EASTER;
|
||||
case MINOR_MODE_SOCCER: return IDENT_SOCCER;
|
||||
default: assert(false);
|
||||
@ -157,7 +161,7 @@ public:
|
||||
case MINOR_MODE_NORMAL_RACE: return "/gui/mode_normal.png";
|
||||
case MINOR_MODE_TIME_TRIAL: return "/gui/mode_tt.png";
|
||||
case MINOR_MODE_FOLLOW_LEADER: return "/gui/mode_ftl.png";
|
||||
case MINOR_MODE_3_STRIKES: return "/gui/mode_3strikes.png";
|
||||
case MINOR_MODE_BATTLE: return "/gui/mode_3strikes.png";
|
||||
case MINOR_MODE_EASTER_EGG: return "/gui/mode_easter.png";
|
||||
case MINOR_MODE_SOCCER: return "/gui/mode_soccer.png";
|
||||
default: assert(false); return NULL;
|
||||
@ -179,7 +183,7 @@ public:
|
||||
//I18N: Game mode
|
||||
case MINOR_MODE_FOLLOW_LEADER: return _("Follow the Leader");
|
||||
//I18N: Game mode
|
||||
case MINOR_MODE_3_STRIKES: return _("3 Strikes Battle");
|
||||
case MINOR_MODE_BATTLE: return _("3 Strikes Battle");
|
||||
//I18N: Game mode
|
||||
case MINOR_MODE_EASTER_EGG: return _("Egg Hunt");
|
||||
//I18N: Game mode
|
||||
@ -197,7 +201,7 @@ public:
|
||||
case MINOR_MODE_NORMAL_RACE: return true;
|
||||
case MINOR_MODE_TIME_TRIAL: return true;
|
||||
case MINOR_MODE_FOLLOW_LEADER: return true;
|
||||
case MINOR_MODE_3_STRIKES: return true;
|
||||
case MINOR_MODE_BATTLE: return true;
|
||||
case MINOR_MODE_EASTER_EGG: return false;
|
||||
case MINOR_MODE_SOCCER: return true;
|
||||
default: assert(false); return false;
|
||||
@ -216,7 +220,7 @@ public:
|
||||
if (name==IDENT_STD ) return MINOR_MODE_NORMAL_RACE;
|
||||
else if (name==IDENT_TTRIAL ) return MINOR_MODE_TIME_TRIAL;
|
||||
else if (name==IDENT_FTL ) return MINOR_MODE_FOLLOW_LEADER;
|
||||
else if (name==IDENT_STRIKES) return MINOR_MODE_3_STRIKES;
|
||||
else if (name==IDENT_STRIKES) return MINOR_MODE_BATTLE;
|
||||
else if (name==IDENT_EASTER ) return MINOR_MODE_EASTER_EGG;
|
||||
else if (name==IDENT_SOCCER) return MINOR_MODE_SOCCER;
|
||||
|
||||
@ -336,7 +340,7 @@ private:
|
||||
int m_coin_target;
|
||||
float m_time_target;
|
||||
int m_goal_target;
|
||||
|
||||
int m_hit_capture_limit;
|
||||
void startNextRace(); // start a next race
|
||||
|
||||
friend bool operator< (const KartStatus& left, const KartStatus& right)
|
||||
@ -518,7 +522,7 @@ public:
|
||||
case MINOR_MODE_NORMAL_RACE: return "normal";
|
||||
case MINOR_MODE_TIME_TRIAL: return "time-trial";
|
||||
case MINOR_MODE_FOLLOW_LEADER: return "follow-the-leader";
|
||||
case MINOR_MODE_3_STRIKES: return "battle";
|
||||
case MINOR_MODE_BATTLE: return "battle";
|
||||
case MINOR_MODE_EASTER_EGG: return "egg-hunt";
|
||||
case MINOR_MODE_SOCCER: return "soccer";
|
||||
default: assert(false); return "";
|
||||
@ -538,7 +542,7 @@ public:
|
||||
*/
|
||||
int getNumLaps() const
|
||||
{
|
||||
if(m_minor_mode==MINOR_MODE_3_STRIKES ||
|
||||
if(m_minor_mode==MINOR_MODE_BATTLE ||
|
||||
m_minor_mode==MINOR_MODE_FOLLOW_LEADER ||
|
||||
m_minor_mode==MINOR_MODE_SOCCER ||
|
||||
m_minor_mode==MINOR_MODE_EASTER_EGG )
|
||||
@ -737,7 +741,7 @@ public:
|
||||
// and each World may set m_use_highscores to true or false.
|
||||
// The reason for this duplication is that we might want to know
|
||||
// whether to display highscores without creating a World.
|
||||
return m_minor_mode != MINOR_MODE_3_STRIKES &&
|
||||
return m_minor_mode != MINOR_MODE_BATTLE &&
|
||||
m_minor_mode != MINOR_MODE_SOCCER &&
|
||||
m_minor_mode != MINOR_MODE_FOLLOW_LEADER;
|
||||
} // modeHasHighscore
|
||||
@ -837,6 +841,14 @@ public:
|
||||
void configGrandPrixResultFromNetwork(NetworkString& ns);
|
||||
// ------------------------------------------------------------------------
|
||||
void clearNetworkGrandPrixResult();
|
||||
// ------------------------------------------------------------------------
|
||||
void setHitCaptureTime(int hc, float time)
|
||||
{
|
||||
m_hit_capture_limit = hc;
|
||||
m_time_target = time;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
int getHitCaptureLimit() const { return m_hit_capture_limit; }
|
||||
|
||||
}; // RaceManager
|
||||
|
||||
|
@ -160,6 +160,22 @@ void CreateServerScreen::updateMoreOption(int game_mode)
|
||||
m_more_options_spinner->setValue(0);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
m_more_options_text->setVisible(true);
|
||||
m_more_options_spinner->setVisible(true);
|
||||
m_more_options_spinner->clearLabels();
|
||||
//I18N: In the create server screen, show various battle mode available
|
||||
m_more_options_text->setText(_("Battle mode"), false);
|
||||
m_more_options_spinner->setVisible(true);
|
||||
m_more_options_spinner->clearLabels();
|
||||
//I18N: In the create server screen for battle server
|
||||
m_more_options_spinner->addLabel(_("Free For All"));
|
||||
//I18N: In the create server screen for battle server
|
||||
m_more_options_spinner->addLabel(_("Capture The Flag"));
|
||||
m_more_options_spinner->setValue(0);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
m_more_options_text->setVisible(true);
|
||||
@ -195,9 +211,6 @@ void CreateServerScreen::onUpdate(float delta)
|
||||
if(!STKHost::existHost())
|
||||
return;
|
||||
|
||||
//FIXME If we really want a gui, we need to decide what else to do here
|
||||
// For now start the (wrong i.e. client) lobby, to prevent to create
|
||||
// a server more than once.
|
||||
NetworkingLobby::getInstance()->push();
|
||||
} // onUpdate
|
||||
|
||||
@ -315,20 +328,25 @@ void CreateServerScreen::createServer()
|
||||
if (m_more_options_spinner->isVisible())
|
||||
{
|
||||
int esi = m_more_options_spinner->getValue();
|
||||
if (gamemode_widget->getSelection(PLAYER_ID_GAME_MASTER)
|
||||
!= 3/*is soccer*/)
|
||||
{
|
||||
// Grand prix track count
|
||||
if (esi > 0)
|
||||
server_cfg << " --network-gp=" << esi;
|
||||
}
|
||||
else
|
||||
if (gamemode_widget->getSelection(PLAYER_ID_GAME_MASTER) ==
|
||||
3/*is soccer*/)
|
||||
{
|
||||
if (esi == 0)
|
||||
server_cfg << " --soccer-timed";
|
||||
else
|
||||
server_cfg << " --soccer-goals";
|
||||
}
|
||||
else if (gamemode_widget->getSelection(PLAYER_ID_GAME_MASTER) ==
|
||||
2/*is battle*/)
|
||||
{
|
||||
server_cfg << " --battle-mode=" << esi;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Grand prix track count
|
||||
if (esi > 0)
|
||||
server_cfg << " --network-gp=" << esi;
|
||||
}
|
||||
}
|
||||
|
||||
SeparateProcess* sp =
|
||||
|
@ -85,7 +85,7 @@ RaceGUI::RaceGUI()
|
||||
m_negative_timer_additional_width = area.Width;
|
||||
|
||||
if (race_manager->getMinorMode()==RaceManager::MINOR_MODE_FOLLOW_LEADER ||
|
||||
race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
race_manager->getMinorMode()==RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getNumLaps() > 9)
|
||||
m_lap_width = font->getDimension(L"99/99").Width;
|
||||
else
|
||||
|
@ -769,7 +769,7 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin)
|
||||
if (kart->getPosition() == -1)//if position is not set
|
||||
{
|
||||
//we use karts ordered by id only
|
||||
//(needed for beginning of MINOR_MODE_3_STRIKES)
|
||||
//(needed for beginning of MINOR_MODE_BATTLE)
|
||||
kart= world->getKart(position-1);
|
||||
}
|
||||
|
||||
@ -781,7 +781,7 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin)
|
||||
int lap = info.lap;
|
||||
|
||||
// In battle mode mode there is no distance along track etc.
|
||||
if( minor_mode==RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
if( minor_mode==RaceManager::MINOR_MODE_BATTLE ||
|
||||
minor_mode==RaceManager::MINOR_MODE_EASTER_EGG)
|
||||
{
|
||||
x = x_base;
|
||||
|
@ -65,6 +65,7 @@ void RaceSetupScreen::init()
|
||||
RibbonWidget* w = getWidget<RibbonWidget>("difficulty");
|
||||
assert( w != NULL );
|
||||
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE);
|
||||
if (UserConfigParams::m_difficulty == RaceManager::DIFFICULTY_BEST &&
|
||||
PlayerManager::getCurrentPlayer()->isLocked("difficulty_best"))
|
||||
{
|
||||
@ -108,10 +109,10 @@ void RaceSetupScreen::init()
|
||||
}
|
||||
|
||||
irr::core::stringw name4 = irr::core::stringw(
|
||||
RaceManager::getNameOf(RaceManager::MINOR_MODE_3_STRIKES)) + L"\n";
|
||||
RaceManager::getNameOf(RaceManager::MINOR_MODE_BATTLE)) + L"\n";
|
||||
//FIXME: avoid duplicating descriptions from the help menu!
|
||||
name4 += _("Hit others with weapons until they lose all their lives.");
|
||||
w2->addItem( name4, IDENT_STRIKES, RaceManager::getIconOf(RaceManager::MINOR_MODE_3_STRIKES));
|
||||
w2->addItem( name4, IDENT_STRIKES, RaceManager::getIconOf(RaceManager::MINOR_MODE_BATTLE));
|
||||
|
||||
irr::core::stringw name5 = irr::core::stringw(
|
||||
RaceManager::getNameOf(RaceManager::MINOR_MODE_SOCCER)) + L"\n";
|
||||
@ -223,7 +224,8 @@ void RaceSetupScreen::eventCallback(Widget* widget, const std::string& name,
|
||||
}
|
||||
else if (selectedMode == IDENT_STRIKES)
|
||||
{
|
||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_BATTLE);
|
||||
race_manager->setMajorMode(RaceManager::MAJOR_MODE_3_STRIKES);
|
||||
UserConfigParams::m_game_mode = CONFIG_CODE_3STRIKES;
|
||||
ArenasScreen::getInstance()->push();
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ void TrackInfoScreen::init()
|
||||
// -------------
|
||||
const int local_players = race_manager->getNumLocalPlayers();
|
||||
const bool has_AI =
|
||||
(race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
(race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER ?
|
||||
m_track->hasNavMesh() && (max_arena_players - local_players) > 0 :
|
||||
race_manager->hasAI());
|
||||
@ -177,7 +177,7 @@ void TrackInfoScreen::init()
|
||||
|
||||
race_manager->setNumKarts(num_ai + local_players);
|
||||
// Set the max karts supported based on the battle arena selected
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getMinorMode()==RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
m_ai_kart_spinner->setMax(max_arena_players - local_players);
|
||||
@ -190,7 +190,7 @@ void TrackInfoScreen::init()
|
||||
m_ai_kart_spinner->setMin(std::max(0, 3 - local_players));
|
||||
}
|
||||
// Make sure in battle and soccer mode at least 1 ai for single player
|
||||
else if((race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
else if((race_manager->getMinorMode()==RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getMinorMode()==RaceManager::MINOR_MODE_SOCCER) &&
|
||||
local_players == 1 &&
|
||||
!UserConfigParams::m_artist_debug_mode)
|
||||
@ -366,7 +366,7 @@ void TrackInfoScreen::onEnterPressedInternal()
|
||||
const int max_arena_players = m_track->getMaxArenaPlayers();
|
||||
const int local_players = race_manager->getNumLocalPlayers();
|
||||
const bool has_AI =
|
||||
(race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES ||
|
||||
(race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE ||
|
||||
race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER ?
|
||||
m_track->hasNavMesh() && (max_arena_players - local_players) > 0 :
|
||||
race_manager->hasAI());
|
||||
|
@ -256,7 +256,8 @@ void TracksScreen::init()
|
||||
if (UserConfigParams::m_num_laps == 0 ||
|
||||
UserConfigParams::m_num_laps > 20)
|
||||
UserConfigParams::m_num_laps = 1;
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES)
|
||||
if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMajorMode() == RaceManager::MAJOR_MODE_FREE_FOR_ALL)
|
||||
{
|
||||
getWidget("lap-text")->setVisible(false);
|
||||
m_laps->setVisible(false);
|
||||
@ -266,6 +267,14 @@ void TracksScreen::init()
|
||||
m_reversed->setVisible(true);
|
||||
m_reversed->setState(UserConfigParams::m_random_arena_item);
|
||||
}
|
||||
else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMajorMode() == RaceManager::MAJOR_MODE_CAPTURE_THE_FLAG)
|
||||
{
|
||||
getWidget("lap-text")->setVisible(false);
|
||||
m_laps->setVisible(false);
|
||||
getWidget("reverse-text")->setVisible(false);
|
||||
m_reversed->setVisible(false);
|
||||
}
|
||||
else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER)
|
||||
{
|
||||
m_laps->setVisible(true);
|
||||
@ -422,7 +431,7 @@ void TracksScreen::voteForPlayer()
|
||||
assert(m_laps);
|
||||
assert(m_reversed);
|
||||
// Remember reverse globally for each stk instance if not arena
|
||||
if (race_manager->getMinorMode() != RaceManager::MINOR_MODE_3_STRIKES &&
|
||||
if (race_manager->getMinorMode() != RaceManager::MINOR_MODE_BATTLE &&
|
||||
race_manager->getMinorMode() != RaceManager::MINOR_MODE_SOCCER)
|
||||
m_reverse_checked = m_reversed->getState();
|
||||
else
|
||||
|
@ -2090,7 +2090,7 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id)
|
||||
// Only print warning if not in battle mode, since battle tracks don't have
|
||||
// any quads or check lines.
|
||||
if (CheckManager::get()->getCheckStructureCount()==0 &&
|
||||
race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES && !m_is_cutscene)
|
||||
race_manager->getMinorMode()!=RaceManager::MINOR_MODE_BATTLE && !m_is_cutscene)
|
||||
{
|
||||
Log::warn("track", "No check lines found in track '%s'.",
|
||||
m_ident.c_str());
|
||||
|
Loading…
x
Reference in New Issue
Block a user