diff -u2NrX freeciv/diff_ignore freeciv/server/srv_main.c freeciv-ai/server/srv_main.c --- freeciv/server/srv_main.c Wed Feb 27 15:19:33 2002 +++ freeciv-ai/server/srv_main.c Wed Feb 27 15:19:54 2002 @@ -1965,4 +1965,18 @@ init_new_game(); + /* The AIs gang up on human players in 'harder' difficulty level */ + players_iterate(aiplayer) { + if (aiplayer->ai.skill_level == 8) { + players_iterate(pdest) { + if ((pdest->ai.control) && + (aiplayer->player_no != pdest->player_no)) { + aiplayer->diplstates[pdest->player_no].type=DS_ALLIANCE; + pdest->diplstates[aiplayer->player_no].type=DS_ALLIANCE; + give_shared_vision(pdest, aiplayer); /* not the other way around */ + } + } players_iterate_end + } + } players_iterate_end; + game.is_new_game = FALSE; diff -u2NrX freeciv/diff_ignore freeciv/server/stdinhand.c freeciv-ai/server/stdinhand.c --- freeciv/server/stdinhand.c Wed Feb 27 15:19:33 2002 +++ freeciv-ai/server/stdinhand.c Wed Feb 27 15:59:41 2002 @@ -1010,4 +1010,5 @@ CMD_NORMAL, CMD_HARD, + CMD_HARDER, CMD_CMDLEVEL, CMD_FIRSTLEVEL, @@ -1184,4 +1185,14 @@ "argument, sets the skill level for that player only.") }, + {"harder", ALLOW_CTRL, + /* TRANS: translate text between <> only */ + N_("harder\n" + "harder "), + N_("Set one or all AI players to 'harder'."), + N_("With no arguments, sets all AI players to skill level 'harder', and " + "sets the default level for any new AI players to 'harder'. With an " + "argument, sets the skill level for that player only. This difficulty" + "level makes AI gang up on human players.") + }, {"cmdlevel", ALLOW_HACK, /* confusing to leave this at ALLOW_CTRL */ /* TRANS: translate text between <> only */ @@ -1633,6 +1644,6 @@ const char *nm[11] = { "UNUSED", "UNKNOWN", "UNKNOWN", "easy", "UNKNOWN", "normal", "UNKNOWN", "hard", - "UNKNOWN", "UNKNOWN", "UNKNOWN" }; - + "harder", "UNKNOWN", "UNKNOWN" }; + assert(level>0 && level<=10); return nm[level]; @@ -2502,11 +2513,17 @@ enum m_pre_result match_result; struct player *pplayer; - enum command_id cmd = (level <= 3) ? CMD_EASY : - (level >= 6) ? CMD_HARD : - CMD_NORMAL; - /* kludge - these commands ought to be 'set' options really - rp */ + enum command_id cmd; assert(level > 0 && level < 11); + switch(level) { + case 3 : cmd=CMD_EASY; break; + case 5 : cmd=CMD_NORMAL; break; + case 7 : cmd=CMD_HARD; break; + case 8 : cmd=CMD_HARDER; break; + } + + /* kludge - these commands ought to be 'set' options really - rp */ + pplayer=find_player_by_name_prefix(name, &match_result); @@ -2913,4 +2930,7 @@ case CMD_HARD: set_ai_level(caller, arg, 7); + break; + case CMD_HARDER: + set_ai_level(caller, arg, 8); break; case CMD_QUIT: