+
+float W_FixWeaponOrder_BuildImpulseList_buf[WEP_MAXCOUNT];
+string W_FixWeaponOrder_BuildImpulseList_order;
+void W_FixWeaponOrder_BuildImpulseList_swap(float i, float j, entity pass)
+{
+ float h;
+ h = W_FixWeaponOrder_BuildImpulseList_buf[i];
+ W_FixWeaponOrder_BuildImpulseList_buf[i] = W_FixWeaponOrder_BuildImpulseList_buf[j];
+ W_FixWeaponOrder_BuildImpulseList_buf[j] = h;
+}
+float W_FixWeaponOrder_BuildImpulseList_cmp(float i, float j, entity pass)
+{
+ entity e1, e2;
+ float d;
+ e1 = get_weaponinfo(W_FixWeaponOrder_BuildImpulseList_buf[i]);
+ e2 = get_weaponinfo(W_FixWeaponOrder_BuildImpulseList_buf[j]);
+ d = mod(e1.impulse + 9, 10) - mod(e2.impulse + 9, 10);
+ if(d != 0)
+ return -d; // high impulse first!
+ return
+ strstrofs(strcat(" ", W_FixWeaponOrder_BuildImpulseList_order, " "), sprintf(" %d ", W_FixWeaponOrder_BuildImpulseList_buf[i]), 0)
+ -
+ strstrofs(strcat(" ", W_FixWeaponOrder_BuildImpulseList_order, " "), sprintf(" %d ", W_FixWeaponOrder_BuildImpulseList_buf[j]), 0)
+ ; // low char index first!
+}
+string W_FixWeaponOrder_BuildImpulseList(string o)
+{
+ float i;
+ W_FixWeaponOrder_BuildImpulseList_order = o;
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ W_FixWeaponOrder_BuildImpulseList_buf[i - WEP_FIRST] = i;
+ heapsort(WEP_LAST - WEP_FIRST + 1, W_FixWeaponOrder_BuildImpulseList_swap, W_FixWeaponOrder_BuildImpulseList_cmp, world);
+ o = "";
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ o = strcat(o, " ", ftos(W_FixWeaponOrder_BuildImpulseList_buf[i - WEP_FIRST]));
+ W_FixWeaponOrder_BuildImpulseList_order = string_null;
+ return substring(o, 1, -1);
+}
+
+string W_FixWeaponOrder_AllowIncomplete(string order)
+{
+ return W_FixWeaponOrder(order, 0);
+}
+
+string W_FixWeaponOrder_ForceComplete(string order)
+{
+ if(order == "")
+ order = W_NumberWeaponOrder(cvar_defstring("cl_weaponpriority"));
+ return W_FixWeaponOrder(order, 1);
+}
+