[Change] Tweaked entire hyperspace distance system to be more sane.

This commit is contained in:
Allanis 2014-01-01 01:03:09 +00:00
parent 2ed2d84d0e
commit 708e7ff49f
6 changed files with 56 additions and 40 deletions

View File

@ -190,6 +190,7 @@ static int pilot_addFleet(lua_State* L) {
int i, j;
unsigned int p;
double a;
double d;
Vec2 vv, vp, vn;
FleetPilot* plt;
LuaPilot lp;
@ -232,9 +233,9 @@ static int pilot_addFleet(lua_State* L) {
/* Use position passed if possible. */
if(lv != NULL)
vectcpy(&vp, &lv->vec);
else
vect_pset(&vp, RNG(MIN_HYPERSPACE_DIST*2, MIN_HYPERSPACE_DIST*3),
RNG(0,360)*M_PI/180.);
else {
d = RNGF()*(HYPERSPACE_ENTER_MAX-HYPERSPACE_ENTER_MIN) + HYPERSPACE_ENTER_MIN;
}
j = 0;
lua_newtable(L);
@ -248,15 +249,15 @@ static int pilot_addFleet(lua_State* L) {
/* Set velocity only if no position is set.. */
if(lv != NULL) {
if(VMOD(lv->vec) > MIN_HYPERSPACE_DIST) {
if(VMOD(lv->vec) > HYPERSPACE_ENTER_MIN*0.9) {
a = vect_angle(&vp, &vn);
vect_pset(&vv, plt->ship->speed * 3., a);
vect_pset(&vv, HYPERSPACE_VEL, a);
}
else vectnull(&vv);
}
else { /* Enterting via hyperspace. */
a = vect_angle(&vp, &vn);
vect_pset(&vv, plt->ship->speed * 3., a);
vect_pset(&vv, HYPERSPACE_VEL, a);
}
/* Create the pilot. */

View File

@ -819,7 +819,7 @@ static void pilot_hyperspace(Pilot* p) {
return;
}
/* Keep accelerating - hyperspace uses much bigger accel. */
vect_pset(&p->solid->force, p->thrust * 5., p->solid->dir);
vect_pset(&p->solid->force, HYPERSPACE_THRUST*p->solid->mass, p->solid->dir);
}
/* Engines getting ready for the jump. */
else if(pilot_isFlag(p, PILOT_HYP_BEGIN)) {

View File

@ -9,12 +9,18 @@
#define PLAYER_ID 1 /**< Player pilot ID. */
/* Hyperspace parameters. */
#define HYPERSPACE_ENGINE_DELAY 3000 /**< Warm up the engines. */
#define HYPERSPACE_FLY_DELAY 5000 /**< Time taken to hyperspace. */
#define HYPERSPACE_STARS_BLUR 2000 /**< Time stars blur. */
#define HYPERSPACE_STARS_LENGTH 1000 /**< Length the stars blur to at max. */
#define HYPERSPACE_FADEOUT 1000 /**< Time fadeout. */
#define HYPERSPACE_FUEL 100 /**< Amount of fuel taken. */
#define HYPERSPACE_THRUST 2000. /**< How much thrust you use in hyperspace. */
#define HYPERSPACE_VEL HYPERSPACE_THRUST*(HYPERSPACE_FLY_DELAY/1000) /**< Vel at hyp.*/
#define HYPERSPACE_ENTER_MIN HYPERSPACE_VEL*0.5 /**< Min entering distance. */
#define HYPERSPACE_ENTER_MAX HYPERSPACE_VEL*0.6 /**< Max entering distance. */
#define HYPERSPACE_EXIT_MIN 1500. /**< Min distance to begin jumping. */
/* Aproximation for pilot size. */
#define PILOT_SIZE_APROX 0.8 /**< Approximation for pilot size. */

View File

@ -1820,6 +1820,7 @@ void player_jump(void) {
*/
void player_brokeHyperspace(void) {
unsigned int tl, th;
double d;
/* Calculate the time it takes, call before space_init. */
tl = (unsigned int) floor(sqrt((double)player->solid->mass)/5.);
@ -1832,8 +1833,8 @@ void player_brokeHyperspace(void) {
space_init(systems_stack[cur_system->jumps[hyperspace_target]].name);
/* Set position, pilot_update will handle the lowering of velocity. */
player_warp(-cos(player->solid->dir) * MIN_HYPERSPACE_DIST * 2.5,
-sin(player->solid->dir) * MIN_HYPERSPACE_DIST * 2.5);
d = RNGF()*(HYPERSPACE_ENTER_MAX-HYPERSPACE_ENTER_MIN) + HYPERSPACE_ENTER_MIN;
player_warp(-cos(player->solid->dir) * d, -sin(player->solid->dir) * d);
/* Reduce fuel. */
player->fuel -= HYPERSPACE_FUEL;

View File

@ -253,7 +253,7 @@ int space_canHyperspace(Pilot* p) {
for(i = 0; i < cur_system->nplanets; i++) {
d = vect_dist(&p->solid->pos, &cur_system->planets[i]->pos);
if(d < MIN_HYPERSPACE_DIST)
if(d < HYPERSPACE_EXIT_MIN)
return 0;
}
return 1;
@ -423,13 +423,9 @@ static void space_addFleet(Fleet* fleet, int init) {
FleetPilot* plt;
Planet* planet;
int i, c;
double a;
double a, d;
Vec2 vv, vp, vn;
/* Simulate them coming from hyperspace. */
vect_pset(&vp, RNG(MIN_HYPERSPACE_DIST*2, MIN_HYPERSPACE_DIST*3),
RNG(0, 360)*M_PI/180.);
/* Needed to determine angle. */
vectnull(&vn);
@ -446,8 +442,8 @@ static void space_addFleet(Fleet* fleet, int init) {
/* Simulate they came from hyperspace. */
if(c == 0) {
vect_pset(&vp, RNG(MIN_HYPERSPACE_DIST, MIN_HYPERSPACE_DIST*3.),
RNG(0,360)*M_PI/180.);
d = RNGF()*(HYPERSPACE_ENTER_MAX-HYPERSPACE_ENTER_MIN) + HYPERSPACE_ENTER_MIN;
vect_pset(&vp, d, RNG(0,360)*M_PI/180.);
}
/* Starting out landed or heading towards landing. */
@ -463,31 +459,44 @@ static void space_addFleet(Fleet* fleet, int init) {
/* No suitable planet found. */
if(planet == NULL) {
vect_pset(&vp, RNG(MIN_HYPERSPACE_DIST, MIN_HYPERSPACE_DIST*3.),
RNG(0, 360)*M_PI/180.);
d = RNGF()*(HYPERSPACE_ENTER_MAX-HYPERSPACE_ENTER_MIN) + HYPERSPACE_ENTER_MIN;
vect_pset(&vp, d, RNG(0,360)*M_PI/180.);
c = 0;
} else /* Set position to be planet position. */
} else {
/* Start out landed. */
if(c == 1)
vectcpy(&vp, &planet->pos);
/* Start out near landed. */
else if(c == 2) {
d = RNGF()*(HYPERSPACE_ENTER_MAX-HYPERSPACE_ENTER_MIN) + HYPERSPACE_ENTER_MIN;
vect_pset(&vp, d, RNG(0,360)*M_PI/180.);
}
}
}
for(i = 0; i < fleet->npilots; i++)
plt = &fleet->pilots[i];
if(RNG(0, 100) <= plt->chance) {
/* Other ships in the fleet should start split up. */
vect_cadd(&vp, RNG(75, 150) * (RNG(0,1) ? 1 : -1),
RNG(75, 150) * (RNG(0,1) ? 1 : -1));
a = vect_angle(&vp, &vn);
/* Entering via hyperspace. */
if(c == 0)
vect_pset(&vv, plt->ship->speed * 3., a);
vect_pset(&vv, HYPERSPACE_VEL, a);
/* Starting out landed. */
else if(c == 1)
vectnull(&vv);
/* Starting out almost landed. */
else if(c == 2)
/* Put speed at half in case they start very near. */
vect_pset(&vv, plt->ship->speed * 0.5, a);
pilot_create(plt->ship,
plt->name,
fleet->faction,
(plt->ai != NULL) ? fleet->ai : fleet->ai, /* Pilot AI override. */
(plt->ai != NULL) ? plt->ai : fleet->ai, /* Pilot AI override. */
a,
&vp,
&vv,

View File

@ -4,7 +4,6 @@
#include "economy.h"
#include "pilot.h"
#define MIN_HYPERSPACE_DIST 1500 /**< Minimum distance to initiate hyperspace. */
#define MAX_HYPERSPACE_VEL 25 /**< Speed to brake to before jumping. */
#define PLANET_TECH_MAX 8 /**< Amount of special techs a planet can have. */