Team DukeMatch support

git-svn-id: https://svn.eduke32.com/eduke32@268 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2006-08-18 23:52:26 +00:00
parent 929ab76c77
commit a7bad3d852
11 changed files with 195 additions and 49 deletions

View file

@ -890,6 +890,13 @@ short ifhitbyweapon(short sn)
ud.ffire == 0 ) ud.ffire == 0 )
return -1; return -1;
if( j >= 0 &&
sprite[j].picnum == APLAYER &&
(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM) &&
ps[p].team == ps[sprite[j].yvel].team &&
ud.ffire == 0 )
return -1;
npc->extra -= hittype[sn].extra; npc->extra -= hittype[sn].extra;
if(j >= 0) if(j >= 0)

View file

@ -255,6 +255,7 @@ void CONFIG_SetDefaults( void )
ud.shadows = 1; ud.shadows = 1;
ud.statusbarmode = 0; ud.statusbarmode = 0;
ud.statusbarscale = 100; ud.statusbarscale = 100;
ud.team = 0;
ud.weaponswitch = 3; // new+empty ud.weaponswitch = 3; // new+empty
UseJoystick = 0; UseJoystick = 0;
UseMouse = 1; UseMouse = 1;
@ -660,6 +661,8 @@ int32 CONFIG_ReadSetup( void )
SCRIPT_GetNumber( scripthandle, "Misc", "ShowFPS",&ud.tickrate); SCRIPT_GetNumber( scripthandle, "Misc", "ShowFPS",&ud.tickrate);
SCRIPT_GetNumber( scripthandle, "Misc", "Color",&ud.color); SCRIPT_GetNumber( scripthandle, "Misc", "Color",&ud.color);
ps[0].palookup = ud.pcolor[0] = ud.color; ps[0].palookup = ud.pcolor[0] = ud.color;
SCRIPT_GetNumber( scripthandle, "Misc", "Team",&ud.team);
ps[0].team = ud.pteam[0] = ud.team;
SCRIPT_GetNumber( scripthandle, "Misc", "MPMessageDisplayTime",&ud.msgdisptime); SCRIPT_GetNumber( scripthandle, "Misc", "MPMessageDisplayTime",&ud.msgdisptime);
SCRIPT_GetNumber( scripthandle, "Misc", "StatusBarMode",&ud.statusbarmode); SCRIPT_GetNumber( scripthandle, "Misc", "StatusBarMode",&ud.statusbarmode);
SCRIPT_GetNumber( scripthandle, "Misc", "AutoVote",&ud.autovote); SCRIPT_GetNumber( scripthandle, "Misc", "AutoVote",&ud.autovote);
@ -762,6 +765,7 @@ void CONFIG_WriteSetup( void )
SCRIPT_PutNumber( scripthandle, "Misc", "ShowViewWeapon",ud.drawweapon,false,false); SCRIPT_PutNumber( scripthandle, "Misc", "ShowViewWeapon",ud.drawweapon,false,false);
SCRIPT_PutNumber( scripthandle, "Misc", "StatusBarMode",ud.statusbarmode,false,false); SCRIPT_PutNumber( scripthandle, "Misc", "StatusBarMode",ud.statusbarmode,false,false);
SCRIPT_PutNumber( scripthandle, "Misc", "StatusBarScale",ud.statusbarscale,false,false); SCRIPT_PutNumber( scripthandle, "Misc", "StatusBarScale",ud.statusbarscale,false,false);
SCRIPT_PutNumber( scripthandle, "Misc", "Team",ud.team,false,false);
SCRIPT_PutNumber( scripthandle, "Misc", "UsePrecache",useprecache,false,false); SCRIPT_PutNumber( scripthandle, "Misc", "UsePrecache",useprecache,false,false);
SCRIPT_PutNumber( scripthandle, "Screen Setup", "Detail",ud.detail,false,false); SCRIPT_PutNumber( scripthandle, "Screen Setup", "Detail",ud.detail,false,false);

View file

@ -54,7 +54,7 @@ extern int conversion, shareware, gametype;
#define BYTEVERSION_13 27 #define BYTEVERSION_13 27
#define BYTEVERSION_14 116 #define BYTEVERSION_14 116
#define BYTEVERSION_15 117 #define BYTEVERSION_15 117
#define BYTEVERSION_JF 165 // increase by 3, because atomic GRP adds 1, and Shareware adds 2 #define BYTEVERSION_JF 168 // increase by 3, because atomic GRP adds 1, and Shareware adds 2
#define BYTEVERSION (BYTEVERSION_JF+(PLUTOPAK?1:(VOLUMEONE<<1))) // JBF 20040116: different data files give different versions #define BYTEVERSION (BYTEVERSION_JF+(PLUTOPAK?1:(VOLUMEONE<<1))) // JBF 20040116: different data files give different versions
@ -342,6 +342,7 @@ struct user_defs {
int32 runkey_mode,statusbarscale,mouseaiming,weaponswitch,drawweapon; // JBF 20031125 int32 runkey_mode,statusbarscale,mouseaiming,weaponswitch,drawweapon; // JBF 20031125
int32 democams,color,pcolor[MAXPLAYERS],msgdisptime,statusbarmode; int32 democams,color,pcolor[MAXPLAYERS],msgdisptime,statusbarmode;
int32 m_noexits,noexits,autovote,automsg,idplayers; int32 m_noexits,noexits,autovote,automsg,idplayers;
int32 team, pteam[MAXPLAYERS];
int32 entered_name,screen_tilting,shadows,fta_on,executions,auto_run; int32 entered_name,screen_tilting,shadows,fta_on,executions,auto_run;
int32 coords,tickrate,levelstats,m_coop,coop,screen_size,lockout,crosshair; int32 coords,tickrate,levelstats,m_coop,coop,screen_size,lockout,crosshair;
@ -415,7 +416,7 @@ struct player_struct {
char return_to_center, reloading; char return_to_center, reloading;
long max_secret_rooms,secret_rooms,max_actors_killed,actors_killed; long max_secret_rooms,secret_rooms,max_actors_killed,actors_killed;
long runspeed, movement_lock; long runspeed, movement_lock, team;
short sbs, sound_pitch; short sbs, sound_pitch;
}; };
@ -541,7 +542,9 @@ enum gametypeflags {
GAMETYPE_FLAG_PLAYERSFRIENDLY = 4096, GAMETYPE_FLAG_PLAYERSFRIENDLY = 4096,
GAMETYPE_FLAG_FIXEDRESPAWN = 8192, GAMETYPE_FLAG_FIXEDRESPAWN = 8192,
GAMETYPE_FLAG_ACCESSATSTART = 16384, GAMETYPE_FLAG_ACCESSATSTART = 16384,
GAMETYPE_FLAG_PRESERVEINVENTORYDEATH = 32768 GAMETYPE_FLAG_PRESERVEINVENTORYDEATH = 32768,
GAMETYPE_FLAG_TDM = 65536,
GAMETYPE_FLAG_TDMSPAWN = 131072
}; };
extern char level_file_names[MAXVOLUMES*11][BMAX_PATH]; extern char level_file_names[MAXVOLUMES*11][BMAX_PATH];

View file

@ -765,6 +765,23 @@ if( !(ps[myconnectindex].gm&MODE_GAME) ) { OSD_DispatchQueued(); }
ps[other].auto_aim = packbuf[i++]; ps[other].auto_aim = packbuf[i++];
ps[other].weaponswitch = packbuf[i++]; ps[other].weaponswitch = packbuf[i++];
ps[other].palookup = ud.pcolor[other] = packbuf[i++]; ps[other].palookup = ud.pcolor[other] = packbuf[i++];
j = ps[other].team;
ps[other].team = ud.pteam[other] = packbuf[i++];
if(ps[other].team != j && sprite[ps[other].i].picnum == APLAYER)
hittype[ps[other].i].extra = 1000;
if(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM)
{
j = 0;
switch(ps[other].team)
{
case 0: j = 3; break;
case 1: j = 10; break;
}
ps[other].palookup = ud.pcolor[other] = j;
}
if(sprite[ps[other].i].picnum == APLAYER) if(sprite[ps[other].i].picnum == APLAYER)
sprite[ps[other].i].pal = ud.pcolor[other]; sprite[ps[other].i].pal = ud.pcolor[other];
break; break;
@ -8152,8 +8169,16 @@ void checkcommandline(int argc,char **argv)
ud.m_respawn_monsters = ud.respawn_monsters = 1; ud.m_respawn_monsters = ud.respawn_monsters = 1;
ud.m_respawn_items = ud.respawn_items = 1; ud.m_respawn_items = ud.respawn_items = 1;
ud.m_respawn_inventory = ud.respawn_inventory = 1; ud.m_respawn_inventory = ud.respawn_inventory = 1;
{
char k = 1;
for(j=numplayers;j<ud.multimode;j++) for(j=numplayers;j<ud.multimode;j++)
{
Bsprintf(ud.user_name[j],"PLAYER %d",j+1); Bsprintf(ud.user_name[j],"PLAYER %d",j+1);
ps[j].team = ud.pteam[j] = k;
initprintf("p %d t %d\n",j,ps[j].team);
k = 1-k;
}
}
break; break;
case 'r': case 'r':
case 'R': case 'R':
@ -8727,6 +8752,23 @@ void syncnames(void)
buf[l++] = ps[myconnectindex].weaponswitch = ud.weaponswitch; buf[l++] = ps[myconnectindex].weaponswitch = ud.weaponswitch;
buf[l++] = ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = ud.color; buf[l++] = ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = ud.color;
i = ps[myconnectindex].team;
buf[l++] = ps[myconnectindex].team = ud.pteam[myconnectindex] = ud.team;
if(ps[myconnectindex].team != i && sprite[ps[myconnectindex].i].picnum == APLAYER)
hittype[ps[myconnectindex].i].extra = 1000;
if(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM)
{
i = 0;
switch(ps[myconnectindex].team)
{
case 0: i = 3; break;
case 1: i = 10; break;
}
ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = i;
}
for(i=connecthead;i>=0;i=connectpoint2[i]) for(i=connecthead;i>=0;i=connectpoint2[i])
{ {
if (i != myconnectindex) sendpacket(i,&buf[0],l); if (i != myconnectindex) sendpacket(i,&buf[0],l);
@ -8790,17 +8832,22 @@ void updatenames(void)
{ {
syncnames(); syncnames();
if(sprite[ps[myconnectindex].i].picnum == APLAYER) if(sprite[ps[myconnectindex].i].picnum == APLAYER)
sprite[ps[myconnectindex].i].pal = ud.color; sprite[ps[myconnectindex].i].pal = ud.pcolor[myconnectindex];
} }
else else
{ {
int j;
ps[myconnectindex].aim_mode = ud.mouseaiming; ps[myconnectindex].aim_mode = ud.mouseaiming;
ps[myconnectindex].auto_aim = AutoAim; ps[myconnectindex].auto_aim = AutoAim;
ps[myconnectindex].weaponswitch = ud.weaponswitch; ps[myconnectindex].weaponswitch = ud.weaponswitch;
ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = ud.color; ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = ud.color;
j = ps[myconnectindex].team;
ps[myconnectindex].team = ud.pteam[myconnectindex] = ud.team;
if(sprite[ps[myconnectindex].i].picnum == APLAYER) if(sprite[ps[myconnectindex].i].picnum == APLAYER)
sprite[ps[myconnectindex].i].pal = ud.color; sprite[ps[myconnectindex].i].pal = ud.pcolor[myconnectindex];
} }
} }
@ -9190,7 +9237,19 @@ MAIN_LOOP_RESTART:
ps[myconnectindex].aim_mode = ud.mouseaiming; ps[myconnectindex].aim_mode = ud.mouseaiming;
ps[myconnectindex].auto_aim = AutoAim; ps[myconnectindex].auto_aim = AutoAim;
ps[myconnectindex].weaponswitch = ud.weaponswitch; ps[myconnectindex].weaponswitch = ud.weaponswitch;
ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = ud.color; ps[myconnectindex].team = ud.pteam[myconnectindex] = ud.team;
if(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM)
{
int k = 0;
switch(ps[myconnectindex].team)
{
case 0: k = 3; break;
case 1: k = 10; break;
}
ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = k;
} else ps[myconnectindex].palookup = ud.pcolor[myconnectindex] = ud.color;
ud.warp_on = 0; ud.warp_on = 0;
KB_KeyDown[sc_Pause] = 0; // JBF: I hate the pause key KB_KeyDown[sc_Pause] = 0; // JBF: I hate the pause key
@ -9383,12 +9442,15 @@ char opendemoread(char which_demo) // 0 = mine
if (kread(recfilep,(int32 *)&ps[i].weaponswitch,sizeof(int32)) != sizeof(int32)) goto corrupt; if (kread(recfilep,(int32 *)&ps[i].weaponswitch,sizeof(int32)) != sizeof(int32)) goto corrupt;
if (kread(recfilep,(int32 *)&ud.pcolor[i],sizeof(int32)) != sizeof(int32)) goto corrupt; if (kread(recfilep,(int32 *)&ud.pcolor[i],sizeof(int32)) != sizeof(int32)) goto corrupt;
ps[i].palookup = ud.pcolor[i]; ps[i].palookup = ud.pcolor[i];
if (kread(recfilep,(int32 *)&ud.pteam[i],sizeof(int32)) != sizeof(int32)) goto corrupt;
ps[i].team = ud.pteam[i];
if (kread(recfilep,(int32 *)&ud.m_noexits,sizeof(int32)) != sizeof(int32)) goto corrupt; if (kread(recfilep,(int32 *)&ud.m_noexits,sizeof(int32)) != sizeof(int32)) goto corrupt;
} else { } else {
if (kread(recfilep,(int32 *)&ps[i].aim_mode,sizeof(char)) != sizeof(char)) goto corrupt; if (kread(recfilep,(int32 *)&ps[i].aim_mode,sizeof(char)) != sizeof(char)) goto corrupt;
OSD_Printf("aim_mode: %d\n",ps[i].aim_mode); OSD_Printf("aim_mode: %d\n",ps[i].aim_mode);
ps[i].auto_aim = 1; ps[i].auto_aim = 1;
ps[i].weaponswitch = 3; ps[i].weaponswitch = 3;
ps[i].team = 0;
ud.m_noexits = 0; ud.m_noexits = 0;
} }
} }
@ -9439,6 +9501,7 @@ void opendemowrite(void)
fwrite((int32 *)&ps[i].auto_aim,sizeof(int32),1,frecfilep); // JBF 20031126 fwrite((int32 *)&ps[i].auto_aim,sizeof(int32),1,frecfilep); // JBF 20031126
fwrite(&ps[i].weaponswitch,sizeof(int32),1,frecfilep); fwrite(&ps[i].weaponswitch,sizeof(int32),1,frecfilep);
fwrite(&ud.pcolor[i],sizeof(int32),1,frecfilep); fwrite(&ud.pcolor[i],sizeof(int32),1,frecfilep);
fwrite(&ud.pteam[i],sizeof(int32),1,frecfilep);
fwrite((int32 *)&ud.m_noexits,sizeof(int32),1,frecfilep); fwrite((int32 *)&ud.m_noexits,sizeof(int32),1,frecfilep);
} }

View file

@ -688,6 +688,7 @@ LABELS playerlabels[]= {
{ "movement_lock", PLAYER_MOVEMENT_LOCK, 0, 0 }, { "movement_lock", PLAYER_MOVEMENT_LOCK, 0, 0 },
{ "sound_pitch", PLAYER_SOUND_PITCH, 0, 0 }, { "sound_pitch", PLAYER_SOUND_PITCH, 0, 0 },
{ "weaponswitch", PLAYER_WEAPONSWITCH, 0, 0 }, { "weaponswitch", PLAYER_WEAPONSWITCH, 0, 0 },
{ "team", PLAYER_TEAM, 0, 0 },
{ "", -1, 0, 0 } // END OF LIST { "", -1, 0, 0 } // END OF LIST
}; };
@ -811,6 +812,7 @@ LABELS userdefslabels[]= {
{ "autovote", USERDEFS_AUTOVOTE, 0, 0 }, { "autovote", USERDEFS_AUTOVOTE, 0, 0 },
{ "automsg", USERDEFS_AUTOMSG, 0, 0 }, { "automsg", USERDEFS_AUTOMSG, 0, 0 },
{ "idplayers", USERDEFS_IDPLAYERS, 0, 0 }, { "idplayers", USERDEFS_IDPLAYERS, 0, 0 },
{ "team", USERDEFS_TEAM, 0, 0 },
{ "", -1, 0, 0 } // END OF LIST { "", -1, 0, 0 } // END OF LIST
}; };

View file

@ -203,7 +203,8 @@ enum playerlabels {
PLAYER_AUTO_AIM, PLAYER_AUTO_AIM,
PLAYER_MOVEMENT_LOCK, PLAYER_MOVEMENT_LOCK,
PLAYER_SOUND_PITCH, PLAYER_SOUND_PITCH,
PLAYER_WEAPONSWITCH PLAYER_WEAPONSWITCH,
PLAYER_TEAM
}; };
enum userdefslabels { enum userdefslabels {
@ -289,7 +290,8 @@ enum userdefslabels {
USERDEFS_NOEXITS, USERDEFS_NOEXITS,
USERDEFS_AUTOVOTE, USERDEFS_AUTOVOTE,
USERDEFS_AUTOMSG, USERDEFS_AUTOMSG,
USERDEFS_IDPLAYERS USERDEFS_IDPLAYERS,
USERDEFS_TEAM
}; };
enum sectorlabels { enum sectorlabels {

View file

@ -649,6 +649,13 @@ void DoUserDef(char bSet, long lLabelID, long lVar2, short sActor, short sPlayer
SetGameVarID((int)lVar2, ud.idplayers, sActor, sPlayer); SetGameVarID((int)lVar2, ud.idplayers, sActor, sPlayer);
break; break;
case USERDEFS_TEAM:
if(bSet)
ud.team = lValue;
else
SetGameVarID((int)lVar2, ud.team, sActor, sPlayer);
break;
default: default:
break; break;
} }
@ -1889,6 +1896,13 @@ void DoPlayer(char bSet, long lVar1, long lLabelID, long lVar2, short sActor, sh
SetGameVarID((int)lVar2, ps[iPlayer].weaponswitch, sActor, sPlayer); SetGameVarID((int)lVar2, ps[iPlayer].weaponswitch, sActor, sPlayer);
break; break;
case PLAYER_TEAM:
if(bSet)
ps[iPlayer].team=lValue;
else
SetGameVarID((int)lVar2, ps[iPlayer].team, sActor, sPlayer);
break;
default: default:
break; break;
} }

View file

@ -58,9 +58,9 @@ long partime[MAXVOLUMES*11],designertime[MAXVOLUMES*11];
char volume_names[MAXVOLUMES][33] = { "L.A. MELTDOWN", "LUNAR APOCALYPSE", "SHRAPNEL CITY" }; char volume_names[MAXVOLUMES][33] = { "L.A. MELTDOWN", "LUNAR APOCALYPSE", "SHRAPNEL CITY" };
char skill_names[5][33] = { "PIECE OF CAKE", "LET'S ROCK", "COME GET SOME", "DAMN I'M GOOD" }; char skill_names[5][33] = { "PIECE OF CAKE", "LET'S ROCK", "COME GET SOME", "DAMN I'M GOOD" };
char gametype_names[MAXGAMETYPES][33] = { "DUKEMATCH (SPAWN)","COOPERATIVE PLAY","DUKEMATCH (NO SPAWN)"}; char gametype_names[MAXGAMETYPES][33] = { "DUKEMATCH (SPAWN)","COOPERATIVE PLAY","DUKEMATCH (NO SPAWN)","TEAM DUKEMATCH"};
int gametype_flags[MAXGAMETYPES] = {4+8+16+1024+2048+16384,1+2+32+64+128+256+512+4096+8192+32768,2+4+8+16+16384}; int gametype_flags[MAXGAMETYPES] = {4+8+16+1024+2048+16384,1+2+32+64+128+256+512+4096+8192+32768,2+4+8+16+16384,4+8+16+1024+2048+16384+65536+131072};
char num_gametypes = 3; char num_gametypes = 4;
long soundsiz[NUM_SOUNDS]; long soundsiz[NUM_SOUNDS];

View file

@ -657,10 +657,17 @@ void menus(void)
case 20003: case 20003:
rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1); rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
menutext(160,24,0,0,"PLAYER SETUP"); menutext(160,24,0,0,"PLAYER SETUP");
rotatesprite((280)<<16,(37+(tilesizy[APLAYER]>>1))<<16,49152L,0,1441-((((4-(totalclock>>4)))&3)*5),0,ud.color,10,0,0,xdim-1,ydim-1); if(probey == 2)
{
switch(ud.team) {
case 0: x = 3; break;
case 1: x = 10; break;
}
} else x = ud.color;
rotatesprite((280)<<16,(37+(tilesizy[APLAYER]>>1))<<16,49152L,0,1441-((((4-(totalclock>>4)))&3)*5),0,x,10,0,0,xdim-1,ydim-1);
if (current_menu == 20002) { if (current_menu == 20002) {
x = probe(40,50,16,6); x = probe(40,50,16,7);
switch(x) { switch(x) {
case -1: case -1:
cmenu(202); cmenu(202);
@ -686,19 +693,24 @@ void menus(void)
break; break;
case 2: case 2:
AutoAim = (AutoAim == 2) ? 0 : AutoAim+1; ud.team = 1-ud.team;
updatenames(); updatenames();
break; break;
case 3: case 3:
AutoAim = (AutoAim == 2) ? 0 : AutoAim+1;
updatenames();
break;
case 4:
ud.weaponswitch = (ud.weaponswitch == 3) ? 0 : ud.weaponswitch+1; ud.weaponswitch = (ud.weaponswitch == 3) ? 0 : ud.weaponswitch+1;
updatenames(); updatenames();
break; break;
case 4: case 5:
ud.mouseaiming = !ud.mouseaiming; ud.mouseaiming = !ud.mouseaiming;
updatenames(); updatenames();
break; break;
case 5: case 6:
cmenu(20004); cmenu(20004);
break; break;
} }
@ -731,35 +743,40 @@ void menus(void)
menutext(40,50+16,MENUHIGHLIGHT(1),0,"COLOR"); menutext(40,50+16,MENUHIGHLIGHT(1),0,"COLOR");
{ {
int ud_color = -1, aaim = -1, ud_weaponswitch = -1, ud_maim = -1; int ud_color = -1, aaim = -1, ud_weaponswitch = -1, ud_maim = -1, ud_team = -1;
ud_color = ud.color; ud_color = ud.color;
aaim = AutoAim; aaim = AutoAim;
ud_weaponswitch = ud.weaponswitch; ud_weaponswitch = ud.weaponswitch;
ud_maim = ud.mouseaiming; ud_maim = ud.mouseaiming;
ud_team = ud.team;
modval(0,23,(int *)&ud.color,1,probey==1); modval(0,23,(int *)&ud.color,1,probey==1);
modval(0,2,(int *)&AutoAim,1,probey==2); modval(0,1,(int *)&ud.team,1,probey==2);
modval(0,3,(int *)&ud.weaponswitch,1,probey==3); modval(0,2,(int *)&AutoAim,1,probey==3);
modval(0,1,(int *)&ud.mouseaiming,1,probey==4); modval(0,3,(int *)&ud.weaponswitch,1,probey==4);
modval(0,1,(int *)&ud.mouseaiming,1,probey==5);
check_player_color((int *)&ud.color,ud_color); check_player_color((int *)&ud.color,ud_color);
if(ud_color != ud.color || aaim != AutoAim || ud_weaponswitch != ud.weaponswitch || ud_maim != ud.mouseaiming) if(ud_color != ud.color || aaim != AutoAim || ud_weaponswitch != ud.weaponswitch || ud_maim != ud.mouseaiming || ud_team != ud.team)
updatenames(); updatenames();
} }
menutext(40,50+16+16,MENUHIGHLIGHT(2),0,"AUTO AIM"); menutext(40,50+16+16,MENUHIGHLIGHT(2),0,"TEAM");
menutext(40,50+16+16+16,MENUHIGHLIGHT(3),0,"WEAPON SWITCH"); menutext(40,50+16+16+16,MENUHIGHLIGHT(3),0,"AUTO AIM");
menutext(40,50+16+16+16+16,MENUHIGHLIGHT(4),0,"AIMING TYPE"); menutext(40,50+16+16+16+16,MENUHIGHLIGHT(4),0,"WEAPON SWITCH");
menutext(40,50+16+16+16+16+16,MENUHIGHLIGHT(5),0,"MACRO SETUP"); menutext(40,50+16+16+16+16+16,MENUHIGHLIGHT(5),0,"AIMING TYPE");
menutext(40,50+16+16+16+16+16+16,MENUHIGHLIGHT(6),0,"MACRO SETUP");
if (current_menu == 20002) { if (current_menu == 20002) {
gametext(200,50-9,myname,MENUHIGHLIGHT(0),2+8+16); } gametext(200,50-9,myname,MENUHIGHLIGHT(0),2+8+16); }
{ char *s[] = { "Auto","","","","","","","","","Blue","Dk red","Green","Gray","Dk gray","Dk green","Brown", { char *s[] = { "Auto","","","","","","","","","Blue","Dk red","Green","Gray","Dk gray","Dk green","Brown",
"Dk blue","","","","","Red","","Yellow","","" }; "Dk blue","","","","","Red","","Yellow","","" };
gametext(200,50+16-9,s[ud.color],MENUHIGHLIGHT(1),2+8+16); } gametext(200,50+16-9,s[ud.color],MENUHIGHLIGHT(1),2+8+16); }
{ char *s[] = { "Blue", "Red" };
gametext(200,50+16+16-9,s[ud.team],MENUHIGHLIGHT(2),2+8+16); }
{ char *s[] = { "Off", "Full", "Hitscan" }; { char *s[] = { "Off", "Full", "Hitscan" };
gametext(200,50+16+16-9,s[AutoAim],MENUHIGHLIGHT(2),2+8+16); } gametext(200,50+16+16+16-9,s[AutoAim],MENUHIGHLIGHT(3),2+8+16); }
{ char *s[] = { "Off", "On pickup", "When empty", "Both" }; { char *s[] = { "Off", "On pickup", "When empty", "Both" };
gametext(200,50+16+16+16-9,s[ud.weaponswitch],MENUHIGHLIGHT(3),2+8+16); } gametext(200,50+16+16+16+16-9,s[ud.weaponswitch],MENUHIGHLIGHT(4),2+8+16); }
gametext(200,50+16+16+16+16-9,ud.mouseaiming?"Held":"Toggle",MENUHIGHLIGHT(4),2+8+16); gametext(200,50+16+16+16+16+16-9,ud.mouseaiming?"Held":"Toggle",MENUHIGHLIGHT(5),2+8+16);
break; break;
@ -774,7 +791,7 @@ void menus(void)
if(x == -1) if(x == -1)
{ {
cmenu(20002); cmenu(20002);
probey = 5; probey = 6;
} }
else if(x >= 0 && x <= 9) else if(x >= 0 && x <= 9)
{ {
@ -806,6 +823,7 @@ void menus(void)
gametext(160,144,"UP/DOWN = SELECT MACRO",0,2+8+16); gametext(160,144,"UP/DOWN = SELECT MACRO",0,2+8+16);
gametext(160,144+9,"ENTER = MODIFY",0,2+8+16); gametext(160,144+9,"ENTER = MODIFY",0,2+8+16);
gametext(160,144+9+9,"ACTIVATE IN GAME WITH SHIFT-F#",0,2+8+16);
break; break;
@ -4110,7 +4128,7 @@ VOLUME_ALL_40x:
if((gametype_flags[ud.m_coop] & GAMETYPE_FLAG_MARKEROPTION)) if((gametype_flags[ud.m_coop] & GAMETYPE_FLAG_MARKEROPTION))
modval(0,1,(int *)&ud.m_marker,1,probey==4); modval(0,1,(int *)&ud.m_marker,1,probey==4);
if((gametype_flags[ud.m_coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY)) if((gametype_flags[ud.m_coop] & (GAMETYPE_FLAG_PLAYERSFRIENDLY|GAMETYPE_FLAG_TDM)))
modval(0,1,(int *)&ud.m_ffire,1,probey==5); modval(0,1,(int *)&ud.m_ffire,1,probey==5);
else modval(0,1,(int *)&ud.m_noexits,1,probey==5); else modval(0,1,(int *)&ud.m_noexits,1,probey==5);
@ -4168,7 +4186,7 @@ VOLUME_ALL_40x:
break; break;
case 5: case 5:
if((gametype_flags[ud.m_coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY)) if((gametype_flags[ud.m_coop] & (GAMETYPE_FLAG_PLAYERSFRIENDLY|GAMETYPE_FLAG_TDM)))
ud.m_ffire = !ud.m_ffire; ud.m_ffire = !ud.m_ffire;
else ud.m_noexits = !ud.m_noexits; else ud.m_noexits = !ud.m_noexits;
break; break;
@ -4226,7 +4244,7 @@ VOLUME_ALL_40x:
if(gametype_flags[ud.m_coop] & GAMETYPE_FLAG_MARKEROPTION) if(gametype_flags[ud.m_coop] & GAMETYPE_FLAG_MARKEROPTION)
gametext(c+70,57+16+16+16+16-7-9,ud.m_marker?"ON":"OFF",MENUHIGHLIGHT(4),2+8+16); gametext(c+70,57+16+16+16+16-7-9,ud.m_marker?"ON":"OFF",MENUHIGHLIGHT(4),2+8+16);
if(gametype_flags[ud.m_coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY) if(gametype_flags[ud.m_coop] & (GAMETYPE_FLAG_PLAYERSFRIENDLY|GAMETYPE_FLAG_TDM))
gametext(c+70,57+16+16+16+16+16-7-9,ud.m_ffire?"ON":"OFF",MENUHIGHLIGHT(5),2+8+16); gametext(c+70,57+16+16+16+16+16-7-9,ud.m_ffire?"ON":"OFF",MENUHIGHLIGHT(5),2+8+16);
else gametext(c+70,57+16+16+16+16+16-7-9,ud.m_noexits?"OFF":"ON",MENUHIGHLIGHT(5),2+8+16); else gametext(c+70,57+16+16+16+16+16-7-9,ud.m_noexits?"OFF":"ON",MENUHIGHLIGHT(5),2+8+16);
@ -4252,7 +4270,7 @@ VOLUME_ALL_40x:
else else
menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),1,"MARKERS"); menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),1,"MARKERS");
if(gametype_flags[ud.m_coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY) if(gametype_flags[ud.m_coop] & (GAMETYPE_FLAG_PLAYERSFRIENDLY|GAMETYPE_FLAG_TDM))
menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),0,"FR. FIRE"); menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),0,"FR. FIRE");
else menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),0,"MAP EXITS"); else menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),0,"MAP EXITS");

View file

@ -314,7 +314,7 @@ short aim(spritetype *s,short aang,short atwith)
{ {
if( PN == APLAYER && if( PN == APLAYER &&
// ud.ffire == 0 && // ud.ffire == 0 &&
(gametype_flags[ud.coop]& GAMETYPE_FLAG_PLAYERSFRIENDLY ) && (gametype_flags[ud.coop]& GAMETYPE_FLAG_PLAYERSFRIENDLY || ((gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM) && ps[sprite[i].yvel].team == ps[s->yvel].team)) &&
s->picnum == APLAYER && s->picnum == APLAYER &&
s != &sprite[i]) s != &sprite[i])
continue; continue;
@ -735,7 +735,7 @@ short shoot(short i,short atwith)
if(hitspr >= 0) if(hitspr >= 0)
{ {
checkhitsprite(hitspr,k); checkhitsprite(hitspr,k);
if( sprite[hitspr].picnum == APLAYER && (!(gametype_flags[ud.coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY) || ud.ffire == 1) ) if( sprite[hitspr].picnum == APLAYER && (ud.ffire == 1 || (!(gametype_flags[ud.coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY) && (gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM) && ps[sprite[hitspr].yvel].team != ps[sprite[i].yvel].team)))
{ {
l = spawn(k,JIBS6); l = spawn(k,JIBS6);
sprite[k].xrepeat = sprite[k].yrepeat = 0; sprite[k].xrepeat = sprite[k].yrepeat = 0;
@ -1241,7 +1241,7 @@ DOSKIPBULLETHOLE:
if(hitspr >= 0) if(hitspr >= 0)
{ {
checkhitsprite(hitspr,k); checkhitsprite(hitspr,k);
if( sprite[hitspr].picnum == APLAYER && (!(gametype_flags[ud.coop]&GAMETYPE_FLAG_PLAYERSFRIENDLY ) || ud.ffire == 1) ) if( sprite[hitspr].picnum == APLAYER && (ud.ffire == 1 || (!(gametype_flags[ud.coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY) && (gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM) && ps[sprite[hitspr].yvel].team != ps[sprite[i].yvel].team)))
{ {
l = spawn(k,JIBS6); l = spawn(k,JIBS6);
sprite[k].xrepeat = sprite[k].yrepeat = 0; sprite[k].xrepeat = sprite[k].yrepeat = 0;
@ -3500,7 +3500,7 @@ void processinput(short snum)
{ {
char name1[32],name2[32]; char name1[32],name2[32];
if(gametype_flags[ud.coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY) if(gametype_flags[ud.coop] & GAMETYPE_FLAG_PLAYERSFRIENDLY || (gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM && ps[snum].team == ps[p->frag_ps].team))
i = 9; i = 9;
else else
{ {

View file

@ -410,12 +410,30 @@ void vscrn(void)
void pickrandomspot(short snum) void pickrandomspot(short snum)
{ {
struct player_struct *p; struct player_struct *p;
short i; short i=0,j,k;
unsigned long dist,pdist = -1;
p = &ps[snum]; p = &ps[snum];
if( ud.multimode > 1 && !(gametype_flags[ud.coop] & GAMETYPE_FLAG_FIXEDRESPAWN)) if( ud.multimode > 1 && !(gametype_flags[ud.coop] & GAMETYPE_FLAG_FIXEDRESPAWN))
i = TRAND%numplayersprites; {
if(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDMSPAWN)
{
for(j=0;j<ud.multimode;j++)
{
if(j != snum && ps[j].team == ps[snum].team && sprite[ps[j].i].extra > 0)
{
for(k=0;k<numplayersprites;k++)
{
dist = FindDistance2D(ps[j].posx-po[k].ox,ps[j].posy-po[k].oy);
if(dist < pdist)
i = k, pdist = dist;
}
break;
}
}
} else i = TRAND%numplayersprites;
}
else i = snum; else i = snum;
p->bobposx = p->oposx = p->posx = po[i].ox; p->bobposx = p->oposx = p->posx = po[i].ox;
@ -1205,7 +1223,7 @@ void resetpspritevars(char g)
s->yvel = j; s->yvel = j;
if(!ud.pcolor[j] && ud.multimode > 1) if(!ud.pcolor[j] && ud.multimode > 1 && !(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM))
{ {
if(s->pal == 0) if(s->pal == 0)
{ {
@ -1224,7 +1242,22 @@ void resetpspritevars(char g)
which_palookup = 9; which_palookup = 9;
} }
else ps[j].palookup = s->pal; else ps[j].palookup = s->pal;
} else s->pal = ps[j].palookup = ud.pcolor[j]; }
else
{
int k = ud.pcolor[j];
if(gametype_flags[ud.coop] & GAMETYPE_FLAG_TDM)
{
switch(ud.pteam[j])
{
case 0: k = 3; break;
case 1: k = 10; break;
}
ps[j].team = ud.pteam[j];
}
s->pal = ps[j].palookup = k;
}
ps[j].i = i; ps[j].i = i;
ps[j].frag_ps = j; ps[j].frag_ps = j;