naev 0.10.4
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_THRUST_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_EVADE,
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_THRUST,
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 thrust;
203 double speed_mod;
204 double turn_mod;
205 double thrust_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;
242 double ew_evade;
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_statsModSingle( ShipStats *stats, const ShipStatList *list );
334int ss_statsModSingleScale( ShipStats *stats, const ShipStatList *list, double scale );
335int ss_statsModFromList( ShipStats *stats, const ShipStatList *list );
336int ss_statsModFromListScale( 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 );
351double ss_statsGet( const ShipStats *s, const char *name );
352int ss_statsGetLua( lua_State *L, const ShipStats *s, const char *name, int internal );
353int 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:699
void ss_free(ShipStatList *ll)
Frees a list of ship stats.
Definition: shipstats.c:807
int ss_statsMerge(ShipStats *dest, const ShipStats *src)
Merges two different ship stats.
Definition: shipstats.c:391
int ss_statsModFromList(ShipStats *stats, const ShipStatList *list)
Updates a stat structure from a stat list.
Definition: shipstats.c:543
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:967
const char * ss_nameFromType(ShipStatsType type)
Gets the name from type.
Definition: shipstats.c:574
int ss_statsModSingle(ShipStats *stats, const ShipStatList *list)
Modifies a stat structure using a single element.
Definition: shipstats.c:447
int ss_statsModSingleScale(ShipStats *stats, const ShipStatList *list, double scale)
Modifies a stat structure using a single element.
Definition: shipstats.c:496
int ss_statsDesc(const ShipStats *s, char *buf, int len, int newline)
Writes the ship statistics description.
Definition: shipstats.c:744
size_t ss_offsetFromType(ShipStatsType type)
Gets the offset from type.
Definition: shipstats.c:585
ShipStatsType ss_typeFromName(const char *name)
Gets the type from the name.
Definition: shipstats.c:596
int ss_listToXML(xmlTextWriterPtr writer, const ShipStatList *ll)
Creatse a shipstat list element from an xml node.
Definition: shipstats.c:260
double ss_statsGet(const ShipStats *s, const char *name)
Gets a ship stat value by name.
Definition: shipstats.c:953
int ss_statsInit(ShipStats *stats)
Initializes a stat structure.
Definition: shipstats.c:347
int ss_statsSet(ShipStats *s, const char *name, double value, int overwrite)
Sets a ship stat by name.
Definition: shipstats.c:819
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:986
int ss_statsModFromListScale(ShipStats *stats, const ShipStatList *list, double scale)
Updates a stat structure from a stat list.
Definition: shipstats.c:558
int ss_check(void)
Checks for validity.
Definition: shipstats.c:331
ShipStatList * ss_listFromXML(xmlNodePtr node)
Creates a shipstat list element from an xml node.
Definition: shipstats.c:209
int ss_sort(ShipStatList **ll)
Sorts the ship stats, useful if doing saving stuff.
Definition: shipstats.c:298
Represents relative ship statistics as a linked list.
Definition: shipstats.h:167
double d
Definition: shipstats.h:173
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 thrust
Definition: shipstats.h:202
int crew
Definition: shipstats.h:306
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
int cargo
Definition: shipstats.h:305
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
int fuel
Definition: shipstats.h:303
double tur_dam_as_dis
Definition: shipstats.h:286
double energy_regen
Definition: shipstats.h:209
double thrust_mod
Definition: shipstats.h:205
double turn_mod
Definition: shipstats.h:204
double armour_regen_mod
Definition: shipstats.h:222
double shield
Definition: shipstats.h:214
double tur_damage
Definition: shipstats.h:282
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
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 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