tAll integer configuration file variables now have a minimum value; NumLocation and NumDrug can no longer be set to anything less than 1. - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 2aa302aa4c27973a0cfb782c1c1ff5c5b37f0f73 (DIR) parent ebbf53c779d9c989c286a27e1cf4daab3b731642 (HTM) Author: Ben Webb <ben@salilab.org> Date: Sat, 6 Apr 2002 19:51:22 +0000 All integer configuration file variables now have a minimum value; NumLocation and NumDrug can no longer be set to anything less than 1. Diffstat: M src/dopewars.c | 228 ++++++++++++++++--------------- M src/dopewars.h | 1 + 2 files changed, 119 insertions(+), 110 deletions(-) --- (DIR) diff --git a/src/dopewars.c b/src/dopewars.c t@@ -221,357 +221,358 @@ struct GLOBALS Globals[] = { * be set in a dopewars configuration file, or in the server. See * doc/configfile.html for more detailed explanations. */ {&Port, NULL, NULL, NULL, NULL, "Port", N_("Network port to connect to"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &HiScoreFile, NULL, "HiScoreFile", - N_("Name of the high score file"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Name of the high score file"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &ServerName, NULL, "Server", N_("Name of the server to connect to"), NULL, NULL, 0, "", NULL, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &ServerMOTD, NULL, "ServerMOTD", N_("Server's welcome message of the day"), NULL, NULL, 0, "", NULL, - NULL, FALSE}, + NULL, FALSE, 0}, #ifdef NETWORKING {NULL, &UseSocks, NULL, NULL, NULL, "Socks.Active", N_("TRUE if a SOCKS server should be used for networking"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, #ifndef CYGWIN {NULL, &Socks.numuid, NULL, NULL, NULL, "Socks.NumUID", N_("TRUE if numeric user IDs should be used for SOCKS4"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, #endif {NULL, NULL, NULL, &Socks.user, NULL, "Socks.User", N_("If not blank, the username to use for SOCKS4"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Socks.name, NULL, "Socks.Name", N_("The hostname of a SOCKS server to use"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&Socks.port, NULL, NULL, NULL, NULL, "Socks.Port", N_("The port number of a SOCKS server to use"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&Socks.version, NULL, NULL, NULL, NULL, "Socks.Version", N_("The version of the SOCKS protocol to use (4 or 5)"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 4}, {NULL, NULL, NULL, &Socks.authuser, NULL, "Socks.Auth.User", N_("Username for SOCKS5 authentication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Socks.authpassword, NULL, "Socks.Auth.Password", N_("Password for SOCKS5 authentication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, &MetaServer.Active, NULL, NULL, NULL, "MetaServer.Active", N_("TRUE if server should report to a metaserver"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.Name, NULL, "MetaServer.Name", N_("Metaserver name to report/get server details to/from"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&MetaServer.Port, NULL, NULL, NULL, NULL, "MetaServer.Port", N_("Port for metaserver communication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.ProxyName, NULL, "MetaServer.ProxyName", N_("Name of a proxy for metaserver communication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&MetaServer.ProxyPort, NULL, NULL, NULL, NULL, "MetaServer.ProxyPort", N_("Port for communicating with the proxy server"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.Path, NULL, "MetaServer.Path", N_("Path of the script on the metaserver"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.LocalName, NULL, "MetaServer.LocalName", N_("Preferred hostname of your server machine"), NULL, NULL, 0, "", - NULL, NULL, FALSE}, + NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.Password, NULL, "MetaServer.Password", N_("Authentication for LocalName with the metaserver"), NULL, NULL, 0, - "", NULL, NULL, FALSE}, + "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.Comment, NULL, "MetaServer.Comment", N_("Server description, reported to the metaserver"), NULL, NULL, 0, "", - NULL, NULL, FALSE}, + NULL, NULL, FALSE, 0}, {NULL, &MetaServer.UseSocks, NULL, NULL, NULL, "MetaServer.UseSocks", N_("If TRUE, use SOCKS for metaserver communication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.authuser, NULL, "MetaServer.Auth.User", N_("Username for HTTP Basic authentication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.authpassword, NULL, "MetaServer.Auth.Password", N_("Password for HTTP Basic authentication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.proxyuser, NULL, "MetaServer.Proxy.User", N_("Username for HTTP Basic proxy authentication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &MetaServer.proxypassword, NULL, "MetaServer.Proxy.Password", N_("Password for HTTP Basic proxy authentication"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, #endif /* NETWORKING */ #ifdef CYGWIN {NULL, &MinToSysTray, NULL, NULL, NULL, "MinToSysTray", N_("If TRUE, the server minimizes to the System Tray"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, #else {NULL, &Daemonize, NULL, NULL, NULL, "Daemonize", N_("If TRUE, the server runs in the background"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &WebBrowser, NULL, "WebBrowser", N_("The command used to start your web browser"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, #endif {&NumTurns, NULL, NULL, NULL, NULL, "NumTurns", N_("No. of game turns (if 0, game never ends)"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Currency.Symbol, NULL, "Currency.Symbol", N_("The currency symbol (e.g. $)"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, &Currency.Prefix, NULL, NULL, NULL, "Currency.Prefix", N_("If TRUE, the currency symbol precedes prices"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Log.File, NULL, "Log.File", N_("File to write log messages to"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&Log.Level, NULL, NULL, NULL, NULL, "Log.Level", N_("Controls the number of log messages produced"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Log.Timestamp, NULL, "Log.Timestamp", N_("strftime() format string for log timestamps"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, &Sanitized, NULL, NULL, NULL, "Sanitized", - N_("Random events are sanitized"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Random events are sanitized"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, &DrugValue, NULL, NULL, NULL, "DrugValue", N_("TRUE if the value of bought drugs should be saved"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, &ConfigVerbose, NULL, NULL, NULL, "ConfigVerbose", N_("Be verbose in processing config file"), NULL, NULL, 0, "", NULL, - NULL, FALSE}, + NULL, FALSE, 0}, {&NumLocation, NULL, NULL, NULL, NULL, "NumLocation", N_("Number of locations in the game"), (void **)(&Location), NULL, sizeof(struct LOCATION), "", NULL, - ResizeLocations, FALSE}, + ResizeLocations, FALSE, 1}, {&NumCop, NULL, NULL, NULL, NULL, "NumCop", N_("Number of types of cop in the game"), - (void **)(&Cop), NULL, sizeof(struct COP), "", NULL, ResizeCops, FALSE}, + (void **)(&Cop), NULL, sizeof(struct COP), "", NULL, ResizeCops, FALSE, 0}, {&NumGun, NULL, NULL, NULL, NULL, "NumGun", N_("Number of guns in the game"), - (void **)(&Gun), NULL, sizeof(struct GUN), "", NULL, ResizeGuns, FALSE}, + (void **)(&Gun), NULL, sizeof(struct GUN), "", NULL, ResizeGuns, FALSE, 0}, {&NumDrug, NULL, NULL, NULL, NULL, "NumDrug", N_("Number of drugs in the game"), - (void **)(&Drug), NULL, sizeof(struct DRUG), "", NULL, ResizeDrugs, FALSE}, + (void **)(&Drug), NULL, sizeof(struct DRUG), "", NULL, ResizeDrugs, + FALSE, 1}, {&LoanSharkLoc, NULL, NULL, NULL, NULL, "LoanShark", - N_("Location of the Loan Shark"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Location of the Loan Shark"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&BankLoc, NULL, NULL, NULL, NULL, "Bank", N_("Location of the bank"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&GunShopLoc, NULL, NULL, NULL, NULL, "GunShop", N_("Location of the gun shop"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&RoughPubLoc, NULL, NULL, NULL, NULL, "RoughPub", N_("Location of the pub"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.LoanSharkName, NULL, "LoanSharkName", - N_("Name of the loan shark"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Name of the loan shark"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.BankName, NULL, "BankName", - N_("Name of the bank"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Name of the bank"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.GunShopName, NULL, "GunShopName", - N_("Name of the gun shop"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Name of the gun shop"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.RoughPubName, NULL, "RoughPubName", - N_("Name of the pub"), NULL, NULL, 0, "", NULL, NULL, FALSE}, + N_("Name of the pub"), NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&DrugSortMethod, NULL, NULL, NULL, NULL, "DrugSortMethod", N_("Sort key for listing available drugs"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&FightTimeout, NULL, NULL, NULL, NULL, "FightTimeout", N_("No. of seconds in which to return fire"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&IdleTimeout, NULL, NULL, NULL, NULL, "IdleTimeout", N_("Players are disconnected after this many seconds"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&ConnectTimeout, NULL, NULL, NULL, NULL, "ConnectTimeout", N_("Time in seconds for connections to be made or broken"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&MaxClients, NULL, NULL, NULL, NULL, "MaxClients", N_("Maximum number of TCP/IP connections"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&AITurnPause, NULL, NULL, NULL, NULL, "AITurnPause", N_("Seconds between turns of AI players"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, &StartCash, NULL, NULL, "StartCash", N_("Amount of cash that each player starts with"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, &StartDebt, NULL, NULL, "StartDebt", N_("Amount of debt that each player starts with"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &StaticLocation.Name, NULL, "Name", N_("Name of each location"), (void **)(&Location), &StaticLocation, - sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE}, + sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE, 0}, {&(StaticLocation.PolicePresence), NULL, NULL, NULL, NULL, "PolicePresence", N_("Police presence at each location (%)"), (void **)(&Location), &StaticLocation, - sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE}, + sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE, 0}, {&(StaticLocation.MinDrug), NULL, NULL, NULL, NULL, "MinDrug", N_("Minimum number of drugs at each location"), (void **)(&Location), &StaticLocation, - sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE}, + sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE, 1}, {&(StaticLocation.MaxDrug), NULL, NULL, NULL, NULL, "MaxDrug", N_("Maximum number of drugs at each location"), (void **)(&Location), &StaticLocation, - sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE}, + sizeof(struct LOCATION), "Location", &NumLocation, NULL, FALSE, 1}, {&PlayerArmour, NULL, NULL, NULL, NULL, "PlayerArmour", N_("% resistance to gunshots of each player"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&BitchArmour, NULL, NULL, NULL, NULL, "BitchArmour", N_("% resistance to gunshots of each bitch"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 1}, {NULL, NULL, NULL, &StaticCop.Name, NULL, "Name", N_("Name of each cop"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &StaticCop.DeputyName, NULL, "DeputyName", N_("Name of each cop's deputy"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &StaticCop.DeputiesName, NULL, "DeputiesName", N_("Name of each cop's deputies"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.Armour, NULL, NULL, NULL, NULL, "Armour", N_("% resistance to gunshots of each cop"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 1}, {&StaticCop.DeputyArmour, NULL, NULL, NULL, NULL, "DeputyArmour", N_("% resistance to gunshots of each deputy"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 1}, {&StaticCop.AttackPenalty, NULL, NULL, NULL, NULL, "AttackPenalty", N_("Attack penalty relative to a player"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.DefendPenalty, NULL, NULL, NULL, NULL, "DefendPenalty", N_("Defend penalty relative to a player"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.MinDeputies, NULL, NULL, NULL, NULL, "MinDeputies", N_("Minimum number of accompanying deputies"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.MaxDeputies, NULL, NULL, NULL, NULL, "MaxDeputies", N_("Maximum number of accompanying deputies"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.GunIndex, NULL, NULL, NULL, NULL, "GunIndex", N_("Zero-based index of the gun that cops are armed with"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.CopGun, NULL, NULL, NULL, NULL, "CopGun", N_("Number of guns that each cop carries"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {&StaticCop.DeputyGun, NULL, NULL, NULL, NULL, "DeputyGun", N_("Number of guns that each deputy carries"), (void **)(&Cop), &StaticCop, sizeof(struct COP), "Cop", &NumCop, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &StaticDrug.Name, NULL, "Name", N_("Name of each drug"), (void **)(&Drug), &StaticDrug, - sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE}, + sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE, 0}, {NULL, NULL, &(StaticDrug.MinPrice), NULL, NULL, "MinPrice", N_("Minimum normal price of each drug"), (void **)(&Drug), &StaticDrug, - sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE}, + sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE, 1}, {NULL, NULL, &(StaticDrug.MaxPrice), NULL, NULL, "MaxPrice", N_("Maximum normal price of each drug"), (void **)(&Drug), &StaticDrug, - sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE}, + sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE, 1}, {NULL, &(StaticDrug.Cheap), NULL, NULL, NULL, "Cheap", N_("TRUE if this drug can be specially cheap"), (void **)(&Drug), &StaticDrug, - sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE}, + sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE, 0}, {NULL, &(StaticDrug.Expensive), NULL, NULL, NULL, "Expensive", N_("TRUE if this drug can be specially expensive"), (void **)(&Drug), &StaticDrug, - sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE}, + sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE, 0}, {NULL, NULL, NULL, &StaticDrug.CheapStr, NULL, "CheapStr", N_("Message displayed when this drug is specially cheap"), (void **)(&Drug), &StaticDrug, - sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE}, + sizeof(struct DRUG), "Drug", &NumDrug, NULL, FALSE, 0}, {NULL, NULL, NULL, &Drugs.ExpensiveStr1, NULL, "Drugs.ExpensiveStr1", N_("Format string used for expensive drugs 50% of time"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Drugs.ExpensiveStr2, NULL, "Drugs.ExpensiveStr2", N_("Format string used for expensive drugs 50% of time"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {&(Drugs.CheapDivide), NULL, NULL, NULL, NULL, "Drugs.CheapDivide", N_("Divider for drug price when it's specially cheap"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 1}, {&(Drugs.ExpensiveMultiply), NULL, NULL, NULL, NULL, "Drugs.ExpensiveMultiply", N_("Multiplier for specially expensive drug prices"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 1}, {NULL, NULL, NULL, &StaticGun.Name, NULL, "Name", N_("Name of each gun"), (void **)(&Gun), &StaticGun, - sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE}, + sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE, 0}, {NULL, NULL, &(StaticGun.Price), NULL, NULL, "Price", N_("Price of each gun"), (void **)(&Gun), &StaticGun, - sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE}, + sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE, 0}, {&(StaticGun.Space), NULL, NULL, NULL, NULL, "Space", N_("Space taken by each gun"), (void **)(&Gun), &StaticGun, - sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE}, + sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE, 0}, {&(StaticGun.Damage), NULL, NULL, NULL, NULL, "Damage", N_("Damage done by each gun"), (void **)(&Gun), &StaticGun, - sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE}, + sizeof(struct GUN), "Gun", &NumGun, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Bitch, NULL, "Names.Bitch", N_("Word used to denote a single \"bitch\""), NULL, NULL, 0, "", NULL, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Bitches, NULL, "Names.Bitches", N_("Word used to denote two or more \"bitches\""), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Gun, NULL, "Names.Gun", N_("Word used to denote a single gun or equivalent"), NULL, NULL, 0, "", - NULL, NULL, FALSE}, + NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Guns, NULL, "Names.Guns", N_("Word used to denote two or more guns"), NULL, NULL, 0, "", NULL, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Drug, NULL, "Names.Drug", N_("Word used to denote a single drug or equivalent"), NULL, NULL, 0, - "", NULL, NULL, FALSE}, + "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Drugs, NULL, "Names.Drugs", N_("Word used to denote two or more drugs"), NULL, NULL, 0, "", NULL, - NULL, FALSE}, + NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Month, NULL, "Names.Month", N_("Text prefixed to the turn number (i.e. the month)"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, &Names.Year, NULL, "Names.Year", N_("Text appended to the turn number (i.e. the year)"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, &Prices.Spy, NULL, NULL, "Prices.Spy", N_("Cost for a bitch to spy on the enemy"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, &Prices.Tipoff, NULL, NULL, "Prices.Tipoff", N_("Cost for a bitch to tipoff the cops to an enemy"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, &Bitch.MinPrice, NULL, NULL, "Bitch.MinPrice", N_("Minimum price to hire a bitch"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, &Bitch.MaxPrice, NULL, NULL, "Bitch.MaxPrice", N_("Maximum price to hire a bitch"), - NULL, NULL, 0, "", NULL, NULL, FALSE}, + NULL, NULL, 0, "", NULL, NULL, FALSE, 0}, {NULL, NULL, NULL, NULL, &SubwaySaying, "SubwaySaying", N_("List of things which you overhear on the subway"), - NULL, NULL, 0, "", &NumSubway, ResizeSubway, FALSE}, + NULL, NULL, 0, "", &NumSubway, ResizeSubway, FALSE, 0}, {&NumSubway, NULL, NULL, NULL, NULL, "NumSubwaySaying", N_("Number of subway sayings"), - NULL, NULL, 0, "", NULL, ResizeSubway, FALSE}, + NULL, NULL, 0, "", NULL, ResizeSubway, FALSE, 0}, {NULL, NULL, NULL, NULL, &Playing, "Playing", N_("List of songs which you can hear playing"), - NULL, NULL, 0, "", &NumPlaying, ResizePlaying, FALSE}, + NULL, NULL, 0, "", &NumPlaying, ResizePlaying, FALSE, 0}, {&NumPlaying, NULL, NULL, NULL, NULL, "NumPlaying", N_("Number of playing songs"), - NULL, NULL, 0, "", NULL, ResizePlaying, FALSE}, + NULL, NULL, 0, "", NULL, ResizePlaying, FALSE, 0}, {NULL, NULL, NULL, NULL, &StoppedTo, "StoppedTo", N_("List of things which you can stop to do"), - NULL, NULL, 0, "", &NumStoppedTo, ResizeStoppedTo, FALSE}, + NULL, NULL, 0, "", &NumStoppedTo, ResizeStoppedTo, FALSE, 0}, {&NumStoppedTo, NULL, NULL, NULL, NULL, "NumStoppedTo", N_("Number of things which you can stop to do"), - NULL, NULL, 0, "", NULL, ResizeStoppedTo, FALSE} + NULL, NULL, 0, "", NULL, ResizeStoppedTo, FALSE, 0} }; const int NUMGLOB = sizeof(Globals) / sizeof(Globals[0]); t@@ -2165,17 +2166,24 @@ gboolean SetConfigValue(int GlobalIndex, int StructIndex, GlobalName = g_strdup_printf("%s[%d].%s", Globals[GlobalIndex].NameStruct, StructIndex, Globals[GlobalIndex].Name); - } else + } else { GlobalName = Globals[GlobalIndex].Name; + } if (Globals[GlobalIndex].IntVal) { token = g_scanner_get_next_token(scanner); if (token == G_TOKEN_INT) { IntVal = (int)scanner->value.v_int; + if (IntVal < Globals[GlobalIndex].MinVal) { + g_scanner_warn(scanner, _("%s can be no smaller than %d - ignoring!"), + GlobalName, Globals[GlobalIndex].MinVal); + return FALSE; + } if (Globals[GlobalIndex].ResizeFunc) { (*(Globals[GlobalIndex].ResizeFunc)) (IntVal); /* Displayed, for example, when you set NumDrug=10 to allow * Drug[10].Name etc. to be set */ - g_print(_("Resized structure list to %d elements\n"), IntVal); + if (ConfigVerbose) + g_print(_("Resized structure list to %d elements\n"), IntVal); for (list = FirstClient; list; list = g_slist_next(list)) { tmp = (Player *)list->data; UpdatePlayer(tmp); (DIR) diff --git a/src/dopewars.h b/src/dopewars.h t@@ -328,6 +328,7 @@ struct GLOBALS { int *MaxIndex; void (*ResizeFunc) (int NewNum); gboolean Modified; + int MinVal; }; extern const int NUMGLOB;