mirror of
https://github.com/ZDoom/gzdoom-last-svn.git
synced 2025-05-31 17:31:09 +00:00
Update to ZDoom r1433:
- Fixed: Untranslated colors in fonts had an alpha value of 0 but need 255. - Fixed: The Doom status bar's ammo display may not use the INDEXFONT for the alternative HUD. Instead it has to create a separate one out of the STYSNUM characters. - Fixed: skins can not be sorted for binary search because the player class code depends on the original indices. - Fixed: P_StartConversation set the global dialog node variable for all players, not just the consoleplayer. - Fixed: AWeapon::PickupForAmmo assumed that any weapon having a secondary ammo type also has a primary one. - Bumped netgame, demo and min demo version for the weapon slot changes. - changed weapon slots to be stored per player. Information is now transmitted across the network so that all machines know each player's current weapon configuration so that it can be used by cheats or HUD display routines. - fixed: level_info_t::mapbg was not initialized - Fixed: Player names and chat macros that end with incomplete \c escapes now have those escapes stripped before printing so that they do not merge with subsequent text. - Fixed: The CHARFORMAT structure that is used to set the color in a Windows Rich Edit control was not fully initialized resulting in incorrect colors being set. - Moved default weapon slot assignments into the player classes. Weapon.SlotNumber is now used solely for mods that want to add new weapons without completely redoing the player's arsenal. Restored some config-based weapon slot customization, though slots are no longer automatically saved to the config and section names have changed slightly. However, unlike before, config slots are now the definitive word on slot assignments and cannot be overridden by any other files loaded. git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@302 b0f79afe-0144-0410-b225-9a4edf0717df
This commit is contained in:
parent
cacebde16e
commit
64a48e1f4e
49 changed files with 1179 additions and 546 deletions
|
@ -1,3 +1,41 @@
|
||||||
|
February 21, 2009 (Changes by Graf Zahl)
|
||||||
|
- Fixed: Untranslated colors in fonts had an alpha value of 0 but need 255.
|
||||||
|
- Fixed: The Doom status bar's ammo display may not use the INDEXFONT for
|
||||||
|
the alternative HUD. Instead it has to create a separate one out of the
|
||||||
|
STYSNUM characters.
|
||||||
|
- Fixed: skins can not be sorted for binary search because the player class
|
||||||
|
code depends on the original indices.
|
||||||
|
- Fixed: P_StartConversation set the global dialog node variable for all
|
||||||
|
players, not just the consoleplayer.
|
||||||
|
- Fixed: AWeapon::PickupForAmmo assumed that any weapon having a secondary
|
||||||
|
ammo type also has a primary one.
|
||||||
|
|
||||||
|
February 20, 2009 (Changes by Graf Zahl)
|
||||||
|
- Bumped netgame, demo and min demo version for the weapon slot changes.
|
||||||
|
- changed weapon slots to be stored per player. Information is now transmitted
|
||||||
|
across the network so that all machines know each player's current weapon
|
||||||
|
configuration so that it can be used by cheats or HUD display routines.
|
||||||
|
- fixed: level_info_t::mapbg was not initialized
|
||||||
|
|
||||||
|
February 17, 2009
|
||||||
|
- Fixed: Player names and chat macros that end with incomplete \c escapes now
|
||||||
|
have those escapes stripped before printing so that they do not merge with
|
||||||
|
subsequent text.
|
||||||
|
|
||||||
|
February 15, 2009 (Changes by Graf Zahl)
|
||||||
|
- Fixed: The CHARFORMAT structure that is used to set the color in a Windows
|
||||||
|
Rich Edit control was not fully initialized resulting in incorrect colors
|
||||||
|
being set.
|
||||||
|
|
||||||
|
Feburary 14, 2009
|
||||||
|
- Moved default weapon slot assignments into the player classes.
|
||||||
|
Weapon.SlotNumber is now used solely for mods that want to add new weapons
|
||||||
|
without completely redoing the player's arsenal. Restored some config-based
|
||||||
|
weapon slot customization, though slots are no longer automatically saved
|
||||||
|
to the config and section names have changed slightly. However, unlike
|
||||||
|
before, config slots are now the definitive word on slot assignments and
|
||||||
|
cannot be overridden by any other files loaded.
|
||||||
|
|
||||||
February 14, 2009 (Changes by Graf Zahl)
|
February 14, 2009 (Changes by Graf Zahl)
|
||||||
- Added MF5_CANTSEEK flag to prevent seeker missiles from homing in on
|
- Added MF5_CANTSEEK flag to prevent seeker missiles from homing in on
|
||||||
certain actors and added an option to APowerInvisibility to set this
|
certain actors and added an option to APowerInvisibility to set this
|
||||||
|
@ -17,7 +55,16 @@ February 14, 2009 (Changes by Graf Zahl)
|
||||||
- Fixed: The MAPINFO parser ignored missing terminating braces of the last
|
- Fixed: The MAPINFO parser ignored missing terminating braces of the last
|
||||||
block in the file.
|
block in the file.
|
||||||
|
|
||||||
|
February 11, 2009
|
||||||
|
- Fixed: Several weapons were missing a game filter from their definitions.
|
||||||
|
- Removed storage of weapon slots in the config so that weapon slots can
|
||||||
|
be setup in the weapons themselves. Slots are still configurable, since
|
||||||
|
they need to be for KEYCONF to work; any changes simply won't be saved
|
||||||
|
when you quit.
|
||||||
|
- Removed limit on weapon slot sizes.
|
||||||
|
|
||||||
February 10, 2009
|
February 10, 2009
|
||||||
|
- Fixed: DirectInput8Create() used the wrong calling convention.
|
||||||
- Moved the V_InitFontColors() call earlier in the startup sequence so that
|
- Moved the V_InitFontColors() call earlier in the startup sequence so that
|
||||||
colored error messages appear colored in the startup window. Also lightened
|
colored error messages appear colored in the startup window. Also lightened
|
||||||
up the "Flat" red to contrast better on the startup background.
|
up the "Flat" red to contrast better on the startup background.
|
||||||
|
@ -31,6 +78,8 @@ February 9, 2009
|
||||||
- Added middle mouse button selection pasting for X systems.
|
- Added middle mouse button selection pasting for X systems.
|
||||||
|
|
||||||
February 8, 2009 (Changes by Graf Zahl)
|
February 8, 2009 (Changes by Graf Zahl)
|
||||||
|
- Fixed parsing of 'cluster' keyword when format is not yet known.
|
||||||
|
- Moved CheckCompatibility call so that it is done after setting LEVEL_HEXENFORMAT.
|
||||||
- Fixed parsing for MustConfirm key in skill parser.
|
- Fixed parsing for MustConfirm key in skill parser.
|
||||||
- Converted internal MAPINFOs to new syntax.
|
- Converted internal MAPINFOs to new syntax.
|
||||||
- Added a range parameter to SNDINFO's $limit.
|
- Added a range parameter to SNDINFO's $limit.
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
#include "doomtype.h"
|
#include "doomtype.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
|
#include "v_text.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -590,6 +592,35 @@ FString strbin1 (const char *start)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// CleanseString
|
||||||
|
//
|
||||||
|
// Does some mild sanity checking on a string: If it ends with an incomplete
|
||||||
|
// color escape, the escape is removed.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
void CleanseString(char *str)
|
||||||
|
{
|
||||||
|
char *escape = strrchr(str, TEXTCOLOR_ESCAPE);
|
||||||
|
if (escape != NULL)
|
||||||
|
{
|
||||||
|
if (escape[1] == '\0')
|
||||||
|
{
|
||||||
|
*escape = '\0';
|
||||||
|
}
|
||||||
|
else if (escape[1] == '[')
|
||||||
|
{
|
||||||
|
char *close = strchr(escape + 2, ']');
|
||||||
|
if (close == NULL)
|
||||||
|
{
|
||||||
|
*escape = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// ExpandEnvVars
|
// ExpandEnvVars
|
||||||
|
|
|
@ -53,6 +53,7 @@ const char *myasctime ();
|
||||||
|
|
||||||
int strbin (char *str);
|
int strbin (char *str);
|
||||||
FString strbin1 (const char *start);
|
FString strbin1 (const char *start);
|
||||||
|
void CleanseString (char *str);
|
||||||
|
|
||||||
void CreatePath(const char * fn);
|
void CreatePath(const char * fn);
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,8 @@ bool FConfigFile::SetSection (const char *name, bool allowCreate)
|
||||||
//
|
//
|
||||||
// FConfigFile :: SetFirstSection
|
// FConfigFile :: SetFirstSection
|
||||||
//
|
//
|
||||||
// Sets the current section to the first one in the file.
|
// Sets the current section to the first one in the file. Returns
|
||||||
|
// false if there are no sections.
|
||||||
//
|
//
|
||||||
//====================================================================
|
//====================================================================
|
||||||
|
|
||||||
|
@ -270,7 +271,8 @@ bool FConfigFile::SetFirstSection ()
|
||||||
//
|
//
|
||||||
// FConfigFile :: SetNextSection
|
// FConfigFile :: SetNextSection
|
||||||
//
|
//
|
||||||
// Advances the current section to the next one in the file.
|
// Advances the current section to the next one in the file. Returns
|
||||||
|
// false if there are no more sections.
|
||||||
//
|
//
|
||||||
//====================================================================
|
//====================================================================
|
||||||
|
|
||||||
|
@ -332,6 +334,43 @@ void FConfigFile::ClearCurrentSection ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//====================================================================
|
||||||
|
//
|
||||||
|
// FConfigFile :: DeleteCurrentSection
|
||||||
|
//
|
||||||
|
// Completely removes the current section. The current section is
|
||||||
|
// advanced to the next section. Returns true if there is still a
|
||||||
|
// current section.
|
||||||
|
//
|
||||||
|
//====================================================================
|
||||||
|
|
||||||
|
bool FConfigFile::DeleteCurrentSection()
|
||||||
|
{
|
||||||
|
if (CurrentSection != NULL)
|
||||||
|
{
|
||||||
|
FConfigSection *sec;
|
||||||
|
|
||||||
|
ClearCurrentSection();
|
||||||
|
|
||||||
|
// Find the preceding section.
|
||||||
|
for (sec = Sections; sec != NULL && sec->Next != CurrentSection; sec = sec->Next)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
sec->Next = CurrentSection->Next;
|
||||||
|
if (LastSectionPtr == &CurrentSection->Next)
|
||||||
|
{
|
||||||
|
LastSectionPtr = &sec->Next;
|
||||||
|
}
|
||||||
|
|
||||||
|
CurrentSection->~FConfigSection();
|
||||||
|
delete[] (char *)CurrentSection;
|
||||||
|
|
||||||
|
CurrentSection = sec->Next;
|
||||||
|
return CurrentSection != NULL;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//====================================================================
|
//====================================================================
|
||||||
//
|
//
|
||||||
// FConfigFile :: ClearKey
|
// FConfigFile :: ClearKey
|
||||||
|
|
|
@ -59,6 +59,7 @@ public:
|
||||||
bool SetNextSection ();
|
bool SetNextSection ();
|
||||||
const char *GetCurrentSection () const;
|
const char *GetCurrentSection () const;
|
||||||
void ClearCurrentSection ();
|
void ClearCurrentSection ();
|
||||||
|
bool DeleteCurrentSection ();
|
||||||
void ClearKey (const char *key);
|
void ClearKey (const char *key);
|
||||||
|
|
||||||
bool SectionIsEmpty ();
|
bool SectionIsEmpty ();
|
||||||
|
|
|
@ -2525,9 +2525,6 @@ void D_DoomMain (void)
|
||||||
|
|
||||||
FActorInfo::StaticInit ();
|
FActorInfo::StaticInit ();
|
||||||
|
|
||||||
// Now that all actors have been defined we can finally set up the weapon slots
|
|
||||||
GameConfig->DoWeaponSetup (GameNames[gameinfo.gametype]);
|
|
||||||
|
|
||||||
// [GRB] Initialize player class list
|
// [GRB] Initialize player class list
|
||||||
SetupPlayerClasses ();
|
SetupPlayerClasses ();
|
||||||
|
|
||||||
|
|
|
@ -1963,15 +1963,16 @@ void Net_DoCommand (int type, BYTE **stream, int player)
|
||||||
BYTE who = ReadByte (stream);
|
BYTE who = ReadByte (stream);
|
||||||
|
|
||||||
s = ReadString (stream);
|
s = ReadString (stream);
|
||||||
|
CleanseString (s);
|
||||||
if (((who & 1) == 0) || players[player].userinfo.team == TEAM_NONE)
|
if (((who & 1) == 0) || players[player].userinfo.team == TEAM_NONE)
|
||||||
{ // Said to everyone
|
{ // Said to everyone
|
||||||
if (who & 2)
|
if (who & 2)
|
||||||
{
|
{
|
||||||
Printf (PRINT_CHAT, TEXTCOLOR_BOLD "* %s%s\n", name, s);
|
Printf (PRINT_CHAT, TEXTCOLOR_BOLD "* %s" TEXTCOLOR_BOLD "%s" TEXTCOLOR_BOLD "\n", name, s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Printf (PRINT_CHAT, "%s: %s\n", name, s);
|
Printf (PRINT_CHAT, "%s" TEXTCOLOR_CHAT ": %s" TEXTCOLOR_CHAT "\n", name, s);
|
||||||
}
|
}
|
||||||
S_Sound (CHAN_VOICE | CHAN_UI, gameinfo.chatSound, 1, ATTN_NONE);
|
S_Sound (CHAN_VOICE | CHAN_UI, gameinfo.chatSound, 1, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
@ -1979,11 +1980,11 @@ void Net_DoCommand (int type, BYTE **stream, int player)
|
||||||
{ // Said only to members of the player's team
|
{ // Said only to members of the player's team
|
||||||
if (who & 2)
|
if (who & 2)
|
||||||
{
|
{
|
||||||
Printf (PRINT_TEAMCHAT, TEXTCOLOR_BOLD "* (%s)%s\n", name, s);
|
Printf (PRINT_TEAMCHAT, TEXTCOLOR_BOLD "* (%s" TEXTCOLOR_BOLD ")%s" TEXTCOLOR_BOLD "\n", name, s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Printf (PRINT_TEAMCHAT, "(%s): %s\n", name, s);
|
Printf (PRINT_TEAMCHAT, "(%s" TEXTCOLOR_TEAMCHAT "): %s" TEXTCOLOR_TEAMCHAT "\n", name, s);
|
||||||
}
|
}
|
||||||
S_Sound (CHAN_VOICE | CHAN_UI, gameinfo.chatSound, 1, ATTN_NONE);
|
S_Sound (CHAN_VOICE | CHAN_UI, gameinfo.chatSound, 1, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
@ -2377,6 +2378,40 @@ void Net_DoCommand (int type, BYTE **stream, int player)
|
||||||
P_ConversationCommand (player, stream);
|
P_ConversationCommand (player, stream);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DEM_SETSLOT:
|
||||||
|
{
|
||||||
|
BYTE playernum = ReadByte(stream);
|
||||||
|
BYTE slot = ReadByte(stream);
|
||||||
|
BYTE count = ReadByte(stream);
|
||||||
|
TArray<const char *> weapons;
|
||||||
|
|
||||||
|
weapons.Resize(count);
|
||||||
|
for(int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
weapons[i] = ReadStringConst(stream);
|
||||||
|
}
|
||||||
|
players[playernum].weapons.SetSlot(slot, weapons);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEM_ADDSLOT:
|
||||||
|
{
|
||||||
|
BYTE playernum = ReadByte(stream);
|
||||||
|
BYTE slot = ReadByte(stream);
|
||||||
|
const char *weap = ReadStringConst(stream);
|
||||||
|
players[playernum].weapons.AddSlot(slot, weap);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEM_ADDSLOTDEFAULT:
|
||||||
|
{
|
||||||
|
BYTE playernum = ReadByte(stream);
|
||||||
|
BYTE slot = ReadByte(stream);
|
||||||
|
const char *weap = ReadStringConst(stream);
|
||||||
|
players[playernum].weapons.AddSlotDefault(slot, weap);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
I_Error ("Unknown net command: %d", type);
|
I_Error ("Unknown net command: %d", type);
|
||||||
break;
|
break;
|
||||||
|
@ -2495,6 +2530,22 @@ void Net_SkipCommand (int type, BYTE **stream)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DEM_SETSLOT:
|
||||||
|
{
|
||||||
|
skip = 3;
|
||||||
|
for(int numweapons = *(*stream + 2); numweapons > 0; numweapons--)
|
||||||
|
{
|
||||||
|
skip += strlen ((char *)(*stream + skip)) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEM_ADDSLOT:
|
||||||
|
case DEM_ADDSLOTDEFAULT:
|
||||||
|
skip = strlen ((char *)(*stream + 2)) + 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
#include "teaminfo.h"
|
#include "teaminfo.h"
|
||||||
#include "r_translate.h"
|
#include "r_translate.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
|
#include "cmdlib.h"
|
||||||
|
|
||||||
static FRandom pr_pickteam ("PickRandomTeam");
|
static FRandom pr_pickteam ("PickRandomTeam");
|
||||||
|
|
||||||
|
@ -698,10 +699,10 @@ void D_ReadUserInfoStrings (int i, BYTE **stream, bool update)
|
||||||
{
|
{
|
||||||
char oldname[MAXPLAYERNAME+1];
|
char oldname[MAXPLAYERNAME+1];
|
||||||
|
|
||||||
strncpy (oldname, info->netname, MAXPLAYERNAME);
|
strcpy (oldname, info->netname);
|
||||||
oldname[MAXPLAYERNAME] = 0;
|
|
||||||
strncpy (info->netname, value, MAXPLAYERNAME);
|
strncpy (info->netname, value, MAXPLAYERNAME);
|
||||||
info->netname[MAXPLAYERNAME] = 0;
|
info->netname[MAXPLAYERNAME] = 0;
|
||||||
|
CleanseString(info->netname);
|
||||||
|
|
||||||
if (update && strcmp (oldname, info->netname) != 0)
|
if (update && strcmp (oldname, info->netname) != 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,6 +61,16 @@ enum
|
||||||
APMETA_Hexenarmor2,
|
APMETA_Hexenarmor2,
|
||||||
APMETA_Hexenarmor3,
|
APMETA_Hexenarmor3,
|
||||||
APMETA_Hexenarmor4,
|
APMETA_Hexenarmor4,
|
||||||
|
APMETA_Slot0,
|
||||||
|
APMETA_Slot1,
|
||||||
|
APMETA_Slot2,
|
||||||
|
APMETA_Slot3,
|
||||||
|
APMETA_Slot4,
|
||||||
|
APMETA_Slot5,
|
||||||
|
APMETA_Slot6,
|
||||||
|
APMETA_Slot7,
|
||||||
|
APMETA_Slot8,
|
||||||
|
APMETA_Slot9,
|
||||||
};
|
};
|
||||||
|
|
||||||
class player_t;
|
class player_t;
|
||||||
|
@ -354,6 +364,8 @@ public:
|
||||||
fixed_t crouchoffset;
|
fixed_t crouchoffset;
|
||||||
fixed_t crouchviewdelta;
|
fixed_t crouchviewdelta;
|
||||||
|
|
||||||
|
FWeaponSlots weapons;
|
||||||
|
|
||||||
// [CW] I moved these here for multiplayer conversation support.
|
// [CW] I moved these here for multiplayer conversation support.
|
||||||
TObjPtr<AActor> ConversationNPC, ConversationPC;
|
TObjPtr<AActor> ConversationNPC, ConversationPC;
|
||||||
angle_t ConversationNPCAngle;
|
angle_t ConversationNPCAngle;
|
||||||
|
|
|
@ -49,6 +49,13 @@ char *ReadString (BYTE **stream)
|
||||||
return copystring (string);
|
return copystring (string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *ReadStringConst(BYTE **stream)
|
||||||
|
{
|
||||||
|
const char *string = *((const char **)stream);
|
||||||
|
*stream += strlen (string) + 1;
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
int ReadByte (BYTE **stream)
|
int ReadByte (BYTE **stream)
|
||||||
{
|
{
|
||||||
BYTE v = **stream;
|
BYTE v = **stream;
|
||||||
|
|
|
@ -151,6 +151,9 @@ enum EDemoCommand
|
||||||
DEM_SUMMON2, // 52 String: Thing to fabricate, WORD: angle offset
|
DEM_SUMMON2, // 52 String: Thing to fabricate, WORD: angle offset
|
||||||
DEM_SUMMONFRIEND2, // 53
|
DEM_SUMMONFRIEND2, // 53
|
||||||
DEM_SUMMONFOE2, // 54
|
DEM_SUMMONFOE2, // 54
|
||||||
|
DEM_ADDSLOTDEFAULT, // 55
|
||||||
|
DEM_ADDSLOT, // 56
|
||||||
|
DEM_SETSLOT, // 57
|
||||||
};
|
};
|
||||||
|
|
||||||
// The following are implemented by cht_DoCheat in m_cheat.cpp
|
// The following are implemented by cht_DoCheat in m_cheat.cpp
|
||||||
|
@ -226,6 +229,7 @@ int ReadWord (BYTE **stream);
|
||||||
int ReadLong (BYTE **stream);
|
int ReadLong (BYTE **stream);
|
||||||
float ReadFloat (BYTE **stream);
|
float ReadFloat (BYTE **stream);
|
||||||
char *ReadString (BYTE **stream);
|
char *ReadString (BYTE **stream);
|
||||||
|
const char *ReadStringConst(BYTE **stream);
|
||||||
void WriteByte (BYTE val, BYTE **stream);
|
void WriteByte (BYTE val, BYTE **stream);
|
||||||
void WriteWord (short val, BYTE **stream);
|
void WriteWord (short val, BYTE **stream);
|
||||||
void WriteLong (int val, BYTE **stream);
|
void WriteLong (int val, BYTE **stream);
|
||||||
|
|
|
@ -264,7 +264,7 @@ CCMD (slot)
|
||||||
|
|
||||||
if (slot < NUM_WEAPON_SLOTS)
|
if (slot < NUM_WEAPON_SLOTS)
|
||||||
{
|
{
|
||||||
SendItemUse = LocalWeapons.Slots[slot].PickWeapon (&players[consoleplayer]);
|
SendItemUse = players[consoleplayer].weapons.Slots[slot].PickWeapon (&players[consoleplayer]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -296,12 +296,12 @@ CCMD (turn180)
|
||||||
|
|
||||||
CCMD (weapnext)
|
CCMD (weapnext)
|
||||||
{
|
{
|
||||||
SendItemUse = PickNextWeapon (&players[consoleplayer]);
|
SendItemUse = players[consoleplayer].weapons.PickNextWeapon (&players[consoleplayer]);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD (weapprev)
|
CCMD (weapprev)
|
||||||
{
|
{
|
||||||
SendItemUse = PickPrevWeapon (&players[consoleplayer]);
|
SendItemUse = players[consoleplayer].weapons.PickPrevWeapon (&players[consoleplayer]);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD (invnext)
|
CCMD (invnext)
|
||||||
|
|
|
@ -217,6 +217,7 @@ void P_RemoveDefereds (void)
|
||||||
void level_info_t::Reset()
|
void level_info_t::Reset()
|
||||||
{
|
{
|
||||||
mapname[0] = 0;
|
mapname[0] = 0;
|
||||||
|
mapbg[0] = 0;
|
||||||
levelnum = 0;
|
levelnum = 0;
|
||||||
pname[0] = 0;
|
pname[0] = 0;
|
||||||
nextmap[0] = 0;
|
nextmap[0] = 0;
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
#define MAX_MANA 200
|
#define MAX_MANA 200
|
||||||
|
|
||||||
#define MAX_WEAPONS_PER_SLOT 8
|
|
||||||
#define NUM_WEAPON_SLOTS 10
|
#define NUM_WEAPON_SLOTS 10
|
||||||
|
|
||||||
class player_t;
|
class player_t;
|
||||||
|
@ -17,30 +16,39 @@ class AWeapon;
|
||||||
class FWeaponSlot
|
class FWeaponSlot
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FWeaponSlot ();
|
FWeaponSlot &operator= (const FWeaponSlot &other) { Weapons = other.Weapons; return *this; }
|
||||||
void Clear ();
|
void Clear() { Weapons.Clear(); }
|
||||||
bool AddWeapon (const char *type);
|
bool AddWeapon (const char *type);
|
||||||
bool AddWeapon (const PClass *type);
|
bool AddWeapon (const PClass *type);
|
||||||
|
void AddWeaponList (const char *list, bool clear);
|
||||||
AWeapon *PickWeapon (player_t *player);
|
AWeapon *PickWeapon (player_t *player);
|
||||||
int CountWeapons ();
|
int Size () { return (int)Weapons.Size(); }
|
||||||
|
int LocateWeapon (const PClass *type);
|
||||||
|
|
||||||
inline const PClass *GetWeapon (int index) const
|
inline const PClass *GetWeapon (int index) const
|
||||||
{
|
{
|
||||||
return Weapons[index];
|
if ((unsigned)index < Weapons.Size())
|
||||||
|
{
|
||||||
|
return Weapons[index].Type;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
friend AWeapon *PickNextWeapon (player_t *player);
|
|
||||||
friend AWeapon *PickPrevWeapon (player_t *player);
|
|
||||||
|
|
||||||
friend struct FWeaponSlots;
|
friend struct FWeaponSlots;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const PClass *Weapons[MAX_WEAPONS_PER_SLOT];
|
struct WeaponInfo
|
||||||
|
{
|
||||||
|
const PClass *Type;
|
||||||
|
fixed_t Position;
|
||||||
|
};
|
||||||
|
void SetInitialPositions();
|
||||||
|
void Sort();
|
||||||
|
TArray<WeaponInfo> Weapons;
|
||||||
};
|
};
|
||||||
|
|
||||||
AWeapon *PickNextWeapon (player_t *player);
|
|
||||||
AWeapon *PickPrevWeapon (player_t *player);
|
|
||||||
|
|
||||||
// FWeaponSlots::AddDefaultWeapon return codes
|
// FWeaponSlots::AddDefaultWeapon return codes
|
||||||
enum ESlotDef
|
enum ESlotDef
|
||||||
{
|
{
|
||||||
|
@ -53,14 +61,26 @@ struct FWeaponSlots
|
||||||
{
|
{
|
||||||
FWeaponSlot Slots[NUM_WEAPON_SLOTS];
|
FWeaponSlot Slots[NUM_WEAPON_SLOTS];
|
||||||
|
|
||||||
|
AWeapon *PickNextWeapon (player_t *player);
|
||||||
|
AWeapon *PickPrevWeapon (player_t *player);
|
||||||
|
|
||||||
void Clear ();
|
void Clear ();
|
||||||
bool LocateWeapon (const PClass *type, int *const slot, int *const index);
|
bool LocateWeapon (const PClass *type, int *const slot, int *const index);
|
||||||
ESlotDef AddDefaultWeapon (int slot, const PClass *type);
|
ESlotDef AddDefaultWeapon (int slot, const PClass *type);
|
||||||
int RestoreSlots (FConfigFile &config);
|
void AddExtraWeapons();
|
||||||
void SaveSlots (FConfigFile &config);
|
void SetFromPlayer(const PClass *type);
|
||||||
|
void CompleteSetup(const PClass *type);
|
||||||
|
int RestoreSlots (FConfigFile *config, const char *section);
|
||||||
|
void PrintSettings();
|
||||||
|
|
||||||
|
void SetSlot(int slot, TArray<const char *> argv);
|
||||||
|
void AddSlot(int slot, const char *name);
|
||||||
|
void AddSlotDefault(int slot, const char *name);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern FWeaponSlots LocalWeapons;
|
void P_PlaybackKeyConfWeapons();
|
||||||
|
void P_CompleteWeaponSetup(int playernum, const PClass *type);
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
/* Class definitions */
|
/* Class definitions */
|
||||||
|
@ -202,6 +222,13 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
// A weapon is just that.
|
// A weapon is just that.
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
AWMETA_BASE = 0x72000,
|
||||||
|
AWMETA_SlotNumber,
|
||||||
|
AWMETA_SlotPriority,
|
||||||
|
};
|
||||||
|
|
||||||
class AWeapon : public AInventory
|
class AWeapon : public AInventory
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (AWeapon, AInventory)
|
DECLARE_CLASS (AWeapon, AInventory)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -414,9 +414,9 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a
|
||||||
if((cmd.flags & DRAWIMAGE_WEAPONSLOT)) //weaponslots
|
if((cmd.flags & DRAWIMAGE_WEAPONSLOT)) //weaponslots
|
||||||
{
|
{
|
||||||
drawAlt = 1; //draw off state until we know we have something.
|
drawAlt = 1; //draw off state until we know we have something.
|
||||||
for (int i = 0; i < MAX_WEAPONS_PER_SLOT; i++)
|
for (int i = 0; i < CPlayer->weapons.Slots[cmd.value].Size(); i++)
|
||||||
{
|
{
|
||||||
const PClass *weap = LocalWeapons.Slots[cmd.value].GetWeapon(i);
|
const PClass *weap = CPlayer->weapons.Slots[cmd.value].GetWeapon(i);
|
||||||
if(weap == NULL)
|
if(weap == NULL)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -491,14 +491,14 @@ static void AddAmmoToList(AWeapon * weapdef)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int DrawAmmo(player_t * CPlayer, int x, int y)
|
static int DrawAmmo(player_t *CPlayer, int x, int y)
|
||||||
{
|
{
|
||||||
|
|
||||||
int i,j,k;
|
int i,j,k;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
AInventory * inv;
|
AInventory *inv;
|
||||||
|
|
||||||
AWeapon * wi=CPlayer->ReadyWeapon;
|
AWeapon *wi=CPlayer->ReadyWeapon;
|
||||||
|
|
||||||
orderedammos.Clear();
|
orderedammos.Clear();
|
||||||
|
|
||||||
|
@ -506,9 +506,9 @@ static int DrawAmmo(player_t * CPlayer, int x, int y)
|
||||||
// Do not check for actual presence in the inventory!
|
// Do not check for actual presence in the inventory!
|
||||||
// We want to show all ammo types that can be used by
|
// We want to show all ammo types that can be used by
|
||||||
// the weapons in the weapon slots.
|
// the weapons in the weapon slots.
|
||||||
for (k=0;k<NUM_WEAPON_SLOTS;k++) for(j=0;j<MAX_WEAPONS_PER_SLOT;j++)
|
for (k = 0; k < NUM_WEAPON_SLOTS; k++) for(j = 0; j < CPlayer->weapons.Slots[k].Size(); j++)
|
||||||
{
|
{
|
||||||
const PClass * weap = LocalWeapons.Slots[k].GetWeapon(j);
|
const PClass *weap = CPlayer->weapons.Slots[k].GetWeapon(j);
|
||||||
|
|
||||||
if (weap) AddAmmoToList((AWeapon*)GetDefaultByType(weap));
|
if (weap) AddAmmoToList((AWeapon*)GetDefaultByType(weap));
|
||||||
}
|
}
|
||||||
|
@ -628,17 +628,17 @@ static void DrawWeapons(player_t * CPlayer, int x, int y)
|
||||||
// First draw all weapons in the inventory that are not assigned to a weapon slot
|
// First draw all weapons in the inventory that are not assigned to a weapon slot
|
||||||
for(inv=CPlayer->mo->Inventory;inv;inv=inv->Inventory)
|
for(inv=CPlayer->mo->Inventory;inv;inv=inv->Inventory)
|
||||||
{
|
{
|
||||||
int slot, index;
|
if (inv->IsKindOf(RUNTIME_CLASS(AWeapon)) &&
|
||||||
if (inv->IsKindOf(RUNTIME_CLASS(AWeapon)) && !LocalWeapons.LocateWeapon(RUNTIME_TYPE(inv), &slot, &index))
|
!CPlayer->weapons.LocateWeapon(RUNTIME_TYPE(inv), NULL, NULL))
|
||||||
{
|
{
|
||||||
DrawOneWeapon(CPlayer, x, y, static_cast<AWeapon*>(inv));
|
DrawOneWeapon(CPlayer, x, y, static_cast<AWeapon*>(inv));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// And now everything in the weapon slots back to front
|
// And now everything in the weapon slots back to front
|
||||||
for (k=NUM_WEAPON_SLOTS-1;k>=0;k--) for(j=MAX_WEAPONS_PER_SLOT-1;j>=0;j--)
|
for (k = NUM_WEAPON_SLOTS - 1; k >= 0; k--) for(j = CPlayer->weapons.Slots[k].Size() - 1; j >= 0; j--)
|
||||||
{
|
{
|
||||||
const PClass * weap = LocalWeapons.Slots[k].GetWeapon(j);
|
const PClass *weap = CPlayer->weapons.Slots[k].GetWeapon(j);
|
||||||
if (weap)
|
if (weap)
|
||||||
{
|
{
|
||||||
inv=CPlayer->mo->FindInventory(weap);
|
inv=CPlayer->mo->FindInventory(weap);
|
||||||
|
|
|
@ -73,8 +73,6 @@ EXTERN_CVAR (Color, am_cdwallcolor)
|
||||||
EXTERN_CVAR (Float, spc_amp)
|
EXTERN_CVAR (Float, spc_amp)
|
||||||
EXTERN_CVAR (Bool, wi_percents)
|
EXTERN_CVAR (Bool, wi_percents)
|
||||||
|
|
||||||
FString WeaponSection;
|
|
||||||
|
|
||||||
FGameConfigFile::FGameConfigFile ()
|
FGameConfigFile::FGameConfigFile ()
|
||||||
{
|
{
|
||||||
FString pathname;
|
FString pathname;
|
||||||
|
@ -222,16 +220,6 @@ void FGameConfigFile::DoGlobalSetup ()
|
||||||
noblitter->ResetToDefault ();
|
noblitter->ResetToDefault ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (last < 201)
|
|
||||||
{
|
|
||||||
// Be sure the Hexen fourth weapons are assigned to slot 4
|
|
||||||
// If this section does not already exist, then they will be
|
|
||||||
// assigned by SetupWeaponList().
|
|
||||||
if (SetSection ("Hexen.WeaponSlots"))
|
|
||||||
{
|
|
||||||
SetValueForKey ("Slot[4]", "FWeapQuietus CWeapWraithverge MWeapBloodscourge");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (last < 202)
|
if (last < 202)
|
||||||
{
|
{
|
||||||
// Make sure the Hexen hotkeys are accessible by default.
|
// Make sure the Hexen hotkeys are accessible by default.
|
||||||
|
@ -271,6 +259,28 @@ void FGameConfigFile::DoGlobalSetup ()
|
||||||
precache->ResetToDefault();
|
precache->ResetToDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (last < 208)
|
||||||
|
{ // Weapon sections are no longer used, so tidy up the config by deleting them.
|
||||||
|
const char *name;
|
||||||
|
size_t namelen;
|
||||||
|
bool more;
|
||||||
|
|
||||||
|
more = SetFirstSection();
|
||||||
|
while (more)
|
||||||
|
{
|
||||||
|
name = GetCurrentSection();
|
||||||
|
if (name != NULL &&
|
||||||
|
(namelen = strlen(name)) > 12 &&
|
||||||
|
strcmp(name + namelen - 12, ".WeaponSlots") == 0)
|
||||||
|
{
|
||||||
|
more = DeleteCurrentSection();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
more = SetNextSection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -376,17 +386,6 @@ void FGameConfigFile::DoGameSetup (const char *gamename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Separated from DoGameSetup because it needs all the weapons properly defined
|
|
||||||
void FGameConfigFile::DoWeaponSetup (const char *gamename)
|
|
||||||
{
|
|
||||||
strncpy (subsection, "WeaponSlots", sublen);
|
|
||||||
|
|
||||||
if (!SetSection (section) || !LocalWeapons.RestoreSlots (*this))
|
|
||||||
{
|
|
||||||
SetupWeaponList (gamename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGameConfigFile::ReadNetVars ()
|
void FGameConfigFile::ReadNetVars ()
|
||||||
{
|
{
|
||||||
strncpy (subsection, "NetServerInfo", sublen);
|
strncpy (subsection, "NetServerInfo", sublen);
|
||||||
|
@ -460,18 +459,6 @@ void FGameConfigFile::ArchiveGameData (const char *gamename)
|
||||||
strncpy (subsection, "DoubleBindings", sublen);
|
strncpy (subsection, "DoubleBindings", sublen);
|
||||||
SetSection (section, true);
|
SetSection (section, true);
|
||||||
C_ArchiveBindings (this, true);
|
C_ArchiveBindings (this, true);
|
||||||
|
|
||||||
if (WeaponSection.IsEmpty())
|
|
||||||
{
|
|
||||||
strncpy (subsection, "WeaponSlots", sublen);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mysnprintf (subsection, sublen, "%s.WeaponSlots", WeaponSection.GetChars());
|
|
||||||
}
|
|
||||||
SetSection (section, true);
|
|
||||||
ClearCurrentSection ();
|
|
||||||
LocalWeapons.SaveSlots (*this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGameConfigFile::ArchiveGlobalData ()
|
void FGameConfigFile::ArchiveGlobalData ()
|
||||||
|
@ -676,79 +663,6 @@ void FGameConfigFile::SetRavenDefaults (bool isHexen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGameConfigFile::SetupWeaponList (const char *gamename)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < NUM_WEAPON_SLOTS; ++i)
|
|
||||||
{
|
|
||||||
LocalWeapons.Slots[i].Clear ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp (gamename, "Heretic") == 0)
|
|
||||||
{
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("Staff");
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("Gauntlets");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("GoldWand");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("Crossbow");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("Blaster");
|
|
||||||
LocalWeapons.Slots[5].AddWeapon ("SkullRod");
|
|
||||||
LocalWeapons.Slots[6].AddWeapon ("PhoenixRod");
|
|
||||||
LocalWeapons.Slots[7].AddWeapon ("Mace");
|
|
||||||
}
|
|
||||||
else if (strcmp (gamename, "Hexen") == 0)
|
|
||||||
{
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("FWeapFist");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("FWeapAxe");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("FWeapHammer");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("FWeapQuietus");
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("CWeapMace");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("CWeapStaff");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("CWeapFlame");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("CWeapWraithverge");
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("MWeapWand");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("MWeapFrost");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("MWeapLightning");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("MWeapBloodscourge");
|
|
||||||
}
|
|
||||||
else if (strcmp (gamename, "Strife") == 0)
|
|
||||||
{
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("PunchDagger");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("StrifeCrossbow2");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("StrifeCrossbow");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("AssaultGun");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("MiniMissileLauncher");
|
|
||||||
LocalWeapons.Slots[5].AddWeapon ("StrifeGrenadeLauncher2");
|
|
||||||
LocalWeapons.Slots[5].AddWeapon ("StrifeGrenadeLauncher");
|
|
||||||
LocalWeapons.Slots[6].AddWeapon ("FlameThrower");
|
|
||||||
LocalWeapons.Slots[7].AddWeapon ("Mauler2");
|
|
||||||
LocalWeapons.Slots[7].AddWeapon ("Mauler");
|
|
||||||
LocalWeapons.Slots[8].AddWeapon ("Sigil");
|
|
||||||
}
|
|
||||||
else if (strcmp (gamename, "Chex") == 0)
|
|
||||||
{
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("Bootspoon");
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("SuperBootspork");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("MiniZorcher");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("LargeZorcher");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("SuperLargeZorcher");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("RapidZorcher");
|
|
||||||
LocalWeapons.Slots[5].AddWeapon ("ZorchPropulsor");
|
|
||||||
LocalWeapons.Slots[6].AddWeapon ("PhasingZorcher");
|
|
||||||
LocalWeapons.Slots[7].AddWeapon ("LAZDevice");
|
|
||||||
}
|
|
||||||
else // Doom
|
|
||||||
{
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("Fist");
|
|
||||||
LocalWeapons.Slots[1].AddWeapon ("Chainsaw");
|
|
||||||
LocalWeapons.Slots[2].AddWeapon ("Pistol");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("Shotgun");
|
|
||||||
LocalWeapons.Slots[3].AddWeapon ("SuperShotgun");
|
|
||||||
LocalWeapons.Slots[4].AddWeapon ("Chaingun");
|
|
||||||
LocalWeapons.Slots[5].AddWeapon ("RocketLauncher");
|
|
||||||
LocalWeapons.Slots[6].AddWeapon ("PlasmaRifle");
|
|
||||||
LocalWeapons.Slots[7].AddWeapon ("BFG9000");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CCMD (whereisini)
|
CCMD (whereisini)
|
||||||
{
|
{
|
||||||
FString path = GameConfig->GetConfigPath (false);
|
FString path = GameConfig->GetConfigPath (false);
|
||||||
|
|
|
@ -47,7 +47,6 @@ public:
|
||||||
|
|
||||||
void DoGlobalSetup ();
|
void DoGlobalSetup ();
|
||||||
void DoGameSetup (const char *gamename);
|
void DoGameSetup (const char *gamename);
|
||||||
void DoWeaponSetup (const char *gamename);
|
|
||||||
void ArchiveGlobalData ();
|
void ArchiveGlobalData ();
|
||||||
void ArchiveGameData (const char *gamename);
|
void ArchiveGameData (const char *gamename);
|
||||||
void AddAutoexec (DArgs *list, const char *gamename);
|
void AddAutoexec (DArgs *list, const char *gamename);
|
||||||
|
@ -64,7 +63,6 @@ private:
|
||||||
void MigrateOldConfig ();
|
void MigrateOldConfig ();
|
||||||
void SetRavenDefaults (bool isHexen);
|
void SetRavenDefaults (bool isHexen);
|
||||||
void ReadCVars (DWORD flags);
|
void ReadCVars (DWORD flags);
|
||||||
void SetupWeaponList (const char *gamename);
|
|
||||||
|
|
||||||
bool bMigrating;
|
bool bMigrating;
|
||||||
|
|
||||||
|
@ -73,7 +71,6 @@ private:
|
||||||
size_t sublen;
|
size_t sublen;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern FString WeaponSection;
|
|
||||||
extern FGameConfigFile *GameConfig;
|
extern FGameConfigFile *GameConfig;
|
||||||
|
|
||||||
#endif //__GAMECONFIGFILE_H__
|
#endif //__GAMECONFIGFILE_H__
|
||||||
|
|
|
@ -735,14 +735,10 @@ void cht_Give (player_t *player, const char *name, int amount)
|
||||||
|
|
||||||
{
|
{
|
||||||
// Give the weapon only if it belongs to the current game or
|
// Give the weapon only if it belongs to the current game or
|
||||||
// is in a weapon slot. Unfortunately this check only works in
|
// is in a weapon slot.
|
||||||
// singleplayer games because the weapon slots are stored locally.
|
if (type->ActorInfo->GameFilter == GAME_Any ||
|
||||||
// In multiplayer games or demors all weapons must be given because the state of
|
|
||||||
// the weapon slots is not guaranteed to be the same when recording or playing back.
|
|
||||||
if (multiplayer || demorecording || demoplayback ||
|
|
||||||
type->ActorInfo->GameFilter == GAME_Any ||
|
|
||||||
(type->ActorInfo->GameFilter & gameinfo.gametype) ||
|
(type->ActorInfo->GameFilter & gameinfo.gametype) ||
|
||||||
LocalWeapons.LocateWeapon(type, NULL, NULL))
|
player->weapons.LocateWeapon(type, NULL, NULL))
|
||||||
{
|
{
|
||||||
AWeapon *def = (AWeapon*)GetDefaultByType (type);
|
AWeapon *def = (AWeapon*)GetDefaultByType (type);
|
||||||
if (!(def->WeaponFlags & WIF_CHEATNOTWEAPON))
|
if (!(def->WeaponFlags & WIF_CHEATNOTWEAPON))
|
||||||
|
|
|
@ -676,7 +676,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang
|
||||||
pc->player->ConversationPC = pc;
|
pc->player->ConversationPC = pc;
|
||||||
pc->player->ConversationNPC = npc;
|
pc->player->ConversationNPC = npc;
|
||||||
|
|
||||||
CurNode = npc->Conversation;
|
FStrifeDialogueNode *CurNode = npc->Conversation;
|
||||||
|
|
||||||
if (pc->player == &players[consoleplayer])
|
if (pc->player == &players[consoleplayer])
|
||||||
{
|
{
|
||||||
|
@ -717,88 +717,90 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CurNode->SpeakerVoice != 0)
|
// The rest is only done when the conversation is actually displayed.
|
||||||
|
if (pc->player == &players[consoleplayer])
|
||||||
{
|
{
|
||||||
I_SetMusicVolume (dlg_musicvolume);
|
if (CurNode->SpeakerVoice != 0)
|
||||||
S_Sound (npc, CHAN_VOICE|CHAN_NOPAUSE, CurNode->SpeakerVoice, 1, ATTN_NORM);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pc->player != &players[consoleplayer])
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Set up the menu
|
|
||||||
ConversationMenu.PreDraw = DrawConversationMenu;
|
|
||||||
ConversationMenu.EscapeHandler = ConversationMenuEscaped;
|
|
||||||
|
|
||||||
// Format the speaker's message.
|
|
||||||
toSay = CurNode->Dialogue;
|
|
||||||
if (strncmp (toSay, "RANDOM_", 7) == 0)
|
|
||||||
{
|
|
||||||
FString dlgtext;
|
|
||||||
|
|
||||||
dlgtext.Format("TXT_%s_%02d", toSay, 1+(pr_randomspeech() % NUM_RANDOM_LINES));
|
|
||||||
toSay = GStrings[dlgtext.GetChars()];
|
|
||||||
if (toSay==NULL) toSay = "Go away!"; // Ok, it's lame - but it doesn't look like an error to the player. ;)
|
|
||||||
}
|
|
||||||
DialogueLines = V_BreakLines (SmallFont, screen->GetWidth()/CleanXfac-24*2, toSay);
|
|
||||||
|
|
||||||
// Fill out the possible choices
|
|
||||||
ShowGold = false;
|
|
||||||
item.type = numberedmore;
|
|
||||||
item.e.mfunc = PickConversationReply;
|
|
||||||
for (reply = CurNode->Children, i = 1; reply != NULL; reply = reply->Next)
|
|
||||||
{
|
|
||||||
if (reply->Reply == NULL)
|
|
||||||
{
|
{
|
||||||
continue;
|
I_SetMusicVolume (dlg_musicvolume);
|
||||||
|
S_Sound (npc, CHAN_VOICE|CHAN_NOPAUSE, CurNode->SpeakerVoice, 1, ATTN_NORM);
|
||||||
}
|
}
|
||||||
ShowGold |= reply->NeedsGold;
|
|
||||||
reply->ReplyLines = V_BreakLines (SmallFont, 320-50-10, reply->Reply);
|
// Set up the menu
|
||||||
for (j = 0; reply->ReplyLines[j].Width >= 0; ++j)
|
::CurNode = CurNode; // only set the global variaböle for the consoleplayer
|
||||||
|
ConversationMenu.PreDraw = DrawConversationMenu;
|
||||||
|
ConversationMenu.EscapeHandler = ConversationMenuEscaped;
|
||||||
|
|
||||||
|
// Format the speaker's message.
|
||||||
|
toSay = CurNode->Dialogue;
|
||||||
|
if (strncmp (toSay, "RANDOM_", 7) == 0)
|
||||||
{
|
{
|
||||||
item.label = reply->ReplyLines[j].Text.LockBuffer();
|
FString dlgtext;
|
||||||
item.b.position = j == 0 ? i : 0;
|
|
||||||
item.c.extra = reply;
|
dlgtext.Format("TXT_%s_%02d", toSay, 1+(pr_randomspeech() % NUM_RANDOM_LINES));
|
||||||
ConversationItems.Push (item);
|
toSay = GStrings[dlgtext.GetChars()];
|
||||||
|
if (toSay==NULL) toSay = "Go away!"; // Ok, it's lame - but it doesn't look like an error to the player. ;)
|
||||||
}
|
}
|
||||||
++i;
|
DialogueLines = V_BreakLines (SmallFont, screen->GetWidth()/CleanXfac-24*2, toSay);
|
||||||
}
|
|
||||||
char goodbye[25];
|
|
||||||
mysnprintf(goodbye, countof(goodbye), "TXT_RANDOMGOODBYE_%d", 1+(pr_randomspeech() % NUM_RANDOM_GOODBYES));
|
|
||||||
item.label = (char*)GStrings[goodbye];
|
|
||||||
if (item.label == NULL) item.label = "Bye.";
|
|
||||||
item.b.position = i;
|
|
||||||
item.c.extra = NULL;
|
|
||||||
ConversationItems.Push (item);
|
|
||||||
|
|
||||||
// Determine where the top of the reply list should be positioned.
|
// Fill out the possible choices
|
||||||
i = (gameinfo.gametype & GAME_Raven) ? 9 : 8;
|
ShowGold = false;
|
||||||
ConversationMenu.y = MIN<int> (140, 192 - ConversationItems.Size() * i);
|
item.type = numberedmore;
|
||||||
for (i = 0; DialogueLines[i].Width >= 0; ++i)
|
item.e.mfunc = PickConversationReply;
|
||||||
{ }
|
for (reply = CurNode->Children, i = 1; reply != NULL; reply = reply->Next)
|
||||||
i = 44 + i * 10;
|
{
|
||||||
if (ConversationMenu.y - 100 < i - screen->GetHeight() / CleanYfac / 2)
|
if (reply->Reply == NULL)
|
||||||
{
|
{
|
||||||
ConversationMenu.y = i - screen->GetHeight() / CleanYfac / 2 + 100;
|
continue;
|
||||||
}
|
}
|
||||||
ConversationMenu.indent = 50;
|
ShowGold |= reply->NeedsGold;
|
||||||
|
reply->ReplyLines = V_BreakLines (SmallFont, 320-50-10, reply->Reply);
|
||||||
|
for (j = 0; reply->ReplyLines[j].Width >= 0; ++j)
|
||||||
|
{
|
||||||
|
item.label = reply->ReplyLines[j].Text.LockBuffer();
|
||||||
|
item.b.position = j == 0 ? i : 0;
|
||||||
|
item.c.extra = reply;
|
||||||
|
ConversationItems.Push (item);
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
char goodbye[25];
|
||||||
|
mysnprintf(goodbye, countof(goodbye), "TXT_RANDOMGOODBYE_%d", 1+(pr_randomspeech() % NUM_RANDOM_GOODBYES));
|
||||||
|
item.label = (char*)GStrings[goodbye];
|
||||||
|
if (item.label == NULL) item.label = "Bye.";
|
||||||
|
item.b.position = i;
|
||||||
|
item.c.extra = NULL;
|
||||||
|
ConversationItems.Push (item);
|
||||||
|
|
||||||
// Finish setting up the menu
|
// Determine where the top of the reply list should be positioned.
|
||||||
ConversationMenu.items = &ConversationItems[0];
|
i = (gameinfo.gametype & GAME_Raven) ? 9 : 8;
|
||||||
ConversationMenu.numitems = ConversationItems.Size();
|
ConversationMenu.y = MIN<int> (140, 192 - ConversationItems.Size() * i);
|
||||||
if (CurNode != PrevNode)
|
for (i = 0; DialogueLines[i].Width >= 0; ++i)
|
||||||
{ // Only reset the selection if showing a different menu.
|
{ }
|
||||||
ConversationMenu.lastOn = 0;
|
i = 44 + i * 10;
|
||||||
PrevNode = CurNode;
|
if (ConversationMenu.y - 100 < i - screen->GetHeight() / CleanYfac / 2)
|
||||||
}
|
{
|
||||||
ConversationMenu.DontDim = true;
|
ConversationMenu.y = i - screen->GetHeight() / CleanYfac / 2 + 100;
|
||||||
|
}
|
||||||
|
ConversationMenu.indent = 50;
|
||||||
|
|
||||||
// And open the menu
|
// Finish setting up the menu
|
||||||
M_StartControlPanel (false);
|
ConversationMenu.items = &ConversationItems[0];
|
||||||
OptionsActive = true;
|
ConversationMenu.numitems = ConversationItems.Size();
|
||||||
menuactive = MENU_OnNoPause;
|
if (CurNode != PrevNode)
|
||||||
ConversationPauseTic = gametic + 20;
|
{ // Only reset the selection if showing a different menu.
|
||||||
M_SwitchMenu (&ConversationMenu);
|
ConversationMenu.lastOn = 0;
|
||||||
|
PrevNode = CurNode;
|
||||||
|
}
|
||||||
|
ConversationMenu.DontDim = true;
|
||||||
|
|
||||||
|
// And open the menu
|
||||||
|
M_StartControlPanel (false);
|
||||||
|
OptionsActive = true;
|
||||||
|
menuactive = MENU_OnNoPause;
|
||||||
|
ConversationPauseTic = gametic + 20;
|
||||||
|
M_SwitchMenu (&ConversationMenu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
|
@ -3785,6 +3785,10 @@ APlayerPawn *P_SpawnPlayer (FMapThing *mthing, bool tempplayer)
|
||||||
FBehavior::StaticStartTypedScripts (SCRIPT_Respawn, p->mo, true);
|
FBehavior::StaticStartTypedScripts (SCRIPT_Respawn, p->mo, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (playernum == consoleplayer)
|
||||||
|
{
|
||||||
|
P_CompleteWeaponSetup(consoleplayer, mobj->GetClass());
|
||||||
|
}
|
||||||
return mobj;
|
return mobj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -419,10 +419,12 @@ static const char *skinsoundnames[NUMSKINSOUNDS][2] =
|
||||||
{ "dsjump", "*jump" }
|
{ "dsjump", "*jump" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
static int STACK_ARGS skinsorter (const void *a, const void *b)
|
static int STACK_ARGS skinsorter (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return stricmp (((FPlayerSkin *)a)->name, ((FPlayerSkin *)b)->name);
|
return stricmp (((FPlayerSkin *)a)->name, ((FPlayerSkin *)b)->name);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void R_InitSkins (void)
|
void R_InitSkins (void)
|
||||||
{
|
{
|
||||||
|
@ -782,6 +784,19 @@ int R_FindSkin (const char *name, int pclass)
|
||||||
return pclass;
|
return pclass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned i = PlayerClasses.Size(); i < numskins; i++)
|
||||||
|
{
|
||||||
|
if (strnicmp (skins[i].name, name, 16) == 0)
|
||||||
|
{
|
||||||
|
if (PlayerClasses[pclass].CheckSkin (mid))
|
||||||
|
return i;
|
||||||
|
else
|
||||||
|
return pclass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
min = PlayerClasses.Size ();
|
min = PlayerClasses.Size ();
|
||||||
max = (int)numskins-1;
|
max = (int)numskins-1;
|
||||||
|
|
||||||
|
@ -805,6 +820,7 @@ int R_FindSkin (const char *name, int pclass)
|
||||||
max = mid - 1;
|
max = mid - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return pclass;
|
return pclass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -932,7 +948,7 @@ void R_InitSprites ()
|
||||||
}
|
}
|
||||||
|
|
||||||
// [RH] Sort the skins, but leave base as skin 0
|
// [RH] Sort the skins, but leave base as skin 0
|
||||||
qsort (&skins[PlayerClasses.Size ()], numskins-PlayerClasses.Size (), sizeof(FPlayerSkin), skinsorter);
|
//qsort (&skins[PlayerClasses.Size ()], numskins-PlayerClasses.Size (), sizeof(FPlayerSkin), skinsorter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void R_DeinitSprites()
|
void R_DeinitSprites()
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
// This file was automatically generated by the
|
// This file was automatically generated by the
|
||||||
// updaterevision tool. Do not edit by hand.
|
// updaterevision tool. Do not edit by hand.
|
||||||
|
|
||||||
#define ZD_SVN_REVISION_STRING "1424M"
|
#define ZD_SVN_REVISION_STRING "1433M"
|
||||||
#define ZD_SVN_REVISION_NUMBER 1424
|
#define ZD_SVN_REVISION_NUMBER 1433
|
||||||
|
|
|
@ -1405,6 +1405,24 @@ DEFINE_CLASS_PROPERTY(yadjust, F, Weapon)
|
||||||
defaults->YAdjust = i;
|
defaults->YAdjust = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
DEFINE_CLASS_PROPERTY(slotnumber, I, Weapon)
|
||||||
|
{
|
||||||
|
PROP_INT_PARM(i, 0);
|
||||||
|
info->Class->Meta.SetMetaInt(AWMETA_SlotNumber, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
DEFINE_CLASS_PROPERTY(slotpriority, F, Weapon)
|
||||||
|
{
|
||||||
|
PROP_FIXED_PARM(i, 0);
|
||||||
|
info->Class->Meta.SetMetaFixed(AWMETA_SlotPriority, i);
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -1823,6 +1841,30 @@ DEFINE_CLASS_PROPERTY_PREFIX(player, hexenarmor, FFFFF, PlayerPawn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
DEFINE_CLASS_PROPERTY_PREFIX(player, weaponslot, ISsssssssssssssssssssssssssssssssssssssssssss, PlayerPawn)
|
||||||
|
{
|
||||||
|
PROP_INT_PARM(slot, 0);
|
||||||
|
|
||||||
|
if (slot < 0 || slot > 9)
|
||||||
|
{
|
||||||
|
I_Error("Slot must be between 0 and 9.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FString weapons;
|
||||||
|
|
||||||
|
for(int i = 1; i < PROP_PARM_COUNT; ++i)
|
||||||
|
{
|
||||||
|
PROP_STRING_PARM(str, i);
|
||||||
|
weapons << ' ' << str;
|
||||||
|
}
|
||||||
|
info->Class->Meta.SetMetaString(APMETA_Slot0 + slot, &weapons[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -215,6 +215,8 @@ static int STACK_ARGS TranslationMapCompare (const void *a, const void *b);
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
|
||||||
|
extern int PrintColors[];
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
FFont *FFont::FirstFont = NULL;
|
FFont *FFont::FirstFont = NULL;
|
||||||
|
@ -1620,6 +1622,7 @@ FSpecialFont::FSpecialFont (const char *name, int first, int count, FTexture **l
|
||||||
{
|
{
|
||||||
remap->Remap[j] = identity[j];
|
remap->Remap[j] = identity[j];
|
||||||
remap->Palette[j] = GPalette.BaseColors[identity[j]];
|
remap->Palette[j] = GPalette.BaseColors[identity[j]];
|
||||||
|
remap->Palette[j].a = 0xff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2057,7 +2060,7 @@ EColorRange V_ParseFontColor (const BYTE *&color_value, int normalcolor, int bol
|
||||||
const BYTE *ch = color_value;
|
const BYTE *ch = color_value;
|
||||||
int newcolor = *ch++;
|
int newcolor = *ch++;
|
||||||
|
|
||||||
if (newcolor == '-') // Normal
|
if (newcolor == '-') // Normal
|
||||||
{
|
{
|
||||||
newcolor = normalcolor;
|
newcolor = normalcolor;
|
||||||
}
|
}
|
||||||
|
@ -2065,6 +2068,14 @@ EColorRange V_ParseFontColor (const BYTE *&color_value, int normalcolor, int bol
|
||||||
{
|
{
|
||||||
newcolor = boldcolor;
|
newcolor = boldcolor;
|
||||||
}
|
}
|
||||||
|
else if (newcolor == '!') // Team chat
|
||||||
|
{
|
||||||
|
newcolor = PrintColors[PRINT_TEAMCHAT];
|
||||||
|
}
|
||||||
|
else if (newcolor == '*') // Chat
|
||||||
|
{
|
||||||
|
newcolor = PrintColors[PRINT_CHAT];
|
||||||
|
}
|
||||||
else if (newcolor == '[') // Named
|
else if (newcolor == '[') // Named
|
||||||
{
|
{
|
||||||
const BYTE *namestart = ch;
|
const BYTE *namestart = ch;
|
||||||
|
|
|
@ -71,6 +71,9 @@ struct FBrokenLines
|
||||||
#define TEXTCOLOR_NORMAL "\034-"
|
#define TEXTCOLOR_NORMAL "\034-"
|
||||||
#define TEXTCOLOR_BOLD "\034+"
|
#define TEXTCOLOR_BOLD "\034+"
|
||||||
|
|
||||||
|
#define TEXTCOLOR_CHAT "\034*"
|
||||||
|
#define TEXTCOLOR_TEAMCHAT "\034!"
|
||||||
|
|
||||||
FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const BYTE *str);
|
FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const BYTE *str);
|
||||||
void V_FreeBrokenLines (FBrokenLines *lines);
|
void V_FreeBrokenLines (FBrokenLines *lines);
|
||||||
inline FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const char *str)
|
inline FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const char *str)
|
||||||
|
|
|
@ -56,21 +56,21 @@
|
||||||
// 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 218
|
#define NETGAMEVERSION 219
|
||||||
|
|
||||||
// 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
|
||||||
// be able to migrate in FGameConfigFile::DoGlobalSetup().
|
// be able to migrate in FGameConfigFile::DoGlobalSetup().
|
||||||
#define LASTRUNVERSION "207"
|
#define LASTRUNVERSION "208"
|
||||||
|
|
||||||
// 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 0x20E
|
#define DEMOGAMEVERSION 0x20F
|
||||||
|
|
||||||
// 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.
|
||||||
#define MINDEMOVERSION 0x207
|
#define MINDEMOVERSION 0x20F
|
||||||
|
|
||||||
// SAVEVER is the version of the information stored in level snapshots.
|
// SAVEVER is the version of the information stored in level snapshots.
|
||||||
// Note that SAVEVER is not directly comparable to VERSION.
|
// Note that SAVEVER is not directly comparable to VERSION.
|
||||||
|
|
|
@ -1452,65 +1452,50 @@ bool I_InitInput (void *hwnd)
|
||||||
|
|
||||||
// Try for DirectInput 8 first, then DirectInput 3 for NT 4's benefit.
|
// Try for DirectInput 8 first, then DirectInput 3 for NT 4's benefit.
|
||||||
|
|
||||||
hr = CoCreateInstance (CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, IID_IDirectInput8A, (void**)&g_pdi);
|
DInputDLL = LoadLibrary("dinput8.dll");
|
||||||
if (FAILED(hr))
|
if (DInputDLL != NULL)
|
||||||
{
|
{
|
||||||
g_pdi = NULL;
|
typedef HRESULT (WINAPI *blah)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);
|
||||||
}
|
blah di8c = (blah)GetProcAddress(DInputDLL, "DirectInput8Create");
|
||||||
else
|
if (di8c != NULL)
|
||||||
{
|
|
||||||
hr = g_pdi->Initialize (g_hInst, 0x0800);
|
|
||||||
if (FAILED (hr))
|
|
||||||
{
|
{
|
||||||
g_pdi->Release ();
|
hr = di8c(g_hInst, DIRECTINPUT_VERSION, IID_IDirectInput8A, (void **)&g_pdi, NULL);
|
||||||
g_pdi = NULL;
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
Printf(TEXTCOLOR_ORANGE "DirectInput8Create failed: %08lx", hr);
|
||||||
|
g_pdi = NULL; // Just to be sure DirectInput8Create didn't change it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Printf(TEXTCOLOR_ORANGE "Could not find DirectInput8Create in dinput8.dll\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_pdi == NULL)
|
if (g_pdi == NULL)
|
||||||
{
|
{
|
||||||
hr = CoCreateInstance (CLSID_DirectInput, NULL, CLSCTX_INPROC_SERVER, IID_IDirectInputA, (void**)&g_pdi3);
|
if (DInputDLL != NULL)
|
||||||
if (hr == REGDB_E_CLASSNOTREG)
|
|
||||||
{
|
{
|
||||||
// NT 4 has the wrong GUID in the registry for CLSID_DirectInput unless somebody has already
|
FreeLibrary(DInputDLL);
|
||||||
// used "regsvr32 dinput.dll" to properly register the class. This means the only sure way to
|
|
||||||
// obtain an IDirectInputA interface under NT 4 is to actually load the DLL and use
|
|
||||||
// the function it provides. Grrr.
|
|
||||||
DInputDLL = LoadLibrary ("dinput.dll");
|
|
||||||
if (DInputDLL == NULL)
|
|
||||||
{
|
|
||||||
I_FatalError ("Could not load dinput.dll: %08lx", GetLastError());
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef HRESULT (*blah)(HINSTANCE, DWORD, LPDIRECTINPUT*, LPUNKNOWN);
|
|
||||||
blah dic = (blah)GetProcAddress (DInputDLL, "DirectInputCreateA");
|
|
||||||
|
|
||||||
if (dic == NULL)
|
|
||||||
{
|
|
||||||
I_FatalError ("dinput.dll is corrupt");
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = dic (g_hInst, 0x0300, &g_pdi3, NULL);
|
|
||||||
if (FAILED(hr))
|
|
||||||
{
|
|
||||||
I_FatalError ("DirectInputCreate failed: %08lx", hr);
|
|
||||||
}
|
|
||||||
|
|
||||||
Printf ("Tip for NT 4: \"regsvr32 dinput.dll\"\n");
|
|
||||||
}
|
}
|
||||||
else
|
DInputDLL = LoadLibrary ("dinput.dll");
|
||||||
|
if (DInputDLL == NULL)
|
||||||
{
|
{
|
||||||
if (FAILED(hr))
|
I_FatalError ("Could not load dinput.dll: %08lx", GetLastError());
|
||||||
{
|
}
|
||||||
I_FatalError ("Could not create DirectInput interface: %08lx", hr);
|
|
||||||
}
|
typedef HRESULT (WINAPI *blah)(HINSTANCE, DWORD, LPDIRECTINPUT*, LPUNKNOWN);
|
||||||
hr = g_pdi3->Initialize (g_hInst, 0x0300);
|
blah dic = (blah)GetProcAddress (DInputDLL, "DirectInputCreateA");
|
||||||
if (FAILED(hr))
|
|
||||||
{
|
if (dic == NULL)
|
||||||
g_pdi3->Release ();
|
{
|
||||||
g_pdi3 = NULL;
|
I_FatalError ("dinput.dll is corrupt");
|
||||||
I_FatalError ("Could not initialize DirectInput interface: %08lx", hr);
|
}
|
||||||
}
|
|
||||||
|
hr = dic (g_hInst, 0x0300, &g_pdi3, NULL);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
I_FatalError ("DirectInputCreate failed: %08lx", hr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -566,6 +566,7 @@ void I_PrintStr (const char *cp)
|
||||||
// Change the color.
|
// Change the color.
|
||||||
format.cbSize = sizeof(format);
|
format.cbSize = sizeof(format);
|
||||||
format.dwMask = CFM_COLOR;
|
format.dwMask = CFM_COLOR;
|
||||||
|
format.dwEffects = 0;
|
||||||
format.crTextColor = color;
|
format.crTextColor = color;
|
||||||
SendMessage (edit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
|
SendMessage (edit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,4 +9,11 @@ actor ChexPlayer : DoomPlayer
|
||||||
player.startitem "Bootspoon"
|
player.startitem "Bootspoon"
|
||||||
player.startitem "MiniZorchRecharge", 50
|
player.startitem "MiniZorchRecharge", 50
|
||||||
player.damagescreencolor "60 b0 58"
|
player.damagescreencolor "60 b0 58"
|
||||||
|
player.WeaponSlot 1, Bootspoon, SuperBootspork
|
||||||
|
player.WeaponSlot 2, MiniZorcher
|
||||||
|
player.WeaponSlot 3, LargeZorcher, SuperLargeZorcher
|
||||||
|
player.WeaponSlot 4, RapidZorcher
|
||||||
|
player.WeaponSlot 5, ZorchPropulsor
|
||||||
|
player.WeaponSlot 6, PhasingZorcher
|
||||||
|
player.WeaponSlot 7, LAZDevice
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,14 @@ ACTOR DoomPlayer : PlayerPawn
|
||||||
Player.StartItem "Pistol"
|
Player.StartItem "Pistol"
|
||||||
Player.StartItem "Fist"
|
Player.StartItem "Fist"
|
||||||
Player.StartItem "Clip", 50
|
Player.StartItem "Clip", 50
|
||||||
|
Player.WeaponSlot 1, Fist, Chainsaw
|
||||||
|
Player.WeaponSlot 2, Pistol
|
||||||
|
Player.WeaponSlot 3, Shotgun, SuperShotgun
|
||||||
|
Player.WeaponSlot 4, Chaingun
|
||||||
|
Player.WeaponSlot 5, RocketLauncher
|
||||||
|
Player.WeaponSlot 6, PlasmaRifle
|
||||||
|
Player.WeaponSlot 7, BFG9000
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -17,6 +17,7 @@ ACTOR DoomWeapon : Weapon
|
||||||
|
|
||||||
ACTOR Fist : Weapon
|
ACTOR Fist : Weapon
|
||||||
{
|
{
|
||||||
|
Game Doom
|
||||||
Weapon.SelectionOrder 3700
|
Weapon.SelectionOrder 3700
|
||||||
Weapon.Kickback 100
|
Weapon.Kickback 100
|
||||||
Obituary "$OB_MPFIST"
|
Obituary "$OB_MPFIST"
|
||||||
|
@ -52,6 +53,7 @@ ACTOR Fist : Weapon
|
||||||
|
|
||||||
ACTOR Pistol : DoomWeapon 5010
|
ACTOR Pistol : DoomWeapon 5010
|
||||||
{
|
{
|
||||||
|
Game Doom
|
||||||
Weapon.SelectionOrder 1900
|
Weapon.SelectionOrder 1900
|
||||||
Weapon.AmmoUse 1
|
Weapon.AmmoUse 1
|
||||||
Weapon.AmmoGive 20
|
Weapon.AmmoGive 20
|
||||||
|
|
|
@ -11,6 +11,14 @@ ACTOR HereticPlayer : PlayerPawn
|
||||||
Player.StartItem "GoldWand"
|
Player.StartItem "GoldWand"
|
||||||
Player.StartItem "Staff"
|
Player.StartItem "Staff"
|
||||||
Player.StartItem "GoldWandAmmo", 50
|
Player.StartItem "GoldWandAmmo", 50
|
||||||
|
Player.WeaponSlot 1, Staff, Gauntlets
|
||||||
|
Player.WeaponSlot 2, GoldWand
|
||||||
|
Player.WeaponSlot 3, Crossbow
|
||||||
|
Player.WeaponSlot 4, Blaster
|
||||||
|
Player.WeaponSlot 5, SkullRod
|
||||||
|
Player.WeaponSlot 6, PhoenixRod
|
||||||
|
Player.WeaponSlot 7, Mace
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -9,6 +9,7 @@ ACTOR HereticWeapon : Weapon
|
||||||
|
|
||||||
ACTOR Staff : HereticWeapon
|
ACTOR Staff : HereticWeapon
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
Weapon.SelectionOrder 3800
|
Weapon.SelectionOrder 3800
|
||||||
+THRUGHOST
|
+THRUGHOST
|
||||||
+WIMPY_WEAPON
|
+WIMPY_WEAPON
|
||||||
|
@ -38,6 +39,7 @@ ACTOR Staff : HereticWeapon
|
||||||
|
|
||||||
ACTOR StaffPowered : Staff
|
ACTOR StaffPowered : Staff
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
Weapon.sisterweapon "Staff"
|
Weapon.sisterweapon "Staff"
|
||||||
Weapon.ReadySound "weapons/staffcrackle"
|
Weapon.ReadySound "weapons/staffcrackle"
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
|
@ -106,6 +108,7 @@ ACTOR StaffPuff2
|
||||||
|
|
||||||
ACTOR GoldWand : HereticWeapon
|
ACTOR GoldWand : HereticWeapon
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+BLOODSPLATTER
|
+BLOODSPLATTER
|
||||||
Weapon.SelectionOrder 2000
|
Weapon.SelectionOrder 2000
|
||||||
Weapon.AmmoGive 25
|
Weapon.AmmoGive 25
|
||||||
|
@ -138,6 +141,7 @@ ACTOR GoldWand : HereticWeapon
|
||||||
|
|
||||||
ACTOR GoldWandPowered : GoldWand
|
ACTOR GoldWandPowered : GoldWand
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
Weapon.AmmoGive 0
|
Weapon.AmmoGive 0
|
||||||
Weapon.SisterWeapon "GoldWand"
|
Weapon.SisterWeapon "GoldWand"
|
||||||
|
@ -269,6 +273,7 @@ ACTOR Crossbow : HereticWeapon 2001
|
||||||
|
|
||||||
ACTOR CrossbowPowered : Crossbow
|
ACTOR CrossbowPowered : Crossbow
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
Weapon.AmmoGive 0
|
Weapon.AmmoGive 0
|
||||||
Weapon.SisterWeapon "Crossbow"
|
Weapon.SisterWeapon "Crossbow"
|
||||||
|
@ -388,7 +393,7 @@ ACTOR Gauntlets : Weapon 2005
|
||||||
Weapon.YAdjust 15
|
Weapon.YAdjust 15
|
||||||
Weapon.UpSound "weapons/gauntletsactivate"
|
Weapon.UpSound "weapons/gauntletsactivate"
|
||||||
Weapon.SisterWeapon "GauntletsPowered"
|
Weapon.SisterWeapon "GauntletsPowered"
|
||||||
Inventory.PickupMessage "$TxT_WPNGAUNTLETS"
|
Inventory.PickupMessage "$TXT_WPNGAUNTLETS"
|
||||||
|
|
||||||
action native A_GauntletAttack (int power);
|
action native A_GauntletAttack (int power);
|
||||||
|
|
||||||
|
@ -420,6 +425,7 @@ ACTOR Gauntlets : Weapon 2005
|
||||||
|
|
||||||
ACTOR GauntletsPowered : Gauntlets
|
ACTOR GauntletsPowered : Gauntlets
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+POWERED_UP
|
+POWERED_UP
|
||||||
Weapon.SisterWeapon "Gauntlets"
|
Weapon.SisterWeapon "Gauntlets"
|
||||||
States
|
States
|
||||||
|
@ -518,6 +524,7 @@ ACTOR Mace : HereticWeapon
|
||||||
|
|
||||||
ACTOR MacePowered : Mace
|
ACTOR MacePowered : Mace
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
Weapon.AmmoUse 5
|
Weapon.AmmoUse 5
|
||||||
Weapon.AmmoGive 0
|
Weapon.AmmoGive 0
|
||||||
|
@ -704,6 +711,7 @@ ACTOR Blaster : HereticWeapon 53
|
||||||
|
|
||||||
ACTOR BlasterPowered : Blaster
|
ACTOR BlasterPowered : Blaster
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
Weapon.AmmoUse 5
|
Weapon.AmmoUse 5
|
||||||
Weapon.AmmoGive 0
|
Weapon.AmmoGive 0
|
||||||
|
@ -850,6 +858,7 @@ ACTOR SkullRod : HereticWeapon 2004
|
||||||
|
|
||||||
ACTOR SkullRodPowered : SkullRod
|
ACTOR SkullRodPowered : SkullRod
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
Weapon.AmmoUse1 5
|
Weapon.AmmoUse1 5
|
||||||
Weapon.AmmoGive1 0
|
Weapon.AmmoGive1 0
|
||||||
|
@ -1022,6 +1031,7 @@ ACTOR PhoenixRod : Weapon 2003 native
|
||||||
|
|
||||||
ACTOR PhoenixRodPowered : PhoenixRod native
|
ACTOR PhoenixRodPowered : PhoenixRod native
|
||||||
{
|
{
|
||||||
|
Game Heretic
|
||||||
+WEAPON.POWERED_UP
|
+WEAPON.POWERED_UP
|
||||||
Weapon.SisterWeapon "PhoenixRod"
|
Weapon.SisterWeapon "PhoenixRod"
|
||||||
Weapon.AmmoGive 0
|
Weapon.AmmoGive 0
|
||||||
|
|
|
@ -71,6 +71,7 @@ ACTOR WraithvergeDrop
|
||||||
|
|
||||||
ACTOR CWeapWraithverge : ClericWeapon native
|
ACTOR CWeapWraithverge : ClericWeapon native
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
Health 3
|
Health 3
|
||||||
Weapon.SelectionOrder 3000
|
Weapon.SelectionOrder 3000
|
||||||
+WEAPON.PRIMARY_USES_BOTH
|
+WEAPON.PRIMARY_USES_BOTH
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
ACTOR CWeapMace : ClericWeapon
|
ACTOR CWeapMace : ClericWeapon
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
Weapon.SelectionOrder 3500
|
Weapon.SelectionOrder 3500
|
||||||
Weapon.KickBack 150
|
Weapon.KickBack 150
|
||||||
Weapon.YAdjust -8
|
Weapon.YAdjust -8
|
||||||
|
|
|
@ -22,6 +22,11 @@ ACTOR ClericPlayer : PlayerPawn
|
||||||
Player.HealRadiusType "Health"
|
Player.HealRadiusType "Health"
|
||||||
Player.Hexenarmor 10, 10, 25, 5, 20
|
Player.Hexenarmor 10, 10, 25, 5, 20
|
||||||
Player.StartItem "CWeapMace"
|
Player.StartItem "CWeapMace"
|
||||||
|
Player.WeaponSlot 1, CWeapMace
|
||||||
|
Player.WeaponSlot 2, CWeapStaff
|
||||||
|
Player.WeaponSlot 3, CWeapFlame
|
||||||
|
Player.WeaponSlot 4, CWeapWraithverge
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
ACTOR FWeapFist : FighterWeapon
|
ACTOR FWeapFist : FighterWeapon
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
+BLOODSPLATTER
|
+BLOODSPLATTER
|
||||||
Weapon.SelectionOrder 3400
|
Weapon.SelectionOrder 3400
|
||||||
+WEAPON.MELEEWEAPON
|
+WEAPON.MELEEWEAPON
|
||||||
|
|
|
@ -22,6 +22,11 @@ ACTOR FighterPlayer : PlayerPawn
|
||||||
Player.StartItem "FWeapFist"
|
Player.StartItem "FWeapFist"
|
||||||
Player.ForwardMove 1.08, 1.2
|
Player.ForwardMove 1.08, 1.2
|
||||||
Player.SideMove 1.125, 1.475
|
Player.SideMove 1.125, 1.475
|
||||||
|
Player.WeaponSlot 1, FWeapFist
|
||||||
|
Player.WeaponSlot 2, FWeapAxe
|
||||||
|
Player.WeaponSlot 3, FWeapHammer
|
||||||
|
Player.WeaponSlot 4, FWeapQuietus
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -71,6 +71,7 @@ ACTOR QuietusDrop
|
||||||
|
|
||||||
ACTOR FWeapQuietus : FighterWeapon
|
ACTOR FWeapQuietus : FighterWeapon
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
Health 3
|
Health 3
|
||||||
Weapon.SelectionOrder 2900
|
Weapon.SelectionOrder 2900
|
||||||
+WEAPON.PRIMARY_USES_BOTH
|
+WEAPON.PRIMARY_USES_BOTH
|
||||||
|
|
|
@ -24,6 +24,11 @@ ACTOR MagePlayer : PlayerPawn
|
||||||
Player.StartItem "MWeapWand"
|
Player.StartItem "MWeapWand"
|
||||||
Player.ForwardMove 0.88, 0.92
|
Player.ForwardMove 0.88, 0.92
|
||||||
Player.SideMove 0.875, 0.925
|
Player.SideMove 0.875, 0.925
|
||||||
|
Player.WeaponSlot 1, MWeapWand
|
||||||
|
Player.WeaponSlot 2, MWeapFrost
|
||||||
|
Player.WeaponSlot 3, MWeapLightning
|
||||||
|
Player.WeaponSlot 4, MWeapBloodscourge
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -71,6 +71,7 @@ ACTOR BloodscourgeDrop
|
||||||
|
|
||||||
ACTOR MWeapBloodscourge : MageWeapon native
|
ACTOR MWeapBloodscourge : MageWeapon native
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
Health 3
|
Health 3
|
||||||
Weapon.SelectionOrder 3100
|
Weapon.SelectionOrder 3100
|
||||||
Weapon.AmmoUse1 15
|
Weapon.AmmoUse1 15
|
||||||
|
|
|
@ -3,9 +3,11 @@
|
||||||
|
|
||||||
ACTOR MWeapWand : MageWeapon
|
ACTOR MWeapWand : MageWeapon
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
Weapon.SelectionOrder 3600
|
Weapon.SelectionOrder 3600
|
||||||
Weapon.KickBack 0
|
Weapon.KickBack 0
|
||||||
Weapon.YAdjust 9
|
Weapon.YAdjust 9
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Select:
|
Select:
|
||||||
|
|
|
@ -12,6 +12,14 @@ ACTOR StrifePlayer : PlayerPawn
|
||||||
Player.ColorRange 128, 143
|
Player.ColorRange 128, 143
|
||||||
Player.DisplayName "Rebel"
|
Player.DisplayName "Rebel"
|
||||||
Player.StartItem "PunchDagger"
|
Player.StartItem "PunchDagger"
|
||||||
|
Player.WeaponSlot 1, PunchDagger
|
||||||
|
Player.WeaponSlot 2, StrifeCrossbow2, StrifeCrossbow
|
||||||
|
Player.WeaponSlot 3, AssaultGun
|
||||||
|
Player.WeaponSlot 4, MiniMissileLauncher
|
||||||
|
Player.WeaponSlot 5, StrifeGrenadeLauncher2, StrifeGrenadeLauncher
|
||||||
|
Player.WeaponSlot 6, FlameThrower
|
||||||
|
Player.WeaponSlot 7, Mauler2, Mauler
|
||||||
|
Player.WeaponSlot 8, Sigil
|
||||||
|
|
||||||
action native A_ItBurnsItBurns();
|
action native A_ItBurnsItBurns();
|
||||||
action native A_CrispyPlayer();
|
action native A_CrispyPlayer();
|
||||||
|
|
|
@ -45,6 +45,7 @@ ACTOR StrifeSpark : StrifePuff
|
||||||
|
|
||||||
ACTOR PunchDagger : StrifeWeapon
|
ACTOR PunchDagger : StrifeWeapon
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
Weapon.SelectionOrder 3900
|
Weapon.SelectionOrder 3900
|
||||||
+WEAPON.NOALERT
|
+WEAPON.NOALERT
|
||||||
|
|
||||||
|
@ -198,11 +199,13 @@ ACTOR StrifeCrossbow : StrifeWeapon 2001
|
||||||
|
|
||||||
ACTOR StrifeCrossbow2 : StrifeCrossbow
|
ACTOR StrifeCrossbow2 : StrifeCrossbow
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
Weapon.SelectionOrder 2700
|
Weapon.SelectionOrder 2700
|
||||||
Weapon.AmmoUse1 1
|
Weapon.AmmoUse1 1
|
||||||
Weapon.AmmoGive1 0
|
Weapon.AmmoGive1 0
|
||||||
Weapon.AmmoType1 "PoisonBolts"
|
Weapon.AmmoType1 "PoisonBolts"
|
||||||
Weapon.SisterWeapon "StrifeCrossbow"
|
Weapon.SisterWeapon "StrifeCrossbow"
|
||||||
|
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Ready:
|
Ready:
|
||||||
|
@ -362,6 +365,7 @@ ACTOR MiniMissilePuff : StrifePuff
|
||||||
|
|
||||||
ACTOR MiniMissile
|
ACTOR MiniMissile
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
ConversationID 99,-1,-1
|
ConversationID 99,-1,-1
|
||||||
Speed 20
|
Speed 20
|
||||||
Radius 10
|
Radius 10
|
||||||
|
@ -515,6 +519,7 @@ ACTOR Mauler : StrifeWeapon 2004
|
||||||
|
|
||||||
ACTOR Mauler2 : Mauler
|
ACTOR Mauler2 : Mauler
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
Weapon.SelectionOrder 3300
|
Weapon.SelectionOrder 3300
|
||||||
Weapon.AmmoUse1 30
|
Weapon.AmmoUse1 30
|
||||||
Weapon.AmmoGive1 0
|
Weapon.AmmoGive1 0
|
||||||
|
@ -626,6 +631,7 @@ ACTOR MaulerTorpedoWave
|
||||||
|
|
||||||
ACTOR HEGrenade
|
ACTOR HEGrenade
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
ConversationID 106,-1,-1
|
ConversationID 106,-1,-1
|
||||||
Speed 15
|
Speed 15
|
||||||
Radius 13
|
Radius 13
|
||||||
|
@ -663,6 +669,7 @@ ACTOR HEGrenade
|
||||||
|
|
||||||
ACTOR PhosphorousGrenade
|
ACTOR PhosphorousGrenade
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
ConversationID 107,-1,-1
|
ConversationID 107,-1,-1
|
||||||
Speed 15
|
Speed 15
|
||||||
Radius 13
|
Radius 13
|
||||||
|
@ -782,6 +789,7 @@ ACTOR StrifeGrenadeLauncher : StrifeWeapon 154
|
||||||
|
|
||||||
ACTOR StrifeGrenadeLauncher2 : StrifeGrenadeLauncher
|
ACTOR StrifeGrenadeLauncher2 : StrifeGrenadeLauncher
|
||||||
{
|
{
|
||||||
|
Game Strife
|
||||||
Weapon.SelectionOrder 3200
|
Weapon.SelectionOrder 3200
|
||||||
Weapon.AmmoUse1 1
|
Weapon.AmmoUse1 1
|
||||||
Weapon.AmmoGive1 0
|
Weapon.AmmoGive1 0
|
||||||
|
|
|
@ -46,6 +46,21 @@ INDEXFONT_RAVEN
|
||||||
9 SMALLIN9
|
9 SMALLIN9
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INDEXFONT_DOOM
|
||||||
|
{
|
||||||
|
0 STYSNUM0
|
||||||
|
1 STYSNUM1
|
||||||
|
2 STYSNUM2
|
||||||
|
3 STYSNUM3
|
||||||
|
4 STYSNUM4
|
||||||
|
5 STYSNUM5
|
||||||
|
6 STYSNUM6
|
||||||
|
7 STYSNUM7
|
||||||
|
8 STYSNUM8
|
||||||
|
9 STYSNUM9
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Doom and Chex intermissions use special text glyphs. The Raven and Strife
|
// Doom and Chex intermissions use special text glyphs. The Raven and Strife
|
||||||
// games just use the standard big font.
|
// games just use the standard big font.
|
||||||
|
|
||||||
|
|
|
@ -81,15 +81,15 @@ statusbar normal // Standard Doom Status bar
|
||||||
drawswitchableimage keyslot 3 && 6, "nullimage", "STKEYS1", "STKEYS4", "STKEYS7", 239, 181;
|
drawswitchableimage keyslot 3 && 6, "nullimage", "STKEYS1", "STKEYS4", "STKEYS7", 239, 181;
|
||||||
drawswitchableimage keyslot 1 && 4, "nullimage", "STKEYS2", "STKEYS5", "STKEYS8", 239, 191;
|
drawswitchableimage keyslot 1 && 4, "nullimage", "STKEYS2", "STKEYS5", "STKEYS8", 239, 191;
|
||||||
|
|
||||||
drawnumber 3, INDEXFONT, gold, ammo Clip, 288, 173;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammo Clip, 288, 173;
|
||||||
drawnumber 3, INDEXFONT, gold, ammo Shell, 288, 179;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammo Shell, 288, 179;
|
||||||
drawnumber 3, INDEXFONT, gold, ammo RocketAmmo, 288, 185;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammo RocketAmmo, 288, 185;
|
||||||
drawnumber 3, INDEXFONT, gold, ammo Cell, 288, 191;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammo Cell, 288, 191;
|
||||||
|
|
||||||
drawnumber 3, INDEXFONT, gold, ammocapacity Clip, 314, 173;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity Clip, 314, 173;
|
||||||
drawnumber 3, INDEXFONT, gold, ammocapacity Shell, 314, 179;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity Shell, 314, 179;
|
||||||
drawnumber 3, INDEXFONT, gold, ammocapacity RocketAmmo, 314, 185;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity RocketAmmo, 314, 185;
|
||||||
drawnumber 3, INDEXFONT, gold, ammocapacity Cell, 314, 191;
|
drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity Cell, 314, 191;
|
||||||
gamemode deathmatch, teamgame
|
gamemode deathmatch, teamgame
|
||||||
{
|
{
|
||||||
drawnumber 2, HUDFONT_DOOM, untranslated, frags, 138, 171;
|
drawnumber 2, HUDFONT_DOOM, untranslated, frags, 138, 171;
|
||||||
|
|
|
@ -65,7 +65,7 @@ Console:
|
||||||
#000000 #7F0000 0 127
|
#000000 #7F0000 0 127
|
||||||
#FF0000 #FFFEFE 128 256
|
#FF0000 #FFFEFE 128 256
|
||||||
Flat:
|
Flat:
|
||||||
#DD0000
|
#FF5566
|
||||||
}
|
}
|
||||||
|
|
||||||
Blue
|
Blue
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue