this post was submitted on 16 Aug 2024
5 points (100.0% liked)

Hackaday

200 readers
96 users here now

Fresh hacks every day

founded 1 month ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] Hjalamanger@feddit.nu 2 points 4 weeks ago

nice game! although I feel like some of the setups in tumbling ballistic are impossible to beat, although there just random. Anyways, here's my very messy code:

// Arguments:
let {x_position, altitude, angle, userStore} = arguments[0];

let target_angle = 0
let x_thrust = 0

///////////////
// Side slip //
///////////////

let half = 159
let ms = 400
let target_speed = ((half - x_position) / half) * ms

if (altitude < 150 || target_speed < 0.1 * ms)
  target_speed = 0

if (!("px" in userStore)) {
  userStore.px = x_position
}
let dx = userStore.px - x_position
userStore.px = x_position
let xs = dx * 60 + target_speed
let axs = xs > 0 ? xs : -xs

target_angle = axs < 90 ? xs : 90 * (xs / axs)
x_thrust = (axs / 90) * (target_angle  > 0 ? target_angle : -target_angle) * 1
if (x_thrust > 1) {
  x_thrust = 1
}
x_thrust = x_thrust * ((target_angle  > 0 ? target_angle : -target_angle) / 90)

let atas = altitude < 150 ? altitude / 150 : 1
target_angle *= atas

let ad = target_angle - angle
let aad = ad > 0 ? ad : -ad

let aa = angle > 0 ? angle : -angle

let xtc90 = altitude < 500 ? (altitude / 500) * 30 : 30

if (aa > 90 + xtc90 || aad > 45 || altitude < 200) {
  x_thrust = 0
}

//////////////
// Altitude //
//////////////

if (!("da" in userStore)) {
  userStore.da = 0;
}
if (!("pa" in userStore)) {
  userStore.pa = altitude;
}

userStore.da = userStore.pa - altitude
userStore.pa = altitude
let as = userStore.da * 60

let tas = altitude / 1.35 + 0.2
let thrust = 0
if (as > tas) {
  thrust = 1
}
let acb = 200 + (as > 250 ? 100 : 0)
let angle_cutoff = altitude < acb ? 89 * (as / 200) : 35
if (angle_cutoff > 89) angle_cutoff = 89
if ((angle > 0 ? angle : -angle) > angle_cutoff) {
  thrust = 0
}

thrust += x_thrust
if (thrust > 1) {
  thrust = 1
}

//////////////
// Rotation //
//////////////

if (!("dr" in userStore)) {
  userStore.dr = 0;
}
if (!("pr" in userStore)) {
  userStore.pr = angle;
}

userStore.dr = userStore.pr - angle
userStore.pr = angle
let rs = userStore.dr * 60
let ars = rs > 0 ? rs : -rs
let rsrtm = 0.02
let rt = (-(angle - target_angle) / 360) * 10 + rs * rsrtm

let ardmc = 50
if (ars < 30) ardmc = 0

let rd = angle - target_angle
let ard = (rd > 0 ? rs : -rd) + rs * ardmc

let ard180_1 = 180 - (angle > 0 ? angle : -angle)
let ard180_2 = 180 - (target_angle > 0 ? target_angle : -target_angle)
let ard180 = ard180_1 + ard180_2 - rs * ardmc

if (((target_angle > 0) != (angle > 0)) && ard180 < ard && false) {
  rt -= rs * rsrtm
  rt = -rt 
}

if (rt > 1) rt = 1;
else if (rt < -1) rt = -1;

// Return:
return { rotThrust:rt, aftThrust:thrust,userStore:userStore };