mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-24 21:11:52 +00:00
- sync 3D floor branch with trunk.
SVN r3123 (3dfloors2)
This commit is contained in:
parent
264ab6b076
commit
c7584cace6
39 changed files with 352 additions and 133 deletions
|
@ -112,6 +112,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
checkswitchrange = <bool>;// Switches can only be activated when vertically reachable.
|
checkswitchrange = <bool>;// Switches can only be activated when vertically reachable.
|
||||||
blockprojectiles = <bool>;// Line blocks all projectiles
|
blockprojectiles = <bool>;// Line blocks all projectiles
|
||||||
blockuse = <bool>; // Line blocks all use actions
|
blockuse = <bool>; // Line blocks all use actions
|
||||||
|
blocksight = <bool>; // Line blocks monster line of sight
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,8 +163,8 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
alphafloor = <float>; // translucency of floor plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
alphafloor = <float>; // translucency of floor plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
||||||
alphaceiling = <float>; // translucency of ceiling plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
alphaceiling = <float>; // translucency of ceiling plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
||||||
gravity = <float>; // Sector's gravity. Default is 1.0.
|
gravity = <float>; // Sector's gravity. Default is 1.0.
|
||||||
lightcolor = <integer>; // Sector'S light color as RRGGBB value, default = 0xffffff.
|
lightcolor = <integer>; // Sector's light color as RRGGBB value, default = 0xffffff.
|
||||||
fadecolor = <integer>; // Sector'S fog color as RRGGBB value, default = 0x000000.
|
fadecolor = <integer>; // Sector's fog color as RRGGBB value, default = 0x000000.
|
||||||
desaturation = <float>; // Color desaturation factor. 0 = none, 1 = full, default = 0.
|
desaturation = <float>; // Color desaturation factor. 0 = none, 1 = full, default = 0.
|
||||||
silent = <bool>; // Actors in this sector make no sound,
|
silent = <bool>; // Actors in this sector make no sound,
|
||||||
nofallingdamage = <bool>; // Falling damage is disabled in this sector
|
nofallingdamage = <bool>; // Falling damage is disabled in this sector
|
||||||
|
@ -183,12 +184,8 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
|
|
||||||
thing
|
thing
|
||||||
{
|
{
|
||||||
skill# = <bool> // Unlike the base spec, # can range from 1-8.
|
skill# = <bool> // Unlike the base spec, # can range from 1-16.
|
||||||
// 8 is the maximum amount of skills the skill
|
class# = <bool> // Unlike the base spec, # can range from 1-16.
|
||||||
// menu can display.
|
|
||||||
class# = <bool> // Unlike the base spec, # can range from 1-8.
|
|
||||||
// 8 is the maximum amount of classes the class
|
|
||||||
// menu can display.
|
|
||||||
conversation = <int> // Assigns a conversation dialogue to this thing.
|
conversation = <int> // Assigns a conversation dialogue to this thing.
|
||||||
// Parameter is the conversation ID, 0 meaning none.
|
// Parameter is the conversation ID, 0 meaning none.
|
||||||
countsecret = <bool>; // Picking up this actor counts as a secret.
|
countsecret = <bool>; // Picking up this actor counts as a secret.
|
||||||
|
@ -292,6 +289,10 @@ Added 'countsecret' actor property.
|
||||||
1.15 14.12.2010
|
1.15 14.12.2010
|
||||||
Added vertex floor and ceiling height properties
|
Added vertex floor and ceiling height properties
|
||||||
|
|
||||||
|
1.16 23.01.2011
|
||||||
|
Added blocksight linedef flag
|
||||||
|
Removed remarks of 8 being the maximum number of player classes/skill levels the menu can handle so the spec now properly lists 16 as limit.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
EOF
|
EOF
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
|
@ -227,7 +227,7 @@ DEFINE_SPECIAL(Elevator_LowerToNearest, 247, 2, 2, 2)
|
||||||
DEFINE_SPECIAL(HealThing, 248, 1, 2, 2)
|
DEFINE_SPECIAL(HealThing, 248, 1, 2, 2)
|
||||||
DEFINE_SPECIAL(Door_CloseWaitOpen, 249, 3, 4, 4)
|
DEFINE_SPECIAL(Door_CloseWaitOpen, 249, 3, 4, 4)
|
||||||
DEFINE_SPECIAL(Floor_Donut, 250, 3, 3, 3)
|
DEFINE_SPECIAL(Floor_Donut, 250, 3, 3, 3)
|
||||||
DEFINE_SPECIAL(FloorAndCeiling_LowerRaise, 251, 3, 3, 3)
|
DEFINE_SPECIAL(FloorAndCeiling_LowerRaise, 251, 3, 3, 4)
|
||||||
DEFINE_SPECIAL(Ceiling_RaiseToNearest, 252, 2, 2, 2)
|
DEFINE_SPECIAL(Ceiling_RaiseToNearest, 252, 2, 2, 2)
|
||||||
DEFINE_SPECIAL(Ceiling_LowerToLowest, 253, 2, 2, 2)
|
DEFINE_SPECIAL(Ceiling_LowerToLowest, 253, 2, 2, 2)
|
||||||
DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 2, 2)
|
DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 2, 2)
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "textures/textures.h"
|
#include "textures/textures.h"
|
||||||
#include "r_blend.h"
|
#include "r_blend.h"
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
|
#include "memarena.h"
|
||||||
|
|
||||||
struct subsector_t;
|
struct subsector_t;
|
||||||
//
|
//
|
||||||
|
@ -324,6 +325,7 @@ enum
|
||||||
MF6_ADDITIVEPOISONDAMAGE = 0x00100000,
|
MF6_ADDITIVEPOISONDAMAGE = 0x00100000,
|
||||||
MF6_ADDITIVEPOISONDURATION = 0x00200000,
|
MF6_ADDITIVEPOISONDURATION = 0x00200000,
|
||||||
MF6_NOMENU = 0x00400000, // Player class should not appear in the class selection menu.
|
MF6_NOMENU = 0x00400000, // Player class should not appear in the class selection menu.
|
||||||
|
MF6_BOSSCUBE = 0x00800000, // Actor spawned by A_BrainSpit, flagged for timefreeze reasons.
|
||||||
|
|
||||||
// --- mobj.renderflags ---
|
// --- mobj.renderflags ---
|
||||||
|
|
||||||
|
@ -760,6 +762,7 @@ public:
|
||||||
fixed_t GetGravity() const;
|
fixed_t GetGravity() const;
|
||||||
bool IsSentient() const;
|
bool IsSentient() const;
|
||||||
const char *GetTag(const char *def = NULL) const;
|
const char *GetTag(const char *def = NULL) const;
|
||||||
|
void SetTag(const char *def);
|
||||||
|
|
||||||
|
|
||||||
// info for drawing
|
// info for drawing
|
||||||
|
@ -855,7 +858,8 @@ public:
|
||||||
int activationtype; // How the thing behaves when activated with USESPECIAL or BUMPSPECIAL
|
int activationtype; // How the thing behaves when activated with USESPECIAL or BUMPSPECIAL
|
||||||
int lastbump; // Last time the actor was bumped, used to control BUMPSPECIAL
|
int lastbump; // Last time the actor was bumped, used to control BUMPSPECIAL
|
||||||
int Score; // manipulated by score items, ACS or DECORATE. The engine doesn't use this itself for anything.
|
int Score; // manipulated by score items, ACS or DECORATE. The engine doesn't use this itself for anything.
|
||||||
FNameNoInit Tag; // Strife's tag name. FIXME: should be case sensitive!
|
FString * Tag; // Strife's tag name.
|
||||||
|
int DesignatedTeam; // Allow for friendly fire cacluations to be done on non-players.
|
||||||
|
|
||||||
AActor *BlockingMobj; // Actor that blocked the last move
|
AActor *BlockingMobj; // Actor that blocked the last move
|
||||||
line_t *BlockingLine; // Line that blocked the last move
|
line_t *BlockingLine; // Line that blocked the last move
|
||||||
|
@ -927,6 +931,7 @@ public:
|
||||||
private:
|
private:
|
||||||
static AActor *TIDHash[128];
|
static AActor *TIDHash[128];
|
||||||
static inline int TIDHASH (int key) { return key & 127; }
|
static inline int TIDHASH (int key) { return key & 127; }
|
||||||
|
static FSharedStringArena mStringPropertyData;
|
||||||
|
|
||||||
friend class FActorIterator;
|
friend class FActorIterator;
|
||||||
|
|
||||||
|
|
|
@ -1028,8 +1028,8 @@ static void PrintSecretString(const char *string, bool thislevel)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (foundone) colstr = TEXTCOLOR_YELLOW;
|
if (foundone) colstr = TEXTCOLOR_RED;
|
||||||
else colstr = TEXTCOLOR_RED;
|
else colstr = TEXTCOLOR_GREEN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FBrokenLines *brok = V_BreakLines(ConFont, screen->GetWidth()*95/100, string);
|
FBrokenLines *brok = V_BreakLines(ConFont, screen->GetWidth()*95/100, string);
|
||||||
|
|
|
@ -269,6 +269,10 @@ void FIWadManager::ParseIWadInfos(const char *fn)
|
||||||
}
|
}
|
||||||
delete resfile;
|
delete resfile;
|
||||||
}
|
}
|
||||||
|
if (mIWadNames.Size() == 0 || mIWads.Size() == 0)
|
||||||
|
{
|
||||||
|
I_FatalError("No IWAD definitions found");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -152,6 +152,7 @@ enum ELineFlags
|
||||||
ML_FIRSTSIDEONLY = 0x00800000, // activated only when crossed from front side
|
ML_FIRSTSIDEONLY = 0x00800000, // activated only when crossed from front side
|
||||||
ML_BLOCKPROJECTILE = 0x01000000,
|
ML_BLOCKPROJECTILE = 0x01000000,
|
||||||
ML_BLOCKUSE = 0x02000000, // blocks all use actions through this line
|
ML_BLOCKUSE = 0x02000000, // blocks all use actions through this line
|
||||||
|
ML_BLOCKSIGHT = 0x04000000, // blocks monster line of sight
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -142,6 +142,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BrainSpit)
|
||||||
}
|
}
|
||||||
// [GZ] Calculates when the projectile will have reached destination
|
// [GZ] Calculates when the projectile will have reached destination
|
||||||
spit->special2 += level.maptime;
|
spit->special2 += level.maptime;
|
||||||
|
spit->flags6 |= MF6_BOSSCUBE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isdefault)
|
if (!isdefault)
|
||||||
|
|
|
@ -612,6 +612,17 @@ void DIntermissionScreenScroller::Init(FIntermissionAction *desc, bool first)
|
||||||
mScrollDir = static_cast<FIntermissionActionScroller*>(desc)->mScrollDir;
|
mScrollDir = static_cast<FIntermissionActionScroller*>(desc)->mScrollDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DIntermissionScreenScroller::Responder (event_t *ev)
|
||||||
|
{
|
||||||
|
int res = Super::Responder(ev);
|
||||||
|
if (res == -1)
|
||||||
|
{
|
||||||
|
mBackground = mSecondPic;
|
||||||
|
mTicker = mScrollDelay + mScrollTime;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
void DIntermissionScreenScroller::Drawer ()
|
void DIntermissionScreenScroller::Drawer ()
|
||||||
{
|
{
|
||||||
FTexture *tex = TexMan[mFirstPic];
|
FTexture *tex = TexMan[mFirstPic];
|
||||||
|
|
|
@ -268,6 +268,7 @@ public:
|
||||||
|
|
||||||
DIntermissionScreenScroller() {}
|
DIntermissionScreenScroller() {}
|
||||||
virtual void Init(FIntermissionAction *desc, bool first);
|
virtual void Init(FIntermissionAction *desc, bool first);
|
||||||
|
virtual int Responder (event_t *ev);
|
||||||
virtual void Drawer ();
|
virtual void Drawer ();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -373,4 +373,5 @@ void FSharedStringArena::FreeAll()
|
||||||
FreeBlocks = block;
|
FreeBlocks = block;
|
||||||
}
|
}
|
||||||
memset(Buckets, 0, sizeof(Buckets));
|
memset(Buckets, 0, sizeof(Buckets));
|
||||||
|
TopBlock = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,9 @@
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __MEMARENA_H
|
||||||
|
#define __MEMARENA_H
|
||||||
|
|
||||||
#include "zstring.h"
|
#include "zstring.h"
|
||||||
|
|
||||||
// A general purpose arena.
|
// A general purpose arena.
|
||||||
|
@ -81,3 +84,6 @@ protected:
|
||||||
private:
|
private:
|
||||||
void *Alloc(size_t size) { return NULL; } // No access to FMemArena::Alloc for outsiders.
|
void *Alloc(size_t size) { return NULL; } // No access to FMemArena::Alloc for outsiders.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -507,11 +507,7 @@ bool M_Responder (event_t *ev)
|
||||||
// do we want mouse input?
|
// do we want mouse input?
|
||||||
if (ev->subtype >= EV_GUI_FirstMouseEvent && ev->subtype <= EV_GUI_LastMouseEvent)
|
if (ev->subtype >= EV_GUI_FirstMouseEvent && ev->subtype <= EV_GUI_LastMouseEvent)
|
||||||
{
|
{
|
||||||
// FIXME: Mouse events in SDL code are mostly useless so mouse is
|
|
||||||
// disabled until that code is fixed
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (!m_use_mouse)
|
if (!m_use_mouse)
|
||||||
#endif
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,19 +98,13 @@ void DReadThisMenu::Drawer()
|
||||||
prevpic = TexMan[gameinfo.infoPages[mScreen-2].GetChars()];
|
prevpic = TexMan[gameinfo.infoPages[mScreen-2].GetChars()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
screen->Dim(0, 1.0, 0,0, SCREENWIDTH, SCREENHEIGHT);
|
||||||
alpha = MIN<fixed_t> (Scale (gametic - mInfoTic, OPAQUE, TICRATE/3), OPAQUE);
|
alpha = MIN<fixed_t> (Scale (gametic - mInfoTic, OPAQUE, TICRATE/3), OPAQUE);
|
||||||
if (alpha < OPAQUE && prevpic != NULL)
|
if (alpha < OPAQUE && prevpic != NULL)
|
||||||
{
|
{
|
||||||
screen->DrawTexture (prevpic, 0, 0,
|
screen->DrawTexture (prevpic, 0, 0, DTA_Fullscreen, true, TAG_DONE);
|
||||||
DTA_DestWidth, screen->GetWidth(),
|
|
||||||
DTA_DestHeight, screen->GetHeight(),
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
}
|
||||||
screen->DrawTexture (tex, 0, 0,
|
screen->DrawTexture (tex, 0, 0, DTA_Fullscreen, true, DTA_Alpha, alpha, TAG_DONE);
|
||||||
DTA_DestWidth, screen->GetWidth(),
|
|
||||||
DTA_DestHeight, screen->GetHeight(),
|
|
||||||
DTA_Alpha, alpha,
|
|
||||||
TAG_DONE);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -443,6 +443,7 @@ xx(smoothlighting)
|
||||||
xx(blockprojectiles)
|
xx(blockprojectiles)
|
||||||
xx(blockuse)
|
xx(blockuse)
|
||||||
xx(hidden)
|
xx(hidden)
|
||||||
|
xx(blocksight)
|
||||||
|
|
||||||
xx(Renderstyle)
|
xx(Renderstyle)
|
||||||
|
|
||||||
|
|
|
@ -256,10 +256,11 @@ bool P_GetMidTexturePosition(const line_t *line, int sideno, fixed_t *ptextop, f
|
||||||
//
|
//
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
bool P_LineOpening_3dMidtex(AActor *thing, const line_t *linedef, fixed_t &opentop, fixed_t &openbottom)
|
bool P_LineOpening_3dMidtex(AActor *thing, const line_t *linedef, fixed_t &opentop, fixed_t &openbottom, bool *above)
|
||||||
{
|
{
|
||||||
fixed_t tt, tb;
|
fixed_t tt, tb;
|
||||||
|
|
||||||
|
*above = false;
|
||||||
if (P_GetMidTexturePosition(linedef, 0, &tt, &tb))
|
if (P_GetMidTexturePosition(linedef, 0, &tt, &tb))
|
||||||
{
|
{
|
||||||
if (thing->z + (thing->height/2) < (tt + tb)/2)
|
if (thing->z + (thing->height/2) < (tt + tb)/2)
|
||||||
|
@ -268,8 +269,11 @@ bool P_LineOpening_3dMidtex(AActor *thing, const line_t *linedef, fixed_t &opent
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(tt > openbottom) openbottom = tt;
|
if(tt > openbottom)
|
||||||
|
{
|
||||||
|
openbottom = tt;
|
||||||
|
*above = true;
|
||||||
|
}
|
||||||
// returns true if it touches the midtexture
|
// returns true if it touches the midtexture
|
||||||
return (abs(thing->z - tt) <= thing->MaxStepHeight);
|
return (abs(thing->z - tt) <= thing->MaxStepHeight);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ void P_Start3dMidtexInterpolations(TArray<DInterpolation *> &list, sector_t *sec
|
||||||
void P_Attach3dMidtexLinesToSector(sector_t *dest, int lineid, int tag, bool ceiling);
|
void P_Attach3dMidtexLinesToSector(sector_t *dest, int lineid, int tag, bool ceiling);
|
||||||
bool P_GetMidTexturePosition(const line_t *line, int sideno, fixed_t *ptextop, fixed_t *ptexbot);
|
bool P_GetMidTexturePosition(const line_t *line, int sideno, fixed_t *ptextop, fixed_t *ptexbot);
|
||||||
bool P_Check3dMidSwitch(AActor *actor, line_t *line, int side);
|
bool P_Check3dMidSwitch(AActor *actor, line_t *line, int side);
|
||||||
bool P_LineOpening_3dMidtex(AActor *thing, const line_t *linedef, fixed_t &opentop, fixed_t &openbottom);
|
bool P_LineOpening_3dMidtex(AActor *thing, const line_t *linedef, fixed_t &opentop, fixed_t &openbottom, bool *above);
|
||||||
|
|
||||||
bool P_MoveLinkedSectors(sector_t *sector, int crush, fixed_t move, bool ceiling);
|
bool P_MoveLinkedSectors(sector_t *sector, int crush, fixed_t move, bool ceiling);
|
||||||
void P_StartLinkedSectorInterpolations(TArray<DInterpolation *> &list, sector_t *sector, bool ceiling);
|
void P_StartLinkedSectorInterpolations(TArray<DInterpolation *> &list, sector_t *sector, bool ceiling);
|
||||||
|
|
|
@ -1964,6 +1964,7 @@ DLevelScript::~DLevelScript ()
|
||||||
{
|
{
|
||||||
if (localvars != NULL)
|
if (localvars != NULL)
|
||||||
delete[] localvars;
|
delete[] localvars;
|
||||||
|
localvars = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DLevelScript::Unlink ()
|
void DLevelScript::Unlink ()
|
||||||
|
@ -2542,6 +2543,7 @@ enum
|
||||||
APROP_ScaleX = 29,
|
APROP_ScaleX = 29,
|
||||||
APROP_ScaleY = 30,
|
APROP_ScaleY = 30,
|
||||||
APROP_Dormant = 31,
|
APROP_Dormant = 31,
|
||||||
|
APROP_Mass = 32,
|
||||||
};
|
};
|
||||||
|
|
||||||
// These are needed for ACS's APROP_RenderStyle
|
// These are needed for ACS's APROP_RenderStyle
|
||||||
|
@ -2709,7 +2711,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value)
|
||||||
actor->Score = value;
|
actor->Score = value;
|
||||||
|
|
||||||
case APROP_NameTag:
|
case APROP_NameTag:
|
||||||
actor->Tag = FBehavior::StaticLookupString(value);
|
actor->SetTag(FBehavior::StaticLookupString(value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case APROP_DamageFactor:
|
case APROP_DamageFactor:
|
||||||
|
@ -2730,6 +2732,10 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value)
|
||||||
actor->scaleY = value;
|
actor->scaleY = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case APROP_Mass:
|
||||||
|
actor->Mass = value;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// do nothing.
|
// do nothing.
|
||||||
break;
|
break;
|
||||||
|
@ -2795,6 +2801,7 @@ int DLevelScript::GetActorProperty (int tid, int property)
|
||||||
case APROP_WaterLevel: return actor->waterlevel;
|
case APROP_WaterLevel: return actor->waterlevel;
|
||||||
case APROP_ScaleX: return actor->scaleX;
|
case APROP_ScaleX: return actor->scaleX;
|
||||||
case APROP_ScaleY: return actor->scaleY;
|
case APROP_ScaleY: return actor->scaleY;
|
||||||
|
case APROP_Mass: return actor->Mass;
|
||||||
|
|
||||||
default: return 0;
|
default: return 0;
|
||||||
}
|
}
|
||||||
|
@ -2832,6 +2839,7 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value)
|
||||||
case APROP_WaterLevel:
|
case APROP_WaterLevel:
|
||||||
case APROP_ScaleX:
|
case APROP_ScaleX:
|
||||||
case APROP_ScaleY:
|
case APROP_ScaleY:
|
||||||
|
case APROP_Mass:
|
||||||
return (GetActorProperty(tid, property) == value);
|
return (GetActorProperty(tid, property) == value);
|
||||||
|
|
||||||
// Boolean values need to compare to a binary version of value
|
// Boolean values need to compare to a binary version of value
|
||||||
|
@ -3052,6 +3060,7 @@ enum EACSFunctions
|
||||||
ACSF_GetPolyobjX,
|
ACSF_GetPolyobjX,
|
||||||
ACSF_GetPolyobjY,
|
ACSF_GetPolyobjY,
|
||||||
ACSF_CheckSight,
|
ACSF_CheckSight,
|
||||||
|
ACSF_SpawnForced,
|
||||||
};
|
};
|
||||||
|
|
||||||
int DLevelScript::SideFromID(int id, int side)
|
int DLevelScript::SideFromID(int id, int side)
|
||||||
|
@ -3523,6 +3532,9 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ACSF_SpawnForced:
|
||||||
|
return DoSpawn(args[0], args[1], args[2], args[3], args[4], args[5], true);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -6021,8 +6033,7 @@ int DLevelScript::RunScript ()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
STACK(1) = 0 == stricmp (FBehavior::StaticLookupString (STACK(1)),
|
STACK(1) = activator->player->ReadyWeapon->GetClass()->TypeName == FName(FBehavior::StaticLookupString (STACK(1)), true);
|
||||||
activator->player->ReadyWeapon->GetClass()->TypeName.GetChars());
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -6725,9 +6736,18 @@ DLevelScript::DLevelScript (AActor *who, line_t *where, int num, const ScriptPtr
|
||||||
script = num;
|
script = num;
|
||||||
numlocalvars = code->VarCount;
|
numlocalvars = code->VarCount;
|
||||||
localvars = new SDWORD[code->VarCount];
|
localvars = new SDWORD[code->VarCount];
|
||||||
|
if (code->VarCount > 0)
|
||||||
|
{
|
||||||
localvars[0] = arg0;
|
localvars[0] = arg0;
|
||||||
|
if (code->VarCount > 1)
|
||||||
|
{
|
||||||
localvars[1] = arg1;
|
localvars[1] = arg1;
|
||||||
|
if (code->VarCount > 2)
|
||||||
|
{
|
||||||
localvars[2] = arg2;
|
localvars[2] = arg2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
memset (localvars+code->ArgCount, 0, (code->VarCount-code->ArgCount)*sizeof(SDWORD));
|
memset (localvars+code->ArgCount, 0, (code->VarCount-code->ArgCount)*sizeof(SDWORD));
|
||||||
pc = module->GetScriptAddress (code);
|
pc = module->GetScriptAddress (code);
|
||||||
activator = who;
|
activator = who;
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "thingdef/thingdef.h"
|
#include "thingdef/thingdef.h"
|
||||||
#include "d_dehacked.h"
|
#include "d_dehacked.h"
|
||||||
#include "g_level.h"
|
#include "g_level.h"
|
||||||
|
#include "teaminfo.h"
|
||||||
|
|
||||||
#include "gi.h"
|
#include "gi.h"
|
||||||
|
|
||||||
|
@ -308,7 +309,7 @@ bool P_CheckMissileRange (AActor *actor)
|
||||||
{
|
{
|
||||||
fixed_t dist;
|
fixed_t dist;
|
||||||
|
|
||||||
if (!P_CheckSight (actor, actor->target, SF_SEEPASTBLOCKEVERYTHING|SF_SEEPASTSHOOTABLELINES))
|
if (!P_CheckSight (actor, actor->target, SF_SEEPASTBLOCKEVERYTHING))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (actor->flags & MF_JUSTHIT)
|
if (actor->flags & MF_JUSTHIT)
|
||||||
|
@ -1150,7 +1151,7 @@ bool P_IsVisible(AActor *lookee, AActor *other, INTBOOL allaround, FLookExParams
|
||||||
}
|
}
|
||||||
|
|
||||||
// P_CheckSight is by far the most expensive operation in here so let's do it last.
|
// P_CheckSight is by far the most expensive operation in here so let's do it last.
|
||||||
return P_CheckSight(lookee, other, SF_SEEPASTBLOCKEVERYTHING);
|
return P_CheckSight(lookee, other, SF_SEEPASTSHOOTABLELINES);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -1417,9 +1418,7 @@ AActor *LookForEnemiesInBlock (AActor *lookee, int index, void *extparam)
|
||||||
other = NULL;
|
other = NULL;
|
||||||
if (link->flags & MF_FRIENDLY)
|
if (link->flags & MF_FRIENDLY)
|
||||||
{
|
{
|
||||||
if (deathmatch &&
|
if (!lookee->IsFriend(link))
|
||||||
lookee->FriendPlayer != 0 && link->FriendPlayer != 0 &&
|
|
||||||
lookee->FriendPlayer != link->FriendPlayer)
|
|
||||||
{
|
{
|
||||||
// This is somebody else's friend, so go after it
|
// This is somebody else's friend, so go after it
|
||||||
other = link;
|
other = link;
|
||||||
|
@ -1581,7 +1580,7 @@ bool P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// [SP] If you don't see any enemies in deathmatch, look for players (but only when friend to a specific player.)
|
// [SP] If you don't see any enemies in deathmatch, look for players (but only when friend to a specific player.)
|
||||||
if (actor->FriendPlayer == 0) return result;
|
if (actor->FriendPlayer == 0 && (!teamplay || actor->DesignatedTeam == TEAM_NONE)) return result;
|
||||||
if (result || !deathmatch) return true;
|
if (result || !deathmatch) return true;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1664,10 +1663,8 @@ bool P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params)
|
||||||
// We're going to ignore our master, but go after his enemies.
|
// We're going to ignore our master, but go after his enemies.
|
||||||
if ( actor->flags & MF_FRIENDLY )
|
if ( actor->flags & MF_FRIENDLY )
|
||||||
{
|
{
|
||||||
if ( actor->FriendPlayer == 0 )
|
if ( actor->IsFriend(player->mo) )
|
||||||
continue; // I have no friends, I will ignore players.
|
continue;
|
||||||
if ( actor->FriendPlayer == player->mo->FriendPlayer )
|
|
||||||
continue; // This is my master.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((player->mo->flags & MF_SHADOW && !(i_compatflags & COMPATF_INVISIBILITY)) ||
|
if ((player->mo->flags & MF_SHADOW && !(i_compatflags & COMPATF_INVISIBILITY)) ||
|
||||||
|
|
|
@ -1087,6 +1087,21 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [RH] Avoid friendly fire if enabled
|
||||||
|
if (!(flags & DMG_FORCED) && source != NULL &&
|
||||||
|
((player && player != source->player) || !player) &&
|
||||||
|
target->IsTeammate (source))
|
||||||
|
{
|
||||||
|
if (player)
|
||||||
|
FriendlyFire = true;
|
||||||
|
if (damage < TELEFRAG_DAMAGE)
|
||||||
|
{ // Still allow telefragging :-(
|
||||||
|
damage = (int)((float)damage * level.teamdamage);
|
||||||
|
if (damage <= 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// player specific
|
// player specific
|
||||||
//
|
//
|
||||||
|
@ -1115,17 +1130,6 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [RH] Avoid friendly fire if enabled
|
|
||||||
if (source != NULL && player != source->player && target->IsTeammate (source))
|
|
||||||
{
|
|
||||||
FriendlyFire = true;
|
|
||||||
if (damage < TELEFRAG_DAMAGE)
|
|
||||||
{ // Still allow telefragging :-(
|
|
||||||
damage = (int)((float)damage * level.teamdamage);
|
|
||||||
if (damage <= 0)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!(flags & DMG_NO_ARMOR) && player->mo->Inventory != NULL)
|
if (!(flags & DMG_NO_ARMOR) && player->mo->Inventory != NULL)
|
||||||
{
|
{
|
||||||
int newdam = damage;
|
int newdam = damage;
|
||||||
|
|
|
@ -2473,6 +2473,7 @@ FUNC(LS_Line_SetBlocking)
|
||||||
ML_BLOCKEVERYTHING,
|
ML_BLOCKEVERYTHING,
|
||||||
ML_RAILING,
|
ML_RAILING,
|
||||||
ML_BLOCKUSE,
|
ML_BLOCKUSE,
|
||||||
|
ML_BLOCKSIGHT,
|
||||||
-1
|
-1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -232,6 +232,7 @@ struct FLineOpening
|
||||||
FTextureID ceilingpic;
|
FTextureID ceilingpic;
|
||||||
FTextureID floorpic;
|
FTextureID floorpic;
|
||||||
bool touchmidtex;
|
bool touchmidtex;
|
||||||
|
bool abovemidtex;
|
||||||
};
|
};
|
||||||
|
|
||||||
void P_LineOpening (FLineOpening &open, AActor *thing, const line_t *linedef, fixed_t x, fixed_t y, fixed_t refx=FIXED_MIN, fixed_t refy=0);
|
void P_LineOpening (FLineOpening &open, AActor *thing, const line_t *linedef, fixed_t x, fixed_t y, fixed_t refx=FIXED_MIN, fixed_t refy=0);
|
||||||
|
@ -348,6 +349,7 @@ struct FCheckPosition
|
||||||
FTextureID ceilingpic;
|
FTextureID ceilingpic;
|
||||||
sector_t *ceilingsector;
|
sector_t *ceilingsector;
|
||||||
bool touchmidtex;
|
bool touchmidtex;
|
||||||
|
bool abovemidtex;
|
||||||
bool floatok;
|
bool floatok;
|
||||||
bool FromPMove;
|
bool FromPMove;
|
||||||
line_t *ceilingline;
|
line_t *ceilingline;
|
||||||
|
|
|
@ -148,10 +148,12 @@ static bool PIT_FindFloorCeiling (line_t *ld, const FBoundingBox &box, FCheckPos
|
||||||
tmf.floorz = open.bottom;
|
tmf.floorz = open.bottom;
|
||||||
tmf.floorsector = open.bottomsec;
|
tmf.floorsector = open.bottomsec;
|
||||||
tmf.touchmidtex = open.touchmidtex;
|
tmf.touchmidtex = open.touchmidtex;
|
||||||
|
tmf.abovemidtex = open.abovemidtex;
|
||||||
}
|
}
|
||||||
else if (open.bottom == tmf.floorz)
|
else if (open.bottom == tmf.floorz)
|
||||||
{
|
{
|
||||||
tmf.touchmidtex |= open.touchmidtex;
|
tmf.touchmidtex |= open.touchmidtex;
|
||||||
|
tmf.abovemidtex |= open.abovemidtex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (open.lowfloor < tmf.dropoffz)
|
if (open.lowfloor < tmf.dropoffz)
|
||||||
|
@ -250,6 +252,7 @@ void P_FindFloorCeiling (AActor *actor, bool onlyspawnpos)
|
||||||
FBoundingBox box(tmf.x, tmf.y, actor->radius);
|
FBoundingBox box(tmf.x, tmf.y, actor->radius);
|
||||||
|
|
||||||
tmf.touchmidtex = false;
|
tmf.touchmidtex = false;
|
||||||
|
tmf.abovemidtex = false;
|
||||||
validcount++;
|
validcount++;
|
||||||
|
|
||||||
FBlockLinesIterator it(box);
|
FBlockLinesIterator it(box);
|
||||||
|
@ -262,7 +265,7 @@ void P_FindFloorCeiling (AActor *actor, bool onlyspawnpos)
|
||||||
|
|
||||||
if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz;
|
if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz;
|
||||||
|
|
||||||
if (!onlyspawnpos || (tmf.touchmidtex && (tmf.floorz <= actor->z)))
|
if (!onlyspawnpos || (tmf.abovemidtex && (tmf.floorz <= actor->z)))
|
||||||
{
|
{
|
||||||
actor->floorz = tmf.floorz;
|
actor->floorz = tmf.floorz;
|
||||||
actor->dropoffz = tmf.dropoffz;
|
actor->dropoffz = tmf.dropoffz;
|
||||||
|
@ -314,6 +317,8 @@ bool P_TeleportMove (AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefr
|
||||||
tmf.x = x;
|
tmf.x = x;
|
||||||
tmf.y = y;
|
tmf.y = y;
|
||||||
tmf.z = z;
|
tmf.z = z;
|
||||||
|
tmf.touchmidtex = false;
|
||||||
|
tmf.abovemidtex = false;
|
||||||
P_GetFloorCeilingZ(tmf, true);
|
P_GetFloorCeilingZ(tmf, true);
|
||||||
|
|
||||||
spechit.Clear ();
|
spechit.Clear ();
|
||||||
|
@ -325,10 +330,14 @@ bool P_TeleportMove (AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefr
|
||||||
FBlockLinesIterator it(box);
|
FBlockLinesIterator it(box);
|
||||||
line_t *ld;
|
line_t *ld;
|
||||||
|
|
||||||
|
// P_LineOpening requires the thing's z to be the destination ín order to work.
|
||||||
|
fixed_t savedz = thing->z;
|
||||||
|
thing->z = z;
|
||||||
while ((ld = it.Next()))
|
while ((ld = it.Next()))
|
||||||
{
|
{
|
||||||
PIT_FindFloorCeiling(ld, box, tmf);
|
PIT_FindFloorCeiling(ld, box, tmf);
|
||||||
}
|
}
|
||||||
|
thing->z = savedz;
|
||||||
|
|
||||||
if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz;
|
if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz;
|
||||||
|
|
||||||
|
@ -731,7 +740,8 @@ bool PIT_CheckLine (line_t *ld, const FBoundingBox &box, FCheckPosition &tm)
|
||||||
// so don't mess around with the z-position
|
// so don't mess around with the z-position
|
||||||
if (ld->frontsector->floorplane==ld->backsector->floorplane &&
|
if (ld->frontsector->floorplane==ld->backsector->floorplane &&
|
||||||
ld->frontsector->floorplane==tm.thing->Sector->floorplane &&
|
ld->frontsector->floorplane==tm.thing->Sector->floorplane &&
|
||||||
!ld->frontsector->e->XFloor.ffloors.Size() && !ld->backsector->e->XFloor.ffloors.Size())
|
!ld->frontsector->e->XFloor.ffloors.Size() && !ld->backsector->e->XFloor.ffloors.Size() &&
|
||||||
|
!open.abovemidtex)
|
||||||
{
|
{
|
||||||
open.bottom=INT_MIN;
|
open.bottom=INT_MIN;
|
||||||
}
|
}
|
||||||
|
@ -768,11 +778,13 @@ bool PIT_CheckLine (line_t *ld, const FBoundingBox &box, FCheckPosition &tm)
|
||||||
tm.floorsector = open.bottomsec;
|
tm.floorsector = open.bottomsec;
|
||||||
tm.floorpic = open.floorpic;
|
tm.floorpic = open.floorpic;
|
||||||
tm.touchmidtex = open.touchmidtex;
|
tm.touchmidtex = open.touchmidtex;
|
||||||
|
tm.abovemidtex = open.abovemidtex;
|
||||||
tm.thing->BlockingLine = ld;
|
tm.thing->BlockingLine = ld;
|
||||||
}
|
}
|
||||||
else if (open.bottom == tm.floorz)
|
else if (open.bottom == tm.floorz)
|
||||||
{
|
{
|
||||||
tm.touchmidtex |= open.touchmidtex;
|
tm.touchmidtex |= open.touchmidtex;
|
||||||
|
tm.abovemidtex |= open.abovemidtex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (open.lowfloor < tm.dropoffz)
|
if (open.lowfloor < tm.dropoffz)
|
||||||
|
@ -1258,6 +1270,7 @@ bool P_CheckPosition (AActor *thing, fixed_t x, fixed_t y, FCheckPosition &tm)
|
||||||
tm.ceilingpic = newsec->GetTexture(sector_t::ceiling);
|
tm.ceilingpic = newsec->GetTexture(sector_t::ceiling);
|
||||||
tm.ceilingsector = newsec;
|
tm.ceilingsector = newsec;
|
||||||
tm.touchmidtex = false;
|
tm.touchmidtex = false;
|
||||||
|
tm.abovemidtex = false;
|
||||||
|
|
||||||
//Added by MC: Fill the tmsector.
|
//Added by MC: Fill the tmsector.
|
||||||
tm.sector = newsec;
|
tm.sector = newsec;
|
||||||
|
@ -2864,6 +2877,7 @@ bool aim_t::AimTraverse3DFloors(const divline_t &trace, intercept_t * in)
|
||||||
nextsector=NULL;
|
nextsector=NULL;
|
||||||
nexttopplane=nextbottomplane=NULL;
|
nexttopplane=nextbottomplane=NULL;
|
||||||
|
|
||||||
|
if (li->backsector == NULL) return true; // shouldn't really happen but crashed once for me...
|
||||||
if (li->frontsector->e->XFloor.ffloors.Size() || li->backsector->e->XFloor.ffloors.Size())
|
if (li->frontsector->e->XFloor.ffloors.Size() || li->backsector->e->XFloor.ffloors.Size())
|
||||||
{
|
{
|
||||||
int frontflag;
|
int frontflag;
|
||||||
|
|
|
@ -212,9 +212,9 @@ void P_LineOpening (FLineOpening &open, AActor *actor, const line_t *linedef,
|
||||||
if (actor != NULL && linedef->frontsector != NULL && linedef->backsector != NULL &&
|
if (actor != NULL && linedef->frontsector != NULL && linedef->backsector != NULL &&
|
||||||
linedef->flags & ML_3DMIDTEX)
|
linedef->flags & ML_3DMIDTEX)
|
||||||
{
|
{
|
||||||
open.touchmidtex = P_LineOpening_3dMidtex(actor, linedef, open.top, open.bottom);
|
open.touchmidtex = P_LineOpening_3dMidtex(actor, linedef, open.top, open.bottom, &open.abovemidtex);
|
||||||
}
|
}
|
||||||
else open.touchmidtex = false;
|
else open.abovemidtex = open.touchmidtex = false;
|
||||||
|
|
||||||
open.range = open.top - open.bottom;
|
open.range = open.top - open.bottom;
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,9 +299,12 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< BlockingLine
|
<< BlockingLine
|
||||||
<< pushfactor
|
<< pushfactor
|
||||||
<< Species
|
<< Species
|
||||||
<< Score
|
<< Score;
|
||||||
<< Tag
|
if (SaveVersion >= 3113)
|
||||||
<< lastpush << lastbump
|
{
|
||||||
|
arc << DesignatedTeam;
|
||||||
|
}
|
||||||
|
arc << lastpush << lastbump
|
||||||
<< PainThreshold
|
<< PainThreshold
|
||||||
<< DamageFactor
|
<< DamageFactor
|
||||||
<< WeaveIndexXY << WeaveIndexZ
|
<< WeaveIndexXY << WeaveIndexZ
|
||||||
|
@ -309,6 +312,17 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< PoisonDamage << PoisonDuration << PoisonPeriod
|
<< PoisonDamage << PoisonDuration << PoisonPeriod
|
||||||
<< ConversationRoot << Conversation;
|
<< ConversationRoot << Conversation;
|
||||||
|
|
||||||
|
{
|
||||||
|
FString tagstr;
|
||||||
|
if (arc.IsStoring() && Tag != NULL && Tag->Len() > 0) tagstr = *Tag;
|
||||||
|
arc << tagstr;
|
||||||
|
if (arc.IsLoading())
|
||||||
|
{
|
||||||
|
if (tagstr.Len() == 0) Tag = NULL;
|
||||||
|
else Tag = mStringPropertyData.Alloc(tagstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (arc.IsLoading ())
|
if (arc.IsLoading ())
|
||||||
{
|
{
|
||||||
touching_sectorlist = NULL;
|
touching_sectorlist = NULL;
|
||||||
|
@ -765,6 +779,7 @@ void AActor::CopyFriendliness (AActor *other, bool changeTarget)
|
||||||
flags3 = (flags3 & ~(MF3_NOSIGHTCHECK | MF3_HUNTPLAYERS)) | (other->flags3 & (MF3_NOSIGHTCHECK | MF3_HUNTPLAYERS));
|
flags3 = (flags3 & ~(MF3_NOSIGHTCHECK | MF3_HUNTPLAYERS)) | (other->flags3 & (MF3_NOSIGHTCHECK | MF3_HUNTPLAYERS));
|
||||||
flags4 = (flags4 & ~MF4_NOHATEPLAYERS) | (other->flags4 & MF4_NOHATEPLAYERS);
|
flags4 = (flags4 & ~MF4_NOHATEPLAYERS) | (other->flags4 & MF4_NOHATEPLAYERS);
|
||||||
FriendPlayer = other->FriendPlayer;
|
FriendPlayer = other->FriendPlayer;
|
||||||
|
DesignatedTeam = other->DesignatedTeam;
|
||||||
if (changeTarget && other->target != NULL && !(other->target->flags3 & MF3_NOTARGET))
|
if (changeTarget && other->target != NULL && !(other->target->flags3 & MF3_NOTARGET))
|
||||||
{
|
{
|
||||||
// LastHeard must be set as well so that A_Look can react to the new target if called
|
// LastHeard must be set as well so that A_Look can react to the new target if called
|
||||||
|
@ -2735,6 +2750,11 @@ void AActor::Tick ()
|
||||||
//Added by MC: Freeze mode.
|
//Added by MC: Freeze mode.
|
||||||
if (bglobal.freeze || level.flags2 & LEVEL2_FROZEN)
|
if (bglobal.freeze || level.flags2 & LEVEL2_FROZEN)
|
||||||
{
|
{
|
||||||
|
// Boss cubes shouldn't be accelerated by timefreeze
|
||||||
|
if (flags6 & MF6_BOSSCUBE)
|
||||||
|
{
|
||||||
|
special2++;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2765,6 +2785,11 @@ void AActor::Tick ()
|
||||||
|
|
||||||
if (!(flags5 & MF5_NOTIMEFREEZE))
|
if (!(flags5 & MF5_NOTIMEFREEZE))
|
||||||
{
|
{
|
||||||
|
// Boss cubes shouldn't be accelerated by timefreeze
|
||||||
|
if (flags6 & MF6_BOSSCUBE)
|
||||||
|
{
|
||||||
|
special2++;
|
||||||
|
}
|
||||||
//Added by MC: Freeze mode.
|
//Added by MC: Freeze mode.
|
||||||
if (bglobal.freeze && !(player && !player->isbot))
|
if (bglobal.freeze && !(player && !player->isbot))
|
||||||
{
|
{
|
||||||
|
@ -5286,12 +5311,18 @@ AActor *P_SpawnPlayerMissile (AActor *source, fixed_t x, fixed_t y, fixed_t z,
|
||||||
|
|
||||||
bool AActor::IsTeammate (AActor *other)
|
bool AActor::IsTeammate (AActor *other)
|
||||||
{
|
{
|
||||||
if (!player || !other || !other->player)
|
if (!other)
|
||||||
return false;
|
return false;
|
||||||
if (!deathmatch)
|
else if (!deathmatch && player && other->player)
|
||||||
return true;
|
return true;
|
||||||
if (teamplay && other->player->userinfo.team != TEAM_NONE &&
|
int myTeam = DesignatedTeam;
|
||||||
player->userinfo.team == other->player->userinfo.team)
|
int otherTeam = other->DesignatedTeam;
|
||||||
|
if (player)
|
||||||
|
myTeam = player->userinfo.team;
|
||||||
|
if (other->player)
|
||||||
|
otherTeam = other->player->userinfo.team;
|
||||||
|
if (teamplay && myTeam != TEAM_NONE &&
|
||||||
|
myTeam == otherTeam)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -5343,6 +5374,11 @@ bool AActor::IsFriend (AActor *other)
|
||||||
{
|
{
|
||||||
if (flags & other->flags & MF_FRIENDLY)
|
if (flags & other->flags & MF_FRIENDLY)
|
||||||
{
|
{
|
||||||
|
if (deathmatch && teamplay)
|
||||||
|
return IsTeammate(other) ||
|
||||||
|
(FriendPlayer != 0 && other->FriendPlayer != 0 &&
|
||||||
|
players[FriendPlayer-1].mo->IsTeammate(players[other->FriendPlayer-1].mo));
|
||||||
|
|
||||||
return !deathmatch ||
|
return !deathmatch ||
|
||||||
FriendPlayer == other->FriendPlayer ||
|
FriendPlayer == other->FriendPlayer ||
|
||||||
FriendPlayer == 0 ||
|
FriendPlayer == 0 ||
|
||||||
|
@ -5368,6 +5404,11 @@ bool AActor::IsHostile (AActor *other)
|
||||||
// Both monsters are friendly and belong to the same player if applicable.
|
// Both monsters are friendly and belong to the same player if applicable.
|
||||||
if (flags & other->flags & MF_FRIENDLY)
|
if (flags & other->flags & MF_FRIENDLY)
|
||||||
{
|
{
|
||||||
|
if (deathmatch && teamplay)
|
||||||
|
return !IsTeammate(other) &&
|
||||||
|
!(FriendPlayer != 0 && other->FriendPlayer != 0 &&
|
||||||
|
players[FriendPlayer-1].mo->IsTeammate(players[other->FriendPlayer-1].mo));
|
||||||
|
|
||||||
return deathmatch &&
|
return deathmatch &&
|
||||||
FriendPlayer != other->FriendPlayer &&
|
FriendPlayer != other->FriendPlayer &&
|
||||||
FriendPlayer !=0 &&
|
FriendPlayer !=0 &&
|
||||||
|
@ -5521,11 +5562,13 @@ bool AActor::IsSentient() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FSharedStringArena AActor::mStringPropertyData;
|
||||||
|
|
||||||
const char *AActor::GetTag(const char *def) const
|
const char *AActor::GetTag(const char *def) const
|
||||||
{
|
{
|
||||||
if (Tag != NAME_None)
|
if (Tag != NULL)
|
||||||
{
|
{
|
||||||
const char *tag = Tag.GetChars();
|
const char *tag = Tag->GetChars();
|
||||||
if (tag[0] == '$')
|
if (tag[0] == '$')
|
||||||
{
|
{
|
||||||
return GStrings(tag + 1);
|
return GStrings(tag + 1);
|
||||||
|
@ -5545,6 +5588,18 @@ const char *AActor::GetTag(const char *def) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AActor::SetTag(const char *def)
|
||||||
|
{
|
||||||
|
if (def == NULL || *def == 0)
|
||||||
|
{
|
||||||
|
Tag = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Tag = mStringPropertyData.Alloc(def);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void AActor::ClearCounters()
|
void AActor::ClearCounters()
|
||||||
{
|
{
|
||||||
|
|
|
@ -256,7 +256,7 @@ bool SightCheck::P_SightCheckLine (line_t *ld)
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to early out the check
|
// try to early out the check
|
||||||
if (!ld->backsector || !(ld->flags & ML_TWOSIDED))
|
if (!ld->backsector || !(ld->flags & ML_TWOSIDED) || (ld->flags & ML_BLOCKSIGHT))
|
||||||
return false; // stop checking
|
return false; // stop checking
|
||||||
|
|
||||||
// [RH] don't see past block everything lines
|
// [RH] don't see past block everything lines
|
||||||
|
|
|
@ -874,6 +874,10 @@ public:
|
||||||
Flag(ld->flags, ML_BLOCKUSE, key);
|
Flag(ld->flags, ML_BLOCKUSE, key);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
case NAME_blocksight:
|
||||||
|
Flag(ld->flags, ML_BLOCKSIGHT, key);
|
||||||
|
continue;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1115,6 +1115,7 @@ void R_InitSkins (void)
|
||||||
for (k = 0; k < MAX_SPRITE_FRAMES; ++k)
|
for (k = 0; k < MAX_SPRITE_FRAMES; ++k)
|
||||||
{
|
{
|
||||||
sprtemp[k].Flip = 0;
|
sprtemp[k].Flip = 0;
|
||||||
|
sprtemp[k].Voxel = NULL;
|
||||||
}
|
}
|
||||||
maxframe = -1;
|
maxframe = -1;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
static void I_CheckGUICapture ();
|
static void I_CheckGUICapture ();
|
||||||
static void I_CheckNativeMouse ();
|
static void I_CheckNativeMouse ();
|
||||||
|
|
||||||
static bool GUICapture;
|
bool GUICapture;
|
||||||
static bool NativeMouse = true;
|
static bool NativeMouse = true;
|
||||||
|
|
||||||
extern int paused;
|
extern int paused;
|
||||||
|
@ -36,6 +36,9 @@ EXTERN_CVAR (Bool, fullscreen)
|
||||||
extern int WaitingForKey, chatmodeon;
|
extern int WaitingForKey, chatmodeon;
|
||||||
extern constate_e ConsoleState;
|
extern constate_e ConsoleState;
|
||||||
|
|
||||||
|
extern SDL_Surface *cursorSurface;
|
||||||
|
extern SDL_Rect cursorBlit;
|
||||||
|
|
||||||
static BYTE KeySymToDIK[SDLK_LAST], DownState[SDLK_LAST];
|
static BYTE KeySymToDIK[SDLK_LAST], DownState[SDLK_LAST];
|
||||||
|
|
||||||
static WORD DIKToKeySym[256] =
|
static WORD DIKToKeySym[256] =
|
||||||
|
@ -114,6 +117,11 @@ static void I_CheckGUICapture ()
|
||||||
GUICapture = wantCapt;
|
GUICapture = wantCapt;
|
||||||
if (wantCapt)
|
if (wantCapt)
|
||||||
{
|
{
|
||||||
|
int x, y;
|
||||||
|
SDL_GetMouseState (&x, &y);
|
||||||
|
cursorBlit.x = x;
|
||||||
|
cursorBlit.y = y;
|
||||||
|
|
||||||
FlushDIKState ();
|
FlushDIKState ();
|
||||||
memset (DownState, 0, sizeof(DownState));
|
memset (DownState, 0, sizeof(DownState));
|
||||||
repeat = !sdl_nokeyrepeat;
|
repeat = !sdl_nokeyrepeat;
|
||||||
|
@ -260,15 +268,14 @@ static void I_CheckNativeMouse ()
|
||||||
if (wantNative != NativeMouse)
|
if (wantNative != NativeMouse)
|
||||||
{
|
{
|
||||||
NativeMouse = wantNative;
|
NativeMouse = wantNative;
|
||||||
|
SDL_ShowCursor (wantNative ? cursorSurface == NULL : 0);
|
||||||
if (wantNative)
|
if (wantNative)
|
||||||
{
|
{
|
||||||
SDL_ShowCursor (1);
|
|
||||||
SDL_WM_GrabInput (SDL_GRAB_OFF);
|
SDL_WM_GrabInput (SDL_GRAB_OFF);
|
||||||
FlushDIKState (KEY_MOUSE1, KEY_MOUSE8);
|
FlushDIKState (KEY_MOUSE1, KEY_MOUSE8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_ShowCursor (0);
|
|
||||||
SDL_WM_GrabInput (SDL_GRAB_ON);
|
SDL_WM_GrabInput (SDL_GRAB_ON);
|
||||||
CenterMouse ();
|
CenterMouse ();
|
||||||
}
|
}
|
||||||
|
@ -299,7 +306,10 @@ void MessagePump (const SDL_Event &sev)
|
||||||
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
case SDL_MOUSEMOTION:
|
||||||
if (!GUICapture || sev.button.button == 4 || sev.button.button == 5)
|
if (!GUICapture || sev.button.button == 4 || sev.button.button == 5)
|
||||||
|
{
|
||||||
|
if(sev.type != SDL_MOUSEMOTION)
|
||||||
{
|
{
|
||||||
event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
|
event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
|
||||||
/* These button mappings work with my Gentoo system using the
|
/* These button mappings work with my Gentoo system using the
|
||||||
|
@ -338,11 +348,22 @@ void MessagePump (const SDL_Event &sev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sev.button.button >= 1 && sev.button.button <= 3)
|
}
|
||||||
|
else if (sev.type == SDL_MOUSEMOTION || (sev.button.button >= 1 && sev.button.button <= 3))
|
||||||
{
|
{
|
||||||
|
int x, y;
|
||||||
|
SDL_GetMouseState (&x, &y);
|
||||||
|
|
||||||
|
cursorBlit.x = event.data1 = x;
|
||||||
|
cursorBlit.y = event.data2 = y;
|
||||||
event.type = EV_GUI_Event;
|
event.type = EV_GUI_Event;
|
||||||
|
if(sev.type == SDL_MOUSEMOTION)
|
||||||
|
event.subtype = EV_GUI_MouseMove;
|
||||||
|
else
|
||||||
|
{
|
||||||
event.subtype = sev.type == SDL_MOUSEBUTTONDOWN ? EV_GUI_LButtonDown : EV_GUI_LButtonUp;
|
event.subtype = sev.type == SDL_MOUSEBUTTONDOWN ? EV_GUI_LButtonDown : EV_GUI_LButtonUp;
|
||||||
event.subtype += (sev.button.button - 1) * 3;
|
event.subtype += (sev.button.button - 1) * 3;
|
||||||
|
}
|
||||||
D_PostEvent(&event);
|
D_PostEvent(&event);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,6 +60,9 @@
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
|
#include "v_palette.h"
|
||||||
|
#include "textures.h"
|
||||||
|
#include "bitmap.h"
|
||||||
|
|
||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
|
@ -830,7 +833,39 @@ unsigned int I_MakeRNGSeed()
|
||||||
return seed;
|
return seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_Surface *cursorSurface = NULL;
|
||||||
|
SDL_Rect cursorBlit = {0, 0, 32, 32};
|
||||||
bool I_SetCursor(FTexture *cursorpic)
|
bool I_SetCursor(FTexture *cursorpic)
|
||||||
|
{
|
||||||
|
if (cursorpic != NULL && cursorpic->UseType != FTexture::TEX_Null)
|
||||||
|
{
|
||||||
|
// Must be no larger than 32x32.
|
||||||
|
if (cursorpic->GetWidth() > 32 || cursorpic->GetHeight() > 32)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cursorSurface == NULL)
|
||||||
|
cursorSurface = SDL_CreateRGBSurface (0, 32, 32, 32, MAKEARGB(0,255,0,0), MAKEARGB(0,0,255,0), MAKEARGB(0,0,0,255), MAKEARGB(255,0,0,0));
|
||||||
|
|
||||||
|
SDL_ShowCursor(0);
|
||||||
|
SDL_LockSurface(cursorSurface);
|
||||||
|
BYTE buffer[32*32*4];
|
||||||
|
memset(buffer, 0, 32*32*4);
|
||||||
|
FBitmap bmp(buffer, 32*4, 32, 32);
|
||||||
|
cursorpic->CopyTrueColorPixels(&bmp, 0, 0);
|
||||||
|
memcpy(cursorSurface->pixels, bmp.GetPixels(), 32*32*4);
|
||||||
|
SDL_UnlockSurface(cursorSurface);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(1);
|
||||||
|
|
||||||
|
if (cursorSurface != NULL)
|
||||||
|
{
|
||||||
|
SDL_FreeSurface(cursorSurface);
|
||||||
|
cursorSurface = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -76,6 +76,9 @@ void DoBlending (const PalEntry *from, PalEntry *to, int count, int r, int g, in
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
|
||||||
extern IVideo *Video;
|
extern IVideo *Video;
|
||||||
|
extern SDL_Surface *cursorSurface;
|
||||||
|
extern SDL_Rect cursorBlit;
|
||||||
|
extern bool GUICapture;
|
||||||
|
|
||||||
EXTERN_CVAR (Float, Gamma)
|
EXTERN_CVAR (Float, Gamma)
|
||||||
|
|
||||||
|
@ -405,6 +408,12 @@ void SDLFB::Update ()
|
||||||
|
|
||||||
SDL_UnlockSurface (Screen);
|
SDL_UnlockSurface (Screen);
|
||||||
|
|
||||||
|
if (cursorSurface != NULL && GUICapture)
|
||||||
|
{
|
||||||
|
// SDL requires us to draw a surface to get true color cursors.
|
||||||
|
SDL_BlitSurface(cursorSurface, NULL, Screen, &cursorBlit);
|
||||||
|
}
|
||||||
|
|
||||||
SDLFlipCycles.Clock();
|
SDLFlipCycles.Clock();
|
||||||
SDL_Flip (Screen);
|
SDL_Flip (Screen);
|
||||||
SDLFlipCycles.Unclock();
|
SDLFlipCycles.Unclock();
|
||||||
|
|
|
@ -2037,6 +2037,21 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetScale)
|
||||||
self->scaleY = scaley ? scaley : scalex;
|
self->scaleY = scaley ? scaley : scalex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// A_SetMass(int mass)
|
||||||
|
//
|
||||||
|
// Sets the actor's mass.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetMass)
|
||||||
|
{
|
||||||
|
ACTION_PARAM_START(2);
|
||||||
|
ACTION_PARAM_INT(mass, 0);
|
||||||
|
|
||||||
|
self->Mass = mass;
|
||||||
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// A_SpawnDebris
|
// A_SpawnDebris
|
||||||
|
|
|
@ -61,6 +61,7 @@ DEFINE_MEMBER_VARIABLE(args, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(ceilingz, AActor)
|
DEFINE_MEMBER_VARIABLE(ceilingz, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(floorz, AActor)
|
DEFINE_MEMBER_VARIABLE(floorz, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(health, AActor)
|
DEFINE_MEMBER_VARIABLE(health, AActor)
|
||||||
|
DEFINE_MEMBER_VARIABLE(Mass, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(pitch, AActor)
|
DEFINE_MEMBER_VARIABLE(pitch, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(special, AActor)
|
DEFINE_MEMBER_VARIABLE(special, AActor)
|
||||||
DEFINE_MEMBER_VARIABLE(special1, AActor)
|
DEFINE_MEMBER_VARIABLE(special1, AActor)
|
||||||
|
|
|
@ -67,6 +67,7 @@
|
||||||
#include "r_translate.h"
|
#include "r_translate.h"
|
||||||
#include "a_morph.h"
|
#include "a_morph.h"
|
||||||
#include "colormatcher.h"
|
#include "colormatcher.h"
|
||||||
|
#include "teaminfo.h"
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -299,7 +300,7 @@ DEFINE_PROPERTY(skip_super, 0, Actor)
|
||||||
DEFINE_PROPERTY(tag, S, Actor)
|
DEFINE_PROPERTY(tag, S, Actor)
|
||||||
{
|
{
|
||||||
PROP_STRING_PARM(str, 0);
|
PROP_STRING_PARM(str, 0);
|
||||||
defaults->Tag = str;
|
defaults->SetTag(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -1120,6 +1121,17 @@ DEFINE_PROPERTY(activation, N, Actor)
|
||||||
defaults->activationtype = val;
|
defaults->activationtype = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
DEFINE_PROPERTY(designatedteam, I, Actor)
|
||||||
|
{
|
||||||
|
PROP_INT_PARM(val, 0);
|
||||||
|
if(val < 0 || (val >= (signed) Teams.Size() && val != TEAM_NONE))
|
||||||
|
I_Error("Invalid team designation.\n");
|
||||||
|
defaults->DesignatedTeam = val;
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Special inventory properties
|
// Special inventory properties
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
// SAVESIG should match SAVEVER.
|
// SAVESIG should match SAVEVER.
|
||||||
|
|
||||||
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
||||||
#define MINSAVEVER 3085
|
#define MINSAVEVER 3100
|
||||||
|
|
||||||
#if SVN_REVISION_NUMBER < MINSAVEVER
|
#if SVN_REVISION_NUMBER < MINSAVEVER
|
||||||
// If we don't know the current revision write something very high to ensure that
|
// If we don't know the current revision write something very high to ensure that
|
||||||
|
|
|
@ -2,7 +2,7 @@ cmake_minimum_required( VERSION 2.4 )
|
||||||
|
|
||||||
|
|
||||||
add_custom_command( OUTPUT ${ZDOOM_OUTPUT_DIR}/zdoom.pk3
|
add_custom_command( OUTPUT ${ZDOOM_OUTPUT_DIR}/zdoom.pk3
|
||||||
COMMAND ${CMAKE_BINARY_DIR}/tools/zipdir/zipdir -udf ${ZDOOM_OUTPUT_DIR}/zdoom.pk3 ${CMAKE_CURRENT_SOURCE_DIR}/static ${CMAKE_CURRENT_BINARY_DIR}/generated
|
COMMAND ${CMAKE_BINARY_DIR}/tools/zipdir/zipdir -udf ${ZDOOM_OUTPUT_DIR}/zdoom.pk3 ${CMAKE_CURRENT_SOURCE_DIR}/static
|
||||||
DEPENDS zipdir ${CMAKE_CURRENT_SOURCE_DIR}/static )
|
DEPENDS zipdir ${CMAKE_CURRENT_SOURCE_DIR}/static )
|
||||||
|
|
||||||
add_custom_target( pk3 ALL
|
add_custom_target( pk3 ALL
|
||||||
|
|
|
@ -21,6 +21,7 @@ ACTOR Actor native //: Thinker
|
||||||
PushFactor 0.25
|
PushFactor 0.25
|
||||||
WeaveIndexXY 0
|
WeaveIndexXY 0
|
||||||
WeaveIndexZ 16
|
WeaveIndexZ 16
|
||||||
|
DesignatedTeam 255
|
||||||
|
|
||||||
// Variables for the expression evaluator
|
// Variables for the expression evaluator
|
||||||
// NOTE: fixed_t and angle_t are only used here to ensure proper conversion
|
// NOTE: fixed_t and angle_t are only used here to ensure proper conversion
|
||||||
|
@ -32,6 +33,7 @@ ACTOR Actor native //: Thinker
|
||||||
native fixed_t ceilingz;
|
native fixed_t ceilingz;
|
||||||
native fixed_t floorz;
|
native fixed_t floorz;
|
||||||
native int health;
|
native int health;
|
||||||
|
native int mass;
|
||||||
native angle_t pitch;
|
native angle_t pitch;
|
||||||
native int special;
|
native int special;
|
||||||
native int tid;
|
native int tid;
|
||||||
|
@ -207,6 +209,7 @@ ACTOR Actor native //: Thinker
|
||||||
action native A_FadeOut(float reduce = 0.1, bool remove = true);
|
action native A_FadeOut(float reduce = 0.1, bool remove = true);
|
||||||
action native A_FadeTo(float target, float amount = 0.1, bool remove = false);
|
action native A_FadeTo(float target, float amount = 0.1, bool remove = false);
|
||||||
action native A_SetScale(float scalex, float scaley = 0);
|
action native A_SetScale(float scalex, float scaley = 0);
|
||||||
|
action native A_SetMass(int mass);
|
||||||
action native A_SpawnDebris(class<Actor> spawntype, bool transfer_translation = false, float mult_h = 1, float mult_v = 1);
|
action native A_SpawnDebris(class<Actor> spawntype, bool transfer_translation = false, float mult_h = 1, float mult_v = 1);
|
||||||
action native A_CheckSight(state label);
|
action native A_CheckSight(state label);
|
||||||
action native A_ExtChase(bool usemelee, bool usemissile, bool playactive = true, bool nightmarefast = false);
|
action native A_ExtChase(bool usemelee, bool usemissile, bool playactive = true, bool nightmarefast = false);
|
||||||
|
|
|
@ -122,6 +122,8 @@ ACTOR MinotaurFriend : Minotaur native
|
||||||
MNTR A 15 A_SetTranslucent(0.66, 0)
|
MNTR A 15 A_SetTranslucent(0.66, 0)
|
||||||
MNTR A 3 A_SetTranslucent(1, 0)
|
MNTR A 3 A_SetTranslucent(1, 0)
|
||||||
Goto Super::Spawn
|
Goto Super::Spawn
|
||||||
|
Idle:
|
||||||
|
Goto Super::Spawn
|
||||||
Death:
|
Death:
|
||||||
Goto FadeOut
|
Goto FadeOut
|
||||||
}
|
}
|
||||||
|
|
|
@ -526,12 +526,9 @@ OptionMenu "MouseOptions"
|
||||||
{
|
{
|
||||||
Title "MOUSE OPTIONS"
|
Title "MOUSE OPTIONS"
|
||||||
Option "Enable mouse", "use_mouse", "YesNo"
|
Option "Enable mouse", "use_mouse", "YesNo"
|
||||||
IfOption(Windows) // GUI mouse not operable in SDL interface right now.
|
|
||||||
{
|
|
||||||
Option "Enable mouse in menus", "m_use_mouse", "MenuMouse", "use_mouse"
|
Option "Enable mouse in menus", "m_use_mouse", "MenuMouse", "use_mouse"
|
||||||
Option "Show back button", "m_show_backbutton", "Corners", "use_mouse"
|
Option "Show back button", "m_show_backbutton", "Corners", "use_mouse"
|
||||||
Option "Cursor", "vid_cursor", "Cursors"
|
Option "Cursor", "vid_cursor", "Cursors"
|
||||||
}
|
|
||||||
StaticText ""
|
StaticText ""
|
||||||
Slider "Overall sensitivity", "mouse_sensitivity", 0.5, 2.5, 0.1
|
Slider "Overall sensitivity", "mouse_sensitivity", 0.5, 2.5, 0.1
|
||||||
Option "Prescale mouse movement", "m_noprescale", "NoYes"
|
Option "Prescale mouse movement", "m_noprescale", "NoYes"
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
Description="Checking zdoom.pk3..."
|
Description="Checking zdoom.pk3..."
|
||||||
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" "$(InputDir)generated"
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3""
|
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" 
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3""
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
Description="Checking zdoom.pk3..."
|
Description="Checking zdoom.pk3..."
|
||||||
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" "$(InputDir)generated"
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3""
|
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" 
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3""
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
Description="Checking zdoom.pk3..."
|
Description="Checking zdoom.pk3..."
|
||||||
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" "$(InputDir)generated"
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3"
"
|
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" 
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3"
"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
Description="Checking zdoom.pk3..."
|
Description="Checking zdoom.pk3..."
|
||||||
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" "$(InputDir)generated"
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3"
"
|
CommandLine=""$(SolutionDir)tools\zipdir\zipdir.exe" -ud "$(InputDir)zdoom.pk3" "$(InputDir)static" 
copy "$(InputDir)zdoom.pk3" "$(SolutionDir)..\zdoom.pk3"
"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
|
Loading…
Reference in a new issue