28 float strength = 0.0f;
55 if (shield_str >= shield_recharge_limit)
62 if ((delta > 0.0
f) && ((shield_str + delta) > shield_recharge_limit))
63 delta = shield_recharge_limit - shield_str;
76 float weakest =
i2fl(INT_MAX);
83 if (weakest_idx < 0 || quad < weakest)
91 if (weakest >= section_max)
95 if ((delta > 0.0
f) && ((shield_str + delta) > shield_recharge_limit))
96 delta = shield_recharge_limit - shield_str;
101 if (weakest + delta > section_max)
102 xfer_amount = section_max - weakest;
107 delta -= xfer_amount;
112 static double factor = 1.0 / (log(50.0) - log(1.0));
115 float scale_quad(
float generator_fraction,
float quad_strength)
124 float effective_strength = quad_strength * ((
float)log(generator_fraction) * (
float)
factor);
128 if (effective_strength < 0.0
f)
131 return effective_strength;
142 Assert(quadrant_num >= 0 && quadrant_num < objp->n_quadrants);
143 if (quadrant_num < 0 || quadrant_num >= objp->
n_quadrants)
196 Assert(quadrant_num >= 0 && quadrant_num < objp->n_quadrants);
197 if (quadrant_num < 0 || quadrant_num >= objp->
n_quadrants)
204 if (strength > max_quad)
218 Assert(quadrant_num >= 0 && quadrant_num < objp->n_quadrants);
219 if (quadrant_num < 0 || quadrant_num >= objp->
n_quadrants)
229 if (strength > max_quad)
262 float remaining_damage;
270 Assert(quadrant_num >= 0 && quadrant_num < objp->n_quadrants);
271 if ((quadrant_num < 0) || (quadrant_num >= objp->
n_quadrants))
280 if (remaining_damage > 0.0
f)
283 return remaining_damage;
298 if ((quadrant_num >= 0) && (quadrant_num < objp->n_quadrants))
#define MULTIPLAYER_CLIENT
float shield_get_strength(object *objp)
float ship_max_shield_strength
ai_info Ai_info[MAX_AI_INFO]
float shield_get_max_strength(object *objp)
void shield_set_quad(object *objp, int quadrant_num, float strength)
void shield_add_strength(object *objp, float delta)
int shield_is_up(object *objp, int quadrant_num)
float shield_apply_damage(object *objp, int quadrant_num, float damage)
void shield_add_quad(object *objp, int quadrant_num, float delta)
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
float shield_get_quad(object *objp, int quadrant_num)
SCP_vector< float > shield_quadrant
void shield_set_max_strength(object *objp, float newmax)
void shield_set_strength(object *objp, float strength)
#define AIPF_SMART_SHIELD_MANAGEMENT
float shield_get_max_quad(object *objp)
float scale_quad(float generator_fraction, float quad_strength)
float max_shield_recharge