implemented new 'team_name' tag to show alliances to replace 'enemy' tag

This commit is contained in:
uid68803 2004-01-05 21:35:50 +00:00
parent 2d9f035095
commit 1ae8fc77f7
27 changed files with 118 additions and 123 deletions

View file

@ -1,5 +1,5 @@
[multiplayer]
name="Accross The River"
name="Across The River"
map_data="ffffffffffffffgggggggggggggggggggggggg
ffffffffffffffffgggggggggggggggCgggtgg
ffffffffffffffffggggggggggggggC1Cggggg

View file

@ -29,7 +29,6 @@ Defeat
side=1
canrecruit=1
controller=human
enemy=2,3
[/side]
[side]
@ -55,7 +54,7 @@ Defeat
gold=140
#endif
enemy=1
team_name=evil
[/side]
[side]
@ -83,10 +82,10 @@ Defeat
gold=500
#endif
enemy=1
aggression=1.0
village_value=0.0
leader_value=50.0
team_name=evil
[/side]
[event]

View file

@ -44,7 +44,6 @@ Defeat:
canrecruit=1
recruit=Elvish Scout,Elvish Fighter,Elvish Archer,Horseman,Mage,Elvish Shaman
controller=human
enemy=2,3
[/side]
[side]
@ -54,6 +53,7 @@ Defeat:
canrecruit=1
recruit=Vampire Bat,Naga
recruitment_pattern=scout,swimmer
team_name=orcs
#ifdef EASY
gold=60
#endif
@ -66,7 +66,6 @@ Defeat:
gold=170
#endif
enemy=1
[unit]
type=Orcish Archer
@ -110,7 +109,7 @@ Defeat:
#ifdef HARD
gold=250
#endif
enemy=1
team_name=orcs
[/side]
[event]

View file

@ -45,7 +45,7 @@ Defeat:
side=1
canrecruit=1
recruit=Elvish Scout,Elvish Fighter,Elvish Archer,Horseman,Mage,Elvish Shaman
enemy=3
team_name=elves
controller=human
[/side]
@ -56,9 +56,9 @@ Defeat:
experience=0
side=2
canrecruit=1
team_name=elves
recruit=Mage,Red Mage,White Mage
recruitment_pattern=mixed fighter,mixed fighter,healer
enemy=3
#ifdef EASY
gold=250
#else
@ -88,6 +88,7 @@ Defeat:
experience=0
side=3
canrecruit=1
team_name=orcs
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
#ifdef HARD
gold=400
@ -98,7 +99,6 @@ Defeat:
#ifdef EASY
gold=140
#endif
enemy=1,2
[/side]
[event]

View file

@ -38,7 +38,6 @@ Defeat
controller=human
hitpoints=80
gold=100
enemy=2,3
[/side]
[side]
@ -50,7 +49,7 @@ Defeat
canrecruit=1
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
{GOLD 200 320 400}
enemy=1
team_name=orcs
[/side]
[side]
@ -62,7 +61,7 @@ Defeat
canrecruit=1
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
{GOLD 200 320 400}
enemy=1
team_name=orcs
[/side]
#signs at the crossroads for decoration

View file

@ -70,7 +70,6 @@ Defeat:
side=1
canrecruit=1
controller=human
enemy=2,3,4
[/side]
[side]
@ -92,7 +91,7 @@ Defeat:
income=15
recruit=Orcish Warrior,Goblin Pillager,Orcish Crossbow,Orcish Assassin,Troll Warrior
#endif
enemy=1
team_name=orcs
[/side]
[side]
@ -115,7 +114,7 @@ Defeat:
gold=250
income=20
#endif
enemy=1
team_name=orcs
[/side]
[side]
@ -136,7 +135,7 @@ Defeat:
income=20
gold=250
#endif
enemy=1
team_name=orcs
[/side]
[event]

View file

@ -45,8 +45,8 @@ Defeat:
canrecruit=1
controller=human
recruit=Elvish Scout,Elvish Fighter,Elvish Archer,Elvish Shaman
enemy=2,3,4
gold=100
team_name=elves
[unit]
description=Delfador
type=Elder Mage
@ -84,7 +84,7 @@ Defeat:
#ifdef HARD
{HIGH_PRIORITY_TARGETS}
#endif
enemy=1,5,6
team_name=orcs
[/side]
[side]
@ -93,6 +93,7 @@ Defeat:
side=3
canrecruit=1
recruit=Orcish Warrior,Wolf Rider,Orcish Crossbow,Orcish Assassin,Troll
team_name=orcs
#ifdef EASY
gold=200
#endif
@ -106,7 +107,6 @@ Defeat:
{HIGH_PRIORITY_TARGETS}
#endif
enemy=1,5,6
[/side]
[side]
@ -116,6 +116,7 @@ Defeat:
side=4
canrecruit=1
recruit=Orcish Warrior,Wolf Rider,Orcish Crossbow,Troll Warrior,Orcish Slayer
team_name=orcs
#ifdef EASY
gold=200
#endif
@ -129,7 +130,6 @@ Defeat:
{HIGH_PRIORITY_TARGETS}
#endif
enemy=1,5,6
[/side]
#allies of Konrad
@ -141,7 +141,7 @@ Defeat:
recruit=Elvish Fighter,Elvish Archer,Elvish Ranger
recruitment_pattern=fighter,archer
gold=200
enemy=2,3,4
team_name=elves
[/side]
[side]
@ -152,7 +152,7 @@ Defeat:
recruit=Elvish Shaman,Elvish Archer,Elvish Fighter
recruitment_pattern=archer,fighter
gold=200
enemy=2,3,4
team_name=elves
[/side]
[event]

View file

@ -67,7 +67,6 @@ Defeat:
side=1
canrecruit=1
controller=human
enemy=2,3
[/side]
[side]
@ -77,7 +76,6 @@ Defeat:
canrecruit=1
recruit=Cavalry, Swordsman, Mage, Ogre, Duelist
gold=500
enemy=1
[/side]
[side]
@ -87,7 +85,6 @@ Defeat:
canrecruit=1
recruit=Gryphon
gold=0
enemy=1
[/side]
[event]

View file

@ -34,8 +34,8 @@ Defeat:
side=1
canrecruit=1
controller=human
enemy=3
shroud=yes
team_name=good
[/side]
[side]
type=Princess
@ -47,7 +47,7 @@ Defeat:
recruitment_pattern=fighter
recruit=Swordsman,Heavy Infantry,Pikeman,Red Mage
gold=200
enemy=3
team_name=good
[/side]
[side]
type=Troll Warrior
@ -58,7 +58,6 @@ Defeat:
recruit=Troll,Troll Warrior,Blood Bat,Ogre,Wolf Rider
gold=150
income=15
enemy=1,2
[/side]
[event]

View file

@ -41,7 +41,6 @@ Defeat:
type=Commander
side=1
canrecruit=1
enemy=2,3
controller=human
[unit]
description=Kalba
@ -63,7 +62,7 @@ Defeat:
type=Lich
side=2
canrecruit=1
enemy=1
team_name=undead
recruit=Skeleton,Vampire Bat,Ghost,Dark Adept,Chocobone
recruitment_pattern=scout,scout,fighter
{GOLD 80 140 200}
@ -73,7 +72,7 @@ Defeat:
type=Lich
side=3
canrecruit=1
enemy=1
team_name=undead
recruit=Skeleton,Skeleton Archer,Walking Corpse,Vampire Bat,Ghost,Dark Adept
{GOLD 80 140 200}
[/side]

View file

@ -32,7 +32,6 @@ Defeat:
canrecruit=1
controller=human
recruit= Dark Adept,Ghost,Walking Corpse,Vampire Bat,Skeleton,Skeleton Archer
enemy=2,3
[/side]
@ -66,7 +65,7 @@ Defeat:
gold=90
#endif
enemy=1
team_name=elves
[/side]
[side]
@ -98,7 +97,7 @@ Defeat:
gold=120
#endif
enemy=1
team_name=elves
[/side]
[event]
name=start

View file

@ -36,7 +36,6 @@ Defeat:
side=1
canrecruit=1
controller=human
enemy=2,3
fog=yes
[/side]
@ -60,7 +59,7 @@ Defeat:
{GOLD 150 200 280}
enemy=1
team_name=mages
[/side]
[side]
@ -79,10 +78,10 @@ Defeat:
villages_per_scout=0
{GOLD 150 250 350}
{INCOME 15 30 50}
enemy=1
village_value=0
leader_value=10
aggression=1.0
team_name=mages
[/side]
[event]
name=start

View file

@ -39,7 +39,6 @@ Defeat:
experience=0
side=1
canrecruit=1
enemy=2,3
controller=human
[/side]
@ -66,7 +65,7 @@ Defeat:
gold=80
income=8
#endif
enemy=1
team_name=orcs
[/side]
[side]
@ -78,7 +77,7 @@ Defeat:
canrecruit=1
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll
recruitment_pattern=scout,scout,fighter,fighter,archer
enemy=1
team_name=orcs
#ifdef HARD
gold=200
income=20
@ -93,7 +92,7 @@ Defeat:
gold=80
income=10
#endif
enemy=1
team_name=orcs
[/side]
[event]

View file

@ -33,8 +33,8 @@ Defeat
side=1
canrecruit=1
controller=human
enemy=2
shroud=yes
team_name=good
[/side]
[side]
@ -43,7 +43,6 @@ Defeat
canrecruit=1
recruit=Orcish Warrior
gold=0
enemy=1
aggression=1.0
[unit]
type=Blood Bat
@ -89,7 +88,7 @@ Defeat
canrecruit=1
recruit=Dwarvish Fighter
gold=0
enemy=4 #dummy non-existent side
team_name=good
[unit]
type=Dwarvish Fighter

View file

@ -10,42 +10,4 @@
{DUSK}
{FIRST_WATCH}
{SECOND_WATCH}
[side]
side=1
enemy=2,3,4,5,6
canrecruit=1
controller=human
[/side]
[side]
side=2
enemy=1,3,4,5,6
canrecruit=1
controller=human
[/side]
[side]
side=3
enemy=1,2,4,5,6
canrecruit=1
controller=human
[/side]
[side]
side=4
enemy=1,2,3,5,6
canrecruit=1
controller=human
[/side]
[side]
side=5
enemy=1,2,3,4,6
canrecruit=1
controller=human
[/side]
[side]
side=6
enemy=1,2,3,4,5
canrecruit=1
controller=human
[/side]
[/multiplayer]

View file

@ -34,7 +34,6 @@ Defeat:
side=1
canrecruit=1
controller=human
enemy=2,3,4,5,6
shroud=yes
[/side]
[side]
@ -45,7 +44,7 @@ Defeat:
controller=ai
leader_value=10
recruit=Goblin Knight,Wolf Rider,Troll,Orcish Warrior,Orcish Crossbow
enemy=1
team_name=orcs
{GOLD 150 300 400}
{INCOME 5 10 20}
@ -58,7 +57,7 @@ Defeat:
leader_value=10
recruitment_pattern=fighter
recruit=Troll,Troll Warrior,Ogre
enemy=1
team_name=orcs
{GOLD 150 300 400}
{INCOME 5 10 20}
[/side]
@ -71,7 +70,7 @@ Defeat:
leader_value=10
recruitment_pattern=fighter,fighter,scout
recruit=Troll,Troll Warrior,Ogre,Goblin Knight,Wolf Rider,Troll Whelp
enemy=1
team_name=orcs
{GOLD 150 230 350}
{INCOME 5 10 20}
@ -85,7 +84,7 @@ Defeat:
leader_value=10
recruitment_pattern=fighter,fighter,scout
recruit=Troll,Troll Warrior,Ogre,Goblin Knight,Wolf Rider,Troll Whelp
enemy=1
team_name=orcs
{GOLD 150 230 350}
{INCOME 5 10 20}
[/side]
@ -97,7 +96,7 @@ Defeat:
canrecruit=1
controller=ai
recruit=Troll
enemy=1
team_name=orcs
gold=0
[/side]

View file

@ -38,7 +38,6 @@ Defeat:
canrecruit=1
controller=human
recruit=Elvish Scout,Elvish Fighter,Elvish Archer,Horseman,Mage,Elvish Shaman,Merman
enemy=2,3
[/side]
[side]
@ -64,7 +63,7 @@ Defeat:
gold=160
#endif
enemy=1
team_name=orcs
[/side]
[side]
@ -94,7 +93,7 @@ Defeat:
income=20
#endif
enemy=1
team_name=orcs
[/side]
[event]

View file

@ -30,7 +30,6 @@ Defeat
side=1
canrecruit=1
controller=human
enemy=2,3
[/side]
[side]
@ -51,7 +50,6 @@ Defeat
gold=300
recruit=Troll Warrior,Wolf Rider,Orcish Crossbow
#endif
enemy=1
[/side]
[event]

View file

@ -31,7 +31,6 @@ Defeat
canrecruit=1
controller=human
hitpoints=80
enemy=2,3,4,5,6
[/side]
[side]
@ -46,7 +45,7 @@ Defeat
#else
gold=150
#endif
enemy=1
team_name=undead
[/side]
[side]
@ -61,7 +60,7 @@ Defeat
#else
gold=60
#endif
enemy=1
team_name=undead
[/side]
[side]
@ -76,7 +75,7 @@ Defeat
#else
gold=60
#endif
enemy=1
team_name=undead
[/side]
[side]
@ -87,7 +86,7 @@ Defeat
canrecruit=1
recruit=Skeleton,Walking Corpse,Ghoul
gold=50
enemy=1
team_name=undead
[/side]
[side]
@ -98,7 +97,7 @@ Defeat
canrecruit=1
recruit=Skeleton Archer,Walking Corpse,Ghost
gold=50
enemy=1
team_name=undead
[/side]
[event]

View file

@ -34,8 +34,8 @@ Defeat:
canrecruit=1
controller=human
recruit=Dwarvish Fighter,Dwarvish Thunderer
enemy=3,4
shroud=yes
team_name=good
[/side]
[side]
@ -45,7 +45,7 @@ Defeat:
canrecruit=1
recruit=Dwarvish Fighter
gold=150
enemy=3,4
team_name=good
[/side]
[side]
@ -59,7 +59,7 @@ Defeat:
#else
gold=200
#endif
enemy=1,2,4
team_name=evil
[/side]
[side]
@ -73,7 +73,7 @@ Defeat:
#else
gold=300
#endif
enemy=1,2,3
team_name=evil
[/side]
[item]

View file

@ -37,7 +37,6 @@ Defeat:
side=1
canrecruit=1
controller=human
enemy=2,3,4
[/side]
[side]
@ -64,11 +63,10 @@ Defeat:
gold=500
#endif
enemy=1
team_name=undead
aggression=1.0
village_value=0.0
leader_value=50.0
enemy=1
[/side]
[side]
@ -93,11 +91,10 @@ Defeat:
gold=500
#endif
enemy=1
team_name=undead
aggression=1.0
village_value=0.0
leader_value=50.0
enemy=1
[/side]
[side]
@ -124,11 +121,10 @@ Defeat:
gold=500
#endif
enemy=1
team_name=undead
aggression=1.0
village_value=0.0
leader_value=50.0
enemy=1
[/side]
#define HOLY_WATER X Y ID

View file

@ -246,6 +246,15 @@ const gamemap::location& gamemap::starting_position(int n) const
return startingPositions_[n];
}
int gamemap::num_valid_starting_positions() const
{
const int res = is_starting_position(gamemap::location());
if(res == -1)
return num_starting_positions();
else
return res;
}
int gamemap::num_starting_positions() const
{
return sizeof(startingPositions_)/sizeof(*startingPositions_);
@ -253,10 +262,11 @@ int gamemap::num_starting_positions() const
int gamemap::is_starting_position(const gamemap::location& loc) const
{
const gamemap::location* const beg = startingPositions_+1;
const gamemap::location* const end = startingPositions_+num_starting_positions();
const gamemap::location* const pos = std::find(startingPositions_,end,loc);
const gamemap::location* const pos = std::find(beg,end,loc);
return pos == end ? -1 : pos - startingPositions_;
return pos == end ? -1 : pos - beg;
}
void gamemap::set_starting_position(int side, const gamemap::location& loc)

View file

@ -96,8 +96,8 @@ public:
//functions to manipulate starting positions of the different sides.
const location& starting_position(int side) const;
int num_starting_positions() const;
int is_starting_position(const location& loc) const;
int num_valid_starting_positions() const;
void set_starting_position(int side, const location& loc);
@ -128,6 +128,8 @@ public:
//clobbers over the terrain at location 'loc', with the given terrain
void set_terrain(const location& loc, TERRAIN ter);
private:
int num_starting_positions() const;
std::vector<TERRAIN> terrainPrecedence_;
std::map<TERRAIN,terrain_type> letterToTerrain_;
std::map<std::string,terrain_type> terrain_;

View file

@ -504,6 +504,22 @@ int play_multiplayer(display& disp, game_data& units_data, config cfg,
gamemap map(cfg,map_data);
//if there are less sides in the configuration than there are starting
//positions, then generate the additional sides
const int map_positions = map.num_valid_starting_positions();
std::cerr << "map_positions: " << map_positions << "\n";
for(int pos = level_ptr->get_children("side").size(); pos < map_positions; ++pos) {
std::cerr << "adding side...\n";
config& side = level_ptr->add_child("side");
side["enemy"] = "1";
char buf[50];
sprintf(buf,"%d",(pos+1));
side["side"] = buf;
side["team_name"] = buf;
side["canrecruit"] = "1";
side["controller"] = "human";
}
const scoped_sdl_surface mini(image::getMinimap(145,145,map));
if(mini != NULL) {
@ -522,14 +538,10 @@ int play_multiplayer(display& disp, game_data& units_data, config cfg,
rect.h = 25;
SDL_BlitSurface(playernum_bg, NULL, disp.video().getSurface(), &rect);
config& level = *level_ptr;
const config::child_itors sides = level.child_range("side");
int sides_num;
config::child_iterator sd;
for(sd = sides.first; sd != sides.second; ++sd) {
sides_num = sd - sides.first;
}
const int nsides = level.get_children("side").size();
std::stringstream players;
players << "Players: " << sides_num + 1;
players << "Players: " << nsides;
font::draw_text(&disp,disp.screen_area(),12,font::GOOD_COLOUR,
players.str(),rect.x+45,rect.y);
update_rect(rect);

View file

@ -133,6 +133,8 @@ LEVEL_RESULT play_level(game_data& gameinfo, config& game_config,
}
}
const teams_manager team_manager(teams);
const config* const theme_cfg = game_config.find_child("theme","name",preferences::theme());
const config dummy_cfg;
display gui(units,video,map,status,teams,theme_cfg != NULL ? *theme_cfg : dummy_cfg);

View file

@ -20,6 +20,20 @@
#include <cstdlib>
#include <sstream>
namespace {
const std::vector<team>* teams = NULL;
}
teams_manager::teams_manager(const std::vector<team>& teams_list)
{
teams = &teams_list;
}
teams_manager::~teams_manager()
{
teams = NULL;
}
team::target::target(const config& cfg)
: criteria(cfg), value(atof(cfg["value"].c_str()))
{
@ -35,6 +49,9 @@ team::team_info::team_info(const config& cfg)
gold = cfg["gold"];
income = cfg["income"];
name = cfg["name"];
team_name = cfg["team_name"];
if(team_name.empty())
team_name = cfg["side"];
const std::string& village_income = cfg["village_gold"];
if(village_income.empty())
@ -117,6 +134,7 @@ void team::team_info::write(config& cfg) const
cfg["gold"] = gold;
cfg["income"] = income;
cfg["name"] = name;
cfg["team_name"] = team_name;
char buf[50];
sprintf(buf,"%d",income_per_village);
@ -298,12 +316,17 @@ const std::string& team::name() const
bool team::is_enemy(int n) const
{
//if we have a team name, we are friends with anyone who has the same team name
if(info_.team_name.empty() == false) {
return teams != NULL && size_t(n-1) < teams->size() &&
(*teams)[n-1].info_.team_name != info_.team_name;
}
//if enemies aren't listed, then everyone is an enemy
if(info_.enemies.empty())
return true;
return std::find(info_.enemies.begin(),info_.enemies.end(),n) !=
info_.enemies.end();
return std::find(info_.enemies.begin(),info_.enemies.end(),n) != info_.enemies.end();
}
double team::aggression() const

View file

@ -45,6 +45,7 @@ public:
std::vector<std::string> recruitment_pattern;
double aggression;
std::vector<int> enemies;
std::string team_name;
enum CONTROLLER { HUMAN, AI, NETWORK };
CONTROLLER controller;
@ -113,4 +114,9 @@ private:
team_info info_;
};
struct teams_manager {
teams_manager(const std::vector<team>& teams);
~teams_manager();
};
#endif