[Freeciv-Dev] Re: Tech cost patch v3
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
> > It doesn't look bad, only the coding style needs to be fined a bit, IMHO.
> It would help to know what it currently is ;)
See Coding RFC (just now discussed here, you should notice it) and vote there
for your favourite coding stile, as a start ;-). I mentioned things I don't
like in my previous mail, they look fixed, that's great :-).
> Included is modified patch with following chages:
> - Converted c++-style comments to c-style
> - Add capability tech_cost
> - Added cost field to advance-structure
> - Calculate costs only once
> - Converted if in tech_cost to switch
> - Got rid of floats
> - Changed for (i = 0; i < players; ++i) to player_iterate
fine!
> > Shouldn't you also modify ai/advmilitary.c ? >:)
> I hope not, I haven't got faintest idea what happens there. Someone
> more familiar with ai should probably check if modifications are
> needed.
Use grep. Your GREAT friend! It tells me:
freeciv/ai/advmilitary.c: techcost = techdist * (techdist +
pplayer->research.researchpoints) *
freeciv/ai/advmilitary.c: l = k * (k + pplayer->research.researchpoints) *
game.researchcost;
So run your favourite editor, hunt these lines and modify them :-).
> +/**************************************************************************
> + Function to determine cost for technology.
> + Equation is determined from game.rgame.tech_cost_style
> + 0 == Civ (I|II) style. Every tech increases cost by game.researchcost.
> + 1 == Cost is game.researchcost*(1+numparenttechs).
> + 2 == Cost is (numplayers-civswithtech)/numplayers*costinstyle1
> + 3 == Cost is (numplayers-civsincontactwithtech)/numplayers*costinstyle1
> +**************************************************************************/
> +int tech_cost(struct player *pplayer, int tech)
> +{
> + if (tech > game.num_tech_types) /* Future tech */
> + return pplayer->research.researchpoints * game.researchcost;
> +
> + switch(game.rgame.tech_cost_style) {
> + case 1:
> + {
> + return tech_cost_rec(pplayer, tech);
> + }
> + case 2:
> + {
> + int players = get_num_human_and_ai_players();
> + int mul = 10*(players - game.global_advances[tech]) / players;
+ (this means newline would be nice)
> + return mul * tech_cost_rec(pplayer, tech)/10;
> + }
> + case 3:
> + {
> + int playerswithtech = 0;
> + int players = get_num_human_and_ai_players();
> + int mul;
+
> + players_iterate(other) { /* Find out how many players have tech*/
> + if (!player_has_embassy(pplayer, other))
> + continue;
> +
> + if (other->research.inventions[tech] == TECH_KNOWN)
> + ++playerswithtech;
> +
- (this means this newline is not very nice :)
> + } players_iterate_end;
+
> + mul = 10*(players - playerswithtech) / players;
> + return mul * tech_cost_rec(pplayer, tech)/10;
> + }
> + case 0:
> + return pplayer->research.researchpoints * game.researchcost;
Maybe it would be nice to sort cases in ascending order, but never mind, this
comment is here just due to lack of any other things i don't like here ;-).
> + default:
> + freelog(LOG_ERROR, "Invalid tech_cost_style %d",
> game.rgame.tech_cost_style);
> + return 0;
> + }
> +}
> +
> +/**************************************************************************
> + Count cost for technology recursively.
> + Do no call this function directly, use tech_cost instead.
> + Result is researchcost*(1+numparents)
> +**************************************************************************/
> +int tech_cost_rec(struct player *pplayer, int tech)
> +{
> + int price = game.researchcost;
+
> + if (tech == 0)
> + return 0;
> + if (advances[tech].cost!=0) /* Precalculated value */
> + return advances[tech].cost;
> +
> + price += tech_cost_rec(pplayer, advances[tech].req[0]);
> + price += tech_cost_rec(pplayer, advances[tech].req[1]);
> + advances[tech].cost = price;
> + return price;
When it will be finetuned, Raimar will probably want to get it thru bugtracking
system (mail it at bugs@xxxxxxxxxxxxxxxxxxx).
--
Petr "Pasky" Baudis
UN*X programmer, UN*X administrator, hobbies = IPv6, IRC
Real Users hate Real Programmers.
Public PGP key, geekcode and stuff: http://pasky.ji.cz/~pasky/
- [Freeciv-Dev] Tech cost patch, Juha Litola, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch, Juha Litola, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch, Juha Litola, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch, Raimar Falke, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch, Petr Baudis, 2001/11/28
- [Freeciv-Dev] Tech cost patch v3, Juha Litola, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch v3,
Petr Baudis <=
- [Freeciv-Dev] Tech cost patch v4, Juha Litola, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch v4, Paul Zastoupil, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch v4, Juha Litola, 2001/11/28
- [Freeciv-Dev] Re: Tech cost patch v3, Raimar Falke, 2001/11/28
- [Freeciv-Dev] Why not C++ style comments?, Raahul Kumar, 2001/11/29
- [Freeciv-Dev] Re: Why not C++ style comments?, Raimar Falke, 2001/11/29
- [Freeciv-Dev] C/C++ Compilers used with Freeciv, Raahul Kumar, 2001/11/29
- [Freeciv-Dev] Re: Why not C++ style comments?, Reinier Post, 2001/11/29
- [Freeciv-Dev] Re: Why not C++ style comments?, Reinier Post, 2001/11/29
- [Freeciv-Dev] Re: Why not C++ style comments?, Jules Bean, 2001/11/29
|
|