naev 0.12.6
unidiff.h
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#pragma once
5
6#include "attributes.h"
7
13typedef enum UniHunkTargetType_ {
14 HUNK_TARGET_NONE,
15 HUNK_TARGET_SYSTEM,
16 HUNK_TARGET_SPOB,
17 HUNK_TARGET_TECH,
18 HUNK_TARGET_FACTION,
19} UniHunkTargetType_t;
20
26typedef struct UniHunkTarget_ {
27 UniHunkTargetType_t type;
28 union {
29 char *name;
30 } u;
32
38typedef enum UniHunkType_ {
39 HUNK_TYPE_NONE,
40 /* Target should be HUNK_TARGET_SYSTEM. */
41 HUNK_TYPE_SPOB_ADD,
42 HUNK_TYPE_SPOB_REMOVE,
43 HUNK_TYPE_VSPOB_ADD,
44 HUNK_TYPE_VSPOB_REMOVE,
45 HUNK_TYPE_JUMP_ADD,
46 HUNK_TYPE_JUMP_REMOVE,
47 HUNK_TYPE_SSYS_BACKGROUND,
48 HUNK_TYPE_SSYS_BACKGROUND_REVERT, /* For internal usage. */
49 HUNK_TYPE_SSYS_FEATURES,
50 HUNK_TYPE_SSYS_FEATURES_REVERT, /* For internal usage. */
51 HUNK_TYPE_SSYS_POS_X,
52 HUNK_TYPE_SSYS_POS_X_REVERT, /* For internal usage. */
53 HUNK_TYPE_SSYS_POS_Y,
54 HUNK_TYPE_SSYS_POS_Y_REVERT, /* For internal usage. */
55 HUNK_TYPE_SSYS_DISPLAYNAME,
56 HUNK_TYPE_SSYS_DISPLAYNAME_REVERT, /* For internal usage. */
57 HUNK_TYPE_SSYS_DUST,
58 HUNK_TYPE_SSYS_DUST_REVERT, /* For internal usage. */
59 HUNK_TYPE_SSYS_INTERFERENCE,
60 HUNK_TYPE_SSYS_INTERFERENCE_REVERT, /* For internal usage. */
61 HUNK_TYPE_SSYS_NEBU_DENSITY,
62 HUNK_TYPE_SSYS_NEBU_DENSITY_REVERT, /* For internal usage. */
63 HUNK_TYPE_SSYS_NEBU_VOLATILITY,
64 HUNK_TYPE_SSYS_NEBU_VOLATILITY_REVERT, /* For internal usage. */
65 HUNK_TYPE_SSYS_NEBU_HUE,
66 HUNK_TYPE_SSYS_NEBU_HUE_REVERT, /* For internal usage. */
67 HUNK_TYPE_SSYS_NOLANES_ADD,
68 HUNK_TYPE_SSYS_NOLANES_REMOVE,
69 HUNK_TYPE_SSYS_TAG_ADD,
70 HUNK_TYPE_SSYS_TAG_REMOVE,
71 /* Target should be HUNK_TARGET_SYSTEM, but we use attributes for the
72 asteroid label. */
73 HUNK_TYPE_SSYS_ASTEROIDS_ADD,
74 HUNK_TYPE_SSYS_ASTEROIDS_ADD_REVERT,
75 HUNK_TYPE_SSYS_ASTEROIDS_REMOVE,
76 HUNK_TYPE_SSYS_ASTEROIDS_REMOVE_REVERT,
77 HUNK_TYPE_SSYS_ASTEROIDS_POS_X,
78 HUNK_TYPE_SSYS_ASTEROIDS_POS_X_REVERT,
79 HUNK_TYPE_SSYS_ASTEROIDS_POS_Y,
80 HUNK_TYPE_SSYS_ASTEROIDS_POS_Y_REVERT,
81 HUNK_TYPE_SSYS_ASTEROIDS_DENSITY,
82 HUNK_TYPE_SSYS_ASTEROIDS_DENSITY_REVERT,
83 HUNK_TYPE_SSYS_ASTEROIDS_RADIUS,
84 HUNK_TYPE_SSYS_ASTEROIDS_RADIUS_REVERT,
85 HUNK_TYPE_SSYS_ASTEROIDS_MAXSPEED,
86 HUNK_TYPE_SSYS_ASTEROIDS_MAXSPEED_REVERT,
87 HUNK_TYPE_SSYS_ASTEROIDS_ACCEL,
88 HUNK_TYPE_SSYS_ASTEROIDS_ACCEL_REVERT,
89 HUNK_TYPE_SSYS_ASTEROIDS_ADD_TYPE,
90 HUNK_TYPE_SSYS_ASTEROIDS_REMOVE_TYPE,
91 /* Target should be HUNK_TARGET_TECH. */
92 HUNK_TYPE_TECH_ADD,
93 HUNK_TYPE_TECH_REMOVE,
94 /* Target should be HUNK_TARGET_SPOB. */
95 HUNK_TYPE_SPOB_POS_X,
96 HUNK_TYPE_SPOB_POS_X_REVERT, /* For internal usage. */
97 HUNK_TYPE_SPOB_POS_Y,
98 HUNK_TYPE_SPOB_POS_Y_REVERT, /* For internal usage. */
99 HUNK_TYPE_SPOB_CLASS,
100 HUNK_TYPE_SPOB_CLASS_REVERT, /* For internal usage. */
101 HUNK_TYPE_SPOB_FACTION,
102 HUNK_TYPE_SPOB_FACTION_REVERT, /* For internal usage. */
103 HUNK_TYPE_SPOB_PRESENCE_BASE,
104 HUNK_TYPE_SPOB_PRESENCE_BASE_REVERT, /* For internal usage. */
105 HUNK_TYPE_SPOB_PRESENCE_BONUS,
106 HUNK_TYPE_SPOB_PRESENCE_BONUS_REVERT, /* For internal usage. */
107 HUNK_TYPE_SPOB_PRESENCE_RANGE,
108 HUNK_TYPE_SPOB_PRESENCE_RANGE_REVERT, /* For internal usage. */
109 HUNK_TYPE_SPOB_HIDE,
110 HUNK_TYPE_SPOB_HIDE_REVERT, /* For internal usage. */
111 HUNK_TYPE_SPOB_POPULATION,
112 HUNK_TYPE_SPOB_POPULATION_REVERT, /* For internal usage. */
113 HUNK_TYPE_SPOB_DISPLAYNAME,
114 HUNK_TYPE_SPOB_DISPLAYNAME_REVERT, /* For internal usage. */
115 HUNK_TYPE_SPOB_DESCRIPTION,
116 HUNK_TYPE_SPOB_DESCRIPTION_REVERT, /* For internal usage. */
117 HUNK_TYPE_SPOB_BAR,
118 HUNK_TYPE_SPOB_BAR_REVERT, /* For internal usage. */
119 HUNK_TYPE_SPOB_SERVICE_ADD,
120 HUNK_TYPE_SPOB_SERVICE_REMOVE,
121 HUNK_TYPE_SPOB_NOMISNSPAWN_ADD,
122 HUNK_TYPE_SPOB_NOMISNSPAWN_REMOVE,
123 HUNK_TYPE_SPOB_TECH_ADD,
124 HUNK_TYPE_SPOB_TECH_REMOVE,
125 HUNK_TYPE_SPOB_TAG_ADD,
126 HUNK_TYPE_SPOB_TAG_REMOVE,
127 HUNK_TYPE_SPOB_SPACE,
128 HUNK_TYPE_SPOB_SPACE_REVERT, /* For internal usage. */
129 HUNK_TYPE_SPOB_EXTERIOR,
130 HUNK_TYPE_SPOB_EXTERIOR_REVERT, /* For internal usage. */
131 HUNK_TYPE_SPOB_LUA,
132 HUNK_TYPE_SPOB_LUA_REVERT, /* For internal usage. */
133 /* Target should be HUNK_TARGET_FACTION. */
134 HUNK_TYPE_FACTION_VISIBLE,
135 HUNK_TYPE_FACTION_INVISIBLE,
136 HUNK_TYPE_FACTION_ALLY,
137 HUNK_TYPE_FACTION_ENEMY,
138 HUNK_TYPE_FACTION_NEUTRAL,
139 HUNK_TYPE_FACTION_REALIGN, /* For internal usage. */
140 /* End marker */
141 HUNK_TYPE_SENTINAL
142} UniHunkType_t;
143
144typedef enum UniHunkDataType_s {
145 HUNK_DATA_NONE,
146 HUNK_DATA_STRING,
147 HUNK_DATA_INT,
148 HUNK_DATA_FLOAT,
149 HUNK_DATA_POINTER,
150} UniHunkDataType_t;
151
152typedef struct UniAttribute_ {
153 char *name;
154 char *value;
156
162typedef struct UniHunk_ {
164 UniHunkType_t type;
165 UniHunkDataType_t dtype;
166 union {
167 char *name;
168 int data;
169 double fdata;
170 } u;
171 union {
172 void *ptr; /* Allow Pointers, only for old attributes. */
173 const char *name; /* We just save the pointer, so keep as const. */
174 int data;
175 double fdata;
176 } o;
178} UniHunk_t;
179
183typedef struct UniDiffData_ {
184 char *name;
185 char *filename;
188
189/* Global functions, manily for player stuff. */
190int diff_init( void );
191void diff_exit( void );
192NONNULL( 1 ) int diff_isApplied( const char *name );
193NONNULL( 1 ) int diff_apply( const char *name );
194NONNULL( 1 ) void diff_remove( const char *name );
195void diff_clear( void );
196void unidiff_universeDefer( int enable );
197int diff_parsePhysFS( UniDiffData_t *diff, char *filename );
198int diff_parse( UniDiffData_t *diff, char *filename );
199void diff_freeData( UniDiffData_t *diff );
200
201/* Local functions for hunk management. */
202void diff_start( void );
203int diff_patchHunk( UniHunk_t *hunk );
204int diff_revertHunk( const UniHunk_t *hunk );
205void diff_end( void );
206const char *diff_hunkName( UniHunkType_t t );
207const char *diff_hunkTag( UniHunkType_t t );
208void diff_cleanupHunk( UniHunk_t *hunk );
Universe diff filepath list.
Definition unidiff.h:183
char * name
Definition unidiff.h:184
char * filename
Definition unidiff.h:185
UniHunk_t * hunks
Definition unidiff.h:186
Represents the hunk's target.
Definition unidiff.h:26
UniHunkTargetType_t type
Definition unidiff.h:27
char * name
Definition unidiff.h:29
Represents a single hunk in the diff.
Definition unidiff.h:162
UniHunkDataType_t dtype
Definition unidiff.h:165
UniHunkType_t type
Definition unidiff.h:164
UniAttribute_t * attr
Definition unidiff.h:177
UniHunkTarget_t target
Definition unidiff.h:163
int diff_init(void)
Loads available universe diffs.
Definition unidiff.c:480
void diff_exit(void)
Clean up after diffs.
Definition unidiff.c:560
void unidiff_universeDefer(int enable)
Sets whether or not to defer universe change stuff.
Definition unidiff.c:2107
int diff_apply(const char *name)
Applies a diff to the universe.
Definition unidiff.c:658
void diff_remove(const char *name)
Removes a diff from the universe.
Definition unidiff.c:1843
void diff_end(void)
Cleans up after applying a set of diffs.
Definition unidiff.c:796
void diff_clear(void)
Removes all active diffs. (Call before economy_destroy().)
Definition unidiff.c:1858
int diff_revertHunk(const UniHunk_t *hunk)
Reverts a hunk.
Definition unidiff.c:1101
void diff_cleanupHunk(UniHunk_t *hunk)
Cleans up a hunk.
Definition unidiff.c:1940
const char * diff_hunkTag(UniHunkType_t t)
Gets the XML tag of a hunk.
Definition unidiff.c:1930
int diff_patchHunk(UniHunk_t *hunk)
Applies a hunk.
Definition unidiff.c:1114
void diff_start(void)
Starts applying a set of diffs.
Definition unidiff.c:788
int diff_isApplied(const char *name)
Checks if a diff is currently applied.
Definition unidiff.c:631
const char * diff_hunkName(UniHunkType_t t)
Gets the human readable name of a hunk.
Definition unidiff.c:1922