mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 21:41:30 +00:00
Merge remote-tracking branch 'upstream/master' into truecolor
This commit is contained in:
commit
335ca12909
10 changed files with 225 additions and 56 deletions
|
@ -556,7 +556,7 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL)
|
|||
case 1: // Doom2.exe compatible with a few relaxed settings
|
||||
v = COMPATF_SHORTTEX|COMPATF_STAIRINDEX|COMPATF_USEBLOCKING|COMPATF_NODOORLIGHT|COMPATF_SPRITESORT|
|
||||
COMPATF_TRACE|COMPATF_MISSILECLIP|COMPATF_SOUNDTARGET|COMPATF_DEHHEALTH|COMPATF_CROSSDROPOFF|
|
||||
COMPATF_LIGHT;
|
||||
COMPATF_LIGHT|COMPATF_MASKEDMIDTEX;
|
||||
w= COMPATF2_FLOORMOVE;
|
||||
break;
|
||||
|
||||
|
@ -569,7 +569,7 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL)
|
|||
break;
|
||||
|
||||
case 3: // Boom compat mode
|
||||
v = COMPATF_TRACE|COMPATF_SOUNDTARGET|COMPATF_BOOMSCROLL|COMPATF_MISSILECLIP;
|
||||
v = COMPATF_TRACE|COMPATF_SOUNDTARGET|COMPATF_BOOMSCROLL|COMPATF_MISSILECLIP|COMPATF_MASKEDMIDTEX;
|
||||
break;
|
||||
|
||||
case 4: // Old ZDoom compat mode
|
||||
|
@ -579,12 +579,12 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL)
|
|||
|
||||
case 5: // MBF compat mode
|
||||
v = COMPATF_TRACE|COMPATF_SOUNDTARGET|COMPATF_BOOMSCROLL|COMPATF_MISSILECLIP|COMPATF_MUSHROOM|
|
||||
COMPATF_MBFMONSTERMOVE|COMPATF_NOBLOCKFRIENDS;
|
||||
COMPATF_MBFMONSTERMOVE|COMPATF_NOBLOCKFRIENDS|COMPATF_MASKEDMIDTEX;
|
||||
break;
|
||||
|
||||
case 6: // Boom with some added settings to reenable some 'broken' behavior
|
||||
v = COMPATF_TRACE|COMPATF_SOUNDTARGET|COMPATF_BOOMSCROLL|COMPATF_MISSILECLIP|COMPATF_NO_PASSMOBJ|
|
||||
COMPATF_INVISIBILITY|COMPATF_CORPSEGIBS|COMPATF_HITSCAN|COMPATF_WALLRUN|COMPATF_NOTOSSDROPS;
|
||||
COMPATF_INVISIBILITY|COMPATF_CORPSEGIBS|COMPATF_HITSCAN|COMPATF_WALLRUN|COMPATF_NOTOSSDROPS|COMPATF_MASKEDMIDTEX;
|
||||
w = COMPATF2_POINTONLINE;
|
||||
break;
|
||||
|
||||
|
|
|
@ -4190,31 +4190,6 @@ bool DLevelScript::DoCheckActorTexture(int tid, AActor *activator, int string, b
|
|||
return tex == TexMan[secpic];
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
// These are the original inputs sent by the player.
|
||||
INPUT_OLDBUTTONS,
|
||||
INPUT_BUTTONS,
|
||||
INPUT_PITCH,
|
||||
INPUT_YAW,
|
||||
INPUT_ROLL,
|
||||
INPUT_FORWARDMOVE,
|
||||
INPUT_SIDEMOVE,
|
||||
INPUT_UPMOVE,
|
||||
|
||||
// These are the inputs, as modified by P_PlayerThink().
|
||||
// Most of the time, these will match the original inputs, but
|
||||
// they can be different if a player is frozen or using a
|
||||
// chainsaw.
|
||||
MODINPUT_OLDBUTTONS,
|
||||
MODINPUT_BUTTONS,
|
||||
MODINPUT_PITCH,
|
||||
MODINPUT_YAW,
|
||||
MODINPUT_ROLL,
|
||||
MODINPUT_FORWARDMOVE,
|
||||
MODINPUT_SIDEMOVE,
|
||||
MODINPUT_UPMOVE
|
||||
};
|
||||
|
||||
int DLevelScript::GetPlayerInput(int playernum, int inputnum)
|
||||
{
|
||||
|
@ -4241,28 +4216,7 @@ int DLevelScript::GetPlayerInput(int playernum, int inputnum)
|
|||
return 0;
|
||||
}
|
||||
|
||||
switch (inputnum)
|
||||
{
|
||||
case INPUT_OLDBUTTONS: return p->original_oldbuttons; break;
|
||||
case INPUT_BUTTONS: return p->original_cmd.buttons; break;
|
||||
case INPUT_PITCH: return p->original_cmd.pitch; break;
|
||||
case INPUT_YAW: return p->original_cmd.yaw; break;
|
||||
case INPUT_ROLL: return p->original_cmd.roll; break;
|
||||
case INPUT_FORWARDMOVE: return p->original_cmd.forwardmove; break;
|
||||
case INPUT_SIDEMOVE: return p->original_cmd.sidemove; break;
|
||||
case INPUT_UPMOVE: return p->original_cmd.upmove; break;
|
||||
|
||||
case MODINPUT_OLDBUTTONS: return p->oldbuttons; break;
|
||||
case MODINPUT_BUTTONS: return p->cmd.ucmd.buttons; break;
|
||||
case MODINPUT_PITCH: return p->cmd.ucmd.pitch; break;
|
||||
case MODINPUT_YAW: return p->cmd.ucmd.yaw; break;
|
||||
case MODINPUT_ROLL: return p->cmd.ucmd.roll; break;
|
||||
case MODINPUT_FORWARDMOVE: return p->cmd.ucmd.forwardmove; break;
|
||||
case MODINPUT_SIDEMOVE: return p->cmd.ucmd.sidemove; break;
|
||||
case MODINPUT_UPMOVE: return p->cmd.ucmd.upmove; break;
|
||||
|
||||
default: return 0; break;
|
||||
}
|
||||
return P_Thing_CheckInputNum(p, inputnum);
|
||||
}
|
||||
|
||||
enum
|
||||
|
@ -8094,6 +8048,17 @@ scriptwait:
|
|||
break;
|
||||
|
||||
// [BC] Start ST PCD's
|
||||
case PCD_ISNETWORKGAME:
|
||||
PushToStack(netgame);
|
||||
break;
|
||||
|
||||
case PCD_PLAYERTEAM:
|
||||
if ( activator && activator->player )
|
||||
PushToStack( activator->player->userinfo.GetTeam() );
|
||||
else
|
||||
PushToStack( 0 );
|
||||
break;
|
||||
|
||||
case PCD_PLAYERHEALTH:
|
||||
if (activator)
|
||||
PushToStack (activator->health);
|
||||
|
|
|
@ -504,7 +504,7 @@ public:
|
|||
PCD_PLAYERGOLDSKULL,
|
||||
PCD_PLAYERBLACKCARD,
|
||||
PCD_PLAYERSILVERCARD,
|
||||
PCD_PLAYERONTEAM,
|
||||
PCD_ISNETWORKGAME,
|
||||
PCD_PLAYERTEAM,
|
||||
/*120*/ PCD_PLAYERHEALTH,
|
||||
PCD_PLAYERARMORPOINTS,
|
||||
|
|
|
@ -159,9 +159,35 @@ bool P_Thing_Raise(AActor *thing, AActor *raiser);
|
|||
bool P_Thing_CanRaise(AActor *thing);
|
||||
PClassActor *P_GetSpawnableType(int spawnnum);
|
||||
void InitSpawnablesFromMapinfo();
|
||||
int P_Thing_CheckInputNum(player_t *p, int inputnum);
|
||||
int P_Thing_Warp(AActor *caller, AActor *reference, double xofs, double yofs, double zofs, DAngle angle, int flags, double heightoffset, double radiusoffset, DAngle pitch);
|
||||
bool P_Thing_CheckProximity(AActor *self, PClass *classname, double distance, int count, int flags, int ptr);
|
||||
|
||||
enum
|
||||
{
|
||||
// These are the original inputs sent by the player.
|
||||
INPUT_OLDBUTTONS,
|
||||
INPUT_BUTTONS,
|
||||
INPUT_PITCH,
|
||||
INPUT_YAW,
|
||||
INPUT_ROLL,
|
||||
INPUT_FORWARDMOVE,
|
||||
INPUT_SIDEMOVE,
|
||||
INPUT_UPMOVE,
|
||||
|
||||
// These are the inputs, as modified by P_PlayerThink().
|
||||
// Most of the time, these will match the original inputs, but
|
||||
// they can be different if a player is frozen or using a
|
||||
// chainsaw.
|
||||
MODINPUT_OLDBUTTONS,
|
||||
MODINPUT_BUTTONS,
|
||||
MODINPUT_PITCH,
|
||||
MODINPUT_YAW,
|
||||
MODINPUT_ROLL,
|
||||
MODINPUT_FORWARDMOVE,
|
||||
MODINPUT_SIDEMOVE,
|
||||
MODINPUT_UPMOVE
|
||||
};
|
||||
enum CPXF
|
||||
{
|
||||
CPXF_ANCESTOR = 1 << 0,
|
||||
|
|
|
@ -1135,16 +1135,64 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Overlay)
|
|||
PARAM_ACTION_PROLOGUE;
|
||||
PARAM_INT (layer);
|
||||
PARAM_STATE_OPT (state) { state = nullptr; }
|
||||
PARAM_BOOL_OPT (dontoverride) { dontoverride = false; }
|
||||
|
||||
player_t *player = self->player;
|
||||
|
||||
if (player == nullptr)
|
||||
return 0;
|
||||
if (player == nullptr || (dontoverride && (player->FindPSprite(layer) != nullptr)))
|
||||
{
|
||||
ACTION_RETURN_BOOL(false);
|
||||
}
|
||||
|
||||
DPSprite *pspr;
|
||||
pspr = new DPSprite(player, stateowner, layer);
|
||||
pspr->SetState(state);
|
||||
return 0;
|
||||
ACTION_RETURN_BOOL(true);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_ClearOverlays)
|
||||
{
|
||||
PARAM_ACTION_PROLOGUE;
|
||||
PARAM_INT_OPT(start) { start = 0; }
|
||||
PARAM_INT_OPT(stop) { stop = 0; }
|
||||
PARAM_BOOL_OPT(safety) { safety = true; }
|
||||
|
||||
if (!self->player)
|
||||
ACTION_RETURN_INT(0);
|
||||
|
||||
player_t *player = self->player;
|
||||
if (!start && !stop)
|
||||
{
|
||||
start = INT_MIN;
|
||||
stop = safety ? PSP_TARGETCENTER - 1 : INT_MAX;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
DPSprite *pspr = player->psprites;
|
||||
while (pspr != nullptr)
|
||||
{
|
||||
int id = pspr->GetID();
|
||||
|
||||
//Do not wipe out layer 0. Ever.
|
||||
if (!id || id < start)
|
||||
continue;
|
||||
if (id > stop)
|
||||
break;
|
||||
|
||||
if (safety)
|
||||
{
|
||||
if (id >= PSP_TARGETCENTER)
|
||||
break;
|
||||
else if ((id >= PSP_STRIFEHANDS && id <= PSP_WEAPON) || (id == PSP_FLASH))
|
||||
continue;
|
||||
}
|
||||
|
||||
// [MC]Don't affect non-hardcoded layers unless it's really desired.
|
||||
pspr->SetState(nullptr);
|
||||
count++;
|
||||
pspr = pspr->GetNext();
|
||||
}
|
||||
ACTION_RETURN_INT(count);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -666,7 +666,36 @@ void InitSpawnablesFromMapinfo()
|
|||
InitClassMap(SpawnableThings, SpawnablesFromMapinfo);
|
||||
InitClassMap(StrifeTypes, ConversationIDsFromMapinfo);
|
||||
}
|
||||
int P_Thing_CheckInputNum(player_t *p, int inputnum)
|
||||
{
|
||||
int renum = 0;
|
||||
if (p)
|
||||
{
|
||||
switch (inputnum)
|
||||
{
|
||||
case INPUT_OLDBUTTONS: renum = p->original_oldbuttons; break;
|
||||
case INPUT_BUTTONS: renum = p->original_cmd.buttons; break;
|
||||
case INPUT_PITCH: renum = p->original_cmd.pitch; break;
|
||||
case INPUT_YAW: renum = p->original_cmd.yaw; break;
|
||||
case INPUT_ROLL: renum = p->original_cmd.roll; break;
|
||||
case INPUT_FORWARDMOVE: renum = p->original_cmd.forwardmove; break;
|
||||
case INPUT_SIDEMOVE: renum = p->original_cmd.sidemove; break;
|
||||
case INPUT_UPMOVE: renum = p->original_cmd.upmove; break;
|
||||
|
||||
case MODINPUT_OLDBUTTONS: renum = p->oldbuttons; break;
|
||||
case MODINPUT_BUTTONS: renum = p->cmd.ucmd.buttons; break;
|
||||
case MODINPUT_PITCH: renum = p->cmd.ucmd.pitch; break;
|
||||
case MODINPUT_YAW: renum = p->cmd.ucmd.yaw; break;
|
||||
case MODINPUT_ROLL: renum = p->cmd.ucmd.roll; break;
|
||||
case MODINPUT_FORWARDMOVE: renum = p->cmd.ucmd.forwardmove; break;
|
||||
case MODINPUT_SIDEMOVE: renum = p->cmd.ucmd.sidemove; break;
|
||||
case MODINPUT_UPMOVE: renum = p->cmd.ucmd.upmove; break;
|
||||
|
||||
default: renum = 0; break;
|
||||
}
|
||||
}
|
||||
return renum;
|
||||
}
|
||||
bool P_Thing_CheckProximity(AActor *self, PClass *classname, double distance, int count, int flags, int ptr)
|
||||
{
|
||||
AActor *ref = COPY_AAPTR(self, ptr);
|
||||
|
|
|
@ -312,6 +312,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, GetDistance)
|
|||
DVector3 diff = self->Vec3To(target);
|
||||
if (checkz)
|
||||
diff.Z += (target->Height - self->Height) / 2;
|
||||
else
|
||||
diff.Z = 0.;
|
||||
|
||||
ret->SetFloat(diff.Length());
|
||||
}
|
||||
|
@ -543,6 +545,39 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, GetCVar)
|
|||
return 0;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// GetPlayerInput
|
||||
//
|
||||
// NON-ACTION function that works like ACS's GetPlayerInput.
|
||||
// Takes a pointer as anyone may or may not be a player.
|
||||
//==========================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION_PARAMS(AActor, GetPlayerInput)
|
||||
{
|
||||
if (numret > 0)
|
||||
{
|
||||
assert(ret != nullptr);
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
PARAM_INT (inputnum);
|
||||
PARAM_INT_OPT (ptr) { ptr = AAPTR_DEFAULT; }
|
||||
|
||||
AActor *mobj = COPY_AAPTR(self, ptr);
|
||||
|
||||
//Need a player.
|
||||
if (!mobj || !mobj->player)
|
||||
{
|
||||
ret->SetInt(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret->SetInt(P_Thing_CheckInputNum(mobj->player, inputnum));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// __decorate_internal_state__
|
||||
|
|
|
@ -48,6 +48,7 @@ ACTOR Actor native //: Thinker
|
|||
native int GetGibHealth();
|
||||
native float GetCrouchFactor(int ptr = AAPTR_PLAYER1);
|
||||
native float GetCVar(string cvar);
|
||||
native int GetPlayerInput(int inputnum, int ptr = AAPTR_DEFAULT);
|
||||
|
||||
// Action functions
|
||||
// Meh, MBF redundant functions. Only for DeHackEd support.
|
||||
|
@ -329,12 +330,13 @@ ACTOR Actor native //: Thinker
|
|||
native state A_CheckSightOrRange(float distance, state label, bool two_dimension = false);
|
||||
native state A_CheckRange(float distance, state label, bool two_dimension = false);
|
||||
action native bool A_FaceMovementDirection(float offset = 0, float anglelimit = 0, float pitchlimit = 0, int flags = 0, int ptr = AAPTR_DEFAULT);
|
||||
action native int A_ClearOverlays(int sstart = 0, int sstop = 0, bool safety = true);
|
||||
|
||||
native void A_RearrangePointers(int newtarget, int newmaster = AAPTR_DEFAULT, int newtracer = AAPTR_DEFAULT, int flags=0);
|
||||
native void A_TransferPointer(int ptr_source, int ptr_recepient, int sourcefield, int recepientfield=AAPTR_DEFAULT, int flags=0);
|
||||
action native A_CopyFriendliness(int ptr_source = AAPTR_MASTER);
|
||||
|
||||
action native A_Overlay(int layer, state start = "");
|
||||
action native bool A_Overlay(int layer, state start = "", bool nooverride = false);
|
||||
action native A_WeaponOffset(float wx = 0, float wy = 32, int flags = 0);
|
||||
action native A_OverlayOffset(int layer = PSP_WEAPON, float wx = 0, float wy = 32, int flags = 0);
|
||||
action native A_OverlayFlags(int layer, int flags, bool set);
|
||||
|
|
|
@ -593,3 +593,62 @@ enum
|
|||
PSP_WEAPON = 1,
|
||||
PSP_FLASH = 1000,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
// These are the original inputs sent by the player.
|
||||
INPUT_OLDBUTTONS,
|
||||
INPUT_BUTTONS,
|
||||
INPUT_PITCH,
|
||||
INPUT_YAW,
|
||||
INPUT_ROLL,
|
||||
INPUT_FORWARDMOVE,
|
||||
INPUT_SIDEMOVE,
|
||||
INPUT_UPMOVE,
|
||||
|
||||
// These are the inputs, as modified by P_PlayerThink().
|
||||
// Most of the time, these will match the original inputs, but
|
||||
// they can be different if a player is frozen or using a
|
||||
// chainsaw.
|
||||
MODINPUT_OLDBUTTONS,
|
||||
MODINPUT_BUTTONS,
|
||||
MODINPUT_PITCH,
|
||||
MODINPUT_YAW,
|
||||
MODINPUT_ROLL,
|
||||
MODINPUT_FORWARDMOVE,
|
||||
MODINPUT_SIDEMOVE,
|
||||
MODINPUT_UPMOVE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BT_ATTACK = 1<<0, // Press "Fire".
|
||||
BT_USE = 1<<1, // Use button, to open doors, activate switches.
|
||||
BT_JUMP = 1<<2,
|
||||
BT_CROUCH = 1<<3,
|
||||
BT_TURN180 = 1<<4,
|
||||
BT_ALTATTACK = 1<<5, // Press your other "Fire".
|
||||
BT_RELOAD = 1<<6, // [XA] Reload key. Causes state jump in A_WeaponReady.
|
||||
BT_ZOOM = 1<<7, // [XA] Zoom key. Ditto.
|
||||
|
||||
// The rest are all ignored by the play simulation and are for scripts.
|
||||
BT_SPEED = 1<<8,
|
||||
BT_STRAFE = 1<<9,
|
||||
|
||||
BT_MOVERIGHT = 1<<10,
|
||||
BT_MOVELEFT = 1<<11,
|
||||
BT_BACK = 1<<12,
|
||||
BT_FORWARD = 1<<13,
|
||||
BT_RIGHT = 1<<14,
|
||||
BT_LEFT = 1<<15,
|
||||
BT_LOOKUP = 1<<16,
|
||||
BT_LOOKDOWN = 1<<17,
|
||||
BT_MOVEUP = 1<<18,
|
||||
BT_MOVEDOWN = 1<<19,
|
||||
BT_SHOWSCORES = 1<<20,
|
||||
|
||||
BT_USER1 = 1<<21,
|
||||
BT_USER2 = 1<<22,
|
||||
BT_USER3 = 1<<23,
|
||||
BT_USER4 = 1<<24,
|
||||
};
|
||||
|
|
|
@ -425,6 +425,11 @@ D0139194F7817BF06F3988DFC47DB38D // Whispers of Satan map29
|
|||
multiexit
|
||||
}
|
||||
|
||||
C98F79709BD7E0E4C19026AB9575EC6F // cc-cod.zip:codlev.wad map07
|
||||
{
|
||||
maskedmidtex
|
||||
}
|
||||
|
||||
D7F6E9F08C39A17026349A04F8C0B0BE // Return to Hadron, e1m9
|
||||
19D03FFC875589E21EDBB7AB74EF4AEF // Return to Hadron, e1m9, 2016.01.03 update
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue