naev 0.11.5
shipstats.h
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#pragma once
5
6#include "nxml.h"
7#include "nlua.h"
8
18typedef enum ShipStatsType_ {
19 SS_TYPE_NIL,
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_ARMOUR_MOD,
31 SS_TYPE_D_ARMOUR_REGEN_MOD,
32 SS_TYPE_D_SHIELD_MOD,
33 SS_TYPE_D_SHIELD_REGEN_MOD,
34 SS_TYPE_D_ENERGY_MOD,
35 SS_TYPE_D_ENERGY_REGEN_MOD,
36 SS_TYPE_D_CPU_MOD,
37 SS_TYPE_D_COOLDOWN_MOD,
39 /* Freighter-type. */
40 SS_TYPE_D_JUMP_DELAY,
41 SS_TYPE_D_LAND_DELAY,
42 SS_TYPE_D_CARGO_INERTIA,
44 /* Electronic warfare. */
45 SS_TYPE_D_EW_HIDE,
46 SS_TYPE_D_EW_SIGNATURE,
47 SS_TYPE_D_EW_STEALTH,
48 SS_TYPE_D_EW_DETECT,
49 SS_TYPE_D_EW_TRACK,
50 SS_TYPE_D_EW_JUMPDETECT,
51 SS_TYPE_D_EW_STEALTH_TIMER,
52 SS_TYPE_D_EW_SCANNED_TIME,
54 /* Launchers. */
55 SS_TYPE_D_LAUNCH_RATE,
56 SS_TYPE_D_LAUNCH_RANGE,
57 SS_TYPE_D_LAUNCH_DAMAGE,
58 SS_TYPE_D_AMMO_CAPACITY,
59 SS_TYPE_D_LAUNCH_LOCKON,
60 SS_TYPE_D_LAUNCH_CALIBRATION,
61 SS_TYPE_D_LAUNCH_RELOAD,
63 /* Fighter Bays. */
64 SS_TYPE_D_FBAY_DAMAGE,
65 SS_TYPE_D_FBAY_HEALTH,
66 SS_TYPE_D_FBAY_MOVEMENT,
67 SS_TYPE_D_FBAY_CAPACITY,
68 SS_TYPE_D_FBAY_RATE,
69 SS_TYPE_D_FBAY_RELOAD,
71 /* Forward mounts. */
72 SS_TYPE_D_FORWARD_HEAT,
73 SS_TYPE_D_FORWARD_DAMAGE,
74 SS_TYPE_D_FORWARD_FIRERATE,
75 SS_TYPE_D_FORWARD_ENERGY,
76 SS_TYPE_D_FORWARD_DAMAGE_AS_DISABLE,
78 /* Turrets. */
79 SS_TYPE_D_TURRET_HEAT,
80 SS_TYPE_D_TURRET_DAMAGE,
81 SS_TYPE_D_TURRET_TRACKING,
82 SS_TYPE_D_TURRET_FIRERATE,
83 SS_TYPE_D_TURRET_ENERGY,
84 SS_TYPE_D_TURRET_DAMAGE_AS_DISABLE,
86 /* Misc. */
87 SS_TYPE_D_HEAT_DISSIPATION,
88 SS_TYPE_D_STRESS_DISSIPATION,
89 SS_TYPE_D_CREW,
90 SS_TYPE_D_MASS,
91 SS_TYPE_D_ENGINE_LIMIT_REL,
92 SS_TYPE_D_LOOT_MOD,
93 SS_TYPE_D_TIME_MOD,
94 SS_TYPE_D_TIME_SPEEDUP,
95 SS_TYPE_D_COOLDOWN_TIME,
96 SS_TYPE_D_JUMP_DISTANCE,
97 SS_TYPE_D_JUMP_WARMUP,
98 SS_TYPE_D_MINING_BONUS,
100 /*
101 * A: Absolute double type data. Should be continuous.
102 */
103 /* Movement. */
104 SS_TYPE_A_ACCEL,
105 SS_TYPE_A_TURN,
106 SS_TYPE_A_SPEED,
107 /* Health. */
108 SS_TYPE_A_ENERGY,
109 SS_TYPE_A_ENERGY_REGEN,
110 SS_TYPE_A_ENERGY_REGEN_MALUS,
111 SS_TYPE_A_ENERGY_LOSS,
112 SS_TYPE_A_SHIELD,
113 SS_TYPE_A_SHIELD_REGEN,
114 SS_TYPE_A_SHIELD_REGEN_MALUS,
115 SS_TYPE_A_ARMOUR,
116 SS_TYPE_A_ARMOUR_REGEN,
117 SS_TYPE_A_ARMOUR_REGEN_MALUS,
118 SS_TYPE_A_DAMAGE,
119 SS_TYPE_A_DISABLE,
120 /* Misc. */
121 SS_TYPE_A_CPU_MAX,
122 SS_TYPE_A_ENGINE_LIMIT,
123 SS_TYPE_A_FUEL_REGEN,
124 SS_TYPE_A_ASTEROID_SCAN,
125 SS_TYPE_A_NEBULA_VISIBILITY,
127 /*
128 * P: Absolute percent type datas. Should be continuous.
129 */
130 SS_TYPE_P_ABSORB,
131 /* Nebula. */
132 SS_TYPE_P_NEBULA_ABSORB,
133 SS_TYPE_P_JAMMING_CHANCE,
135 /*
136 * I: Integer type data. Should be continuous.
137 */
138 SS_TYPE_I_FUEL,
139 SS_TYPE_I_CARGO,
140 SS_TYPE_I_CREW,
142 /*
143 * B: Boolean type data. Should be continuous.
144 */
145 SS_TYPE_B_HIDDEN_JUMP_DETECT,
146 SS_TYPE_B_INSTANT_JUMP,
147 SS_TYPE_B_REVERSE_THRUST,
149 /*
150 * End of list.
151 */
152 SS_TYPE_SENTINEL
153} ShipStatsType;
154
167typedef struct ShipStatList_ {
168 struct ShipStatList_ *next;
170 int target;
171 ShipStatsType type;
172 union {
173 double d;
174 int i;
175 } d;
177
198typedef struct ShipStats_ {
199 /* Movement. */
200 double speed;
201 double turn;
202 double accel;
203 double speed_mod;
204 double turn_mod;
205 double accel_mod;
207 /* Health. */
208 double energy;
210 double energy_mod;
213 double energy_loss;
214 double shield;
216 double shield_mod;
219 double armour;
221 double armour_mod;
224 double damage;
225 double disable;
227 /* General */
228 double cargo_mod;
229 double fuel_mod;
230 double cpu_mod;
231 double cpu_max;
232 double absorb;
235 /* Freighter-type. */
236 double jump_delay;
237 double land_delay;
240 /* Stealth. */
241 double ew_hide;
243 double ew_stealth;
244 double ew_detect;
245 double ew_track;
250 /* Military type. */
253 double crew_mod;
254 double mass_mod;
256 /* Launchers. */
257 double launch_rate;
265 /* Fighter bays. */
266 double fbay_damage;
267 double fbay_health;
270 double fbay_rate;
271 double fbay_reload;
273 /* Fighter/Corvette type. */
274 double fwd_heat;
275 double fwd_damage;
277 double fwd_energy;
280 /* Destroyer/Cruiser type. */
281 double tur_heat;
282 double tur_damage;
285 double tur_energy;
288 /* Jamming. */
289 double jam_chance;
291 /* Engine limits. */
295 /* Misc. */
296 double nebu_absorb;
303 int fuel;
304 double fuel_regen;
305 int cargo;
306 int crew;
307 double loot_mod;
308 double time_mod;
312 double jump_warmup;
313} ShipStats;
314
315/*
316 * Safety.
317 */
318int ss_check (void);
319
320/*
321 * Loading.
322 */
323ShipStatList* ss_listFromXML( xmlNodePtr node );
324int ss_listToXML( xmlTextWriterPtr writer, const ShipStatList *ll );
325int ss_sort( ShipStatList **ll );
326void ss_free( ShipStatList *ll );
327
328/*
329 * Manipulation
330 */
331int ss_statsInit( ShipStats *stats );
332int ss_statsMerge( ShipStats *dest, const ShipStats *src );
333int ss_statsMergeSingle( ShipStats *stats, const ShipStatList *list );
334int ss_statsMergeSingleScale( ShipStats *stats, const ShipStatList *list, double scale );
335int ss_statsMergeFromList( ShipStats *stats, const ShipStatList *list );
336int ss_statsMergeFromListScale( ShipStats *stats, const ShipStatList *list, double scale );
337
338/*
339 * Lookup.
340 */
341const char* ss_nameFromType( ShipStatsType type );
342size_t ss_offsetFromType( ShipStatsType type );
343ShipStatsType ss_typeFromName( const char *name );
344int ss_statsListDesc( const ShipStatList *ll, char *buf, int len, int newline );
345int ss_statsDesc( const ShipStats *s, char *buf, int len, int newline );
346
347/*
348 * Manipulation.
349 */
350int ss_statsSet( ShipStats *s, const char *name, double value, int overwrite );
351ShipStatList* ss_statsSetList( ShipStatList *head, ShipStatsType type, double value, int overwrite, int raw );
352double ss_statsGet( const ShipStats *s, const char *name );
353int ss_statsGetLua( lua_State *L, const ShipStats *s, const char *name, int internal );
354int ss_statsGetLuaTable( lua_State *L, const ShipStats *s, int internal );
static const double d[]
Definition rng.c:273
int ss_statsListDesc(const ShipStatList *ll, char *buf, int len, int newline)
Writes the ship statistics description.
Definition shipstats.c:780
void ss_free(ShipStatList *ll)
Frees a list of ship stats.
Definition shipstats.c:887
int ss_statsMerge(ShipStats *dest, const ShipStats *src)
Merges two different ship stats.
Definition shipstats.c:474
int ss_statsMergeFromList(ShipStats *stats, const ShipStatList *list)
Updates a stat structure from a stat list.
Definition shipstats.c:627
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:1054
const char * ss_nameFromType(ShipStatsType type)
Gets the name from type.
Definition shipstats.c:663
int ss_statsMergeFromListScale(ShipStats *stats, const ShipStatList *list, double scale)
Updates a stat structure from a stat list.
Definition shipstats.c:645
int ss_statsMergeSingleScale(ShipStats *stats, const ShipStatList *list, double scale)
Modifies a stat structure using a single element.
Definition shipstats.c:579
int ss_statsDesc(const ShipStats *s, char *buf, int len, int newline)
Writes the ship statistics description.
Definition shipstats.c:824
int ss_statsMergeSingle(ShipStats *stats, const ShipStatList *list)
Modifies a stat structure using a single element.
Definition shipstats.c:530
size_t ss_offsetFromType(ShipStatsType type)
Gets the offset from type.
Definition shipstats.c:674
ShipStatsType ss_typeFromName(const char *name)
Gets the type from the name.
Definition shipstats.c:685
int ss_listToXML(xmlTextWriterPtr writer, const ShipStatList *ll)
Creatse a shipstat list element from an xml node.
Definition shipstats.c:343
double ss_statsGet(const ShipStats *s, const char *name)
Gets a ship stat value by name.
Definition shipstats.c:1040
int ss_statsInit(ShipStats *stats)
Initializes a stat structure.
Definition shipstats.c:430
int ss_statsSet(ShipStats *s, const char *name, double value, int overwrite)
Sets a ship stat by name.
Definition shipstats.c:899
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:1073
int ss_check(void)
Checks for validity.
Definition shipstats.c:414
ShipStatList * ss_listFromXML(xmlNodePtr node)
Creates a shipstat list element from an xml node.
Definition shipstats.c:292
int ss_sort(ShipStatList **ll)
Sorts the ship stats, useful if doing saving stuff.
Definition shipstats.c:381
Represents relative ship statistics as a linked list.
Definition shipstats.h:167
ShipStatsType type
Definition shipstats.h:171
struct ShipStatList_ * next
Definition shipstats.h:168
Represents ship statistics, properties ship can use.
Definition shipstats.h:198
double nebu_absorb
Definition shipstats.h:296
double energy
Definition shipstats.h:208
double ew_hide
Definition shipstats.h:241
double armour_regen
Definition shipstats.h:220
double armour
Definition shipstats.h:219
double tur_tracking
Definition shipstats.h:283
double ew_stealth_timer
Definition shipstats.h:247
double fwd_energy
Definition shipstats.h:277
double time_speedup
Definition shipstats.h:309
double crew_mod
Definition shipstats.h:253
double loot_mod
Definition shipstats.h:307
double ew_detect
Definition shipstats.h:244
double launch_damage
Definition shipstats.h:259
double ammo_capacity
Definition shipstats.h:260
double cooldown_time
Definition shipstats.h:310
double fwd_dam_as_dis
Definition shipstats.h:278
double engine_limit
Definition shipstats.h:293
double jump_distance
Definition shipstats.h:311
double cargo_inertia
Definition shipstats.h:238
double shield_regen_malus
Definition shipstats.h:218
double shield_regen
Definition shipstats.h:215
double fbay_health
Definition shipstats.h:267
double jump_warmup
Definition shipstats.h:312
double damage
Definition shipstats.h:224
double tur_heat
Definition shipstats.h:281
double mass_mod
Definition shipstats.h:254
double energy_regen_malus
Definition shipstats.h:212
double energy_loss
Definition shipstats.h:213
double launch_lockon
Definition shipstats.h:261
double land_delay
Definition shipstats.h:237
double fwd_heat
Definition shipstats.h:274
double disable
Definition shipstats.h:225
double absorb
Definition shipstats.h:232
double tur_dam_as_dis
Definition shipstats.h:286
double energy_regen
Definition shipstats.h:209
double turn_mod
Definition shipstats.h:204
double armour_regen_mod
Definition shipstats.h:222
double shield
Definition shipstats.h:214
double accel_mod
Definition shipstats.h:205
double tur_damage
Definition shipstats.h:282
double accel
Definition shipstats.h:202
double shield_regen_mod
Definition shipstats.h:217
double fbay_rate
Definition shipstats.h:270
double speed
Definition shipstats.h:200
double jam_chance
Definition shipstats.h:289
double nebu_visibility
Definition shipstats.h:297
double fwd_damage
Definition shipstats.h:275
double speed_mod
Definition shipstats.h:203
double engine_limit_rel
Definition shipstats.h:292
double ew_stealth
Definition shipstats.h:243
int misc_reverse_thrust
Definition shipstats.h:299
double tur_firerate
Definition shipstats.h:284
double mining_bonus
Definition shipstats.h:301
double launch_calibration
Definition shipstats.h:262
double ew_signature
Definition shipstats.h:242
double cpu_max
Definition shipstats.h:231
double launch_range
Definition shipstats.h:258
double shield_mod
Definition shipstats.h:216
double fuel_regen
Definition shipstats.h:304
double heat_dissipation
Definition shipstats.h:251
double armour_regen_malus
Definition shipstats.h:223
double cooldown_mod
Definition shipstats.h:233
double ew_scanned_time
Definition shipstats.h:248
double fuel_mod
Definition shipstats.h:229
int misc_hidden_jump_detect
Definition shipstats.h:302
double launch_reload
Definition shipstats.h:263
double cpu_mod
Definition shipstats.h:230
double energy_regen_mod
Definition shipstats.h:211
double fbay_capacity
Definition shipstats.h:269
double tur_energy
Definition shipstats.h:285
double time_mod
Definition shipstats.h:308
double fbay_damage
Definition shipstats.h:266
double fwd_firerate
Definition shipstats.h:276
int misc_instant_jump
Definition shipstats.h:298
double fbay_movement
Definition shipstats.h:268
double stress_dissipation
Definition shipstats.h:252
double energy_mod
Definition shipstats.h:210
double turn
Definition shipstats.h:201
double launch_rate
Definition shipstats.h:257
double ew_jump_detect
Definition shipstats.h:246
double fbay_reload
Definition shipstats.h:271
double armour_mod
Definition shipstats.h:221
double asteroid_scan
Definition shipstats.h:300
double jump_delay
Definition shipstats.h:236
double cargo_mod
Definition shipstats.h:228