+#define XX ,
+
+#define WEPSET_COPY_EE(a,b) WEPSET_OP1_EE(a,b,XX,=)
+#define WEPSET_EQ_EE(a,b) WEPSET_OP1_EE(a,b,&&,==)
+#define WEPSET_OR_EE(a,b) WEPSET_OP1_EE(a,b,XX,|=)
+#define WEPSET_AND_EE(a,b) WEPSET_OP2_EE(a,b,XX,=,&)
+#define WEPSET_ANDNOT_EE(a,b) WEPSET_OP1_EE(a,b,XX,&~=)
+#define WEPSET_CONTAINS_ANY_EE(a,b) !!(WEPSET_OP1_EE(a,b,||,&))
+#define WEPSET_CONTAINS_ALL_EE(a,b) WEPSET_OP2_EE(b,a,&&,==,&)
+
+#define WEPSET_COPY_EA(a,b) WEPSET_OP1_EA(a,b,XX,=)
+#define WEPSET_EQ_EA(a,b) WEPSET_OP1_EA(a,b,&&,==)
+#define WEPSET_OR_EA(a,b) WEPSET_OP1_EA(a,b,XX,|=)
+#define WEPSET_AND_EA(a,b) WEPSET_OP2_EA(a,b,XX,=,&)
+#define WEPSET_ANDNOT_EA(a,b) WEPSET_OP1_EA(a,b,XX,&~=)
+#define WEPSET_CONTAINS_ANY_EA(a,b) !!(WEPSET_OP1_EA(a,b,||,&))
+#define WEPSET_CONTAINS_ALL_EA(a,b) WEPSET_OP2_EA(b,a,&&,==,&)
+
+#define WEPSET_COPY_EW(a,b) WEPSET_OP1_EW(a,b,XX,=)
+#define WEPSET_EQ_EW(a,b) WEPSET_OP1_EW(a,b,&&,==)
+#define WEPSET_OR_EW(a,b) WEPSET_OP1_EW(a,b,XX,|=)
+#define WEPSET_AND_EW(a,b) WEPSET_OP2_EW(a,b,XX,=,&)
+#define WEPSET_ANDNOT_EW(a,b) WEPSET_OP1_EW(a,b,XX,&~=)
+#define WEPSET_CONTAINS_EW(a,b) !!(WEPSET_OP1_EW(a,b,||,&))
+
+#define WEPSET_COPY_AE(a,b) WEPSET_OP1_AE(a,b,XX,=)
+#define WEPSET_EQ_AE(a,b) WEPSET_OP1_AE(a,b,&&,==)
+#define WEPSET_OR_AE(a,b) WEPSET_OP1_AE(a,b,XX,|=)
+#define WEPSET_AND_AE(a,b) WEPSET_OP2_AE(a,b,XX,=,&)
+#define WEPSET_ANDNOT_AE(a,b) WEPSET_OP1_AE(a,b,XX,&~=)
+#define WEPSET_CONTAINS_ANY_AE(a,b) !!(WEPSET_OP1_AE(a,b,||,&))
+#define WEPSET_CONTAINS_ALL_AE(a,b) WEPSET_OP2_AE(b,a,&&,==,&)
+
+#define WEPSET_COPY_AA(a,b) WEPSET_OP1_AA(a,b,XX,=)
+#define WEPSET_EQ_AA(a,b) WEPSET_OP1_AA(a,b,&&,==)
+#define WEPSET_OR_AA(a,b) WEPSET_OP1_AA(a,b,XX,|=)
+#define WEPSET_AND_AA(a,b) WEPSET_OP2_AA(a,b,XX,=,&)
+#define WEPSET_ANDNOT_AA(a,b) WEPSET_OP1_AA(a,b,XX,&~=)
+#define WEPSET_CONTAINS_ANY_AA(a,b) !!(WEPSET_OP1_AA(a,b,||,&))
+#define WEPSET_CONTAINS_ALL_AA(a,b) WEPSET_OP2_AA(b,a,&&,==,&)
+
+#define WEPSET_COPY_AW(a,b) WEPSET_OP1_AW(a,b,XX,=)
+#define WEPSET_EQ_AW(a,b) WEPSET_OP1_AW(a,b,&&,==)
+#define WEPSET_OR_AW(a,b) WEPSET_OP1_AW(a,b,XX,|=)
+#define WEPSET_AND_AW(a,b) WEPSET_OP2_AW(a,b,XX,=,&)
+#define WEPSET_ANDNOT_AW(a,b) WEPSET_OP1_AW(a,b,XX,&~=)
+#define WEPSET_CONTAINS_AW(a,b) !!(WEPSET_OP1_AW(a,b,||,&))
+
+WEPSET_DECLARE_A(WEPBIT_ALL);
+WEPSET_DECLARE_A(WEPBIT_SUPERWEAPONS);
+// note: the fabs call is just there to hide "if result is constant" warning
+#define REGISTER_WEAPON_2(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \