Skip to content

Commit 21dab90

Browse files
SmileyAGetojuice
andauthored
Added spawnflags for keep player angles & velocity in trigger_teleport (#747)
* Added spawnflags for keep player angles & velocity in trigger_teleport Co-authored-by: etojuice <[email protected]>
1 parent 6c47f96 commit 21dab90

File tree

2 files changed

+43
-6
lines changed

2 files changed

+43
-6
lines changed

regamedll/dlls/triggers.cpp

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,6 +1712,10 @@ void CTriggerPush::Touch(CBaseEntity *pOther)
17121712
}
17131713
}
17141714

1715+
#define SF_TELEPORT_KEEP_ANGLES 256
1716+
#define SF_TELEPORT_KEEP_VELOCITY 512
1717+
#define SF_TELEPORT_REDIRECT_VELOCITY_WITH_YAW_DESTINATION 1024
1718+
17151719
void CBaseTrigger::TeleportTouch(CBaseEntity *pOther)
17161720
{
17171721
entvars_t *pevToucher = pOther->pev;
@@ -1766,15 +1770,40 @@ void CBaseTrigger::TeleportTouch(CBaseEntity *pOther)
17661770

17671771
UTIL_SetOrigin(pevToucher, tmp);
17681772

1769-
pevToucher->angles = pentTarget->v.angles;
1773+
#ifdef REGAMEDLL_ADD
1774+
if (!(pev->spawnflags & SF_TELEPORT_KEEP_ANGLES))
1775+
#endif
1776+
{
1777+
pevToucher->angles = pentTarget->v.angles;
17701778

1771-
if (pOther->IsPlayer())
1779+
if (pOther->IsPlayer())
1780+
{
1781+
pevToucher->v_angle = pentTarget->v.angles;
1782+
}
1783+
1784+
pevToucher->fixangle = 1;
1785+
}
1786+
1787+
#ifdef REGAMEDLL_ADD
1788+
if (!(pev->spawnflags & SF_TELEPORT_KEEP_VELOCITY))
1789+
#endif
17721790
{
1773-
pevToucher->v_angle = pentTarget->v.angles;
1791+
pevToucher->velocity = pevToucher->basevelocity = g_vecZero;
17741792
}
17751793

1776-
pevToucher->fixangle = 1;
1777-
pevToucher->velocity = pevToucher->basevelocity = g_vecZero;
1794+
#ifdef REGAMEDLL_ADD
1795+
if ((pev->spawnflags & SF_TELEPORT_REDIRECT_VELOCITY_WITH_YAW_DESTINATION) && (pev->spawnflags & SF_TELEPORT_KEEP_VELOCITY))
1796+
{
1797+
float xy_vel = pevToucher->velocity.Length2D();
1798+
1799+
Vector vecAngles = Vector(0, pentTarget->v.angles.y, 0);
1800+
Vector vecForward;
1801+
AngleVectors(vecAngles, vecForward, nullptr, nullptr);
1802+
1803+
pevToucher->velocity.x = vecForward.x * xy_vel;
1804+
pevToucher->velocity.y = vecForward.y * xy_vel;
1805+
}
1806+
#endif
17781807
}
17791808

17801809
LINK_ENTITY_TO_CLASS(trigger_teleport, CTriggerTeleport, CCSTriggerTeleport)

regamedll/extra/Toolkit/GameDefinitionFile/regamedll-cs.fgd

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2262,7 +2262,15 @@
22622262
]
22632263
]
22642264

2265-
@SolidClass base(Trigger) = trigger_teleport : "Trigger teleport" []
2265+
@SolidClass base(Trigger) = trigger_teleport : "Trigger teleport"
2266+
[
2267+
spawnflags(flags) =
2268+
[
2269+
256: "Keep angles" : 0
2270+
512: "Keep velocity" : 0
2271+
1024: "Redirect velocity with yaw from destination" : 0
2272+
]
2273+
]
22662274

22672275
// Function entities
22682276
@SolidClass = func_bomb_target : "Bomb target zone"

0 commit comments

Comments
 (0)