4 tooltipdb = db_load("tooltips.db");
\r
6 void unloadTooltips()
\r
11 string getZonedTooltipForIdentifier(string s)
\r
16 t = db_get(tooltipdb, s);
\r
21 t = cvar_description(s);
\r
22 if(t != "" && t != "custom cvar")
\r
24 dprint("WARNING: no tooltip set for ", s, "\n");
\r
28 void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass)
\r
30 depthfirst(root, parent, firstChild, nextSibling, funcPre, funcPost, pass);
\r
34 void SUB_Null_ee(entity e1, entity e2)
\r
37 void saveCvarsOf(entity ignore, entity e)
\r
42 void loadCvarsOf(entity ignore, entity e)
\r
47 void saveAllCvars(entity root)
\r
49 forAllDescendants(root, saveCvarsOf, SUB_Null_ee, NULL);
\r
51 void loadAllCvars(entity root)
\r
53 forAllDescendants(root, loadCvarsOf, SUB_Null_ee, NULL);
\r
56 .string cvarNames_Multi;
\r
57 .void(entity me) saveCvars_Multi;
\r
58 void saveCvarsMulti(entity me)
\r
63 me.saveCvars_Multi(me);
\r
64 s = cvar_string(me.cvarName);
\r
66 n = tokenize_console(me.cvarNames_Multi);
\r
67 for(i = 0; i < n; ++i)
\r
68 cvar_set(argv(i), s);
\r
70 void makeMulti(entity e, string otherCvars)
\r
72 e.cvarNames_Multi = otherCvars;
\r
73 e.saveCvars_Multi = e.saveCvars;
\r
74 e.saveCvars = saveCvarsMulti;
\r
77 .void(entity me) saveCvars_Callback;
\r
78 .entity saveCvars_Callback_ent;
\r
79 .void(entity me, entity cb) saveCvars_Callback_func;
\r
80 void saveCvarsCallback(entity me)
\r
82 me.saveCvars_Callback(me);
\r
83 me.saveCvars_Callback_func(me.saveCvars_Callback_ent, me);
\r
85 void makeCallback(entity e, entity cbent, void(entity, entity) cbfunc)
\r
87 e.saveCvars_Callback = e.saveCvars;
\r
88 e.saveCvars = saveCvarsCallback;
\r
89 e.saveCvars_Callback_ent = cbent;
\r
90 e.saveCvars_Callback_func = cbfunc;
\r
93 .void(entity) draw_setDependent;
\r
94 .string cvar_setDependent;
\r
95 .float cvarMin_setDependent;
\r
96 .float cvarMax_setDependent;
\r
97 .string cvar2_setDependent;
\r
98 .float cvar2Min_setDependent;
\r
99 .float cvar2Max_setDependent;
\r
100 .string cvar3_setDependent;
\r
101 .float cvar3Min_setDependent;
\r
102 .float cvar3Max_setDependent;
\r
103 .float op_setDependent;
\r
104 .string cvarString_setDependent;
\r
105 .string cvarValue_setDependent;
\r
106 .float(entity) func_setDependent;
\r
107 void setDependent_Check(entity e)
\r
111 if(e.func_setDependent)
\r
113 e.disabled = !(e.func_setDependent(e));
\r
115 else if(e.cvarString_setDependent)
\r
117 s = cvar_string(e.cvarString_setDependent);
\r
118 e.disabled = (cvar_string(e.cvarString_setDependent) == e.cvarValue_setDependent);
\r
122 if(e.cvar_setDependent)
\r
124 f = cvar(e.cvar_setDependent);
\r
125 if(e.cvarMin_setDependent <= e.cvarMax_setDependent)
\r
126 e.disabled = ((f < e.cvarMin_setDependent) || (f > e.cvarMax_setDependent));
\r
128 e.disabled = ((f >= e.cvarMax_setDependent) && (f <= e.cvarMin_setDependent));
\r
130 if(e.cvar2_setDependent)
\r
132 f = cvar(e.cvar2_setDependent);
\r
133 if(e.cvar2Min_setDependent <= e.cvar2Max_setDependent)
\r
134 e.disabled = (e.disabled + ((f < e.cvar2Min_setDependent) || (f > e.cvar2Max_setDependent)) > e.op_setDependent);
\r
136 e.disabled = (e.disabled + ((f >= e.cvar2Max_setDependent) && (f <= e.cvar2Min_setDependent)) > e.op_setDependent);
\r
138 if(e.cvar3_setDependent)
\r
140 f = cvar(e.cvar3_setDependent);
\r
141 if(e.cvar3Min_setDependent <= e.cvar3Max_setDependent)
\r
142 e.disabled = (e.disabled + ((f < e.cvar3Min_setDependent) || (f > e.cvar3Max_setDependent)) > e.op_setDependent);
\r
144 e.disabled = (e.disabled + ((f >= e.cvar3Max_setDependent) && (f <= e.cvar3Min_setDependent)) > e.op_setDependent);
\r
148 void setDependent_Draw(entity e)
\r
150 setDependent_Check(e);
\r
151 e.draw_setDependent(e);
\r
153 void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax)
\r
155 e.draw_setDependent = e.draw;
\r
156 e.cvar_setDependent = theCvarName;
\r
157 e.cvarMin_setDependent = theCvarMin;
\r
158 e.cvarMax_setDependent = theCvarMax;
\r
159 e.cvar2_setDependent = string_null;
\r
160 e.cvar3_setDependent = string_null;
\r
161 e.func_setDependent = func_null;
\r
162 e.draw = setDependent_Draw;
\r
163 setDependent_Check(e);
\r
165 void setDependentStringNotEqual(entity e, string theCvarName, string theCvarValue)
\r
167 e.draw_setDependent = e.draw;
\r
168 e.cvarString_setDependent = theCvarName;
\r
169 e.cvarValue_setDependent = theCvarValue;
\r
170 e.cvar_setDependent = string_null;
\r
171 e.cvar2_setDependent = string_null;
\r
172 e.cvar3_setDependent = string_null;
\r
173 e.func_setDependent = func_null;
\r
174 e.draw = setDependent_Draw;
\r
175 setDependent_Check(e);
\r
177 void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
\r
179 e.draw_setDependent = e.draw;
\r
180 e.cvar_setDependent = theCvarName;
\r
181 e.cvarMin_setDependent = theCvarMin;
\r
182 e.cvarMax_setDependent = theCvarMax;
\r
183 e.cvar2_setDependent = theCvar2Name;
\r
184 e.cvar2Min_setDependent = theCvar2Min;
\r
185 e.cvar2Max_setDependent = theCvar2Max;
\r
186 e.cvar3_setDependent = string_null;
\r
187 e.op_setDependent = 0;
\r
188 e.func_setDependent = func_null;
\r
189 e.draw = setDependent_Draw;
\r
190 setDependent_Check(e);
\r
192 void setDependentOR(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
\r
194 e.draw_setDependent = e.draw;
\r
195 e.cvar_setDependent = theCvarName;
\r
196 e.cvarMin_setDependent = theCvarMin;
\r
197 e.cvarMax_setDependent = theCvarMax;
\r
198 e.cvar2_setDependent = theCvar2Name;
\r
199 e.cvar2Min_setDependent = theCvar2Min;
\r
200 e.cvar2Max_setDependent = theCvar2Max;
\r
201 e.cvar3_setDependent = string_null;
\r
202 e.op_setDependent = 1;
\r
203 e.func_setDependent = func_null;
\r
204 e.draw = setDependent_Draw;
\r
205 setDependent_Check(e);
\r
207 void setDependentAND3(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max, string theCvar3Name, float theCvar3Min, float theCvar3Max)
\r
209 e.draw_setDependent = e.draw;
\r
210 e.cvar_setDependent = theCvarName;
\r
211 e.cvarMin_setDependent = theCvarMin;
\r
212 e.cvarMax_setDependent = theCvarMax;
\r
213 e.cvar2_setDependent = theCvar2Name;
\r
214 e.cvar2Min_setDependent = theCvar2Min;
\r
215 e.cvar2Max_setDependent = theCvar2Max;
\r
216 e.cvar3_setDependent = theCvar3Name;
\r
217 e.cvar3Min_setDependent = theCvar3Min;
\r
218 e.cvar3Max_setDependent = theCvar3Max;
\r
219 e.op_setDependent = 0;
\r
220 e.func_setDependent = func_null;
\r
221 e.draw = setDependent_Draw;
\r
222 setDependent_Check(e);
\r
224 void setDependentWeird(entity e, float(entity) func)
\r
226 e.draw_setDependent = e.draw;
\r
227 e.func_setDependent = func;
\r
228 e.draw = setDependent_Draw;
\r
229 setDependent_Check(e);
\r
232 // EXTRESPONSE SYSTEM ////////////////////////////////////////////////////////
\r
234 float _Nex_ExtResponseSystem_RequestsSent;
\r
235 float _Nex_ExtResponseSystem_VersionHandled;
\r
236 string _Nex_ExtResponseSystem_UpdateTo;
\r
237 float _Nex_ExtResponseSystem_RetryTime;
\r
238 float _Nex_ExtResponseSystem_RetryTime_LastDelay;
\r
240 void() Item_Nex_ExtResponseSystem_SendQuery =
\r
242 dprint("Sending extended response requests...\n");
\r
243 localcmd(strcat("packet 64.22.107.122:27950 \"getExtResponse checkUpdates voret ", cvar_string("g_voretversion"), "\"\n"));
\r
244 _Nex_ExtResponseSystem_RequestsSent = TRUE;
\r
245 _Nex_ExtResponseSystem_RetryTime_LastDelay = _Nex_ExtResponseSystem_RetryTime_LastDelay * 2 + 1;
\r
246 _Nex_ExtResponseSystem_RetryTime = time + _Nex_ExtResponseSystem_RetryTime_LastDelay;
\r
249 void(float argc) Item_Nex_ExtResponseSystem_Parse =
\r
251 dprint("Received extended response packet from ", argv(0), "\n");
\r
252 if(!_Nex_ExtResponseSystem_RequestsSent)
\r
254 dprint(" But I haven't sent a request yet! Ignoring.\n");
\r
257 if(argv(1) == "noUpdateAvailable")
\r
259 if(_Nex_ExtResponseSystem_VersionHandled)
\r
261 dprint(" duplicated update notice, ignored\n");
\r
264 _Nex_ExtResponseSystem_VersionHandled = 1;
\r
266 else if(argv(1) == "updateAvailable")
\r
268 if(_Nex_ExtResponseSystem_VersionHandled)
\r
270 dprint(" duplicated update notice, ignored\n");
\r
273 _Nex_ExtResponseSystem_VersionHandled = 1;
\r
274 _Nex_ExtResponseSystem_UpdateTo = strzone(argv(2)); // note: only one packet can be handled, so this can't be a leak
\r
277 dprint(" UNKNOWN RESPONSE TYPE: ", argv(1), "\n");
\r
280 void() Item_Nex_ExtResponseSystem_CheckForResponse =
\r
284 while(strlen((s = getextresponse())))
\r
286 argc = tokenize_console(s);
\r
287 Item_Nex_ExtResponseSystem_Parse(argc);
\r
291 // END OF EXTRESPONSE SYSTEM /////////////////////////////////////////////////
\r
293 float preMenuInit()
\r
298 MapInfo_Cache_Create();
\r
299 MapInfo_Enumerate();
\r
300 if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1))
\r
302 draw_reset_cropped();
\r
304 sz = eX * 0.025 + eY * 0.025 * (draw_scale_x / draw_scale_y);
\r
305 draw_CenterText('0.5 0.5 0' - 1.25 * sz_y * eY, "Autogenerating mapinfo for newly added maps...", sz, '1 1 1', 1, 0);
\r
307 boxA = '0.05 0.5 0' + 0.25 * sz_y * eY;
\r
308 boxB = '0.95 0.5 0' + 1.25 * sz_y * eY;
\r
309 draw_Fill(boxA, boxB - boxA, '1 1 1', 1);
\r
313 draw_Fill(boxA, boxB - boxA, '0.1 0.1 0.1', 1);
\r
315 boxB_x = boxA_x * (1 - MapInfo_progress) + boxB_x * MapInfo_progress;
\r
316 draw_Fill(boxA, boxB - boxA, '0 0 1', 1);
\r
323 string campaign_name_previous;
\r
324 float campaign_won_previous;
\r
325 void postMenuDraw()
\r
330 vector fs, sz, line, mid;
\r
332 if(cvar("menu_updatecheck"))
\r
334 Item_Nex_ExtResponseSystem_CheckForResponse();
\r
335 if(!_Nex_ExtResponseSystem_VersionHandled)
\r
336 if(time > _Nex_ExtResponseSystem_RetryTime)
\r
337 Item_Nex_ExtResponseSystem_SendQuery();
\r
340 if(_Nex_ExtResponseSystem_UpdateTo != "")
\r
342 fs = ((1/draw_scale_x) * eX + (1/draw_scale_y) * eY) * 12;
\r
344 sz_x = draw_TextWidth(" http://www.alientrap.org/voret/ ", 0, fs);
\r
347 draw_alpha = sin(time * 0.112 - 0.3) * 0.7;
\r
348 mid = eX * (0.5 + 0.5 * (1 - sz_x) * cos(time * 0.071))
\r
349 + eY * (0.5 + 0.5 * (1 - sz_y) * sin(time * 0.071));
\r
351 draw_Fill(mid - 0.5 * sz, sz, '1 1 0', 1);
\r
352 draw_CenterText(mid - 1 * line, strcat("Update to ", _Nex_ExtResponseSystem_UpdateTo, " now!"), fs, '1 0 0', 1, 0);
\r
353 draw_CenterText(mid - 0 * line, "http://www.alientrap.org/voret/", fs, '0 0 1', 1, 0);
\r
355 if not(campaign_name_previous)
\r
356 campaign_name_previous = strzone(strcat(campaign_name, "x")); // force unequal
\r
357 if(campaign_name == campaign_name_previous)
\r
359 if(cvar(strcat("g_campaign", campaign_name, "_won")))
\r
361 if(!campaign_won_previous)
\r
364 DialogOpenButton_Click_withCoords(NULL, main.winnerDialog, '0 0 0', eX * conwidth + eY * conheight);
\r
366 campaign_won_previous = 1;
\r
369 campaign_won_previous = 0;
\r
373 strunzone(campaign_name_previous);
\r
374 campaign_name_previous = strzone(campaign_name);
\r
375 campaign_won_previous = cvar(strcat("g_campaign", campaign_name, "_won"));
\r
379 string resolvemod(string m)
\r
382 return getcurrentmod();
\r