Rank list removed from campaign data structure. But it continue using campaign memory pool + campaign had implicit reset of its own data. Both results in corruption of rank data because ranks list for some reason is loaded twice at least: on each save subsystem initialization. But second results in freeing memory pool (with rank IDs, etc) without notification of ranks list hence without resetting ranks counter and getting trash in rankID, rank name etc.
So added CL_ResetRanks function and its call in CP_ResetCampaignData.
To use ranks from game part:
* ranks list must have its own memory management (i've tried assigned by caller)
* employeeType and some simple related functions should be defined in game part (i've tried and got huge mess with headers inclusions)