naev 0.12.5
shipstats.h
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#pragma once
5
6#include "nlua.h"
7#include "nxml.h"
8
18typedef enum ShipStatsType_ {
19 SS_TYPE_NIL,
20
21 /*
22 * D: Double type data. Should be continuous.
23 */
24 /* General. */
25 SS_TYPE_D_SPEED_MOD,
26 SS_TYPE_D_TURN_MOD,
27 SS_TYPE_D_ACCEL_MOD,
28 SS_TYPE_D_CARGO_MOD,
29 SS_TYPE_D_FUEL_MOD,
30 SS_TYPE_D_FUEL_USAGE_MOD,
31 SS_TYPE_D_ARMOUR_MOD,
32 SS_TYPE_D_ARMOUR_REGEN_MOD,
33 SS_TYPE_D_SHIELD_MOD,
34 SS_TYPE_D_SHIELD_REGEN_MOD,
35 SS_TYPE_D_ENERGY_MOD,
36 SS_TYPE_D_ENERGY_REGEN_MOD,
37 SS_TYPE_D_CPU_MOD,
38 SS_TYPE_D_COOLDOWN_MOD,
39 SS_TYPE_D_SHIELDDOWN_MOD,
40
41 /* Freighter-type. */
42 SS_TYPE_D_JUMP_DELAY,
44 SS_TYPE_D_LAND_DELAY,
45 SS_TYPE_D_CARGO_INERTIA,
46
47 /* Electronic warfare. */
48 SS_TYPE_D_EW_HIDE,
50 SS_TYPE_D_EW_SIGNATURE,
52 SS_TYPE_D_EW_STEALTH,
54 SS_TYPE_D_EW_DETECT,
55 SS_TYPE_D_EW_TRACK,
56 SS_TYPE_D_EW_JUMPDETECT,
58 SS_TYPE_D_EW_STEALTH_TIMER,
60 SS_TYPE_D_EW_SCANNED_TIME,
62
63 /* Weapons. */
64 SS_TYPE_D_WEAPON_RANGE,
65 SS_TYPE_D_WEAPON_DAMAGE,
66 SS_TYPE_D_WEAPON_FIRERATE,
67 SS_TYPE_D_WEAPON_ENERGY,
68
69 /* Launchers. */
70 SS_TYPE_D_LAUNCH_RATE,
71 SS_TYPE_D_LAUNCH_RANGE,
72 SS_TYPE_D_LAUNCH_DAMAGE,
73 SS_TYPE_D_LAUNCH_ENERGY,
74 SS_TYPE_D_AMMO_CAPACITY,
75 SS_TYPE_D_LAUNCH_LOCKON,
76 SS_TYPE_D_LAUNCH_CALIBRATION,
77 SS_TYPE_D_LAUNCH_RELOAD,
78 SS_TYPE_D_LAUNCH_ACCEL,
79 SS_TYPE_D_LAUNCH_SPEED,
80 SS_TYPE_D_LAUNCH_TURN,
81
82 /* Fighter Bays. */
83 SS_TYPE_D_FBAY_DAMAGE,
85 SS_TYPE_D_FBAY_HEALTH,
87 SS_TYPE_D_FBAY_MOVEMENT,
89 SS_TYPE_D_FBAY_CAPACITY,
90 SS_TYPE_D_FBAY_RATE,
91 SS_TYPE_D_FBAY_RELOAD,
92
93 /* Forward mounts. */
94 SS_TYPE_D_FORWARD_HEAT,
95 SS_TYPE_D_FORWARD_DAMAGE,
96 SS_TYPE_D_FORWARD_FIRERATE,
97 SS_TYPE_D_FORWARD_ENERGY,
98 SS_TYPE_D_FORWARD_DAMAGE_AS_DISABLE,
99 SS_TYPE_D_FORWARD_RANGE,
100
101 /* Turrets. */
102 SS_TYPE_D_TURRET_HEAT,
103 SS_TYPE_D_TURRET_DAMAGE,
104 SS_TYPE_D_TURRET_TRACKING,
105 SS_TYPE_D_TURRET_FIRERATE,
106 SS_TYPE_D_TURRET_ENERGY,
107 SS_TYPE_D_TURRET_DAMAGE_AS_DISABLE,
108 SS_TYPE_D_TURRET_RANGE,
109
110 /* Misc. */
111 SS_TYPE_D_HEAT_DISSIPATION,
112 SS_TYPE_D_STRESS_DISSIPATION,
113 SS_TYPE_D_CREW,
114 SS_TYPE_D_MASS,
115 SS_TYPE_D_ENGINE_LIMIT_REL,
116 SS_TYPE_D_LOOT_MOD,
117 SS_TYPE_D_TIME_MOD,
118 SS_TYPE_D_TIME_SPEEDUP,
119 SS_TYPE_D_COOLDOWN_TIME,
120 SS_TYPE_D_JUMP_DISTANCE,
122 SS_TYPE_D_JUMP_WARMUP,
123 SS_TYPE_D_MINING_BONUS,
124
125 /*
126 * A: Absolute double type data. Should be continuous.
127 */
128 /* Movement. */
129 SS_TYPE_A_ACCEL,
130 SS_TYPE_A_TURN,
131 SS_TYPE_A_SPEED,
132 /* Health. */
133 SS_TYPE_A_ENERGY,
134 SS_TYPE_A_ENERGY_REGEN,
135 SS_TYPE_A_ENERGY_REGEN_MALUS,
137 SS_TYPE_A_SHIELD,
138 SS_TYPE_A_SHIELD_REGEN,
139 SS_TYPE_A_SHIELD_REGEN_MALUS,
141 SS_TYPE_A_ARMOUR,
142 SS_TYPE_A_ARMOUR_REGEN,
143 SS_TYPE_A_ARMOUR_REGEN_MALUS,
145 SS_TYPE_A_DAMAGE,
147 SS_TYPE_A_DISABLE,
149 /* Misc. */
150 SS_TYPE_A_CPU_MAX,
151 SS_TYPE_A_ENGINE_LIMIT,
152 SS_TYPE_A_FUEL_REGEN,
153 SS_TYPE_A_ASTEROID_SCAN,
155 SS_TYPE_A_NEBULA_VISIBILITY,
156
157 /*
158 * P: Absolute percent type datas. Should be continuous.
159 */
160 SS_TYPE_P_ABSORB,
161 /* Nebula. */
162 SS_TYPE_P_NEBULA_ABSORB,
163 SS_TYPE_P_JAMMING_CHANCE,
164
165 /*
166 * I: Integer type data. Should be continuous.
167 */
168 SS_TYPE_I_FUEL,
169 SS_TYPE_I_CARGO,
170 SS_TYPE_I_CREW,
171
172 /*
173 * B: Boolean type data. Should be continuous.
174 */
175 SS_TYPE_B_HIDDEN_JUMP_DETECT,
176 SS_TYPE_B_INSTANT_JUMP,
177 SS_TYPE_B_REVERSE_THRUST,
179
180 /*
181 * End of list.
182 */
183 SS_TYPE_SENTINEL
184} ShipStatsType;
185
198typedef struct ShipStatList_ {
199 struct ShipStatList_ *next;
200
201 int target;
202 ShipStatsType type;
203 union {
204 double d;
205 int i;
206 } d;
208
229typedef struct ShipStats_ {
230 /* Movement. */
231 double speed;
232 double turn;
233 double accel;
234 double speed_mod;
235 double turn_mod;
236 double accel_mod;
237
238 /* Health. */
239 double energy;
241 double energy_mod;
244 double shield;
246 double shield_mod;
249 double armour;
251 double armour_mod;
254 double damage;
255 double disable;
256
257 /* General */
258 double cargo_mod;
259 double fuel_mod;
261 double cpu_mod;
262 double cpu_max;
263 double absorb;
266
267 /* Freighter-type. */
268 double jump_delay;
270 double land_delay;
272
273 /* Stealth. */
274 double ew_hide;
276 double ew_stealth;
277 double ew_detect;
278 double ew_track;
279 double
283
284 /* Military type. */
287 double crew_mod;
288 double mass_mod;
289
290 /* Weapons. */
295
296 /* Launchers. */
297 double launch_rate;
307 double launch_turn;
308
309 /* Fighter bays. */
310 double fbay_damage;
311 double fbay_health;
315 double fbay_rate;
316 double fbay_reload;
317
318 /* Fighter/Corvette type. */
319 double fwd_heat;
320 double fwd_damage;
322 double fwd_energy;
324 double fwd_range;
325
326 /* Destroyer/Cruiser type. */
327 double tur_heat;
328 double tur_damage;
331 double tur_energy;
333 double tur_range;
334
335 /* Jamming. */
336 double jam_chance;
337
338 /* Engine limits. */
341
342 /* Misc. */
343 double nebu_absorb;
351 int fuel;
352 double fuel_regen;
353 int cargo;
354 int crew;
355 double loot_mod;
356 double time_mod;
361 double jump_warmup;
362} ShipStats;
363
364/*
365 * Safety.
366 */
367int ss_check( void );
368
369/*
370 * Loading.
371 */
372ShipStatList *ss_listFromXML( xmlNodePtr node );
373int ss_listToXML( xmlTextWriterPtr writer, const ShipStatList *ll );
374int ss_sort( ShipStatList **ll );
375void ss_free( ShipStatList *ll );
376
377/*
378 * Manipulation
379 */
380int ss_statsInit( ShipStats *stats );
381int ss_statsMerge( ShipStats *dest, const ShipStats *src );
382int ss_statsMergeSingle( ShipStats *stats, const ShipStatList *list );
383int ss_statsMergeSingleScale( ShipStats *stats, const ShipStatList *list,
384 double scale );
385int ss_statsMergeFromList( ShipStats *stats, const ShipStatList *list );
386int ss_statsMergeFromListScale( ShipStats *stats, const ShipStatList *list,
387 double scale );
388
389/*
390 * Lookup.
391 */
392const char *ss_nameFromType( ShipStatsType type );
393size_t ss_offsetFromType( ShipStatsType type );
394ShipStatsType ss_typeFromName( const char *name );
395int ss_statsListDesc( const ShipStatList *ll, char *buf, int len, int newline );
396int ss_statsDesc( const ShipStats *s, char *buf, int len, int newline );
397
398/*
399 * Manipulation.
400 */
401int ss_statsSet( ShipStats *s, const char *name, double value, int overwrite );
402ShipStatList *ss_statsSetList( ShipStatList *head, ShipStatsType type,
403 double value, int overwrite, int raw );
404double ss_statsGet( const ShipStats *s, const char *name );
405double ss_statsGetRaw( const ShipStats *s, ShipStatsType type );
406int ss_statsGetLua( lua_State *L, const ShipStats *s, const char *name,
407 int internal );
408int ss_statsGetLuaTable( lua_State *L, const ShipStats *s, int internal );
409int ss_statsGetLuaTableList( lua_State *L, const ShipStatList *list,
410 int internal );
static const double d[]
Definition rng.c:263
int ss_statsListDesc(const ShipStatList *ll, char *buf, int len, int newline)
Writes the ship statistics description.
Definition shipstats.c:820
void ss_free(ShipStatList *ll)
Frees a list of ship stats.
Definition shipstats.c:934
int ss_statsMerge(ShipStats *dest, const ShipStats *src)
Merges two different ship stats.
Definition shipstats.c:533
int ss_statsMergeFromList(ShipStats *stats, const ShipStatList *list)
Updates a stat structure from a stat list.
Definition shipstats.c:666
int ss_statsGetLua(lua_State *L, const ShipStats *s, const char *name, int internal)
Gets a ship stat value by name and pushes it to Lua.
Definition shipstats.c:1116
const char * ss_nameFromType(ShipStatsType type)
Gets the name from type.
Definition shipstats.c:703
int ss_statsMergeFromListScale(ShipStats *stats, const ShipStatList *list, double scale)
Updates a stat structure from a stat list.
Definition shipstats.c:684
int ss_statsMergeSingleScale(ShipStats *stats, const ShipStatList *list, double scale)
Modifies a stat structure using a single element.
Definition shipstats.c:620
int ss_statsDesc(const ShipStats *s, char *buf, int len, int newline)
Writes the ship statistics description.
Definition shipstats.c:864
int ss_statsMergeSingle(ShipStats *stats, const ShipStatList *list)
Modifies a stat structure using a single element.
Definition shipstats.c:589
size_t ss_offsetFromType(ShipStatsType type)
Gets the offset from type.
Definition shipstats.c:714
ShipStatsType ss_typeFromName(const char *name)
Gets the type from the name.
Definition shipstats.c:725
int ss_listToXML(xmlTextWriterPtr writer, const ShipStatList *ll)
Creatse a shipstat list element from an xml node.
Definition shipstats.c:404
int ss_statsGetLuaTableList(lua_State *L, const ShipStatList *list, int internal)
Converts ship stats to a Lua table, which is pushed on the Lua stack.
Definition shipstats.c:1157
double ss_statsGet(const ShipStats *s, const char *name)
Gets a ship stat value by name.
Definition shipstats.c:1094
int ss_statsInit(ShipStats *stats)
Initializes a stat structure.
Definition shipstats.c:490
int ss_statsSet(ShipStats *s, const char *name, double value, int overwrite)
Sets a ship stat by name.
Definition shipstats.c:946
int ss_statsGetLuaTable(lua_State *L, const ShipStats *s, int internal)
Converts ship stats to a Lua table, which is pushed on the Lua stack.
Definition shipstats.c:1136
int ss_check(void)
Checks for validity.
Definition shipstats.c:474
double ss_statsGetRaw(const ShipStats *s, ShipStatsType type)
Gets a ship stat value by name.
Definition shipstats.c:1108
ShipStatList * ss_listFromXML(xmlNodePtr node)
Creates a shipstat list element from an xml node.
Definition shipstats.c:353
int ss_sort(ShipStatList **ll)
Sorts the ship stats, useful if doing saving stuff.
Definition shipstats.c:442
Represents relative ship statistics as a linked list.
Definition shipstats.h:198
ShipStatsType type
Definition shipstats.h:202
struct ShipStatList_ * next
Definition shipstats.h:199
Represents ship statistics, properties ship can use.
Definition shipstats.h:229
double launch_speed
Definition shipstats.h:306
double nebu_absorb
Definition shipstats.h:343
double ew_track
Definition shipstats.h:278
double energy
Definition shipstats.h:239
double ew_hide
Definition shipstats.h:274
double armour_regen
Definition shipstats.h:250
double armour
Definition shipstats.h:249
double tur_tracking
Definition shipstats.h:329
double ew_stealth_timer
Definition shipstats.h:281
double fwd_energy
Definition shipstats.h:322
double time_speedup
Definition shipstats.h:357
double crew_mod
Definition shipstats.h:287
double loot_mod
Definition shipstats.h:355
double ew_detect
Definition shipstats.h:277
double launch_damage
Definition shipstats.h:299
double ammo_capacity
Definition shipstats.h:301
double cooldown_time
Definition shipstats.h:358
double fwd_dam_as_dis
Definition shipstats.h:323
double engine_limit
Definition shipstats.h:340
double jump_distance
Definition shipstats.h:359
double cargo_inertia
Definition shipstats.h:271
double shield_regen_malus
Definition shipstats.h:248
double shield_regen
Definition shipstats.h:245
double fbay_health
Definition shipstats.h:311
double jump_warmup
Definition shipstats.h:361
double damage
Definition shipstats.h:254
double tur_heat
Definition shipstats.h:327
double mass_mod
Definition shipstats.h:288
double energy_regen_malus
Definition shipstats.h:243
double launch_lockon
Definition shipstats.h:302
double land_delay
Definition shipstats.h:270
double fwd_heat
Definition shipstats.h:319
double disable
Definition shipstats.h:255
double absorb
Definition shipstats.h:263
double tur_dam_as_dis
Definition shipstats.h:332
double launch_turn
Definition shipstats.h:307
double energy_regen
Definition shipstats.h:240
double turn_mod
Definition shipstats.h:235
double armour_regen_mod
Definition shipstats.h:252
double shield
Definition shipstats.h:244
double accel_mod
Definition shipstats.h:236
double tur_damage
Definition shipstats.h:328
double accel
Definition shipstats.h:233
double shield_regen_mod
Definition shipstats.h:247
double weapon_firerate
Definition shipstats.h:293
double launch_energy
Definition shipstats.h:300
double fbay_rate
Definition shipstats.h:315
double speed
Definition shipstats.h:231
double jam_chance
Definition shipstats.h:336
double nebu_visibility
Definition shipstats.h:344
double shielddown_mod
Definition shipstats.h:265
double fwd_damage
Definition shipstats.h:320
double speed_mod
Definition shipstats.h:234
double engine_limit_rel
Definition shipstats.h:339
double ew_stealth
Definition shipstats.h:276
int misc_reverse_thrust
Definition shipstats.h:346
double fwd_range
Definition shipstats.h:324
double tur_firerate
Definition shipstats.h:330
double mining_bonus
Definition shipstats.h:349
double launch_calibration
Definition shipstats.h:303
double weapon_range
Definition shipstats.h:291
double fuel_usage_mod
Definition shipstats.h:260
double ew_signature
Definition shipstats.h:275
double cpu_max
Definition shipstats.h:262
double launch_range
Definition shipstats.h:298
double shield_mod
Definition shipstats.h:246
double fuel_regen
Definition shipstats.h:352
double heat_dissipation
Definition shipstats.h:285
double launch_accel
Definition shipstats.h:305
double armour_regen_malus
Definition shipstats.h:253
double cooldown_mod
Definition shipstats.h:264
double ew_scanned_time
Definition shipstats.h:282
double fuel_mod
Definition shipstats.h:259
int misc_hidden_jump_detect
Definition shipstats.h:350
double launch_reload
Definition shipstats.h:304
double cpu_mod
Definition shipstats.h:261
double energy_regen_mod
Definition shipstats.h:242
double fbay_capacity
Definition shipstats.h:314
double tur_energy
Definition shipstats.h:331
double time_mod
Definition shipstats.h:356
double fbay_damage
Definition shipstats.h:310
double fwd_firerate
Definition shipstats.h:321
int misc_instant_jump
Definition shipstats.h:345
double fbay_movement
Definition shipstats.h:312
double stress_dissipation
Definition shipstats.h:286
double energy_mod
Definition shipstats.h:241
double weapon_energy
Definition shipstats.h:294
double turn
Definition shipstats.h:232
double launch_rate
Definition shipstats.h:297
double ew_jump_detect
Definition shipstats.h:280
double tur_range
Definition shipstats.h:333
double fbay_reload
Definition shipstats.h:316
double armour_mod
Definition shipstats.h:251
double weapon_damage
Definition shipstats.h:292
double asteroid_scan
Definition shipstats.h:348
double jump_delay
Definition shipstats.h:268
double cargo_mod
Definition shipstats.h:258