package net.sf.colossus.common;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
/**
* Class Constants just holds constants.
*
* @author David Ripton
*/
public final class Constants
{
// Special feature to end the game after one battle is completed,
// for tuning the AI
private static final String END_AFTER_FIRST_BATTLE_PROPERTY = "net.sf.colossus.endAfterFirstBattle";
public static final boolean END_AFTER_FIRST_BATTLE = Boolean.valueOf(
System.getProperty(END_AFTER_FIRST_BATTLE_PROPERTY, "false")
.toString()).booleanValue();
// Special feature for stresstest: force at least one board
private static final String FORCE_VIEW_BOARD_PROPNAME = "net.sf.colossus.forceViewBoard";
public static final boolean FORCE_VIEW_BOARD = Boolean.valueOf(
System.getProperty(FORCE_VIEW_BOARD_PROPNAME, "false").toString())
.booleanValue();
/**
* Default base path for save game and cf files;
* Also used as start dir for Custom Variant loading dialog
*/
public static final String DEFAULT_COLOSSUS_HOME = System
.getProperty("user.home") + File.separator + ".colossus";
// Constants related to the options config files
public static final String OPTIONS_BASE = "Colossus-";
public static final String OPTIONS_SERVER_NAME = "server";
public static final String OPTIONS_NET_CLIENT_NAME = "netclient";
public static final String OPTIONS_WEB_CLIENT_NAME = "webclient";
// virtual "name" for Options instance in GetPlayers (never saved)
public static final String OPTIONS_START = "start";
public static final String OPTIONS_EXTENSION = ".cfg";
public static final String CONFIG_VERSION = "Colossus config file version 2";
public static final boolean USE_RECORDER = false;
public static final boolean _CREATE_LOCAL_DUMMY_CLIENT = false;
public static final String INTERNAL_DUMMY_CLIENT_NAME = "_internal_dummy_";
// Constants for savegames
/** Must include trailing slash. */
public static final String SAVE_DIR_NAME = DEFAULT_COLOSSUS_HOME
+ File.separator + "saves" + File.separator;
public static final String XML_EXTENSION = ".xml";
public static final String XML_SNAPSHOT_START = "snap";
// in version 14 the iscmName and file was added
public static final String XML_SNAPSHOT_VERSION = "14";
public static final String ISC_FILE_START = "iscm";
public static final String ISC_FILE_EXTENTION = ".txt";
public static final int BIGNUM = 99;
public static final int OUT_OF_RANGE = 5;
/** Fake striker id for drift and other hex damage. */
public static final int HEX_DAMAGE = -1;
public static enum ConfirmVals
{
Yes, No, DoNotAsk
}
public static enum HexsideGates
{
NONE, BLOCK, ARCH, ARROW, ARROWS
}
// TODO the next three constants should probably be part of the HexsideGates enum
public static final int ARCHES_AND_ARROWS = -1;
public static final int ARROWS_ONLY = -2;
public static final int NOWHERE = -1;
public static final int MIN_AI_DELAY = 0; //in ms
public static final int MAX_AI_DELAY = 3000;
public static final int DEFAULT_AI_DELAY = 300;
public static final int MIN_AI_TIME_LIMIT = 1; //in s
public static final int MAX_AI_TIME_LIMIT = 200;
public static final int DEFAULT_AI_TIME_LIMIT = 30;
/** all variants are subdirectories of this dir.
/* the default dir name can is not prepended by this. */
public static final String varPath = "";
/** Default directory for datafiles, can be outside variants,
* but should be there.
*/
public static final String defaultDirName = "Default";
public static final String defaultVarName = "Default";
/** Images subdirectory name */
public static final String imagesDirName = "images";
/** Battlelands subdirectory name */
public static final String battlelandsDirName = "Battlelands";
/** Default CRE file */
public static final String defaultCREFile = "DefaultCre.xml";
/** Default MAP file */
public static final String defaultMAPFile = "DefaultMap.xml";
/** Default TER file */
public static final String defaultTERFile = "DefaultTer.xml";
/** Default HINT file */
public static final String defaultHINTFile = "DefaultHint";
/** Default VAR file */
public static final String defaultVARFile = "DefaultVar.xml";
public static final String varEnd = "Var.xml";
/** markers name are mapped in this one */
public static final String markersNameFile = "MarkersName";
/* icon setup */
public static final String masterboardIconImage = "Colossus";
public static final String masterboardIconText = "Colossus";
public static final String masterboardIconTextColor = "black";
public static final String masterboardIconSubscript = "Main";
public static final String battlemapIconImage = "Colossus";
public static final String battlemapIconText = "Colossus";
public static final String battlemapIconTextColor = "black";
public static final String battlemapIconSubscript = "Battle";
public static final int DEFAULT_MAX_PLAYERS = 6;
/* number of available colors/markers */
public static final int MAX_MAX_PLAYERS = 12;
// Player types
public static final String human = "Human";
public static final String network = "Network";
public static final String none = "None";
public static final String ai = "AI";
public static final String anyAI = "A Random AI";
public static final String defaultAI = anyAI;
public static final String[] aiArray = { "SimpleAI", "CowardSimpleAI",
"RationalAI", "HumanHaterRationalAI", "MilvangAI",
// Note that ExperimentalAI must be last, as long as we want to
// disallow ExperimentalAI as "A Random AI" for normal users.
// See PlayerServerSide.setType().
"ExperimentalAI"
// , "ParallelEvaluatorAI"
};
// Auto play for human players uses SimpleAI:
public static final String autoplayAI = aiArray[0];
public static final int numAITypes = aiArray.length;
public static final String aiPackage = "net.sf.colossus.ai.";
// Player names/placeholders
public static final String byColor = "<By color>";
public static final String byType = "<By type>";
public static final String byClient = "<By client>";
public static final String username = System.getProperty("user.name",
byColor);
public static final String titan = "Titan";
public static final String angel = "Angel";
// Network stuff
public static final int defaultPort = 26567;
// Web clients:
public static final String defaultWebServer = "play-colossus.net";
public static final int defaultWebPort = 26766;
public static final int numSavedServerNames = 10;
public static final int SUSPEND_APPROVE_TIMEOUT = 10;
// Game actions used in several places.
public static final String newGame = "New game";
public static final String loadGame = "Load game";
public static final String saveGame = "Save game";
public static final String saveGameAs = "Save game as";
public static final String suspendGame = "Suspend game";
public static final String suspendGameNoSave = "Suspend game w/o saving";
public static final String suspendResponse = "Suspend response";
public static final String quitGame = "Quit Application";
public static final String closeBoard = "Close MasterBoard";
public static final String checkConnection = "Check connection";
public static final String checkAllConnections = "Check all connections";
public static final String peerRequestsConfirmation = "Peer requests confirmation";
public static final String cleanDisconnect = "Disconnect";
public static final String tryReconnect = "Reconnect";
public static final String enforcedDisconnectByServer = "Fake Disconnect (by server)";
public static final String runClient = "Run network client";
public static final String runWebClient = "Run web client";
// Used as prompt, and as the string for "strike penalty" send to server
// for canceling the strike.
public static final String cancelStrike = "Cancel";
/** Available internal variants Try to keep this list mostly
* alphabetized for easier searching, with Default at the top. */
public static final String[] variantArray = { "Default", "Abyssal3",
"Abyssal6", "Abyssal9", "Badlands", "Badlands-JDG", "Balrog",
"Beelzebub", "Beelzebub12", "BeelzeGods12", "DinoTitan", "ExtTitan",
"Infinite", "Outlands", "Pantheon", "SmallTitan", "TG-ConceptI",
"TG-ConceptII", "TG-ConceptIII", "TG-SetII", "TG-SetIII", "TG-Wild",
"TitanPlus", "Undead", "Unified" };
public static final int numVariants = variantArray.length;
private static final List<String> variantList = Arrays
.asList(variantArray);
public static List<String> getVariantList()
{
return Collections.unmodifiableList(variantList);
}
// Protocol packet type constants
/** XXX If any of the args in the protocol contain this string, then
* the protocol will break. */
public static final String protocolTermSeparator = " ~ ";
// From client to server
public static final String signOn = "signOn";
public static final String systemInfo = "systemInfo";
public static final String requestGameInfo = "requestGameInfo";
public static final String joinGame = "joinGame";
public static final String watchGame = "watchGame";
public static final String fixName = "fixName";
public static final String leaveCarryMode = "leaveCarryMode";
public static final String doneWithBattleMoves = "doneWithBattleMoves";
public static final String doneWithStrikes = "doneWithStrikes";
public static final String acquireAngel = "acquireAngel";
public static final String doSummon = "doSummon";
public static final String doRecruit = "doRecruit";
public static final String engage = "engage";
public static final String concede = "concede";
public static final String doNotConcede = "doNotConcede";
public static final String flee = "flee";
public static final String doNotFlee = "doNotFlee";
public static final String makeProposal = "makeProposal";
public static final String fight = "fight";
public static final String doBattleMove = "doBattleMove";
public static final String strike = "strike";
public static final String applyCarries = "applyCarries";
public static final String undoBattleMove = "undoBattleMove";
public static final String assignStrikePenalty = "assignStrikePenalty";
public static final String mulligan = "mulligan";
public static final String requestExtraRoll = "requestExtraRoll";
public static final String extraRollResponse = "extraRollResponse";
public static final String undoSplit = "undoSplit";
public static final String undoMove = "undoMove";
public static final String undoRecruit = "undoRecruit";
public static final String doneWithSplits = "doneWithSplits";
public static final String doneWithMoves = "doneWithMoves";
public static final String doneWithEngagements = "doneWithEngagements";
public static final String doneWithRecruits = "doneWithRecruits";
public static final String withdrawFromGame = "withdrawFromGame";
public static final String disconnect = "disconnect";
public static final String stopGame = "stopGame";
public static final String doSplit = "doSplit";
public static final String doMove = "doMove";
public static final String assignColor = "assignColor";
public static final String assignFirstMarker = "assignFirstMarker";
public static final String askPickFirstMarker = "askPickFirstMarker";
public static final String catchupConfirmation = "catchupConfirmation";
public static final String serverConnectionOK = "serverConnectionOK";
public static final String relayBackReceivedMsg = "relayBackReceivedMsg";
public static final String relayBackProcessedMsg = "relayBackProcessedMsg";
public static final String pingRequest = "pingRequest";
public static final String replyToPing = "replyToPing";
public static final String peerRequestReceived = "peerRequestReceived";
public static final String peerRequestProcessed = "peerRequestProcessed";
public static final String requestSyncDelta = "requestSyncDelta";
public static final String confirmCommitPoint = "confirmCommitPoint";
public static final String logMsgToServer = "logMsgToServer";
public static final String cheatModeDestroyLegion = "cheatModeDestroyLegion";
public static final String reasonSplit = "Split";
public static final String reasonSummon = "Summon";
public static final String reasonUndoSummon = "UndoSummon";
public static final String reasonAcquire = "Acquire";
public static final String reasonEdit = "Edit";
public static final String reasonRecruiter = "Recruiter";
public static final String reasonRecruited = "Recruited";
public static final String reasonReinforced = "Reinforced";
public static final String reasonUndidRecruit = "UndidRecruit";
public static final String reasonUndidReinforce = "UndidReinforce";
public static final String reasonNegotiated = "Negotiated";
public static final String reasonTeleport = "Teleport";
public static final String reasonInitial = "Initial";
public static final String reasonGameOver = "GameOver";
public static final String reasonWinner = "Winner";
public static final String reasonBattleStarts = "BattleStarts";
public static final String reasonEngaged = "Engaged";
public static final String reasonConcession = "Concession";
public static final String reasonFled = "Fled";
public static final String reasonKilled = "Killed";
public static final String reasonNormalRoll = "NormalRoll";
public static final String reasonMulligan = "MulliganRoll";
public static final String reasonExtraRoll = "ExtraRoll";
// From server to client
public static final String tellEngagement = "tellEngagement";
public static final String tellEngagementResults = "tellEngagementResults";
public static final String tellMovementRoll = "tellMovementRoll";
public static final String tellWhatsHappening = "tellWhatsHappening";
// TODO change the actually transferred string also, when we break
// server-client network compatibility next time anyway
public static final String syncOption = "setOption";
public static final String updatePlayerInfo = "updatePlayerInfo";
public static final String updateChangedValues = "updateChangedValues";
public static final String setColor = "setColor";
public static final String updateCreatureCount = "updateCreatureCount";
public static final String dispose = "dispose";
public static final String removeLegion = "removeLegion";
public static final String setLegionStatus = "setLegionStatus";
public static final String addCreature = "addCreature";
public static final String removeCreature = "removeCreature";
public static final String revealCreatures = "revealCreatures";
public static final String revealEngagedCreatures = "revealEngagedCreatures";
public static final String removeDeadBattleChits = "removeDeadBattleChits";
public static final String placeNewChit = "placeNewChit";
public static final String replayOngoing = "replayOngoing";
public static final String redoOngoing = "redoOngoing";
public static final String initBoard = "initBoard";
public static final String setPlayerName = "setPlayerName";
public static final String createSummonAngel = "createSummonAngel";
public static final String askAcquireAngel = "askAcquireAngel";
public static final String askChooseStrikePenalty = "askChooseStrikePenalty";
public static final String tellGameOver = "tellGameOver";
public static final String tellPlayerElim = "tellPlayerElim";
public static final String askConcede = "askConcede";
public static final String askFlee = "askFlee";
public static final String askNegotiate = "askNegotiate";
public static final String tellProposal = "tellProposal";
public static final String tellStrikeResults = "tellStrikeResults";
public static final String tellSlowResults = "tellSlowResults";
public static final String initBattle = "initBattle";
public static final String cleanupBattle = "cleanupBattle";
public static final String nextEngagement = "nextEngagement";
public static final String doReinforce = "doReinforce";
public static final String didRecruit = "didRecruit";
public static final String undidRecruit = "undidRecruit";
public static final String setupTurnState = "setupTurnState";
public static final String setupSplit = "setupSplit";
public static final String setupMove = "setupMove";
public static final String setupFight = "setupFight";
public static final String setupMuster = "setupMuster";
public static final String kickPhase = "kickPhase";
public static final String setupBattleSummon = "setupBattleSummon";
public static final String setupBattleRecruit = "setupBattleRecruit";
public static final String setupBattleMove = "setupBattleMove";
public static final String setupBattleFight = "setupBattleFight";
public static final String tellLegionLocation = "tellLegionLocation";
public static final String tellBattleMove = "tellBattleMove";
public static final String didMove = "didMove";
public static final String didSummon = "didSummon";
public static final String undidMove = "undidMove";
public static final String undidSplit = "undidSplit";
public static final String didSplit = "didSplit";
public static final String askPickColor = "askPickColor";
public static final String log = "log";
public static final String nak = "nak";
public static final String boardActive = "boardActive";
public static final String askConfirmCatchUp = "askConfirmCatchUp";
public static final String relayedPeerRequest = "relayedPeerRequest";
public static final String setConnectionId = "setConnectionId";
public static final String gameInitInfo = "gameInitInfo";
public static final String commitPoint = "commitPoint";
public static final String messageFromServer = "messageFromServer";
public static final String syncCompleted = "syncCompleted";
public static final String requestExtraRollApproval = "requestExtraRollApproval";
public static final String askSuspendConfirmation = "askSuspendConfirmation";
public static final String appendToConnectionLog = "appendToConnLog";
private final static HashSet<String> skipForScratchReconnect = new HashSet<String>(
Arrays.asList(askPickColor, tellEngagement, dispose,
removeDeadBattleChits, placeNewChit, createSummonAngel,
askAcquireAngel, askChooseStrikePenalty, tellGameOver, askConcede,
askFlee, askNegotiate, tellProposal, tellStrikeResults,
tellSlowResults, initBattle, cleanupBattle, nextEngagement,
doReinforce, setupBattleSummon, setupBattleRecruit,
setupBattleMove,
setupBattleFight, tellBattleMove, askPickFirstMarker, log, nak,
boardActive, askConfirmCatchUp, relayedPeerRequest,
setConnectionId, syncCompleted, requestExtraRollApproval,
askSuspendConfirmation, "Ack: signOn",
pingRequest, updateCreatureCount, tellWhatsHappening, commitPoint,
gameInitInfo, replayOngoing, redoOngoing, tellLegionLocation,
didMove, undidMove, setupSplit, setupMove, setupMuster,
setLegionStatus,
// setupSplit,
setPlayerName));
public static boolean shouldSkipForScratchReconnect(String method)
{
return skipForScratchReconnect.contains(method);
}
private final static HashSet<String> skipForDebugPrn = new HashSet<String>(
Arrays.asList(syncOption, tellLegionLocation, revealCreatures,
tellMovementRoll, didRecruit, didSplit, didMove,
updateCreatureCount, pingRequest
/*
askPickColor, tellEngagement, dispose,
removeDeadBattleChits, placeNewChit, createSummonAngel,
askAcquireAngel, askChooseStrikePenalty, tellGameOver, askConcede,
askFlee, askNegotiate, tellProposal, tellStrikeResults,
tellSlowResults, initBattle, cleanupBattle, nextEngagement,
doReinforce, setupSplit, setupMove, setupFight, setupMuster,
kickPhase, setupBattleSummon, setupBattleRecruit, setupBattleMove,
setupBattleFight, tellBattleMove, askPickFirstMarker, log, nak,
boardActive, askConfirmCatchUp, relayedPeerRequest,
setConnectionId, syncCompleted, requestExtraRollApproval,
askSuspendConfirmation, didMove, undidMove, "Ack: signOn",
pingRequest, updateCreatureCount, tellWhatsHappening, commitPoint,
gameInitInfo, replayOngoing, redoOngoing)
*/
//
));
public static boolean shouldSkipForDebugPrn(String method)
{
return skipForDebugPrn.contains(method);
}
private final static HashSet<String> neededForRedo = new HashSet<String>(
Arrays.asList(didMove, undidMove, didRecruit, undidRecruit, didSplit,
undidSplit, setupSplit, setupMove, setupMuster));
public static boolean isNeededForRedo(String method)
{
return neededForRedo.contains(method);
}
// engagement resolved, methods:
public static final String erMethodFlee = "flee";
public static final String erMethodConcede = "concede";
public static final String erMethodFight = "fight";
public static final String erMethodTimeLoss = "timeloss";
public static final String erMethodNegotiate = "negotiate";
public static final int legionStatusCount = 0;
public static final int legionStatusMoved = 1;
public static final int legionStatusNotVisitedSkippedBlocked = 2;
public static final int legionStatusBlocked = 3;
}