+#ifdef SVQC
+ int W_GunAlign(entity this, int preferred_align)
+ {
+ if(this.m_gunalign)
+ return this.m_gunalign; // no adjustment needed
+
+ entity own = this.owner;
+
+ if(preferred_align < 1 || preferred_align > 4)
+ preferred_align = 3; // default
+
+ for(int j = 4; j > 1; --j) // > 1 as 1 is just center again
+ {
+ int taken = 0;
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(own.(weaponentity).m_gunalign == j) // we know it can't be ours thanks to the above check
+ taken |= BIT(j);
+ if(own.(weaponentity).m_gunalign == preferred_align)
+ taken |= BIT(preferred_align);
+ }
+
+ if(!(taken & BIT(preferred_align)))
+ return preferred_align; // prefer the recommended
+ if(!(taken & BIT(j)))
+ return j; // or fall back if it's not available
+ }
+
+ return preferred_align; // return it anyway
+ }
+#else
+ int W_GunAlign(entity this, int preferred_align)
+ {
+ return this.m_gunalign > 0 ? this.m_gunalign : preferred_align;
+ }
+#endif
+
+#if 0