These ships could only use their x-light slots for x-light planes, not
their plane slots. For instance, agc (30 x-light slots, 32 plane
slots) could load only 30 sams, and mb (0 x-light slots, 10 plane
slots) could not load any sams.
Culprit is could_be_on_ship(). Broken in commit
3e370da5, v4.3.17.
{
struct plchrstr *pcp = &plchr[pp->pln_type];
struct mchrstr *mcp = &mchr[sp->shp_type];
{
struct plchrstr *pcp = &plchr[pp->pln_type];
struct mchrstr *mcp = &mchr[sp->shp_type];
if (pcp->pl_flags & P_K)
nch++;
if (pcp->pl_flags & P_K)
nch++;
else if (pcp->pl_flags & P_M)
nmsl++;
n++;
else if (pcp->pl_flags & P_M)
nmsl++;
n++;
+ nfw = n - nch - nxl - nmsl;
- n -= MIN(nch, mcp->m_nchoppers);
- n -= MIN(nxl, mcp->m_nxlight);
+ if (nch > mcp->m_nchoppers) /* overflow into fixed-wing slots */
+ nfw += nch - mcp->m_nchoppers;
+ if (nxl > mcp->m_nxlight) /* overflow into missile slots */
+ nmsl += nxl - mcp->m_nxlight;
if (nmsl && !(mcp->m_flags & (M_MSL | M_FLY)))
return 0; /* missile slots wanted */
if (nmsl && !(mcp->m_flags & (M_MSL | M_FLY)))
return 0; /* missile slots wanted */
- if (nmsl < n && !(mcp->m_flags & M_FLY))
+ if (nfw && !(mcp->m_flags & M_FLY))
return 0; /* fixed-wing slots wanted */
return 0; /* fixed-wing slots wanted */
- return n <= mcp->m_nplanes;
+ return nfw + nmsl <= mcp->m_nplanes;