Compare commits

...

2 Commits

Author SHA1 Message Date
archive a8a1ed1116 as released 1999-05-07 1999-05-07 00:00:00 +00:00
archive 659a4a3268 as released 1999-04-30 1999-04-30 00:00:00 +00:00
19 changed files with 152 additions and 65 deletions

View File

@ -28,6 +28,9 @@
#define AIRMOVE_THRESHOLD 64 #define AIRMOVE_THRESHOLD 64
#define QUICKTURN_RATE (-360.0) // Rotational velocity (degrees/second). #define QUICKTURN_RATE (-360.0) // Rotational velocity (degrees/second).
qboolean BranchCheckDismemberAction(playerinfo_t *playerinfo, int weapon);
vec3_t handmins = {-2.0, -2.0, 0}, vec3_t handmins = {-2.0, -2.0, 0},
handmaxs = {2.0, 2.0, 2.0}; handmaxs = {2.0, 2.0, 2.0};
@ -2774,13 +2777,15 @@ qboolean PlayerActionCheckVault(playerinfo_t *playerinfo, float value)
if (grabfraction < 0.5) if (grabfraction < 0.5)
{ {
if ( (playerinfo->flags & PLAYER_FLAG_NO_LARM) && (playerinfo->flags & PLAYER_FLAG_NO_RARM) )
return false;//can't do half pull up with no arms
// This is strange, but the VAULT_LOW is actually a high wall vault.
PlayerAnimSetVault(playerinfo, ASEQ_VAULT_LOW); PlayerAnimSetVault(playerinfo, ASEQ_VAULT_LOW);
} }
else else
{ {
if ( (playerinfo->flags & PLAYER_FLAG_NO_LARM) && (playerinfo->flags & PLAYER_FLAG_NO_RARM) ) // ...and PULLUP_HALFWALL is just a hop. SO I moved the arm check to the high wall vault.
return false;//can't do half pull up with no arms
PlayerAnimSetVault(playerinfo, ASEQ_PULLUP_HALFWALL); PlayerAnimSetVault(playerinfo, ASEQ_PULLUP_HALFWALL);
} }
@ -2862,9 +2867,16 @@ void PlayerActionPushAway(playerinfo_t *playerinfo, float value)
qboolean PlayerActionCheckRopeGrab(playerinfo_t *playerinfo, float stomp_org) qboolean PlayerActionCheckRopeGrab(playerinfo_t *playerinfo, float stomp_org)
{ {
if(!playerinfo->isclient) if(!playerinfo->isclient)
return(playerinfo->G_PlayerActionCheckRopeGrab(playerinfo,stomp_org)); { // Check dismemberment before game side rope check.
if (playerinfo->flags & PLAYER_FLAG_NO_LARM || playerinfo->flags & PLAYER_FLAG_NO_RARM)
return(false);
else
return(playerinfo->G_PlayerActionCheckRopeGrab(playerinfo,stomp_org));
}
else else
{
return(false); return(false);
}
} }
/*----------------------------------------------- /*-----------------------------------------------

View File

@ -234,6 +234,52 @@ int CheckSlopedStand (playerinfo_t *playerinfo)
return ASEQ_NONE; return ASEQ_NONE;
} }
/*-----------------------------------------------
BranchCheckDismemberAction
-----------------------------------------------*/
PLAYER_API qboolean BranchCheckDismemberAction(playerinfo_t *playerinfo, int weapon)
{
//If these nodes are on, then any weapon selection is a valid one
if ( (!(playerinfo->flags & PLAYER_FLAG_NO_RARM)) && (!(playerinfo->flags & PLAYER_FLAG_NO_LARM)) )
return true;
//No arm, no shot
if (weapon == ITEM_WEAPON_FLYINGFIST)
{
if (playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
else if (weapon == ITEM_WEAPON_MAGICMISSILE || weapon == ITEM_WEAPON_MACEBALLS)
{
//Powered up is right arm, non-powered is left
if (playerinfo->powerup_timer > playerinfo->leveltime)
{
if (playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
else
{
if (playerinfo->flags & PLAYER_FLAG_NO_LARM)
return false;
}
}
else if (weapon == ITEM_WEAPON_HELLSTAFF || weapon == ITEM_WEAPON_SWORDSTAFF)
{
if (playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
else //Any other weapon will need both hands
{
if (playerinfo->flags & PLAYER_FLAG_NO_LARM || playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
//Player is able to complete the action
return true;
}
/*----------------------------------------------- /*-----------------------------------------------
ChickenBranchLwrStanding ChickenBranchLwrStanding
-----------------------------------------------*/ -----------------------------------------------*/
@ -425,7 +471,8 @@ int BranchLwrStanding(playerinfo_t *playerinfo)
if (playerinfo->advancedstaff && // Special move if (playerinfo->advancedstaff && // Special move
playerinfo->seqcmd[ACMDL_ACTION] && playerinfo->seqcmd[ACMDL_ACTION] &&
playerinfo->pers.weaponready == WEAPON_READY_SWORDSTAFF && playerinfo->pers.weaponready == WEAPON_READY_SWORDSTAFF &&
playerinfo->seqcmd[ACMDU_ATTACK]) playerinfo->seqcmd[ACMDU_ATTACK] &&
BranchCheckDismemberAction(playerinfo, ITEM_WEAPON_SWORDSTAFF))
{ {
return ASEQ_WSWORD_LOWERDOWNSTAB; return ASEQ_WSWORD_LOWERDOWNSTAB;
} }
@ -1860,50 +1907,6 @@ int BranchLwrClimbing(playerinfo_t *playerinfo)
return(ASEQ_NONE); return(ASEQ_NONE);
} }
/*-----------------------------------------------
BranchCheckDismemberAction
-----------------------------------------------*/
PLAYER_API qboolean BranchCheckDismemberAction(playerinfo_t *playerinfo, int weapon)
{
//If these nodes are on, then any weapon selection is a valid one
if ( (!(playerinfo->flags & PLAYER_FLAG_NO_RARM)) && (!(playerinfo->flags & PLAYER_FLAG_NO_LARM)) )
return true;
//No arm, no shot
if (weapon == ITEM_WEAPON_FLYINGFIST)
{
if (playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
else if (weapon == ITEM_WEAPON_MAGICMISSILE || weapon == ITEM_WEAPON_MACEBALLS)
{
//Powered up is right arm, non-powered is left
if (playerinfo->powerup_timer > playerinfo->leveltime)
{
if (playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
else
{
if (playerinfo->flags & PLAYER_FLAG_NO_LARM)
return false;
}
}
else if (weapon == ITEM_WEAPON_HELLSTAFF || weapon == ITEM_WEAPON_SWORDSTAFF)
{
if (playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
else //Any other weapon will need both hands
{
if (playerinfo->flags & PLAYER_FLAG_NO_LARM || playerinfo->flags & PLAYER_FLAG_NO_RARM)
return false;
}
//Player is able to complete the action
return true;
}
/*----------------------------------------------- /*-----------------------------------------------
BranchUprReadyHands BranchUprReadyHands

View File

@ -2447,14 +2447,14 @@ panimframe_t player_frames_stafflowerdownstab [] =
FRAME_spikedwn5, PlayerMoveFunc, 25*UNJH_VALUE, 0, 0, NULL, 0, NULL, FRAME_spikedwn5, PlayerMoveFunc, 25*UNJH_VALUE, 0, 0, NULL, 0, NULL,
FRAME_spikedwn6, NULL, 0, 0, 0, NULL, 0, NULL, FRAME_spikedwn6, NULL, 0, 0, 0, NULL, 0, NULL,
FRAME_spikedwn7, NULL, 0, 0, 0, PlayerActionSwordAttack, 21, NULL, FRAME_spikedwn7, NULL, 0, 0, 0, PlayerActionSwordAttack, 21, NULL,
FRAME_spikedwn8, NULL, 0, 0, 0, PlayerActionSwordAttack, 21, NULL, FRAME_spikedwn8, NULL, 0, 0, 0, PlayerActionSwordAttack, 22, NULL,
}; };
panimmove_t player_move_stafflowerdownstab = {8, player_frames_stafflowerdownstab, PlayerAnimLowerUpdate}; panimmove_t player_move_stafflowerdownstab = {8, player_frames_stafflowerdownstab, PlayerAnimLowerUpdate};
// Pull staff out after stab // Pull staff out after stab
panimframe_t player_frames_stafflowerpullout [] = panimframe_t player_frames_stafflowerpullout [] =
{ {
FRAME_pullout1, NULL, 0, 0, 0, PlayerActionSwordAttack, 21, NULL, FRAME_pullout1, NULL, 0, 0, 0, PlayerActionSwordAttack, 22, NULL,
FRAME_pullout2, NULL, 0, 0, 0, NULL, 0, NULL, FRAME_pullout2, NULL, 0, 0, 0, NULL, 0, NULL,
FRAME_pullout3, NULL, 0, 0, 0, NULL, 0, NULL, FRAME_pullout3, NULL, 0, 0, 0, NULL, 0, NULL,
FRAME_pullout4, NULL, 0, 0, 0, NULL, 0, NULL, FRAME_pullout4, NULL, 0, 0, 0, NULL, 0, NULL,

View File

@ -26,7 +26,7 @@
///// IMPORTANT !!! THIS IS THE STRING THAT DETERMINES IF YOU CAN JOIN A SERVER - IE YOU HAVE THE RIGHT CLIENT EFFECTS DLL ///// IMPORTANT !!! THIS IS THE STRING THAT DETERMINES IF YOU CAN JOIN A SERVER - IE YOU HAVE THE RIGHT CLIENT EFFECTS DLL
char *client_string = {"Heretic II v1.04"}; char *client_string = {"Heretic II v1.06"};
client_fx_import_t fxi; client_fx_import_t fxi;

View File

@ -813,18 +813,19 @@ qboolean ValidItem(gitem_t *item)
} }
} }
if ((item->tag == ITEM_DEFENSE_TORNADO) && (no_tornado->value)) if ((item->flags & IT_DEFENSE) && (item->tag == ITEM_DEFENSE_TORNADO) && (no_tornado->value))
return false; return false;
else if ((item->tag == ITEM_DEFENSE_POLYMORPH) && (no_morph->value)) else if ((item->flags & IT_DEFENSE) && (item->tag == ITEM_DEFENSE_POLYMORPH) && (no_morph->value))
return false; return false;
else if ((item->tag == ITEM_DEFENSE_SHIELD) && (no_shield->value)) else if ((item->flags & IT_DEFENSE) && (item->tag == ITEM_DEFENSE_SHIELD) && (no_shield->value))
return false; return false;
else if ((item->tag == ITEM_DEFENSE_TELEPORT) && (no_teleport->value)) else if ((item->flags & IT_DEFENSE) && (item->tag == ITEM_DEFENSE_TELEPORT) && (no_teleport->value))
return false; return false;
else if ((item->tag == ITEM_WEAPON_PHOENIXBOW) && (no_phoenix->value)) else if ((item->flags & IT_OFFENSE) && (item->tag == ITEM_WEAPON_PHOENIXBOW) && (no_phoenix->value))
return false; return false;
else if ((item->tag == ITEM_WEAPON_MACEBALLS) && (no_irondoom->value)) else if ((item->flags & IT_OFFENSE) && (item->tag == ITEM_WEAPON_MACEBALLS) && (no_irondoom->value))
return false; return false;
} }
#if DEMO_CODE #if DEMO_CODE

View File

@ -27,7 +27,7 @@
#if DEMO_CODE #if DEMO_CODE
#define GAMEVERSION "Heretic2Dmo" #define GAMEVERSION "Heretic2Dmo"
#else #else
#define GAMEVERSION "Heretic2v14" #define GAMEVERSION "Heretic2v16"
#endif #endif
// Protocol bytes that can be directly added to messages. // Protocol bytes that can be directly added to messages.
@ -837,6 +837,7 @@ extern cvar_t *monster_speeds;
extern cvar_t *pvs_cull; extern cvar_t *pvs_cull;
extern cvar_t *game_test; // sfs--for testing the speed impact of code changes extern cvar_t *game_test; // sfs--for testing the speed impact of code changes
extern cvar_t *dm_no_bodies;
extern cvar_t *player_dll; extern cvar_t *player_dll;

View File

@ -101,6 +101,7 @@ cvar_t *no_shield;
cvar_t *no_teleport; cvar_t *no_teleport;
cvar_t *game_test; cvar_t *game_test;
cvar_t *dm_no_bodies;
cvar_t *player_dll; cvar_t *player_dll;

View File

@ -3396,6 +3396,9 @@ void SP_obj_shrine (edict_t *self)
++self->style; ++self->style;
} }
// make sure we always send the model
self->s.effects |= EF_ALWAYS_ADD_EFFECTS;
// make the ball appear in the middle // make the ball appear in the middle
VectorScale(self->s.angles, ANGLE_TO_RAD, offset); VectorScale(self->s.angles, ANGLE_TO_RAD, offset);
DirFromAngles(offset, offset2); DirFromAngles(offset, offset2);

View File

@ -367,6 +367,7 @@ void InitGame (void)
log_file_line_header = gi.cvar("log_file_line_header", "", CVAR_ARCHIVE); log_file_line_header = gi.cvar("log_file_line_header", "", CVAR_ARCHIVE);
blood_level = gi.cvar ("blood_level", VIOLENCE_DEFAULT_STR, CVAR_ARCHIVE); blood_level = gi.cvar ("blood_level", VIOLENCE_DEFAULT_STR, CVAR_ARCHIVE);
dm_no_bodies = gi.cvar ("dm_no_bodies", "0", CVAR_ARCHIVE);
gi.cvar("flash_screen", "1", 0); gi.cvar("flash_screen", "1", 0);

View File

@ -0,0 +1,52 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: Player - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\WINDOWS\TEMP\RSP50B3.TMP" with contents
[
/nologo /MTd /W3 /Gm /Gi /ZI /Od /I "../qcommon" /I "../game" /I "../client" /I "../server" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "PLAYER_DLL" /D "_DEVEL" /FR".\Debug/" /Fp".\Debug/Player.pch" /YX /Fo".\Debug/" /Fd".\Debug/" /FD /c
"C:\heretic2\code\Player\p_actions.c"
]
Creating command line "cl.exe @C:\WINDOWS\TEMP\RSP50B3.TMP"
Creating temporary file "C:\WINDOWS\TEMP\RSP50B4.TMP" with contents
[
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib H2Common.lib /nologo /base:"0x110d0000" /version:1.0 /subsystem:windows /dll /incremental:yes /pdb:"../Debug/Player.pdb" /debug /machine:I386 /out:"../Debug/Player.dll" /implib:"../Debug/Player.lib" /pdbtype:sept /libpath:"..\Debug"
.\Debug\main.obj
.\Debug\p_actions.obj
.\Debug\p_anim_branch.obj
.\Debug\p_anim_data.obj
.\Debug\p_animactor.obj
.\Debug\p_anims.obj
.\Debug\p_chicken.obj
.\Debug\p_chicken_anim.obj
.\Debug\p_ctrl.obj
.\Debug\p_items.obj
.\Debug\p_main.obj
.\Debug\p_weapon.obj
\heretic2\code\Debug\H2Common.lib
]
Creating command line "link.exe @C:\WINDOWS\TEMP\RSP50B4.TMP"
<h3>Output Window</h3>
Compiling...
p_actions.c
Linking...
<h3>
--------------------Configuration: quake2 - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
<h3>
--------------------Configuration: game - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
<h3>Results</h3>
gamex86.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -1714,7 +1714,7 @@ void respawn (edict_t *self)
{ {
// FIXME: make bodyque objects obey gravity. // FIXME: make bodyque objects obey gravity.
if(!(self->flags & FL_CHICKEN)) if(!(self->flags & FL_CHICKEN) && !((int)dm_no_bodies->value))
{ {
// We're not set as a chicken, so duplicate ourselves. // We're not set as a chicken, so duplicate ourselves.

View File

@ -115,6 +115,10 @@ enum FeatureTypes
#define ROTATE_SIGNALER 0x04 #define ROTATE_SIGNALER 0x04
#define ROTATE_ABSOLUTE 0x08 #define ROTATE_ABSOLUTE 0x08
// MoveRotate (disk-file command)
#define MOVEROTATE_SIGNALER 0x01
// Wait // Wait
#define WAIT_CLEAR 0x80 #define WAIT_CLEAR 0x80

View File

@ -803,8 +803,8 @@ typedef struct
#define CS_LIGHTS (CS_IMAGES+MAX_IMAGES) #define CS_LIGHTS (CS_IMAGES+MAX_IMAGES)
#define CS_ITEMS (CS_LIGHTS+MAX_LIGHTSTYLES) #define CS_ITEMS (CS_LIGHTS+MAX_LIGHTSTYLES)
#define CS_PLAYERSKINS (CS_ITEMS+MAX_ITEMS) #define CS_PLAYERSKINS (CS_ITEMS+MAX_ITEMS)
#define CS_WELCOME (CS_PLAYERSKINS+MAX_CLIENTS) #define CS_WELCOME (CS_PLAYERSKINS+MAX_CLIENTS) // give us 4 welcome string messages so we can have a total of 256 characters per message
#define MAX_CONFIGSTRINGS CS_WELCOME + 1 #define MAX_CONFIGSTRINGS CS_WELCOME + 4
// ************************************************************************************************ // ************************************************************************************************
// EffectsBuffer_t // EffectsBuffer_t

View File

@ -143,6 +143,7 @@ void SpellCastDropTornado(edict_t *caster, vec3_t startpos, vec3_t aimangles, ve
// use the speed active ef_flag to tell the client effect when the effect is over // use the speed active ef_flag to tell the client effect when the effect is over
tornado->s.effects |= EF_ALWAYS_ADD_EFFECTS ; tornado->s.effects |= EF_ALWAYS_ADD_EFFECTS ;
tornado->svflags |= SVF_ALWAYS_SEND;
tornado->solid = SOLID_NOT; tornado->solid = SOLID_NOT;
tornado->clipmask = MASK_SOLID; tornado->clipmask = MASK_SOLID;
tornado->targetEnt = caster; tornado->targetEnt = caster;

Binary file not shown.

Binary file not shown.

View File

@ -9,9 +9,9 @@
#define BASEDIRNAME "base" #define BASEDIRNAME "base"
#define VERSION_MAJOR "1" #define VERSION_MAJOR "1"
#define VERSION_MINOR "04" #define VERSION_MINOR "06"
#define VERSION_LOCAL "01" #define VERSION_LOCAL "01"
#define VERSION_DATE "0309" #define VERSION_DATE "0504"
#define VERSION_ITERATION "01" #define VERSION_ITERATION "01"
#define VERSIONDISP (VERSION_MAJOR"."VERSION_MINOR) #define VERSIONDISP (VERSION_MAJOR"."VERSION_MINOR)
@ -23,6 +23,8 @@
#define GAME_DECLSPEC __declspec(dllimport) #define GAME_DECLSPEC __declspec(dllimport)
#endif #endif
#define NO_BLOOD 0
#ifdef WIN32 #ifdef WIN32
@ -155,7 +157,7 @@ PROTOCOL
// protocol.h -- communications protocols // protocol.h -- communications protocols
#define PROTOCOL_VERSION 50 #define PROTOCOL_VERSION 51
//========================================= //=========================================
@ -884,6 +886,12 @@ extern cvar_t *host_speeds;
extern cvar_t *log_stats; extern cvar_t *log_stats;
extern cvar_t *player_dll; extern cvar_t *player_dll;
extern cvar_t *allow_download;
extern cvar_t *allow_download_maps;
extern cvar_t *allow_download_players;
extern cvar_t *allow_download_models;
extern cvar_t *allow_download_sounds;
extern FILE *log_stats_file; extern FILE *log_stats_file;
// host_speeds times // host_speeds times