From: Juhu <5894800-Juhu_@users.noreply.gitlab.com> Date: Sun, 23 Jan 2022 18:42:28 +0000 (+0100) Subject: require dropship path to be atleast a quarter of the diagonal length of the map,... X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=f823d81a9e5f024323c438bb23748cd55f6c08ca;p=xonotic%2Fxonotic-data.pk3dir.git require dropship path to be atleast a quarter of the diagonal length of the map, prevents the dropship from spawning in buildings --- diff --git a/qcsrc/common/gamemodes/gamemode/br/sv_dropship.qc b/qcsrc/common/gamemodes/gamemode/br/sv_dropship.qc index 4750ad72b..69d21a370 100644 --- a/qcsrc/common/gamemodes/gamemode/br/sv_dropship.qc +++ b/qcsrc/common/gamemodes/gamemode/br/sv_dropship.qc @@ -12,40 +12,44 @@ entity dropship_initialize() { entity this = dropship_spawn(VEH_RACER, autocvar_g_br_dropship_scale, autocvar_g_br_dropship_color); - bool moveSucceeded = MoveToRandomLocationWithinBounds(this, world.mins, world.maxs, this.dphitcontentsmask, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 2500, 8192, 1024); - if(!moveSucceeded) + for(int i = 0; i < 100; ++i) // try to find a dropship path multiple times { - delete(this); - return NULL; + if(!MoveToRandomLocationWithinBounds(this, world.mins, world.maxs, this.dphitcontentsmask, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 100, 8192, 1024)) + continue; + + vector mult; + + vector startorigin; + startorigin = dropship_seekPoint(this, this.origin, 2, 2, 1); + startorigin = dropship_seekPoint(this, startorigin, 0, 0, 1); + startorigin = dropship_seekPoint(this, startorigin, 1, 0, 1); + mult = dropship_getMultipliers(); + startorigin = dropship_seekPoint(this, startorigin, 0, 1, mult.x); + startorigin = dropship_seekPoint(this, startorigin, 1, 1, mult.y); + + vector endorigin; + mult = dropship_getMultipliers(); + endorigin = dropship_seekPoint(this, startorigin, 0, 1, 1 - mult.x); + endorigin = dropship_seekPoint(this, endorigin, 1, 1, 1 - mult.y); + + endorigin = startorigin + normalize(endorigin - startorigin) * vlen(vec2(world.maxs - world.mins)); + + tracebox(startorigin, this.mins, this.maxs, endorigin, MOVE_NORMAL, this); + dropship_path_length = trace_fraction * vlen(endorigin - startorigin); + if(dropship_path_length < (vlen(vec2(world.maxs - world.mins)) / 4)) // if the dropship path isn't atleast one quarter of the diagonal length of the map, retry, we're probably in a building + continue; + endorigin = trace_endpos; + dropship_path_direction = normalize(endorigin - startorigin); + + setorigin(this, startorigin); + this.angles = vectoangles(dropship_path_direction); + this.velocity = '0 0 0'; + + return this; } - vector mult; - - vector startorigin; - startorigin = dropship_seekPoint(this, this.origin, 2, 2, 1); - startorigin = dropship_seekPoint(this, startorigin, 0, 0, 1); - startorigin = dropship_seekPoint(this, startorigin, 1, 0, 1); - mult = dropship_getMultipliers(); - startorigin = dropship_seekPoint(this, startorigin, 0, 1, mult.x); - startorigin = dropship_seekPoint(this, startorigin, 1, 1, mult.y); - - vector endorigin; - mult = dropship_getMultipliers(); - endorigin = dropship_seekPoint(this, startorigin, 0, 1, 1 - mult.x); - endorigin = dropship_seekPoint(this, endorigin, 1, 1, 1 - mult.y); - - endorigin = startorigin + normalize(endorigin - startorigin) * vlen(world.maxs - world.mins); - - tracebox(startorigin, this.mins, this.maxs, endorigin, MOVE_NORMAL, this); - dropship_path_length = trace_fraction * vlen(endorigin - startorigin); - endorigin = trace_endpos; - dropship_path_direction = normalize(endorigin - startorigin); - - setorigin(this, startorigin); - this.angles = vectoangles(dropship_path_direction); - this.velocity = '0 0 0'; - - return this; + delete(this); + return NULL; } entity dropship_spawn(Vehicle info, float entity_scale, vector color)