- Added Karate Chris's patch to optionally specify an angle offset for

summoning.
- Added Karate Chris's fix for Serpent Staff vampirism on teammates.
- Locks and teleporters now take precedence over one-sidedness for automap
  coloring.


SVN r1317 (trunk)
This commit is contained in:
Randy Heit 2008-12-16 01:23:44 +00:00
parent f435576f1d
commit 49120f59d4
7 changed files with 94 additions and 95 deletions

View file

@ -1,4 +1,9 @@
December 15, 2008 December 15, 2008
- Added Karate Chris's patch to optionally specify an angle offset for
summoning.
- Added Karate Chris's fix for Serpent Staff vampirism on teammates.
- Locks and teleporters now take precedence over one-sidedness for automap
coloring.
- Increased maximum number of per-pattern rows for the XM loader from - Increased maximum number of per-pattern rows for the XM loader from
256 to 1024 to deal with a module that otherwise would not load. 256 to 1024 to deal with a module that otherwise would not load.
- Removed the artificial restriction on not supporting Vorbis-compressed - Removed the artificial restriction on not supporting Vorbis-compressed

View file

@ -1377,77 +1377,75 @@ void AM_drawWalls (bool allmap)
// map secret sectors like Boom // map secret sectors like Boom
AM_drawMline(&l, SecretSectorColor); AM_drawMline(&l, SecretSectorColor);
} }
else if (!lines[i].backsector) else if (lines[i].flags & ML_SECRET)
{ { // secret door
AM_drawMline(&l, WallColor); if (am_cheat != 0 && lines[i].backsector != NULL)
AM_drawMline(&l, SecretWallColor);
else
AM_drawMline(&l, WallColor);
} }
else else if ((lines[i].special == Teleport ||
{ lines[i].special == Teleport_NoFog ||
if (lines[i].flags & ML_SECRET) lines[i].special == Teleport_ZombieChanger ||
{ // secret door lines[i].special == Teleport_Line) &&
if (am_cheat != 0) (lines[i].activation & SPAC_PlayerActivate) &&
AM_drawMline(&l, SecretWallColor); am_colorset == 0)
else { // intra-level teleporters
AM_drawMline(&l, WallColor); AM_drawMline(&l, IntraTeleportColor);
} }
else if ((lines[i].special == Teleport || else if ((lines[i].special == Teleport_NewMap ||
lines[i].special == Teleport_NoFog || lines[i].special == Teleport_EndGame ||
lines[i].special == Teleport_ZombieChanger || lines[i].special == Exit_Normal ||
lines[i].special == Teleport_Line) && lines[i].special == Exit_Secret) &&
(lines[i].activation & SPAC_PlayerActivate) &&
am_colorset == 0) am_colorset == 0)
{ // intra-level teleporters { // inter-level/game-ending teleporters
AM_drawMline(&l, IntraTeleportColor); AM_drawMline(&l, InterTeleportColor);
} }
else if ((lines[i].special == Teleport_NewMap || else if (lines[i].special == Door_LockedRaise ||
lines[i].special == Teleport_EndGame || lines[i].special == ACS_LockedExecute ||
lines[i].special == Exit_Normal || lines[i].special == ACS_LockedExecuteDoor ||
lines[i].special == Exit_Secret) && (lines[i].special == Generic_Door && lines[i].args[4] !=0 ))
am_colorset == 0) {
{ // inter-level/game-ending teleporters if (am_colorset == 0)
AM_drawMline(&l, InterTeleportColor);
}
else if (lines[i].special == Door_LockedRaise ||
lines[i].special == ACS_LockedExecute ||
lines[i].special == ACS_LockedExecuteDoor ||
(lines[i].special == Generic_Door && lines[i].args[4]!=0))
{ {
if (am_colorset == 0) int P_GetMapColorForLock(int lock);
{ int lock;
int P_GetMapColorForLock(int lock);
int lock;
if (lines[i].special==Door_LockedRaise) lock=lines[i].args[3];
else lock=lines[i].args[4];
if (lines[i].special==Door_LockedRaise) lock=lines[i].args[3]; int color = P_GetMapColorForLock(lock);
else lock=lines[i].args[4];
int color = P_GetMapColorForLock(lock); AMColor c;
AMColor c; if (color >= 0) c.FromRGB(RPART(color), GPART(color), BPART(color));
else c = LockedColor;
if (color >= 0) c.FromRGB(RPART(color), GPART(color), BPART(color)); AM_drawMline (&l, c);
else c = LockedColor;
AM_drawMline (&l, c);
}
else
AM_drawMline (&l, LockedColor); // locked special
} }
else if (lines[i].backsector->floorplane else
!= lines[i].frontsector->floorplane)
{ {
AM_drawMline(&l, FDWallColor); // floor level change AM_drawMline (&l, LockedColor); // locked special
}
else if (lines[i].backsector->ceilingplane
!= lines[i].frontsector->ceilingplane)
{
AM_drawMline(&l, CDWallColor); // ceiling level change
}
else if (am_cheat != 0)
{
AM_drawMline(&l, TSWallColor);
} }
} }
else if (lines[i].backsector == NULL)
{
AM_drawMline(&l, WallColor); // one-sided wall
}
else if (lines[i].backsector->floorplane
!= lines[i].frontsector->floorplane)
{
AM_drawMline(&l, FDWallColor); // floor level change
}
else if (lines[i].backsector->ceilingplane
!= lines[i].frontsector->ceilingplane)
{
AM_drawMline(&l, CDWallColor); // ceiling level change
}
else if (am_cheat != 0)
{
AM_drawMline(&l, TSWallColor);
}
} }
else if (allmap) else if (allmap)
{ {

View file

@ -2113,6 +2113,9 @@ void Net_DoCommand (int type, BYTE **stream, int player)
case DEM_SUMMON: case DEM_SUMMON:
case DEM_SUMMONFRIEND: case DEM_SUMMONFRIEND:
case DEM_SUMMONFOE: case DEM_SUMMONFOE:
case DEM_SUMMON2:
case DEM_SUMMONFRIEND2:
case DEM_SUMMONFOE2:
{ {
const PClass *typeinfo; const PClass *typeinfo;
@ -2136,7 +2139,7 @@ void Net_DoCommand (int type, BYTE **stream, int player)
source->z + 8 * FRACUNIT, ALLOW_REPLACE); source->z + 8 * FRACUNIT, ALLOW_REPLACE);
if (spawned != NULL) if (spawned != NULL)
{ {
if (type == DEM_SUMMONFRIEND) if (type == DEM_SUMMONFRIEND || type == DEM_SUMMONFRIEND2)
{ {
if (spawned->CountsAsKill()) if (spawned->CountsAsKill())
{ {
@ -2146,12 +2149,17 @@ void Net_DoCommand (int type, BYTE **stream, int player)
spawned->flags |= MF_FRIENDLY; spawned->flags |= MF_FRIENDLY;
spawned->LastHeard = players[player].mo; spawned->LastHeard = players[player].mo;
} }
else if (type == DEM_SUMMONFOE) else if (type == DEM_SUMMONFOE || type == DEM_SUMMONFOE2)
{ {
spawned->FriendPlayer = 0; spawned->FriendPlayer = 0;
spawned->flags &= ~MF_FRIENDLY; spawned->flags &= ~MF_FRIENDLY;
} }
} }
if (type >= DEM_SUMMON2 && type <= DEM_SUMMONFOE2)
{
int angle = ReadWord(stream);
spawned->angle = source->angle - (ANGLE_1 * angle);
}
} }
} }
} }
@ -2383,6 +2391,9 @@ void Net_SkipCommand (int type, BYTE **stream)
case DEM_GIVECHEAT: case DEM_GIVECHEAT:
case DEM_TAKECHEAT: case DEM_TAKECHEAT:
case DEM_SUMMON2:
case DEM_SUMMONFRIEND2:
case DEM_SUMMONFOE2:
skip = strlen ((char *)(*stream)) + 3; skip = strlen ((char *)(*stream)) + 3;
break; break;

View file

@ -148,6 +148,9 @@ enum EDemoCommand
DEM_DELCONTROLLER, // 49 Player to remove from the controller list. DEM_DELCONTROLLER, // 49 Player to remove from the controller list.
DEM_KILLCLASSCHEAT, // 50 String: Class to kill. DEM_KILLCLASSCHEAT, // 50 String: Class to kill.
DEM_CONVERSATION, // 51 Make conversations work. DEM_CONVERSATION, // 51 Make conversations work.
DEM_SUMMON2, // 52 String: Thing to fabricate, WORD: angle offset
DEM_SUMMONFRIEND2, // 53
DEM_SUMMONFOE2, // 54
}; };
// The following are implemented by cht_DoCheat in m_cheat.cpp // The following are implemented by cht_DoCheat in m_cheat.cpp

View file

@ -72,7 +72,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_CStaffCheck)
P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, PClass::FindClass ("CStaffPuff")); P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, PClass::FindClass ("CStaffPuff"));
pmo->angle = R_PointToAngle2 (pmo->x, pmo->y, pmo->angle = R_PointToAngle2 (pmo->x, pmo->y,
linetarget->x, linetarget->y); linetarget->x, linetarget->y);
if ((linetarget->player || linetarget->flags3&MF3_ISMONSTER) if (((linetarget->player && (!linetarget->IsTeammate (pmo) || level.teamdamage != 0))|| linetarget->flags3&MF3_ISMONSTER)
&& (!(linetarget->flags2&(MF2_DORMANT+MF2_INVULNERABLE)))) && (!(linetarget->flags2&(MF2_DORMANT+MF2_INVULNERABLE))))
{ {
newLife = player->health+(damage>>3); newLife = player->health+(damage>>3);
@ -96,7 +96,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_CStaffCheck)
P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, PClass::FindClass ("CStaffPuff")); P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, PClass::FindClass ("CStaffPuff"));
pmo->angle = R_PointToAngle2 (pmo->x, pmo->y, pmo->angle = R_PointToAngle2 (pmo->x, pmo->y,
linetarget->x, linetarget->y); linetarget->x, linetarget->y);
if (linetarget->player || linetarget->flags3&MF3_ISMONSTER) if ((linetarget->player && (!linetarget->IsTeammate (pmo) || level.teamdamage != 0)) || linetarget->flags3&MF3_ISMONSTER)
{ {
newLife = player->health+(damage>>4); newLife = player->health+(damage>>4);
newLife = newLife > 100 ? 100 : newLife; newLife = newLife > 100 ? 100 : newLife;

View file

@ -371,7 +371,7 @@ CCMD (dumpmapthings)
bool CheckCheatmode (); bool CheckCheatmode ();
CCMD (summon) static void SummonActor (int command, int command2, FCommandLine argv)
{ {
if (CheckCheatmode ()) if (CheckCheatmode ())
return; return;
@ -384,43 +384,25 @@ CCMD (summon)
Printf ("Unknown class '%s'\n", argv[1]); Printf ("Unknown class '%s'\n", argv[1]);
return; return;
} }
Net_WriteByte (DEM_SUMMON); Net_WriteByte (argv.argc() > 2 ? command2 : command);
Net_WriteString (type->TypeName.GetChars()); Net_WriteString (type->TypeName.GetChars());
if (argv.argc () > 2)
Net_WriteWord (atoi (argv[2]));
} }
} }
CCMD (summon)
{
SummonActor (DEM_SUMMON, DEM_SUMMON2, argv);
}
CCMD (summonfriend) CCMD (summonfriend)
{ {
if (CheckCheatmode ()) SummonActor (DEM_SUMMONFRIEND, DEM_SUMMONFRIEND2, argv);
return;
if (argv.argc() > 1)
{
const PClass *type = PClass::FindClass (argv[1]);
if (type == NULL)
{
Printf ("Unknown class '%s'\n", argv[1]);
return;
}
Net_WriteByte (DEM_SUMMONFRIEND);
Net_WriteString (type->TypeName.GetChars());
}
} }
CCMD (summonfoe) CCMD (summonfoe)
{ {
if (CheckCheatmode ()) SummonActor (DEM_SUMMONFOE, DEM_SUMMONFOE2, argv);
return;
if (argv.argc() > 1)
{
const PClass *type = PClass::FindClass (argv[1]);
if (type == NULL)
{
Printf ("Unknown class '%s'\n", argv[1]);
return;
}
Net_WriteByte (DEM_SUMMONFOE);
Net_WriteString (type->TypeName.GetChars());
}
} }

View file

@ -54,7 +54,7 @@
// Version identifier for network games. // Version identifier for network games.
// Bump it every time you do a release unless you're certain you // Bump it every time you do a release unless you're certain you
// didn't change anything that will affect sync. // didn't change anything that will affect sync.
#define NETGAMEVERSION 217 #define NETGAMEVERSION 218
// Version stored in the ini's [LastRun] section. // Version stored in the ini's [LastRun] section.
// Bump it if you made some configuration change that you want to // Bump it if you made some configuration change that you want to
@ -64,7 +64,7 @@
// Protocol version used in demos. // Protocol version used in demos.
// Bump it if you change existing DEM_ commands or add new ones. // Bump it if you change existing DEM_ commands or add new ones.
// Otherwise, it should be safe to leave it alone. // Otherwise, it should be safe to leave it alone.
#define DEMOGAMEVERSION 0x20D #define DEMOGAMEVERSION 0x20E
// Minimum demo version we can play. // Minimum demo version we can play.
// Bump it whenever you change or remove existing DEM_ commands. // Bump it whenever you change or remove existing DEM_ commands.