More work to make number of races configurable
This commit is contained in:
parent
76eede50af
commit
29762140bf
6 changed files with 77 additions and 28 deletions
src
|
@ -373,8 +373,8 @@ typedef struct _player_race_ {
|
|||
enum PlayerRacesOld {
|
||||
PlayerRaceHuman =0, /// belongs to human
|
||||
PlayerRaceOrc =1, /// belongs to orc
|
||||
PlayerRaceNeutral =2, /// belongs to none
|
||||
};
|
||||
#define PlayerRaceNeutral (PlayerRaces.Count-1)
|
||||
|
||||
/**
|
||||
** Types for the player (must fit to PUD!)
|
||||
|
|
|
@ -127,7 +127,8 @@ global int PlayerRacesIndex(int race)
|
|||
}
|
||||
}
|
||||
fprintf(stderr,"Invalid race: %d\n", race);
|
||||
return -1;
|
||||
DebugCheck(1);
|
||||
return PlayerRaceNeutral;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1082,9 +1083,6 @@ global void DebugPlayers(void)
|
|||
case 7: DebugLevel0("rescue akt. "); break;
|
||||
}
|
||||
k=PlayerRacesIndex(Players[i].Race);
|
||||
if( k==-1 ) {
|
||||
k=PlayerRaces.Race[PlayerRaces.Count-1];
|
||||
}
|
||||
DebugLevel0("%9s" _C_ PlayerRaces.Name[k]);
|
||||
DebugLevel0("%2d " _C_ Players[i].AiNum);
|
||||
switch( Players[i].AiNum ) {
|
||||
|
|
|
@ -578,9 +578,7 @@ global MapInfo* GetPudInfo(const char* pud)
|
|||
v=PudReadByte(input);
|
||||
buf[0] = v & 0xFF;
|
||||
info->MapUID += ChksumArea(buf, 1);
|
||||
if( PlayerRacesIndex(v)==-1 ) {
|
||||
v=PlayerRaces.Race[PlayerRaces.Count-1];
|
||||
}
|
||||
v=PlayerRaces.Race[PlayerRacesIndex(v)];
|
||||
info->PlayerSide[i]=v;
|
||||
}
|
||||
continue;
|
||||
|
@ -1055,9 +1053,7 @@ global void LoadPud(const char* pud,WorldMap* map)
|
|||
|
||||
for( i=0; i<16; ++i ) {
|
||||
v=PudReadByte(input);
|
||||
if( PlayerRacesIndex(v)==-1 ) {
|
||||
v=PlayerRaces.Race[PlayerRaces.Count-1];
|
||||
}
|
||||
v=PlayerRaces.Race[PlayerRacesIndex(v)];
|
||||
if (GameSettings.Presets[i].Race == SettingsPresetMapDefault) {
|
||||
PlayerSetSide(&Players[i],v);
|
||||
} else {
|
||||
|
|
|
@ -728,9 +728,6 @@ local void UpdateButtonPanelMultipleUnits(void)
|
|||
}
|
||||
|
||||
i=PlayerRacesIndex(ThisPlayer->Race);
|
||||
if( i==-1 ) {
|
||||
i=PlayerRaces.Race[PlayerRaces.Count-1];
|
||||
}
|
||||
sprintf(unit_ident,",%s-group,",PlayerRaces.Name[i]);
|
||||
|
||||
for( z = 0; z < NumUnitButtons; z++ ) {
|
||||
|
|
|
@ -4228,11 +4228,24 @@ local void GameDrawFunc(Menuitem *mi __attribute__((unused)))
|
|||
*/
|
||||
local void GameRCSAction(Menuitem *mi, int i)
|
||||
{
|
||||
int v[] = { PlayerRaceHuman, PlayerRaceOrc, SettingsPresetMapDefault };
|
||||
int n;
|
||||
int x;
|
||||
|
||||
if (mi->d.pulldown.curopt == i) {
|
||||
GameSettings.Presets[0].Race = v[i];
|
||||
ServerSetupState.Race[0] = 2 - i;
|
||||
for (n = 0, x = 0; n < PlayerRaces.Count; ++n) {
|
||||
if (PlayerRaces.Visible[n]) {
|
||||
if (x == i) {
|
||||
break;
|
||||
}
|
||||
++x;
|
||||
}
|
||||
}
|
||||
if (n != PlayerRaces.Count) {
|
||||
GameSettings.Presets[0].Race = PlayerRaces.Race[x];
|
||||
} else {
|
||||
GameSettings.Presets[0].Race = SettingsPresetMapDefault;
|
||||
}
|
||||
ServerSetupState.Race[0] = mi->d.pulldown.noptions - 1 - i;
|
||||
NetworkServerResyncClients();
|
||||
}
|
||||
}
|
||||
|
@ -4403,6 +4416,9 @@ local void NetworkGamePrepareGameSettings(void)
|
|||
int i;
|
||||
int num[PlayerMax];
|
||||
int comp[PlayerMax];
|
||||
int n;
|
||||
int x;
|
||||
int v;
|
||||
|
||||
DebugCheck(!MenuMapInfo);
|
||||
|
||||
|
@ -4437,14 +4453,22 @@ local void NetworkGamePrepareGameSettings(void)
|
|||
case 0:
|
||||
GameSettings.Presets[num[i]].Type = PlayerPerson;
|
||||
DebugLevel3Fn("Settings[%d].Type == Person\n" _C_ num[i]);
|
||||
switch (ServerSetupState.Race[num[i]]) {
|
||||
case 1:
|
||||
GameSettings.Presets[num[i]].Race = PlayerRaceOrc;
|
||||
break;
|
||||
case 2:
|
||||
GameSettings.Presets[num[i]].Race = PlayerRaceHuman;
|
||||
default:
|
||||
break;
|
||||
for (n = 0, v = 0; n < PlayerRaces.Count; ++n) {
|
||||
if (PlayerRaces.Visible[n]) {
|
||||
++v;
|
||||
}
|
||||
}
|
||||
v -= ServerSetupState.Race[num[i]];
|
||||
for (n = 0, x = 0; n < PlayerRaces.Count; ++n) {
|
||||
if (PlayerRaces.Visible[n]) {
|
||||
if (x == v) {
|
||||
break;
|
||||
}
|
||||
++x;
|
||||
}
|
||||
}
|
||||
if (n != PlayerRaces.Count) {
|
||||
GameSettings.Presets[num[i]].Race = PlayerRaces.Race[x];
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
|
@ -4898,7 +4922,7 @@ local void MultiClientGemAction(Menuitem *mi)
|
|||
local void MultiClientRCSAction(Menuitem *mi, int i)
|
||||
{
|
||||
if (mi->d.pulldown.curopt == i) {
|
||||
LocalSetupState.Race[NetLocalHostsSlot] = 2 - i;
|
||||
LocalSetupState.Race[NetLocalHostsSlot] = mi->d.pulldown.noptions - 1 - i;
|
||||
MultiClientUpdate(0);
|
||||
}
|
||||
}
|
||||
|
@ -7092,12 +7116,46 @@ global void ErrorMenu(char *error)
|
|||
-- Init functions
|
||||
----------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
** Initialize player races for a menu item
|
||||
*/
|
||||
local void InitPlayerRaces(Menuitem *mi)
|
||||
{
|
||||
int i;
|
||||
int n;
|
||||
|
||||
for (i = 0, n = 0; i < PlayerRaces.Count; ++i) {
|
||||
if (PlayerRaces.Visible[i]) {
|
||||
++n;
|
||||
}
|
||||
}
|
||||
++n;
|
||||
mi->d.pulldown.options = (char **)malloc(n * sizeof(char *));
|
||||
for (i = 0, n = 0; i < PlayerRaces.Count; ++i) {
|
||||
if (PlayerRaces.Visible[i]) {
|
||||
mi->d.pulldown.options[n++] = strdup(PlayerRaces.Display[i]);
|
||||
}
|
||||
}
|
||||
mi->d.pulldown.options[n++] = strdup("Map Default");
|
||||
mi->d.pulldown.noptions = n;
|
||||
mi->d.pulldown.defopt = n - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
** Initialize the loaded menu data
|
||||
*/
|
||||
global void InitMenuData(void)
|
||||
{
|
||||
Menu *menu;
|
||||
|
||||
InitNetMultiButtonStorage();
|
||||
|
||||
menu = FindMenu("menu-custom-game");
|
||||
InitPlayerRaces(&menu->Items[6]);
|
||||
menu = FindMenu("menu-multi-setup");
|
||||
InitPlayerRaces(&menu->Items[21]);
|
||||
menu = FindMenu("menu-net-multi-client");
|
||||
InitPlayerRaces(&menu->Items[21]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -800,7 +800,7 @@ local void DrawDecoration(const Unit* unit,const UnitType* type,int x,int y)
|
|||
//
|
||||
stats=unit->Stats;
|
||||
// Why remove the neutral race?
|
||||
if( (unit->Player->Type!=PlayerRaceNeutral)
|
||||
if( (unit->Player->Type!=PlayerNeutral)
|
||||
&& ShowHealthBar ) {
|
||||
if( stats->HitPoints
|
||||
&& !(ShowNoFull && unit->HP==stats->HitPoints) ) {
|
||||
|
@ -881,7 +881,7 @@ local void DrawDecoration(const Unit* unit,const UnitType* type,int x,int y)
|
|||
// Health dot on left side of unit.
|
||||
// Why skip the neutral units?
|
||||
//
|
||||
if( (unit->Player->Type!=PlayerRaceNeutral)
|
||||
if( (unit->Player->Type!=PlayerNeutral)
|
||||
&& ShowHealthDot ) {
|
||||
if( stats->HitPoints
|
||||
&& !(ShowNoFull && unit->HP==stats->HitPoints) ) {
|
||||
|
|
Loading…
Add table
Reference in a new issue