Update, 20101231..
R11 has been added to the shiplist and looks good. I've decided to play with it, and loaded up one of my own custom campaigns.
Basically.. I loaded up EAW's Lyran campaign vs ISC (recompiled for OP) with EvilDave missions, in LATE era. I want to start in Late and see the X1-R refits happen.
..
.. the enemy ships. They are hard. wow.
.. and then came the first campaign mission: Peace in Our Times.. .. and I wasn't happy. Everything was screwed up!
1-
The game really doesn't provide any information whatsoever about what year it is, or what ships are sane, to its missions. I spend days looking at the code and confirm, it's just not available.
So.. ok. While it's impossible to get the year of availability, there are certain things that can be done for that.. an estimate. Fine I can work with that.
2- What are all those messed up specialized ships doing showing up in a campaign mission..! Now THAT I can do something about. This is something I added in OP+ 4.0 and am preserving in 4.1: fine control.
Check this out.. This one's for mission scripters. This is what fine shiplist and ship selection control is for.
if (global_sl.mIsEnhancedShiplist()) {
// filter based on Class type
// We don't want DNs and BBs, bases, etc.
std::list< eEnhancedClassTypes > enhancedClassTypeList;
enhancedClassTypeList.push_back(kEClassFrigate);
enhancedClassTypeList.push_back(kEClassDestroyer);
enhancedClassTypeList.push_back(kEClassWarDestroyer);
enhancedClassTypeList.push_back(kEClassLightCruiser);
enhancedClassTypeList.push_back(kEClassWarCruiser);
enhancedClassTypeList.push_back(kEClassHeavyWarDestroyer);
enhancedClassTypeList.push_back(kEClassMediumCruiser);
enhancedClassTypeList.push_back(kEClassHeavyCruiser);
enhancedClassTypeList.push_back(kEClassNewHeavyCruiser);
enhancedClassTypeList.push_back(kEClassHeavyBattlecruiser);
global_sl.Subset(enhancedClassTypeList);
// filter based on wanted roles
// Skip Cargo ships, Bases, Repair ships, hospital ships, etc.
std::list< eEnhancedRoles > rolesList;
rolesList.push_back(kLineShip);
rolesList.push_back(kWarShip);
rolesList.push_back(kLeader);
rolesList.push_back(kDroneBombardmentShip);
rolesList.push_back(kEscort);
rolesList.push_back(kCarrier);
rolesList.push_back(kPFTender);
rolesList.push_back(kFastCruiser);
rolesList.push_back(kMauler);
rolesList.push_back(kPolice);
global_sl.Subset(rolesList);
// filter based on availability
// Skip kConjectural, kUnique
std::list< eEnhancedProductionAvailability > enhancedAvailabilityList;
enhancedAvailabilityList.push_back(kRare);
enhancedAvailabilityList.push_back(kCommon);
enhancedAvailabilityList.push_back(kMany);
global_sl.Subset(enhancedAvailabilityList);
} else {
std::list< eHullType > hullTypeList;
hullTypeList.push_back(kFF);
hullTypeList.push_back(kDD);
hullTypeList.push_back(kCL);
hullTypeList.push_back(kCA);
global_sl.Subset(hullTypeList);
}