Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
jumppads.qh File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define PUSH_VELOCITY_ADD_XY   BIT(1)
#define PUSH_VELOCITY_ADD_Z   BIT(3)
#define PUSH_VELOCITY_BIDIRECTIONAL_XY   BIT(4)
#define PUSH_VELOCITY_BIDIRECTIONAL_Z   BIT(5)
#define PUSH_VELOCITY_CLAMP_NEGATIVE_ADDS   BIT(6)
#define PUSH_VELOCITY_PLAYERDIR_XY   BIT(0)
#define PUSH_VELOCITY_PLAYERDIR_Z   BIT(2)
#define Q3_TARGET_PUSH_JUMPPAD   BIT(0)

Functions

 spawnfunc (info_notnull)
 spawnfunc (target_position)
 spawnfunc (target_push)
 spawnfunc (trigger_push)
 spawnfunc (trigger_push_velocity)
 STATIC_INIT (g_jumppads)
void SUB_UseTargets (entity this, entity actor, entity trigger)
vector trigger_push_calculatevelocity (vector org, entity tgt, float ht, entity pushed_entity)
void trigger_push_findtarget (entity this)
bool trigger_push_test (entity this, entity item)
bool trigger_push_testorigin (entity tracetest_ent, entity targ, entity jp, vector org)
bool trigger_push_testorigin_for_item (entity tracetest_ent, entity item, vector org)
void trigger_push_touch (entity this, entity toucher)
void trigger_push_use (entity this, entity actor, entity trigger)

Variables

vector dest
IntrusiveList g_jumppads
float height
bool istypefrag
float jumppadcount
entity jumppadsused [NUM_JUMPPADSUSED]
entity last_pushed
const int NUM_JUMPPADSUSED = 3
const int PUSH_ONCE = BIT(0)
const int PUSH_SILENT = BIT(1)
const int PUSH_STATIC = BIT(12)
float pushltime

Macro Definition Documentation

◆ PUSH_VELOCITY_ADD_XY

#define PUSH_VELOCITY_ADD_XY   BIT(1)

Definition at line 9 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ PUSH_VELOCITY_ADD_Z

#define PUSH_VELOCITY_ADD_Z   BIT(3)

Definition at line 11 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ PUSH_VELOCITY_BIDIRECTIONAL_XY

#define PUSH_VELOCITY_BIDIRECTIONAL_XY   BIT(4)

Definition at line 12 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ PUSH_VELOCITY_BIDIRECTIONAL_Z

#define PUSH_VELOCITY_BIDIRECTIONAL_Z   BIT(5)

Definition at line 13 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ PUSH_VELOCITY_CLAMP_NEGATIVE_ADDS

#define PUSH_VELOCITY_CLAMP_NEGATIVE_ADDS   BIT(6)

Definition at line 14 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ PUSH_VELOCITY_PLAYERDIR_XY

#define PUSH_VELOCITY_PLAYERDIR_XY   BIT(0)

Definition at line 8 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ PUSH_VELOCITY_PLAYERDIR_Z

#define PUSH_VELOCITY_PLAYERDIR_Z   BIT(2)

Definition at line 10 of file jumppads.qh.

Referenced by trigger_push_velocity_calculatevelocity().

◆ Q3_TARGET_PUSH_JUMPPAD

#define Q3_TARGET_PUSH_JUMPPAD   BIT(0)

Definition at line 16 of file jumppads.qh.

Referenced by spawnfunc().

Function Documentation

◆ spawnfunc() [1/5]

spawnfunc ( info_notnull )

Definition at line 968 of file jumppads.qc.

969{
970 target_push_init(this);
971}
void target_push_init(entity this)
Definition jumppads.qc:925

References target_push_init().

◆ spawnfunc() [2/5]

spawnfunc ( target_position )

Definition at line 972 of file jumppads.qc.

973{
974 target_push_init(this);
975}

References target_push_init().

◆ spawnfunc() [3/5]

spawnfunc ( target_push )

Definition at line 932 of file jumppads.qc.

933{
934 target_push_init(this); // normal push target behaviour can be combined with a legacy pusher?
935 this.use = target_push_use;
936
937 if(this.target && this.target != "") // Q3 or old style Nexuiz pusher
938 {
939 for (entity trigger_ent = findchain(target, this.targetname); trigger_ent; trigger_ent = trigger_ent.chain)
940 {
941 // add the triggering entity to the g_jumppads list
942 // multiple jump pads can use the same target_push
943 if(!IL_CONTAINS(g_jumppads, trigger_ent))
944 {
945 IL_PUSH(g_jumppads, trigger_ent);
947 }
948 }
949 }
950 else // Q3 .angles and .speed pusher
951 {
952 if (!this.speed)
953 this.speed = 1000;
954 SetMovedir(this); // this clears .angles so it must be after target_push_init()
955 this.movedir *= this.speed;
956 }
957
958 if (!this.noise)
959 {
961 this.noise = "sound/misc/windfly.wav"; // Q3 mappers provide this, it's not in pak0
962 else
963 this.noise = "misc/jumppad.wav";
964 }
965 precache_sound (this.noise);
966}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
int spawnflags
Definition ammo.qh:15
#define Q3COMPAT_COMMON
Definition stats.qh:370
const int INITPRIO_FINDTARGET
Definition constants.qh:96
#define use
float speed
Definition dynlight.qc:9
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
ERASEABLE bool IL_CONTAINS(IntrusiveList this, entity it)
void trigger_push_findtarget(entity this)
Definition jumppads.qc:784
void target_push_use(entity this, entity actor, entity trigger)
Definition jumppads.qc:910
#define Q3_TARGET_PUSH_JUMPPAD
Definition jumppads.qh:16
IntrusiveList g_jumppads
Definition jumppads.qh:18
vector movedir
Definition viewloc.qh:18
string precache_sound(string sample)
void SetMovedir(entity this)
Definition subs.qc:540
string noise
Definition subs.qh:83
string targetname
Definition triggers.qh:56
string target
Definition triggers.qh:55
void InitializeEntity(entity e, void(entity this) func, int order)
Definition world.qc:2225

References entity(), g_jumppads, IL_CONTAINS(), IL_PUSH(), InitializeEntity(), INITPRIO_FINDTARGET, movedir, noise, precache_sound(), Q3_TARGET_PUSH_JUMPPAD, Q3COMPAT_COMMON, SetMovedir(), spawnflags, speed, target, target_push_init(), target_push_use(), targetname, trigger_push_findtarget(), and use.

◆ spawnfunc() [4/5]

spawnfunc ( trigger_push )

Definition at line 846 of file jumppads.qc.

847{
848 SetMovedir(this);
849
852 this.active = ACTIVE_ACTIVE;
853 this.use = trigger_push_use;
855
856 // normal push setup
857 if (!this.speed)
858 this.speed = 1000;
859 this.movedir = this.movedir * this.speed * 10;
860
861 if (!this.noise)
862 this.noise = "misc/jumppad.wav";
863 precache_sound (this.noise);
864
865 trigger_push_link(this); // link it now
866
867 IL_PUSH(g_jumppads, this);
868
869 // this must be called to spawn the teleport waypoints for bots
871}
float effects
const float EF_NODEPTHTEST
int active
Definition defs.qh:34
const int ACTIVE_ACTIVE
Definition defs.qh:37
void trigger_push_use(entity this, entity actor, entity trigger)
Definition jumppads.qc:6
void trigger_push_link(entity this)
Definition jumppads.qc:824
void trigger_push_touch(entity this, entity toucher)
Definition jumppads.qc:438
#define BITSET_ASSIGN(a, b)
Definition common.qh:104
#define settouch(e, f)
Definition self.qh:73
void WarpZoneLib_ExactTrigger_Init(entity this, bool unsetmodel)

References active, ACTIVE_ACTIVE, BITSET_ASSIGN, EF_NODEPTHTEST, effects, g_jumppads, IL_PUSH(), InitializeEntity(), INITPRIO_FINDTARGET, movedir, noise, precache_sound(), SetMovedir(), settouch, speed, trigger_push_findtarget(), trigger_push_link(), trigger_push_touch(), trigger_push_use(), use, and WarpZoneLib_ExactTrigger_Init().

◆ spawnfunc() [5/5]

spawnfunc ( trigger_push_velocity )

Definition at line 880 of file jumppads.qc.

881{
884 this.active = ACTIVE_ACTIVE;
885 this.use = trigger_push_use;
887
888 // normal push setup
889 if (!this.noise)
890 this.noise = "misc/jumppad.wav";
891 precache_sound (this.noise);
892
893 trigger_push_velocity_link(this); // link it now
894}
void trigger_push_velocity_link(entity this)
Definition jumppads.qc:829
void trigger_push_velocity_touch(entity this, entity toucher)
Definition jumppads.qc:461

References active, ACTIVE_ACTIVE, BITSET_ASSIGN, EF_NODEPTHTEST, effects, noise, precache_sound(), settouch, trigger_push_use(), trigger_push_velocity_link(), trigger_push_velocity_touch(), use, and WarpZoneLib_ExactTrigger_Init().

◆ STATIC_INIT()

STATIC_INIT ( g_jumppads )

Definition at line 19 of file jumppads.qh.

19{ g_jumppads = IL_NEW(); }
#define IL_NEW()

References g_jumppads, and IL_NEW.

◆ SUB_UseTargets()

◆ trigger_push_calculatevelocity()

vector trigger_push_calculatevelocity ( vector org,
entity tgt,
float ht,
entity pushed_entity )

Definition at line 32 of file jumppads.qc.

33{
34 float grav, sdist, zdist, vs, vz, jumpheight;
35 vector sdir, torg;
36
37 torg = tgt.origin + (tgt.mins + tgt.maxs) * 0.5;
38
39 grav = PHYS_GRAVITY(pushed_entity);
40 if(pushed_entity && pushed_entity.gravity)
41 grav *= pushed_entity.gravity;
42
43 // Q3 has frametime-dependent gravity, but its trigger_push velocity calculation doesn't account for that.
44 // This discrepancy can be simulated accurately which ensures that all entities will arrive
45 // where they would in Q3 with gravity 800 at 125fps, even if entity-specific gravity is applied.
46 // This can be hard-coded because we don't support the Q3 world.gravity field at this time.
47 // See physicsCPMA.cfg for maths and test results.
49 grav /= 750/800; // exact float, unlike 800/750
50
51 zdist = torg.z - org.z;
52 sdist = vlen(torg - org - zdist * '0 0 1');
53 sdir = normalize(torg - org - zdist * '0 0 1');
54
55 // how high do we need to push the player?
56 jumpheight = fabs(ht);
57 if(zdist > 0)
58 jumpheight = jumpheight + zdist;
59
60 /*
61 STOP.
62
63 You will not understand the following equations anyway...
64 But here is what I did to get them.
65
66 I used the functions
67
68 s(t) = t * vs
69 z(t) = t * vz - 1/2 grav t^2
70
71 and solved for:
72
73 s(ti) = sdist
74 z(ti) = zdist
75 max(z, ti) = jumpheight
76
77 From these three equations, you will find the three parameters vs, vz
78 and ti.
79 */
80
81 // push them so high...
82 vz = sqrt(fabs(2 * grav * jumpheight)); // NOTE: sqrt(positive)!
83
84 // we start with downwards velocity only if it's a downjump and the jump apex should be outside the jump!
85 if(ht < 0)
86 if(zdist < 0)
87 vz = -vz;
88
89 vector solution;
90 solution = solve_quadratic(0.5 * grav, -vz, zdist); // equation "z(ti) = zdist"
91 // ALWAYS solvable because jumpheight >= zdist
92 if(!solution.z)
93 solution_y = solution.x; // just in case it is not solvable due to roundoff errors, assume two equal solutions at their center (this is mainly for the usual case with ht == 0)
94 if(zdist == 0)
95 solution_x = solution.y; // solution_x is 0 in this case, so don't use it, but rather use solution_y (which will be sqrt(0.5 * jumpheight / grav), actually)
96
97 float flighttime;
98 if(zdist < 0)
99 {
100 // down-jump
101 if(ht < 0)
102 {
103 // almost straight line type
104 // jump apex is before the jump
105 // we must take the larger one
106 flighttime = solution.y;
107 }
108 else
109 {
110 // regular jump
111 // jump apex is during the jump
112 // we must take the larger one too
113 flighttime = solution.y;
114 }
115 }
116 else
117 {
118 // up-jump
119 if(ht < 0)
120 {
121 // almost straight line type
122 // jump apex is after the jump
123 // we must take the smaller one
124 flighttime = solution.x;
125 }
126 else
127 {
128 // regular jump
129 // jump apex is during the jump
130 // we must take the larger one
131 flighttime = solution.y;
132 }
133 }
134 vs = sdist / flighttime;
135
136 // finally calculate the velocity
137 return sdir * vs + '0 0 1' * vz;
138}
ERASEABLE vector solve_quadratic(float a, float b, float c)
ax^2 + bx + c = 0
Definition math.qh:304
float vlen(vector v)
float sqrt(float f)
vector normalize(vector v)
float fabs(float f)
#define PHYS_GRAVITY(s)
Definition movetypes.qh:53
vector
Definition self.qh:92
vector org
Definition self.qh:92

Referenced by jumppad_push(), trigger_push_get_push_time(), trigger_push_test(), and trigger_push_velocity_calculatevelocity().

◆ trigger_push_findtarget()

void trigger_push_findtarget ( entity this)

Definition at line 784 of file jumppads.qc.

785{
786 trigger_push_test(this, NULL);
787}
bool trigger_push_test(entity this, entity item)
Definition jumppads.qc:607
#define NULL
Definition post.qh:14

References entity(), NULL, and trigger_push_test().

Referenced by spawnfunc(), and spawnfunc().

◆ trigger_push_test()

bool trigger_push_test ( entity this,
entity item )

Definition at line 607 of file jumppads.qc.

608{
609#ifdef SVQC
611 entity pusher = get_pusher_from_trigger(this); // function might get called from a non-push trigger entity
612#elif defined(CSQC)
613 entity pusher = this; // client-side code never calls this on a non-push entity
614#endif
615
616 if (pusher.target)
617 {
618 int n = 0;
619#ifdef SVQC
620 vector vel = '0 0 0';
621#endif
622 for(entity t = NULL; (t = find(t, targetname, pusher.target)); )
623 {
624 ++n;
625#ifdef SVQC
626 if(t.move_movetype != MOVETYPE_NONE)
627 continue;
628
629 // bots can't tell teamed jumppads from normal ones
630 if (this.team)
631 continue;
632
633 entity e = spawn();
634 setsize(e, PL_MIN_CONST, PL_MAX_CONST);
636 e.velocity = trigger_push_calculatevelocity(org, t, pusher.height, e);
637
638 vel = e.velocity;
639 vector best_target = '0 0 0';
640 vector best_org = '0 0 0';
641 vector best_vel = '0 0 0';
642 bool valid_best_target = false;
643 if (item)
644 {
646 {
647 delete(e);
648 return false;
649 }
650 }
651 else
652 {
653 // optimization: if horizontal velocity is 0 then target is not good since the trajectory
654 // will definitely go back to the jumppad (horizontal velocity of best_vel can't be 0 anyway)
655 if ((e.velocity.x != 0 || e.velocity.y != 0)
657 {
658 best_target = trace_endpos;
659 best_org = org;
660 best_vel = e.velocity;
661 valid_best_target = true;
662 }
663 }
664
665 vector new_org;
666 vector dist = t.origin - org;
667 if (dist.x || dist.y) // if not perfectly vertical
668 {
669 // test trajectory with different starting points, sometimes the trajectory
670 // starting from the jumppad origin can't reach the real destination
671 // and destination waypoint ends up near the jumppad itself
672 vector flatdir = normalize(dist - eZ * dist.z);
673 vector ofs = flatdir * 0.5 * min(fabs(this.absmax.x - this.absmin.x), fabs(this.absmax.y - this.absmin.y));
674 new_org = org + ofs;
675
676 LABEL(new_test)
677 e.velocity = trigger_push_calculatevelocity(new_org, t, pusher.height, e);
678 if (item)
679 {
680 if (!trigger_push_testorigin_for_item(e, item, new_org))
681 {
682 delete(e);
683 return false;
684 }
685 }
686 else
687 {
688 vel = e.velocity;
689 if (vdist(vec2(e.velocity), <, autocvar_sv_maxspeed))
690 e.velocity = autocvar_sv_maxspeed * flatdir;
691 if (trigger_push_testorigin(e, t, pusher, new_org) && (!valid_best_target || trace_endpos.z > best_target.z + 50))
692 {
693 best_target = trace_endpos;
694 best_org = new_org;
695 best_vel = vel;
696 valid_best_target = true;
697 }
698 }
699 if (ofs && new_org != org - ofs)
700 {
701 new_org = org - ofs;
702 goto new_test;
703 }
704 }
705
706 if (item)
707 {
708 delete(e);
709 return true;
710 }
711
712 if (valid_best_target)
713 {
714 if (!(boxesoverlap(this.absmin, this.absmax + eZ * 50, best_target + PL_MIN_CONST, best_target + PL_MAX_CONST)))
715 {
716 float velxy = vlen(vec2(best_vel));
717 float cost = vlen(vec2(t.origin - best_org)) / velxy;
718 if(velxy < autocvar_sv_maxspeed)
719 velxy = autocvar_sv_maxspeed;
720 cost += vlen(vec2(best_target - t.origin)) / velxy;
721 waypoint_spawnforteleporter(this, best_target, cost, e);
722 }
723 }
724 delete(e);
725#endif
726 }
727
728 if(item)
729 return false;
730
731 if(!n)
732 {
733 // no dest!
734#ifdef SVQC
735 objerror (this, "Jumppad with nonexistant target");
736#endif
737 return false;
738 }
739 else if(n == 1)
740 {
741 // exactly one dest - bots love that
742 if (!this.team)
743 pusher.enemy = find(NULL, targetname, pusher.target);
744 else // bots can't tell teamed jumppads from normal ones
745 pusher.enemy = NULL;
746 }
747 else
748 {
749 // have to use random selection every single time
750 pusher.enemy = NULL;
751 }
752
753 }
754#ifdef SVQC
755 else
756 {
757 if (!this.team)
758 {
759 entity e = spawn();
760 setsize(e, PL_MIN_CONST, PL_MAX_CONST);
762 setorigin(e, org);
763 e.velocity = pusher.movedir;
764 tracetoss(e, e);
765 if (item)
766 {
767 bool r = (trace_ent == item);
768 delete(e);
769 return r;
770 }
773 delete(e);
774 }
775 else if (item)
776 return false;
777 }
778
780#endif
781 return true;
782}
void waypoint_spawnforteleporter(entity e, vector destination, float timetaken, entity tracetest_ent)
int team
Definition main.qh:188
float autocvar_sv_maxspeed
Definition player.qh:53
#define LABEL(id)
Definition compiler.qh:34
const vector PL_MIN_CONST
Definition constants.qh:56
const vector PL_MAX_CONST
Definition constants.qh:55
entity trace_ent
float DPCONTENTS_BOTCLIP
float DPCONTENTS_SOLID
float DPCONTENTS_BODY
float DPCONTENTS_PLAYERCLIP
vector trace_endpos
vector absmax
vector absmin
#define spawn
void defer(entity this, float fdelay, void(entity) func)
Execute func() after time + fdelay.
Definition defer.qh:29
vector trigger_push_get_start_point(entity this)
Definition jumppads.qc:560
bool trigger_push_testorigin(entity tracetest_ent, entity targ, entity jp, vector org)
Definition jumppads.qc:477
bool trigger_push_testorigin_for_item(entity tracetest_ent, entity item, vector org)
Definition jumppads.qc:513
entity get_pusher_from_trigger(entity this)
Definition jumppads.qc:534
vector trigger_push_calculatevelocity(vector org, entity tgt, float ht, entity pushed_entity)
Definition jumppads.qc:32
void trigger_push_updatelink(entity this)
Definition jumppads.qc:819
entity pusher
Definition laser.qc:57
entity find(entity start,.string field, string match)
float min(float f,...)
const int MOVETYPE_NONE
Definition movetypes.qh:129
#define objerror
Definition pre.qh:8
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition vector.qh:8
const vector eZ
Definition vector.qh:46
ERASEABLE float boxesoverlap(vector m1, vector m2, vector m3, vector m4)
requires that m2>m1 in all coordinates, and that m4>m3
Definition vector.qh:73
#define vec2(...)
Definition vector.qh:90

References absmax, absmin, autocvar_sv_maxspeed, boxesoverlap(), defer(), DPCONTENTS_BODY, DPCONTENTS_BOTCLIP, DPCONTENTS_PLAYERCLIP, DPCONTENTS_SOLID, entity(), eZ, fabs(), find(), get_pusher_from_trigger(), LABEL, min(), MOVETYPE_NONE, normalize(), NULL, objerror, org, PL_MAX_CONST, PL_MIN_CONST, pusher, spawn, targetname, team, trace_endpos, trace_ent, trigger_push_calculatevelocity(), trigger_push_get_start_point(), trigger_push_testorigin(), trigger_push_testorigin_for_item(), trigger_push_updatelink(), vdist, vec2, vector, vlen(), and waypoint_spawnforteleporter().

Referenced by trigger_push_findtarget().

◆ trigger_push_testorigin()

bool trigger_push_testorigin ( entity tracetest_ent,
entity targ,
entity jp,
vector org )

Definition at line 477 of file jumppads.qc.

478{
479 setorigin(tracetest_ent, org);
480 tracetoss(tracetest_ent, tracetest_ent);
482 return false;
483
484 if (!jp.height)
485 {
486 // since tracetoss starting from jumppad's origin often fails when target
487 // is very close to real destination, start it directly from target's
488 // origin instead
489 vector ofs = '0 0 0';
490 if (vdist(vec2(tracetest_ent.velocity), <, autocvar_sv_maxspeed))
491 ofs = stepheightvec;
492
493 tracetest_ent.velocity.z = 0;
494 setorigin(tracetest_ent, targ.origin + ofs);
495 tracetoss(tracetest_ent, tracetest_ent);
496 if (trace_startsolid && ofs.z)
497 {
498 setorigin(tracetest_ent, targ.origin + ofs * 0.5);
499 tracetoss(tracetest_ent, tracetest_ent);
500 if (trace_startsolid && ofs.z)
501 {
502 setorigin(tracetest_ent, targ.origin);
503 tracetoss(tracetest_ent, tracetest_ent);
505 return false;
506 }
507 }
508 }
509 tracebox(trace_endpos, tracetest_ent.mins, tracetest_ent.maxs, trace_endpos - eZ * 1500, true, tracetest_ent);
510 return true;
511}
float trace_startsolid
vector stepheightvec
Definition navigation.qh:11

References autocvar_sv_maxspeed, entity(), eZ, org, stepheightvec, trace_endpos, trace_startsolid, vdist, vec2, and vector.

Referenced by trigger_push_test().

◆ trigger_push_testorigin_for_item()

bool trigger_push_testorigin_for_item ( entity tracetest_ent,
entity item,
vector org )

Definition at line 513 of file jumppads.qc.

514{
515 setorigin(tracetest_ent, org);
516 tracetoss(tracetest_ent, tracetest_ent);
517
519 return false;
520 if (trace_ent == item)
521 return true;
522
523 tracebox(trace_endpos, tracetest_ent.mins, tracetest_ent.maxs, trace_endpos - eZ * 1500, true, tracetest_ent);
524
525 if (trace_ent == item)
526 return true;
527
528 return false;
529}

References entity(), eZ, org, trace_endpos, trace_ent, trace_startsolid, and vector.

Referenced by trigger_push_test().

◆ trigger_push_touch()

void trigger_push_touch ( entity this,
entity toucher )

Definition at line 438 of file jumppads.qc.

439{
440 if (this.active == ACTIVE_NOT)
441 return;
442
443 if(this.team)
444 if(((this.spawnflags & INVERT_TEAMS) == 0) == (DIFF_TEAM(this, toucher)))
445 return;
446
448
449 noref bool success = jumppad_push(this, toucher, false);
450
451#ifdef SVQC
452 if (success && (this.spawnflags & PUSH_ONCE))
453 {
454 settouch(this, func_null);
455 setthink(this, SUB_Remove);
456 this.nextthink = time;
457 }
458#endif
459}
float time
float nextthink
void SUB_Remove(entity this)
Remove entity.
Definition defer.qh:13
const int ACTIVE_NOT
Definition defs.qh:36
const int INVERT_TEAMS
Definition defs.qh:10
bool jumppad_push(entity this, entity targ, bool is_velocity_pad)
Definition jumppads.qc:264
const int PUSH_ONCE
Definition jumppads.qh:4
#define EXACTTRIGGER_TOUCH(e, t)
Definition common.qh:115
var void func_null()
#define setthink(e, f)
entity entity toucher
Definition self.qh:72
#define DIFF_TEAM(a, b)
Definition teams.qh:242

References active, ACTIVE_NOT, DIFF_TEAM, entity(), EXACTTRIGGER_TOUCH, func_null(), INVERT_TEAMS, jumppad_push(), nextthink, PUSH_ONCE, setthink, settouch, spawnflags, SUB_Remove(), team, time, and toucher.

Referenced by spawnfunc().

◆ trigger_push_use()

void trigger_push_use ( entity this,
entity actor,
entity trigger )

Definition at line 6 of file jumppads.qc.

7{
8 if(teamplay)
9 {
10 this.team = actor.team;
12 }
13}
const int SF_TRIGGER_UPDATE
Definition defs.qh:23
int SendFlags
Definition net.qh:118
bool teamplay
Definition teams.qh:59

References entity(), SendFlags, SF_TRIGGER_UPDATE, team, and teamplay.

Referenced by spawnfunc(), and spawnfunc().

Variable Documentation

◆ dest

◆ g_jumppads

◆ height

float height

Definition at line 23 of file jumppads.qh.

◆ istypefrag

bool istypefrag

Definition at line 22 of file jumppads.qh.

Referenced by PlayerDamage(), and PutObserverInServer().

◆ jumppadcount

◆ jumppadsused

entity jumppadsused[NUM_JUMPPADSUSED]

Definition at line 29 of file jumppads.qh.

◆ last_pushed

entity last_pushed

Definition at line 25 of file jumppads.qh.

Referenced by SV_PlayerPhysics().

◆ NUM_JUMPPADSUSED

const int NUM_JUMPPADSUSED = 3

Definition at line 27 of file jumppads.qh.

Referenced by jumppad_push().

◆ PUSH_ONCE

const int PUSH_ONCE = BIT(0)

Definition at line 4 of file jumppads.qh.

Referenced by trigger_push_touch().

◆ PUSH_SILENT

const int PUSH_SILENT = BIT(1)

Definition at line 5 of file jumppads.qh.

◆ PUSH_STATIC

const int PUSH_STATIC = BIT(12)

Definition at line 6 of file jumppads.qh.

Referenced by jumppad_push().

◆ pushltime