/************************************************************************** ... **************************************************************************/ void do_conquer_cost(struct player *pplayer, Tech_type_id tech) { struct player_research * research = get_player_research(pplayer); research->bulbs_researched -= (base_total_bulbs_required(pplayer, tech) * game.info.conquercost) / 100; research->researching_saved = A_UNKNOWN; }
/************************************************************************** Reduce free cost bulbs from player. **************************************************************************/ void do_free_cost(struct player *pplayer, Tech_type_id tech) { struct player_research * research = player_research_get(pplayer); research->bulbs_researched -= (base_total_bulbs_required(pplayer, tech) * game.server.freecost) / 100; research->researching_saved = A_UNKNOWN; }
/************************************************************************** Updates required_techs, num_required_techs and bulbs_required in pplayer->research->inventions[goal]. **************************************************************************/ static void build_required_techs(struct player *pplayer, Tech_type_id goal) { int counter; struct player_research *research = player_research_get(pplayer); BV_CLR_ALL(research->inventions[goal].required_techs); if (player_invention_state(pplayer, goal) == TECH_KNOWN) { research->inventions[goal].num_required_techs = 0; research->inventions[goal].bulbs_required = 0; return; } build_required_techs_helper(pplayer, goal, goal); /* Include the goal tech */ research->inventions[goal].bulbs_required = base_total_bulbs_required(pplayer, goal); research->inventions[goal].num_required_techs = 1; counter = 0; advance_index_iterate(A_FIRST, i) { if (!is_tech_a_req_for_goal(pplayer, i, goal)) { continue; } /* * This is needed to get a correct result for the * base_total_bulbs_required call. */ research->techs_researched++; counter++; research->inventions[goal].num_required_techs++; research->inventions[goal].bulbs_required += base_total_bulbs_required(pplayer, i); } advance_index_iterate_end; /* Undo the changes made above */ research->techs_researched -= counter; }