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

View File

@ -819,7 +819,7 @@ static void pilot_hyperspace(Pilot* p) {
return; return;
} }
/* Keep accelerating - hyperspace uses much bigger accel. */ /* 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. */ /* Engines getting ready for the jump. */
else if(pilot_isFlag(p, PILOT_HYP_BEGIN)) { else if(pilot_isFlag(p, PILOT_HYP_BEGIN)) {

View File

@ -9,12 +9,18 @@
#define PLAYER_ID 1 /**< Player pilot ID. */ #define PLAYER_ID 1 /**< Player pilot ID. */
/* Hyperspace parameters. */
#define HYPERSPACE_ENGINE_DELAY 3000 /**< Warm up the engines. */ #define HYPERSPACE_ENGINE_DELAY 3000 /**< Warm up the engines. */
#define HYPERSPACE_FLY_DELAY 5000 /**< Time taken to hyperspace. */ #define HYPERSPACE_FLY_DELAY 5000 /**< Time taken to hyperspace. */
#define HYPERSPACE_STARS_BLUR 2000 /**< Time stars blur. */ #define HYPERSPACE_STARS_BLUR 2000 /**< Time stars blur. */
#define HYPERSPACE_STARS_LENGTH 1000 /**< Length the stars blur to at max. */ #define HYPERSPACE_STARS_LENGTH 1000 /**< Length the stars blur to at max. */
#define HYPERSPACE_FADEOUT 1000 /**< Time fadeout. */ #define HYPERSPACE_FADEOUT 1000 /**< Time fadeout. */
#define HYPERSPACE_FUEL 100 /**< Amount of fuel taken. */ #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. */ /* Aproximation for pilot size. */
#define PILOT_SIZE_APROX 0.8 /**< Approximation 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) { void player_brokeHyperspace(void) {
unsigned int tl, th; unsigned int tl, th;
double d;
/* Calculate the time it takes, call before space_init. */ /* Calculate the time it takes, call before space_init. */
tl = (unsigned int) floor(sqrt((double)player->solid->mass)/5.); 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); space_init(systems_stack[cur_system->jumps[hyperspace_target]].name);
/* Set position, pilot_update will handle the lowering of velocity. */ /* Set position, pilot_update will handle the lowering of velocity. */
player_warp(-cos(player->solid->dir) * MIN_HYPERSPACE_DIST * 2.5, d = RNGF()*(HYPERSPACE_ENTER_MAX-HYPERSPACE_ENTER_MIN) + HYPERSPACE_ENTER_MIN;
-sin(player->solid->dir) * MIN_HYPERSPACE_DIST * 2.5); player_warp(-cos(player->solid->dir) * d, -sin(player->solid->dir) * d);
/* Reduce fuel. */ /* Reduce fuel. */
player->fuel -= HYPERSPACE_FUEL; player->fuel -= HYPERSPACE_FUEL;

View File

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

View File

@ -4,7 +4,6 @@
#include "economy.h" #include "economy.h"
#include "pilot.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 MAX_HYPERSPACE_VEL 25 /**< Speed to brake to before jumping. */
#define PLANET_TECH_MAX 8 /**< Amount of special techs a planet can have. */ #define PLANET_TECH_MAX 8 /**< Amount of special techs a planet can have. */