46 flib_log_e("null parameter in flib_ipc_append_mapconf"); |
46 flib_log_e("null parameter in flib_ipc_append_mapconf"); |
47 } else if(tempvector) { |
47 } else if(tempvector) { |
48 bool error = false; |
48 bool error = false; |
49 |
49 |
50 if(map->mapgen == MAPGEN_NAMED) { |
50 if(map->mapgen == MAPGEN_NAMED) { |
51 error |= flib_ipc_append_message(tempvector, "emap %s", map->name); |
51 if(map->name) { |
|
52 error |= flib_ipc_append_message(tempvector, "emap %s", map->name); |
|
53 } else { |
|
54 flib_log_e("Missing map name"); |
|
55 error = true; |
|
56 } |
52 } |
57 } |
53 if(map->theme && !mappreview) { |
58 if(map->theme && !mappreview) { |
54 error |= flib_ipc_append_message(tempvector, "etheme %s", map->theme); |
59 if(map->theme) { |
55 } |
60 error |= flib_ipc_append_message(tempvector, "etheme %s", map->theme); |
|
61 } else { |
|
62 flib_log_e("Missing map theme"); |
|
63 error = true; |
|
64 } |
|
65 } |
|
66 error |= flib_ipc_append_seed(tempvector, map->seed); |
56 error |= flib_ipc_append_message(tempvector, "e$template_filter %i", map->templateFilter); |
67 error |= flib_ipc_append_message(tempvector, "e$template_filter %i", map->templateFilter); |
57 error |= flib_ipc_append_message(tempvector, "e$mapgen %i", map->mapgen); |
68 error |= flib_ipc_append_message(tempvector, "e$mapgen %i", map->mapgen); |
58 |
69 |
59 if(map->mapgen == MAPGEN_MAZE) { |
70 if(map->mapgen == MAPGEN_MAZE) { |
60 error |= flib_ipc_append_message(tempvector, "e$maze_size %i", map->mazeSize); |
71 error |= flib_ipc_append_message(tempvector, "e$maze_size %i", map->mazeSize); |
95 } else { |
106 } else { |
96 return flib_ipc_append_message(vec, "eseed %s", seed); |
107 return flib_ipc_append_message(vec, "eseed %s", seed); |
97 } |
108 } |
98 } |
109 } |
99 |
110 |
|
111 int flib_ipc_append_script(flib_vector *vec, const char *script) { |
|
112 if(!vec || !script) { |
|
113 flib_log_e("null parameter in flib_ipc_append_script"); |
|
114 return -1; |
|
115 } else { |
|
116 return flib_ipc_append_message(vec, "escript %s", script); |
|
117 } |
|
118 } |
|
119 |
100 int flib_ipc_append_gamescheme(flib_vector *vec, const flib_cfg *scheme) { |
120 int flib_ipc_append_gamescheme(flib_vector *vec, const flib_cfg *scheme) { |
101 int result = -1; |
121 int result = -1; |
102 flib_vector *tempvector = flib_vector_create(); |
122 flib_vector *tempvector = flib_vector_create(); |
103 if(!vec || !scheme) { |
123 if(!vec || !scheme) { |
104 flib_log_e("null parameter in flib_ipc_append_gamescheme"); |
124 flib_log_e("null parameter in flib_ipc_append_gamescheme"); |
153 if(!perHogAmmo && !noAmmoStore) { |
173 if(!perHogAmmo && !noAmmoStore) { |
154 error |= appendWeaponSet(tempvector, team->hogs[0].weaponset); |
174 error |= appendWeaponSet(tempvector, team->hogs[0].weaponset); |
155 error |= flib_ipc_append_message(tempvector, "eammstore"); |
175 error |= flib_ipc_append_message(tempvector, "eammstore"); |
156 } |
176 } |
157 |
177 |
158 char *hash = team->hash ? team->hash : "00000000000000000000000000000000"; |
178 // TODO |
|
179 char *hash = team->ownerName ? team->ownerName : "00000000000000000000000000000000"; |
159 error |= flib_ipc_append_message(tempvector, "eaddteam %s %"PRIu32" %s", hash, team->color, team->name); |
180 error |= flib_ipc_append_message(tempvector, "eaddteam %s %"PRIu32" %s", hash, team->color, team->name); |
160 |
181 |
161 if(team->remoteDriven) { |
182 if(team->remoteDriven) { |
162 error |= flib_ipc_append_message(tempvector, "erdriven"); |
183 error |= flib_ipc_append_message(tempvector, "erdriven"); |
163 } |
184 } |
210 bool error = false; |
231 bool error = false; |
211 bool perHogAmmo = false; |
232 bool perHogAmmo = false; |
212 bool sharedAmmo = false; |
233 bool sharedAmmo = false; |
213 |
234 |
214 error |= flib_ipc_append_message(vec, netgame ? "TN" : "TL"); |
235 error |= flib_ipc_append_message(vec, netgame ? "TN" : "TL"); |
215 error |= flib_ipc_append_seed(vec, setup->seed); |
|
216 if(setup->map) { |
236 if(setup->map) { |
217 error |= flib_ipc_append_mapconf(tempvector, setup->map, false); |
237 error |= flib_ipc_append_mapconf(tempvector, setup->map, false); |
218 } |
238 } |
219 if(setup->script) { |
239 if(setup->script) { |
220 error |= flib_ipc_append_message(tempvector, "escript %s", setup->script); |
240 error |= flib_ipc_append_message(tempvector, "escript %s", setup->script); |
223 error |= flib_ipc_append_gamescheme(tempvector, setup->gamescheme); |
243 error |= flib_ipc_append_gamescheme(tempvector, setup->gamescheme); |
224 sharedAmmo = getGameMod(setup->gamescheme, GAMEMOD_SHAREDAMMO_MASKBIT); |
244 sharedAmmo = getGameMod(setup->gamescheme, GAMEMOD_SHAREDAMMO_MASKBIT); |
225 // Shared ammo has priority over per-hog ammo |
245 // Shared ammo has priority over per-hog ammo |
226 perHogAmmo = !sharedAmmo && getGameMod(setup->gamescheme, GAMEMOD_PERHOGAMMO_MASKBIT); |
246 perHogAmmo = !sharedAmmo && getGameMod(setup->gamescheme, GAMEMOD_PERHOGAMMO_MASKBIT); |
227 } |
247 } |
228 if(setup->teams && setup->teamcount>0) { |
248 if(setup->teams && setup->teamCount>0) { |
229 uint32_t *clanColors = flib_calloc(setup->teamcount, sizeof(uint32_t)); |
249 uint32_t *clanColors = flib_calloc(setup->teamCount, sizeof(uint32_t)); |
230 if(!clanColors) { |
250 if(!clanColors) { |
231 error = true; |
251 error = true; |
232 } else { |
252 } else { |
233 int clanCount = 0; |
253 int clanCount = 0; |
234 for(int i=0; i<setup->teamcount; i++) { |
254 for(int i=0; i<setup->teamCount; i++) { |
235 flib_team *team = setup->teams[i]; |
255 flib_team *team = setup->teams[i]; |
236 bool newClan = false; |
256 bool newClan = false; |
237 |
257 |
238 // Find the clan index of this team (clans are identified by color). |
258 // Find the clan index of this team (clans are identified by color). |
239 // The upper 8 bits (alpha) are ignored in the engine as well. |
259 // The upper 8 bits (alpha) are ignored in the engine as well. |