Does afterburn effects to a player ship
| 2185 | |
| 2186 | // Does afterburn effects to a player ship |
| 2187 | void DoPlayerAfterburnControl(game_controls *controls, object *objp) { |
| 2188 | static int afterburner_id = -1; |
| 2189 | int slot = objp->id; |
| 2190 | |
| 2191 | if (controls->afterburn_thrust > 0) { |
| 2192 | Players[slot].last_afterburner_time = Gametime; |
| 2193 | |
| 2194 | if (Players[slot].afterburn_time_left > 0) { |
| 2195 | float punch_scalar = 1.0; |
| 2196 | |
| 2197 | if (Players[slot].afterburn_time_left == (AFTERBURN_TIME)) |
| 2198 | AddToShakeMagnitude(objp->mtype.phys_info.mass / 2); |
| 2199 | |
| 2200 | if (Players[slot].afterburn_time_left > (AFTERBURN_TIME * .90)) |
| 2201 | punch_scalar = 1.8f; |
| 2202 | else if (Players[slot].afterburn_time_left > (AFTERBURN_TIME * .80) && |
| 2203 | Players[slot].afterburn_time_left < (AFTERBURN_TIME * .90)) { |
| 2204 | float norm = Players[slot].afterburn_time_left - (AFTERBURN_TIME * .80); |
| 2205 | norm /= (AFTERBURN_TIME * .1); |
| 2206 | punch_scalar = 1.0 + (norm * .8); |
| 2207 | } |
| 2208 | |
| 2209 | if (OBJECT_OUTSIDE(objp)) |
| 2210 | controls->forward_thrust = controls->afterburn_thrust * 1.6 * punch_scalar; |
| 2211 | else |
| 2212 | controls->forward_thrust = controls->afterburn_thrust * 1.6 * punch_scalar; |
| 2213 | |
| 2214 | Players[slot].flags |= PLAYER_FLAGS_AFTERBURN_ON | PLAYER_FLAGS_THRUSTED; |
| 2215 | Players[slot].afterburn_time_left -= Frametime; |
| 2216 | if (Players[slot].afterburn_time_left < 0) |
| 2217 | Players[slot].afterburn_time_left = 0; |
| 2218 | } else { |
| 2219 | Players[slot].afterburn_time_left = 0; |
| 2220 | Players[slot].flags &= ~PLAYER_FLAGS_AFTERBURN_ON; |
| 2221 | } |
| 2222 | } else { |
| 2223 | Players[slot].flags &= ~PLAYER_FLAGS_AFTERBURN_ON; |
| 2224 | |
| 2225 | if (Players[slot].afterburn_time_left < AFTERBURN_TIME) { |
| 2226 | if (Players[slot].energy > 5.0) { |
| 2227 | float useage; |
| 2228 | if (afterburner_id == -1) |
| 2229 | afterburner_id = FindObjectIDName("Afterburner"); |
| 2230 | |
| 2231 | if (afterburner_id != -1 && Players[slot].inventory.CheckItem(OBJ_POWERUP, afterburner_id)) |
| 2232 | useage = Frametime * 2; |
| 2233 | else |
| 2234 | useage = Frametime; |
| 2235 | |
| 2236 | Players[slot].afterburn_time_left += useage; |
| 2237 | Players[slot].afterburn_time_left = std::min<float>(AFTERBURN_TIME, Players[slot].afterburn_time_left); |
| 2238 | |
| 2239 | Players[slot].energy -= (useage); |
| 2240 | } |
| 2241 | } |
| 2242 | } |
| 2243 | } |
| 2244 |
no test coverage detected