[Change] Tweaked entire hyperspace distance system to be more sane.
This commit is contained in:
parent
2ed2d84d0e
commit
708e7ff49f
@ -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. */
|
||||
|
@ -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)) {
|
||||
|
@ -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. */
|
||||
|
@ -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;
|
||||
|
35
src/space.c
35
src/space.c
@ -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,
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user