diff --git a/src/llua_pilot.c b/src/llua_pilot.c index 7447d71..0bfb842 100644 --- a/src/llua_pilot.c +++ b/src/llua_pilot.c @@ -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. */ diff --git a/src/pilot.c b/src/pilot.c index d43bc36..b5b3dfe 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -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)) { diff --git a/src/pilot.h b/src/pilot.h index b5b6be4..35531e2 100644 --- a/src/pilot.h +++ b/src/pilot.h @@ -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. */ diff --git a/src/player.c b/src/player.c index e299c3e..135e5aa 100644 --- a/src/player.c +++ b/src/player.c @@ -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; diff --git a/src/space.c b/src/space.c index 17161db..47e78da 100644 --- a/src/space.c +++ b/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,36 +459,49 @@ 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. */ - vectcpy(&vp, &planet->pos); + } 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) { - vect_cadd(&vp, RNG(75, 150) * (RNG(0,1) ? 1 : -1), - RNG(75, 150) * (RNG(0,1) ? 1 : -1)); - a = vect_angle(&vp, &vn); + /* 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); - /* Starting out landed. */ - else if(c == 1) - vectnull(&vv); + /* Entering via hyperspace. */ + if(c == 0) + 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. */ - a, - &vp, - &vv, - 0); - } + pilot_create(plt->ship, + plt->name, + fleet->faction, + (plt->ai != NULL) ? plt->ai : fleet->ai, /* Pilot AI override. */ + a, + &vp, + &vv, + 0); + } } /* Init the system. */ diff --git a/src/space.h b/src/space.h index 2a9f54d..9ec1e96 100644 --- a/src/space.h +++ b/src/space.h @@ -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. */