Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

- sync 3D floor branch with trunk.

git-svn-id: http://mancubus.net/svn/hosted/zdoom/zdoom/branches/3dfloors2@3123 a95907f1-e10c-0410-b46f-9e587ccb1026
  • Loading branch information...
commit 5d56c02de5e7f15290494879637acc42201169c8 2 parents f404b7f + a45f054
graf authored
Showing with 352 additions and 133 deletions.
  1. +9 −8 specs/udmf_zdoom.txt
  2. +1 −1  src/actionspecials.h
  3. +6 −1 src/actor.h
  4. +2 −2 src/c_cmds.cpp
  5. +4 −0 src/d_iwad.cpp
  6. +1 −0  src/doomdata.h
  7. +1 −0  src/g_doom/a_bossbrain.cpp
  8. +11 −0 src/intermission/intermission.cpp
  9. +1 −0  src/intermission/intermission.h
  10. +1 −0  src/memarena.cpp
  11. +6 −0 src/memarena.h
  12. +0 −4 src/menu/menu.cpp
  13. +3 −9 src/menu/readthis.cpp
  14. +1 −0  src/namedef.h
  15. +7 −3 src/p_3dmidtex.cpp
  16. +1 −1  src/p_3dmidtex.h
  17. +36 −16 src/p_acs.cpp
  18. +7 −10 src/p_enemy.cpp
  19. +15 −11 src/p_interaction.cpp
  20. +1 −0  src/p_lnspec.cpp
  21. +2 −0  src/p_local.h
  22. +17 −3 src/p_map.cpp
  23. +2 −2 src/p_maputl.cpp
  24. +64 −9 src/p_mobj.cpp
  25. +1 −1  src/p_sight.cpp
  26. +4 −0 src/p_udmf.cpp
  27. +1 −0  src/r_things.cpp
  28. +58 −37 src/sdl/i_input.cpp
  29. +36 −1 src/sdl/i_system.cpp
  30. +10 −1 src/sdl/sdlvideo.cpp
  31. +15 −0 src/thingdef/thingdef_codeptr.cpp
  32. +1 −0  src/thingdef/thingdef_expression.cpp
  33. +13 −1 src/thingdef/thingdef_properties.cpp
  34. +1 −1  src/version.h
  35. +1 −1  wadsrc/CMakeLists.txt
  36. +3 −0  wadsrc/static/actors/actor.txt
  37. +2 −0  wadsrc/static/actors/raven/minotaur.txt
  38. +3 −6 wadsrc/static/menudef.txt
  39. +4 −4 wadsrc/wadsrc.vcproj
View
17 specs/udmf_zdoom.txt
@@ -112,6 +112,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
checkswitchrange = <bool>;// Switches can only be activated when vertically reachable.
blockprojectiles = <bool>;// Line blocks all projectiles
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.
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.
- lightcolor = <integer>; // Sector'S light color as RRGGBB value, default = 0xffffff.
- fadecolor = <integer>; // Sector'S fog color as RRGGBB value, default = 0x000000.
+ lightcolor = <integer>; // Sector's light color as RRGGBB value, default = 0xffffff.
+ fadecolor = <integer>; // Sector's fog color as RRGGBB value, default = 0x000000.
desaturation = <float>; // Color desaturation factor. 0 = none, 1 = full, default = 0.
silent = <bool>; // Actors in this sector make no sound,
nofallingdamage = <bool>; // Falling damage is disabled in this sector
@@ -183,12 +184,8 @@ Note: All <bool> fields default to false unless mentioned otherwise.
thing
{
- skill# = <bool> // Unlike the base spec, # can range from 1-8.
- // 8 is the maximum amount of skills the skill
- // 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.
+ skill# = <bool> // Unlike the base spec, # can range from 1-16.
+ class# = <bool> // Unlike the base spec, # can range from 1-16.
conversation = <int> // Assigns a conversation dialogue to this thing.
// Parameter is the conversation ID, 0 meaning none.
countsecret = <bool>; // Picking up this actor counts as a secret.
@@ -292,6 +289,10 @@ Added 'countsecret' actor property.
1.15 14.12.2010
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
===============================================================================
View
2  src/actionspecials.h
@@ -227,7 +227,7 @@ DEFINE_SPECIAL(Elevator_LowerToNearest, 247, 2, 2, 2)
DEFINE_SPECIAL(HealThing, 248, 1, 2, 2)
DEFINE_SPECIAL(Door_CloseWaitOpen, 249, 3, 4, 4)
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_LowerToLowest, 253, 2, 2, 2)
DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 2, 2)
View
7 src/actor.h
@@ -39,6 +39,7 @@
#include "textures/textures.h"
#include "r_blend.h"
#include "s_sound.h"
+#include "memarena.h"
struct subsector_t;
//
@@ -324,6 +325,7 @@ enum
MF6_ADDITIVEPOISONDAMAGE = 0x00100000,
MF6_ADDITIVEPOISONDURATION = 0x00200000,
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 ---
@@ -760,6 +762,7 @@ class AActor : public DThinker
fixed_t GetGravity() const;
bool IsSentient() const;
const char *GetTag(const char *def = NULL) const;
+ void SetTag(const char *def);
// info for drawing
@@ -855,7 +858,8 @@ class AActor : public DThinker
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 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
line_t *BlockingLine; // Line that blocked the last move
@@ -927,6 +931,7 @@ class AActor : public DThinker
private:
static AActor *TIDHash[128];
static inline int TIDHASH (int key) { return key & 127; }
+ static FSharedStringArena mStringPropertyData;
friend class FActorIterator;
View
4 src/c_cmds.cpp
@@ -1028,8 +1028,8 @@ static void PrintSecretString(const char *string, bool thislevel)
break;
}
}
- if (foundone) colstr = TEXTCOLOR_YELLOW;
- else colstr = TEXTCOLOR_RED;
+ if (foundone) colstr = TEXTCOLOR_RED;
+ else colstr = TEXTCOLOR_GREEN;
}
}
FBrokenLines *brok = V_BreakLines(ConFont, screen->GetWidth()*95/100, string);
View
4 src/d_iwad.cpp
@@ -269,6 +269,10 @@ void FIWadManager::ParseIWadInfos(const char *fn)
}
delete resfile;
}
+ if (mIWadNames.Size() == 0 || mIWads.Size() == 0)
+ {
+ I_FatalError("No IWAD definitions found");
+ }
}
View
1  src/doomdata.h
@@ -152,6 +152,7 @@ enum ELineFlags
ML_FIRSTSIDEONLY = 0x00800000, // activated only when crossed from front side
ML_BLOCKPROJECTILE = 0x01000000,
ML_BLOCKUSE = 0x02000000, // blocks all use actions through this line
+ ML_BLOCKSIGHT = 0x04000000, // blocks monster line of sight
};
View
1  src/g_doom/a_bossbrain.cpp
@@ -142,6 +142,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BrainSpit)
}
// [GZ] Calculates when the projectile will have reached destination
spit->special2 += level.maptime;
+ spit->flags6 |= MF6_BOSSCUBE;
}
if (!isdefault)
View
11 src/intermission/intermission.cpp
@@ -612,6 +612,17 @@ void DIntermissionScreenScroller::Init(FIntermissionAction *desc, bool first)
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 ()
{
FTexture *tex = TexMan[mFirstPic];
View
1  src/intermission/intermission.h
@@ -268,6 +268,7 @@ class DIntermissionScreenScroller : public DIntermissionScreen
DIntermissionScreenScroller() {}
virtual void Init(FIntermissionAction *desc, bool first);
+ virtual int Responder (event_t *ev);
virtual void Drawer ();
};
View
1  src/memarena.cpp
@@ -373,4 +373,5 @@ void FSharedStringArena::FreeAll()
FreeBlocks = block;
}
memset(Buckets, 0, sizeof(Buckets));
+ TopBlock = NULL;
}
View
6 src/memarena.h
@@ -31,6 +31,9 @@
**
*/
+#ifndef __MEMARENA_H
+#define __MEMARENA_H
+
#include "zstring.h"
// A general purpose arena.
@@ -81,3 +84,6 @@ class FSharedStringArena : public FMemArena
private:
void *Alloc(size_t size) { return NULL; } // No access to FMemArena::Alloc for outsiders.
};
+
+
+#endif
View
4 src/menu/menu.cpp
@@ -507,11 +507,7 @@ bool M_Responder (event_t *ev)
// do we want mouse input?
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)
- #endif
return true;
}
View
12 src/menu/readthis.cpp
@@ -98,19 +98,13 @@ void DReadThisMenu::Drawer()
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);
if (alpha < OPAQUE && prevpic != NULL)
{
- screen->DrawTexture (prevpic, 0, 0,
- DTA_DestWidth, screen->GetWidth(),
- DTA_DestHeight, screen->GetHeight(),
- TAG_DONE);
+ screen->DrawTexture (prevpic, 0, 0, DTA_Fullscreen, true, TAG_DONE);
}
- screen->DrawTexture (tex, 0, 0,
- DTA_DestWidth, screen->GetWidth(),
- DTA_DestHeight, screen->GetHeight(),
- DTA_Alpha, alpha,
- TAG_DONE);
+ screen->DrawTexture (tex, 0, 0, DTA_Fullscreen, true, DTA_Alpha, alpha, TAG_DONE);
}
View
1  src/namedef.h
@@ -443,6 +443,7 @@ xx(smoothlighting)
xx(blockprojectiles)
xx(blockuse)
xx(hidden)
+xx(blocksight)
xx(Renderstyle)
View
10 src/p_3dmidtex.cpp
@@ -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;
+ *above = false;
if (P_GetMidTexturePosition(linedef, 0, &tt, &tb))
{
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
{
- if(tt > openbottom) openbottom = tt;
-
+ if(tt > openbottom)
+ {
+ openbottom = tt;
+ *above = true;
+ }
// returns true if it touches the midtexture
return (abs(thing->z - tt) <= thing->MaxStepHeight);
}
View
2  src/p_3dmidtex.h
@@ -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);
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_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);
void P_StartLinkedSectorInterpolations(TArray<DInterpolation *> &list, sector_t *sector, bool ceiling);
View
52 src/p_acs.cpp
@@ -1964,6 +1964,7 @@ DLevelScript::~DLevelScript ()
{
if (localvars != NULL)
delete[] localvars;
+ localvars = NULL;
}
void DLevelScript::Unlink ()
@@ -2542,6 +2543,7 @@ enum
APROP_ScaleX = 29,
APROP_ScaleY = 30,
APROP_Dormant = 31,
+ APROP_Mass = 32,
};
// These are needed for ACS's APROP_RenderStyle
@@ -2709,7 +2711,7 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value)
actor->Score = value;
case APROP_NameTag:
- actor->Tag = FBehavior::StaticLookupString(value);
+ actor->SetTag(FBehavior::StaticLookupString(value));
break;
case APROP_DamageFactor:
@@ -2730,6 +2732,10 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value)
actor->scaleY = value;
break;
+ case APROP_Mass:
+ actor->Mass = value;
+ break;
+
default:
// do nothing.
break;
@@ -2795,6 +2801,7 @@ int DLevelScript::GetActorProperty (int tid, int property)
case APROP_WaterLevel: return actor->waterlevel;
case APROP_ScaleX: return actor->scaleX;
case APROP_ScaleY: return actor->scaleY;
+ case APROP_Mass: return actor->Mass;
default: return 0;
}
@@ -2832,6 +2839,7 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value)
case APROP_WaterLevel:
case APROP_ScaleX:
case APROP_ScaleY:
+ case APROP_Mass:
return (GetActorProperty(tid, property) == value);
// Boolean values need to compare to a binary version of value
@@ -3052,6 +3060,7 @@ enum EACSFunctions
ACSF_GetPolyobjX,
ACSF_GetPolyobjY,
ACSF_CheckSight,
+ ACSF_SpawnForced,
};
int DLevelScript::SideFromID(int id, int side)
@@ -3523,6 +3532,9 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args)
return 0;
}
+ case ACSF_SpawnForced:
+ return DoSpawn(args[0], args[1], args[2], args[3], args[4], args[5], true);
+
default:
break;
}
@@ -6013,18 +6025,17 @@ int DLevelScript::RunScript ()
sp--;
break;
- case PCD_CHECKWEAPON:
- if (activator == NULL || activator->player == NULL || // Non-players do not have weapons
- activator->player->ReadyWeapon == NULL)
- {
- STACK(1) = 0;
- }
- else
- {
- STACK(1) = 0 == stricmp (FBehavior::StaticLookupString (STACK(1)),
- activator->player->ReadyWeapon->GetClass()->TypeName.GetChars());
- }
- break;
+ case PCD_CHECKWEAPON:
+ if (activator == NULL || activator->player == NULL || // Non-players do not have weapons
+ activator->player->ReadyWeapon == NULL)
+ {
+ STACK(1) = 0;
+ }
+ else
+ {
+ STACK(1) = activator->player->ReadyWeapon->GetClass()->TypeName == FName(FBehavior::StaticLookupString (STACK(1)), true);
+ }
+ break;
case PCD_SETWEAPON:
if (activator == NULL || activator->player == NULL)
@@ -6725,9 +6736,18 @@ DLevelScript::DLevelScript (AActor *who, line_t *where, int num, const ScriptPtr
script = num;
numlocalvars = code->VarCount;
localvars = new SDWORD[code->VarCount];
- localvars[0] = arg0;
- localvars[1] = arg1;
- localvars[2] = arg2;
+ if (code->VarCount > 0)
+ {
+ localvars[0] = arg0;
+ if (code->VarCount > 1)
+ {
+ localvars[1] = arg1;
+ if (code->VarCount > 2)
+ {
+ localvars[2] = arg2;
+ }
+ }
+ }
memset (localvars+code->ArgCount, 0, (code->VarCount-code->ArgCount)*sizeof(SDWORD));
pc = module->GetScriptAddress (code);
activator = who;
View
17 src/p_enemy.cpp
@@ -44,6 +44,7 @@
#include "thingdef/thingdef.h"
#include "d_dehacked.h"
#include "g_level.h"
+#include "teaminfo.h"
#include "gi.h"
@@ -308,7 +309,7 @@ bool P_CheckMissileRange (AActor *actor)
{
fixed_t dist;
- if (!P_CheckSight (actor, actor->target, SF_SEEPASTBLOCKEVERYTHING|SF_SEEPASTSHOOTABLELINES))
+ if (!P_CheckSight (actor, actor->target, SF_SEEPASTBLOCKEVERYTHING))
return false;
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.
- 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;
if (link->flags & MF_FRIENDLY)
{
- if (deathmatch &&
- lookee->FriendPlayer != 0 && link->FriendPlayer != 0 &&
- lookee->FriendPlayer != link->FriendPlayer)
+ if (!lookee->IsFriend(link))
{
// This is somebody else's friend, so go after it
other = link;
@@ -1581,7 +1580,7 @@ bool P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params)
}
#endif
// [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;
@@ -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.
if ( actor->flags & MF_FRIENDLY )
{
- if ( actor->FriendPlayer == 0 )
- continue; // I have no friends, I will ignore players.
- if ( actor->FriendPlayer == player->mo->FriendPlayer )
- continue; // This is my master.
+ if ( actor->IsFriend(player->mo) )
+ continue;
}
if ((player->mo->flags & MF_SHADOW && !(i_compatflags & COMPATF_INVISIBILITY)) ||
View
26 src/p_interaction.cpp
@@ -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
//
@@ -1115,17 +1130,6 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage
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)
{
int newdam = damage;
View
1  src/p_lnspec.cpp
@@ -2473,6 +2473,7 @@ FUNC(LS_Line_SetBlocking)
ML_BLOCKEVERYTHING,
ML_RAILING,
ML_BLOCKUSE,
+ ML_BLOCKSIGHT,
-1
};
View
2  src/p_local.h
@@ -232,6 +232,7 @@ struct FLineOpening
FTextureID ceilingpic;
FTextureID floorpic;
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);
@@ -348,6 +349,7 @@ struct FCheckPosition
FTextureID ceilingpic;
sector_t *ceilingsector;
bool touchmidtex;
+ bool abovemidtex;
bool floatok;
bool FromPMove;
line_t *ceilingline;
View
20 src/p_map.cpp
@@ -148,10 +148,12 @@ static bool PIT_FindFloorCeiling (line_t *ld, const FBoundingBox &box, FCheckPos
tmf.floorz = open.bottom;
tmf.floorsector = open.bottomsec;
tmf.touchmidtex = open.touchmidtex;
+ tmf.abovemidtex = open.abovemidtex;
}
else if (open.bottom == tmf.floorz)
{
tmf.touchmidtex |= open.touchmidtex;
+ tmf.abovemidtex |= open.abovemidtex;
}
if (open.lowfloor < tmf.dropoffz)
@@ -250,6 +252,7 @@ void P_FindFloorCeiling (AActor *actor, bool onlyspawnpos)
FBoundingBox box(tmf.x, tmf.y, actor->radius);
tmf.touchmidtex = false;
+ tmf.abovemidtex = false;
validcount++;
FBlockLinesIterator it(box);
@@ -262,7 +265,7 @@ void P_FindFloorCeiling (AActor *actor, bool onlyspawnpos)
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->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.y = y;
tmf.z = z;
+ tmf.touchmidtex = false;
+ tmf.abovemidtex = false;
P_GetFloorCeilingZ(tmf, true);
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);
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()))
{
PIT_FindFloorCeiling(ld, box, tmf);
}
+ thing->z = savedz;
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
if (ld->frontsector->floorplane==ld->backsector->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;
}
@@ -768,11 +778,13 @@ bool PIT_CheckLine (line_t *ld, const FBoundingBox &box, FCheckPosition &tm)
tm.floorsector = open.bottomsec;
tm.floorpic = open.floorpic;
tm.touchmidtex = open.touchmidtex;
+ tm.abovemidtex = open.abovemidtex;
tm.thing->BlockingLine = ld;
}
else if (open.bottom == tm.floorz)
{
tm.touchmidtex |= open.touchmidtex;
+ tm.abovemidtex |= open.abovemidtex;
}
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.ceilingsector = newsec;
tm.touchmidtex = false;
+ tm.abovemidtex = false;
//Added by MC: Fill the tmsector.
tm.sector = newsec;
@@ -2864,7 +2877,8 @@ bool aim_t::AimTraverse3DFloors(const divline_t &trace, intercept_t * in)
nextsector=NULL;
nexttopplane=nextbottomplane=NULL;
- if(li->frontsector->e->XFloor.ffloors.Size() || li->backsector->e->XFloor.ffloors.Size())
+ 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())
{
int frontflag;
F3DFloor* rover;
View
4 src/p_maputl.cpp
@@ -212,9 +212,9 @@ void P_LineOpening (FLineOpening &open, AActor *actor, const line_t *linedef,
if (actor != NULL && linedef->frontsector != NULL && linedef->backsector != NULL &&
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;
}
View
73 src/p_mobj.cpp
@@ -299,9 +299,12 @@ void AActor::Serialize (FArchive &arc)
<< BlockingLine
<< pushfactor
<< Species
- << Score
- << Tag
- << lastpush << lastbump
+ << Score;
+ if (SaveVersion >= 3113)
+ {
+ arc << DesignatedTeam;
+ }
+ arc << lastpush << lastbump
<< PainThreshold
<< DamageFactor
<< WeaveIndexXY << WeaveIndexZ
@@ -309,6 +312,17 @@ void AActor::Serialize (FArchive &arc)
<< PoisonDamage << PoisonDuration << PoisonPeriod
<< 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 ())
{
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));
flags4 = (flags4 & ~MF4_NOHATEPLAYERS) | (other->flags4 & MF4_NOHATEPLAYERS);
FriendPlayer = other->FriendPlayer;
+ DesignatedTeam = other->DesignatedTeam;
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
@@ -2735,6 +2750,11 @@ void AActor::Tick ()
//Added by MC: Freeze mode.
if (bglobal.freeze || level.flags2 & LEVEL2_FROZEN)
{
+ // Boss cubes shouldn't be accelerated by timefreeze
+ if (flags6 & MF6_BOSSCUBE)
+ {
+ special2++;
+ }
return;
}
}
@@ -2765,6 +2785,11 @@ void AActor::Tick ()
if (!(flags5 & MF5_NOTIMEFREEZE))
{
+ // Boss cubes shouldn't be accelerated by timefreeze
+ if (flags6 & MF6_BOSSCUBE)
+ {
+ special2++;
+ }
//Added by MC: Freeze mode.
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)
{
- if (!player || !other || !other->player)
+ if (!other)
return false;
- if (!deathmatch)
+ else if (!deathmatch && player && other->player)
return true;
- if (teamplay && other->player->userinfo.team != TEAM_NONE &&
- player->userinfo.team == other->player->userinfo.team)
+ int myTeam = DesignatedTeam;
+ 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;
}
@@ -5343,6 +5374,11 @@ bool AActor::IsFriend (AActor *other)
{
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 ||
FriendPlayer == other->FriendPlayer ||
FriendPlayer == 0 ||
@@ -5368,6 +5404,11 @@ bool AActor::IsHostile (AActor *other)
// Both monsters are friendly and belong to the same player if applicable.
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 &&
FriendPlayer != other->FriendPlayer &&
FriendPlayer !=0 &&
@@ -5521,11 +5562,13 @@ bool AActor::IsSentient() const
}
+FSharedStringArena AActor::mStringPropertyData;
+
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] == '$')
{
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()
{
View
2  src/p_sight.cpp
@@ -256,7 +256,7 @@ bool SightCheck::P_SightCheckLine (line_t *ld)
}
// 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
// [RH] don't see past block everything lines
View
4 src/p_udmf.cpp
@@ -874,6 +874,10 @@ class UDMFParser : public UDMFParserBase
Flag(ld->flags, ML_BLOCKUSE, key);
continue;
+ case NAME_blocksight:
+ Flag(ld->flags, ML_BLOCKSIGHT, key);
+ continue;
+
default:
break;
}
View
1  src/r_things.cpp
@@ -1115,6 +1115,7 @@ void R_InitSkins (void)
for (k = 0; k < MAX_SPRITE_FRAMES; ++k)
{
sprtemp[k].Flip = 0;
+ sprtemp[k].Voxel = NULL;
}
maxframe = -1;
View
95 src/sdl/i_input.cpp
@@ -21,7 +21,7 @@
static void I_CheckGUICapture ();
static void I_CheckNativeMouse ();
-static bool GUICapture;
+bool GUICapture;
static bool NativeMouse = true;
extern int paused;
@@ -36,6 +36,9 @@ EXTERN_CVAR (Bool, fullscreen)
extern int WaitingForKey, chatmodeon;
extern constate_e ConsoleState;
+extern SDL_Surface *cursorSurface;
+extern SDL_Rect cursorBlit;
+
static BYTE KeySymToDIK[SDLK_LAST], DownState[SDLK_LAST];
static WORD DIKToKeySym[256] =
@@ -114,6 +117,11 @@ static void I_CheckGUICapture ()
GUICapture = wantCapt;
if (wantCapt)
{
+ int x, y;
+ SDL_GetMouseState (&x, &y);
+ cursorBlit.x = x;
+ cursorBlit.y = y;
+
FlushDIKState ();
memset (DownState, 0, sizeof(DownState));
repeat = !sdl_nokeyrepeat;
@@ -260,15 +268,14 @@ static void I_CheckNativeMouse ()
if (wantNative != NativeMouse)
{
NativeMouse = wantNative;
+ SDL_ShowCursor (wantNative ? cursorSurface == NULL : 0);
if (wantNative)
{
- SDL_ShowCursor (1);
SDL_WM_GrabInput (SDL_GRAB_OFF);
FlushDIKState (KEY_MOUSE1, KEY_MOUSE8);
}
else
{
- SDL_ShowCursor (0);
SDL_WM_GrabInput (SDL_GRAB_ON);
CenterMouse ();
}
@@ -299,54 +306,68 @@ void MessagePump (const SDL_Event &sev)
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
+ case SDL_MOUSEMOTION:
if (!GUICapture || sev.button.button == 4 || sev.button.button == 5)
{
- event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
- /* These button mappings work with my Gentoo system using the
- * evdev driver and a Logitech MX510 mouse. Whether or not they
- * carry over to other Linux systems, I have no idea, but I sure
- * hope so. (Though buttons 11 and 12 are kind of useless, since
- * they also trigger buttons 4 and 5.)
- */
- switch (sev.button.button)
- {
- case 1: event.data1 = KEY_MOUSE1; break;
- case 2: event.data1 = KEY_MOUSE3; break;
- case 3: event.data1 = KEY_MOUSE2; break;
- case 4: event.data1 = KEY_MWHEELUP; break;
- case 5: event.data1 = KEY_MWHEELDOWN; break;
- case 6: event.data1 = KEY_MOUSE4; break; /* dunno; not generated by my mouse */
- case 7: event.data1 = KEY_MOUSE5; break; /* ditto */
- case 8: event.data1 = KEY_MOUSE4; break;
- case 9: event.data1 = KEY_MOUSE5; break;
- case 10: event.data1 = KEY_MOUSE6; break;
- case 11: event.data1 = KEY_MOUSE7; break;
- case 12: event.data1 = KEY_MOUSE8; break;
- default: printf("SDL mouse button %s %d\n",
- sev.type == SDL_MOUSEBUTTONDOWN ? "down" : "up", sev.button.button); break;
- }
- if (event.data1 != 0)
+ if(sev.type != SDL_MOUSEMOTION)
{
- //DIKState[ActiveDIKState][event.data1] = (event.type == EV_KeyDown);
- if (event.data1 == KEY_MWHEELUP || event.data1 == KEY_MWHEELDOWN)
+ event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
+ /* These button mappings work with my Gentoo system using the
+ * evdev driver and a Logitech MX510 mouse. Whether or not they
+ * carry over to other Linux systems, I have no idea, but I sure
+ * hope so. (Though buttons 11 and 12 are kind of useless, since
+ * they also trigger buttons 4 and 5.)
+ */
+ switch (sev.button.button)
{
- WheelMoved(&event);
+ case 1: event.data1 = KEY_MOUSE1; break;
+ case 2: event.data1 = KEY_MOUSE3; break;
+ case 3: event.data1 = KEY_MOUSE2; break;
+ case 4: event.data1 = KEY_MWHEELUP; break;
+ case 5: event.data1 = KEY_MWHEELDOWN; break;
+ case 6: event.data1 = KEY_MOUSE4; break; /* dunno; not generated by my mouse */
+ case 7: event.data1 = KEY_MOUSE5; break; /* ditto */
+ case 8: event.data1 = KEY_MOUSE4; break;
+ case 9: event.data1 = KEY_MOUSE5; break;
+ case 10: event.data1 = KEY_MOUSE6; break;
+ case 11: event.data1 = KEY_MOUSE7; break;
+ case 12: event.data1 = KEY_MOUSE8; break;
+ default: printf("SDL mouse button %s %d\n",
+ sev.type == SDL_MOUSEBUTTONDOWN ? "down" : "up", sev.button.button); break;
}
- else
+ if (event.data1 != 0)
{
- D_PostEvent(&event);
+ //DIKState[ActiveDIKState][event.data1] = (event.type == EV_KeyDown);
+ if (event.data1 == KEY_MWHEELUP || event.data1 == KEY_MWHEELDOWN)
+ {
+ WheelMoved(&event);
+ }
+ else
+ {
+ D_PostEvent(&event);
+ }
}
}
}
- 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.subtype = sev.type == SDL_MOUSEBUTTONDOWN ? EV_GUI_LButtonDown : EV_GUI_LButtonUp;
- event.subtype += (sev.button.button - 1) * 3;
+ 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.button.button - 1) * 3;
+ }
D_PostEvent(&event);
}
break;
-
+
case SDL_KEYDOWN:
case SDL_KEYUP:
if (sev.key.keysym.sym >= SDLK_LAST)
View
37 src/sdl/i_system.cpp
@@ -60,6 +60,9 @@
#include "i_system.h"
#include "c_dispatch.h"
#include "templates.h"
+#include "v_palette.h"
+#include "textures.h"
+#include "bitmap.h"
#include "stats.h"
#include "hardware.h"
@@ -830,7 +833,39 @@ unsigned int I_MakeRNGSeed()
return seed;
}
+SDL_Surface *cursorSurface = NULL;
+SDL_Rect cursorBlit = {0, 0, 32, 32};
bool I_SetCursor(FTexture *cursorpic)
{
- return false;
+ if (cursorpic != NULL && cursorpic->UseType != FTexture::TEX_Null)
+ {
+ // Must be no larger than 32x32.
+ if (cursorpic->GetWidth() > 32 || cursorpic->GetHeight() > 32)
+ {
+ 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;
}
View
11 src/sdl/sdlvideo.cpp
@@ -76,6 +76,9 @@ void DoBlending (const PalEntry *from, PalEntry *to, int count, int r, int g, in
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
extern IVideo *Video;
+extern SDL_Surface *cursorSurface;
+extern SDL_Rect cursorBlit;
+extern bool GUICapture;
EXTERN_CVAR (Float, Gamma)
@@ -404,7 +407,13 @@ void SDLFB::Update ()
}
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();
SDL_Flip (Screen);
SDLFlipCycles.Unclock();
View
15 src/thingdef/thingdef_codeptr.cpp
@@ -2039,6 +2039,21 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetScale)
//===========================================================================
//
+// 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
//
//===========================================================================
View
1  src/thingdef/thingdef_expression.cpp
@@ -61,6 +61,7 @@ DEFINE_MEMBER_VARIABLE(args, AActor)
DEFINE_MEMBER_VARIABLE(ceilingz, AActor)
DEFINE_MEMBER_VARIABLE(floorz, AActor)
DEFINE_MEMBER_VARIABLE(health, AActor)
+DEFINE_MEMBER_VARIABLE(Mass, AActor)
DEFINE_MEMBER_VARIABLE(pitch, AActor)
DEFINE_MEMBER_VARIABLE(special, AActor)
DEFINE_MEMBER_VARIABLE(special1, AActor)
View
14 src/thingdef/thingdef_properties.cpp
@@ -67,6 +67,7 @@
#include "r_translate.h"
#include "a_morph.h"
#include "colormatcher.h"
+#include "teaminfo.h"
//==========================================================================
@@ -299,7 +300,7 @@ DEFINE_PROPERTY(skip_super, 0, Actor)
DEFINE_PROPERTY(tag, S, Actor)
{
PROP_STRING_PARM(str, 0);
- defaults->Tag = str;
+ defaults->SetTag(str);
}
//==========================================================================
@@ -1122,6 +1123,17 @@ DEFINE_PROPERTY(activation, N, Actor)
//==========================================================================
//
+//==========================================================================
+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
//
//==========================================================================
View
2  src/version.h
@@ -75,7 +75,7 @@
// SAVESIG should match SAVEVER.
// MINSAVEVER is the minimum level snapshot version that can be loaded.
-#define MINSAVEVER 3085
+#define MINSAVEVER 3100
#if SVN_REVISION_NUMBER < MINSAVEVER
// If we don't know the current revision write something very high to ensure that
View
2  wadsrc/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required( VERSION 2.4 )
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 )
add_custom_target( pk3 ALL
View
3  wadsrc/static/actors/actor.txt
@@ -21,6 +21,7 @@ ACTOR Actor native //: Thinker
PushFactor 0.25
WeaveIndexXY 0
WeaveIndexZ 16
+ DesignatedTeam 255
// Variables for the expression evaluator
// 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 floorz;
native int health;
+ native int mass;
native angle_t pitch;
native int special;
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_FadeTo(float target, float amount = 0.1, bool remove = false);
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_CheckSight(state label);
action native A_ExtChase(bool usemelee, bool usemissile, bool playactive = true, bool nightmarefast = false);
View
2  wadsrc/static/actors/raven/minotaur.txt
@@ -122,6 +122,8 @@ ACTOR MinotaurFriend : Minotaur native
MNTR A 15 A_SetTranslucent(0.66, 0)
MNTR A 3 A_SetTranslucent(1, 0)
Goto Super::Spawn
+ Idle:
+ Goto Super::Spawn
Death:
Goto FadeOut
}
View
9 wadsrc/static/menudef.txt
@@ -526,12 +526,9 @@ OptionMenu "MouseOptions"
{
Title "MOUSE OPTIONS"
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 "Show back button", "m_show_backbutton", "Corners", "use_mouse"
- Option "Cursor", "vid_cursor", "Cursors"
- }
+ Option "Enable mouse in menus", "m_use_mouse", "MenuMouse", "use_mouse"
+ Option "Show back button", "m_show_backbutton", "Corners", "use_mouse"
+ Option "Cursor", "vid_cursor", "Cursors"
StaticText ""
Slider "Overall sensitivity", "mouse_sensitivity", 0.5, 2.5, 0.1
Option "Prescale mouse movement", "m_noprescale", "NoYes"
View
8 wadsrc/wadsrc.vcproj
@@ -37,7 +37,7 @@
<Tool
Name="VCPostBuildEventTool"
Description="Checking zdoom.pk3..."
- CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &quot;$(InputDir)generated&quot;&#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;"
+ CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;"
/>
</Configuration>
<Configuration
@@ -59,7 +59,7 @@
<Tool
Name="VCPostBuildEventTool"
Description="Checking zdoom.pk3..."
- CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &quot;$(InputDir)generated&quot;&#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;"
+ CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;"
/>
</Configuration>
<Configuration
@@ -81,7 +81,7 @@
<Tool
Name="VCPostBuildEventTool"
Description="Checking zdoom.pk3..."
- CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &quot;$(InputDir)generated&quot;&#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;&#x0D;&#x0A;"
+ CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -103,7 +103,7 @@
<Tool
Name="VCPostBuildEventTool"
Description="Checking zdoom.pk3..."
- CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &quot;$(InputDir)generated&quot;&#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;&#x0D;&#x0A;"
+ CommandLine="&quot;$(SolutionDir)tools\zipdir\zipdir.exe&quot; -ud &quot;$(InputDir)zdoom.pk3&quot; &quot;$(InputDir)static&quot; &#x0D;&#x0A;copy &quot;$(InputDir)zdoom.pk3&quot; &quot;$(SolutionDir)..\zdoom.pk3&quot;&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
Please sign in to comment.
Something went wrong with that request. Please try again.