[MOD] Homeworld Classic Enhanced for HWRM 2.2.0


This is the same old mod for HW2 ported to HWRM.


There are probably bugs.


Title:		Homeworld Classic Enhanced for HWRM
Version:	2.2.0
Authors:	Mikali, Luke Moloney (original version of HWC mod) and many, 
		many individual map authors
Created:	2011/11/18
Updated:	2016/07/10
Homepage:	http://isometricland.net/homeworld/homeworld.php
Steam:		For HWRM
		For HW2C
ModDB:		For HWRM
		For HW2C
		[MOD] HW Classic Enhanced for HWRM by Mikali
		Homeworld Classic Enhanced for HW2C by Mikali
		Homeworld Classic Rebalance by Mikali
		Converted HW1 maps by Mikali
		Gameplay Enhanced by Mikali
		Homeworld Classic by Luke Moloney


This mod is a port of my Homeworld Classic Enhanced mod for Homeworld 2 
Classic. It combines my HW Classic Rebalance and Gameplay Enhanced HW2C mods 
into a single mod, providing you with a greater number of gameplay options than 
can be found in either mod alone. Development of those earlier mods has stopped 
in favor of this one. This mod also includes a collection of almost 1500 
Homeworld and Homeworld: Cataclysm maps converted to work with Homeworld 

Installation is done by subscribing to the mod on Steam Workshop if you have 
the Steam version of the game. For the ModDB/GOG.com version, extract the ZIP  
archive and copy the "DataHWClassicEnhancedHWRM" folder to your "Homeworld 
Remastered" directory, then add "-moddatapath DataHWClassicEnhancedHWRM 
-overrideBigFile -luatrace -traceHODs" to your desktop shortcut's "Target" 

Start with either:

1) A mothership and carrier (as per normal HWRM)
2) Just a carrier (as per HW1C's "Carrier Only" rule)
3) The "HW1C Map Default" setting

This last setting grants you the selection of ships designed into the level by 
the original HW1C level author. When playing with the "HW1C Map Default" 
setting, make sure to select the same race as is set for your position within 
the level file. You can see which race is set for your position by looking 
along the bottom row of the thumbnail image in game setup. The player races are 
listed in order from left to right. When you see "Kus" it means you should pick 
the Kushan race. When you see "Tai" it means you should pick the Taiidan race. 
"Som" means Somtaaw, but in this case pick the Hiigaran race instead. Note that 
player order is determined by the "Slot" option in the game setup screen, not 
by the order in which people appear in the lobby. Lastly, the SPECIAL FLEETS 
mode supercedes the START WITH setting. So, enabling SPECIAL FLEETS mode will 
automatically override anything you set here.

You can find a reference sheet listing all of the maps, as well as my personal 
recommendations, at the following URL:


There is also a spreadsheet you can look at within the archive itself. Further, 
cleaned-up and "fixed" versions (e.g. so they can pass through my converter) of 
the original HW1C maps are also contained within the game files; and a HW1C-to-
HWRM map conversion tool is available for download on my personal website:


These maps have their own readme file and change log contained within the game 
files. Older versions of these maps can be found in the Homeworld 2 Classic 
version of this mod.

This option can be set to Low (1000RUs), Medium (3000RUs) and High (10000RUs). 
Resourcing can also be completely disabled using the last setting, in which 
case even your resource collectors will be removed.

Select whether RUs are injected into your coffers every x number of seconds, or 
at the beginning of play, as per HW1C.

Receive a certain number of RUs for every ship you kill as per HW1C. Bigger 
ships mean more RUs. If you're losing you'll get more RUs too. Press the "P" 
key to see the current bounty levels.

Turn research on/off as per HW1C. With research turned off you have all tech-
nologies at your disposal at the start of play without having to research them. 
Note that the Hiigaran Advanced Research Module has been eliminated in this 
mode in order to balance the various races. You also no longer need an Advanced 
Research Module in order to build a Fire Control Tower.


As per HW1C, every x number of seconds a magical crate will appear containing 
either a ship that you get to keep, some RUs that you get to spend, or some 
technological advancement that makes you more powerful.

This mode enables/disables hyperspace technologies for all players as per HW1C. 
Note that this mode produces a lot of slowdown until I can get it fixed, so you 
may need a beefy CPU in order to play with this setting turned on. In order to 
balance the various races, I made it possible for Hiigaran and Vaygr shipyards 
to be built without a hyperspace module when this mode is turned on.

1) HWRM Normal: The default setting used in HWRM. A player is killed if he/she 
   has no more production ships left. I call this mode Kill Player Production.
2) Kill Team Production: All players on a team are killed if there are no team 
   members with production ships left.
3) Kill All Enemy Ships: All players on a team are killed if there are no team 
   members with any ships of any kind left.
4) Destroy Mothership: A player is killed if his/her mothership is destroyed. 
5) Capture Capship: A player is killed if one of his/her capital ships is 
6) Quit Manually: The game doesn't end until everyone decides to quit and leave 
   the game.

Note that the "Destroy Mothership" rule obviously won't work well with the 
"carrier only" start condition.

In this game-mode, one player controls production, capital ships and probes; 
another player controls fighters and corvettes; and another player controls 
resourcing, frigates and platforms. Only one player on each team can choose the 
"Production/Capital" role at a time. The remaining roles can be freely divided 
among the remaining players on the team. Also, if DEFINED ROLES is enabled, 
then the "Kill Player Production" WIN CONDITION reverts to "Kill Team 
Production", instead. Note that it's a really good idea to choose the same race 
for everyone on the same team.


In this game-mode a selectable number of research options (up to seven) are 
randomly granted and restricted to each player at the beginning of play. Press 
the semi-colon ";" key to see which items have been granted and restricted. 


This mode gives the player extended starting fleet options. You can choose from 
several different fleet makeups, each composed of a different assortment of 
starting ships, subsystems and research.



This setting allows the host to slow the game down to a fraction of its default 
speed. The available options are 1, 3/4, 1/2 and 1/4 times the normal speed.

Here you can select which background audio track to play during a battle. The 
default setting is "Map Default", which plays whatever music the original HW1C 
map developer intended for the map. There's also a "Shuffle" option to randomly 
switch between different songs. Or you can select songs individually. Press the 
minus "-" key to see a list of recently played audio tracks.

Pressing the comma "," key enables an on-screen display showing you and your 
teammates' current RUs, production and research.

This setting causes additional end-of-game stats to be generated in your 
profile folder at the end of each match. It is enabled by default. However, the 
stats are only generated if you are present at the end of the game. If you 
leave the game for any reason (such as when you are asked to continue watching 
after you get killed, but choose "No") the stats file will not be generated.

1) You can view the Bounties screen by pressing "P".
2) You can view the Bentusi Roulette screen by pressing "SEMICOLON".
3) You can view the Team Progress screen by pressing "COMMA".
4) You can view the Audio Track History screen by pressing "MINUS".
5) You can view the Game Rule List screen by pressing "EQUALS".



You're free to use this code in any way as long as proper credit is given for 
the work that I, Luke Moloney and the many map authors have done. See the 
section titled "Modding Instructions" for instructions on how to reconfigure 
the scripts to work with your mod.


The files in the "data\scripts\rules\lib\" folder beginning with "objectlist" 
can be reconfigured to make the game rules work with your own mods. Simply add 
or remove items to and from the tables as needed, and the gamerules will auto-
matically adjust to the new objects. The tables themselves, however, should not 
be removed, or the game will break. Minimal instructions on modifying the 
tables can be found within the "objectlist" files themselves.



• Luke "B1FF" Moloney for the HW Classic mod in its original state.
• Deionerra for dockpath info.
• LeviathanChiken for the crystals, as well as for taking interest in the mod 
  and furthering HWU! :)
• All the dozens of HW1 and HWC map makers whose maps I converted. Credits for 
  each individual person can be found in the level files and loading screens 
• Scottismo for compiling all the maps and hosting them on Jst-Online.net.
• The Complex Team for their idea of using libraries to store the code for each 
  game-mode separately.
• Tamerlane for his "HW2Path" function.
• evillejedi for the beginnings of the random music track script.
• EatThePath for helping me get the mod working with GearBox's August 2015 HWRM 
  update, as well as showing me how to run two instances of the game at once to 
  do multiplayer testing.
• Dwarfinator for much help with GUI screens and button graphics.
• pandorazero for converting crystals to the new HOD format per Patch 2.0.
• radar3301 for lots of help with the "WriteStats()" function.
• Relic and GearBox of course.



• SPECIAL FLEETS mode causes the starting ships to all point in the same 
  direction. It would be better to retain their original facing. [Maybe 
  impossible. Regardless, SPECIAL FLEETS mode is disabled completely for the 
  time being, so the problem is moot.]
• Rename all functions by adding a prefix that matches the game rule they 
  belong to. I've already done this with global variables.
• Need to reduce JOB_DutiesList and JOB_TeamsList to a single table named 
  JOB_PlayersList. This table should store each player's team and job info.
• In the level files, make sure the algorithms used to produce the spherical, 
  cylindrical, etc. shapes produce volumes with even distributions. I had to 
  disable the existing code because it was causing some problems, and haven't 
  replaced it with something new yet. [This problem may have been resolved in 
  recent versions of the mod. At the very least, I think spheres, cubes and 
  cylinders are okay.]
• Crates currently don't award subsystems. [Maybe impossible to accomplish.]
• Map thumbnails or names should show the four-star ratings I gave each map in 
  the HTML reference sheet that is included with the mod.
• TEAM PROGRESS screen should maybe display a longer list of build and research 
  items. The current list may be too short to be very useful.
• The number cloud HODs have not been updated to HWRM Patch 2.0 format yet.
• Should capital ships need research modules when research is turned off? Need 
  to think this through. [The Hiigaran Advanced Research Module is currently 
  disabled when the RESEARCH OFF mode is turned on.]
• How does the HYPERSPACE OFF rule affect Kushan and Taiidan ships? Do ships 
  from these races have an innate hyperspace ability? Need to check to be sure. 
  [Kushan and Taiidan capital ships seem to have an innate hyperspace ability. 
  I would have to duplicate these ships and then turn the ability off 
  permanently in the .ship files if I wanted a thorough solution. Currently, a 
  game rule script disables the hyperspace ability every few seconds, but this 
  script is slow and makes the game choppy.]
• Currently in the DEFINED ROLES mode, if no players on a team choose the 
  "Production/Capital" role, then all players on the team retain their capital 
  ship production/research capability. Further, if two players on the team 
  choose the "Production/Capital" role, then both players with that role retain 
  their capital ship build capabilities. This is unfair to teams who have only 
  one player with this role, since their effective unit cap for capital ships 
  is lower than the other team's. This needs to be fixed! Ideally, no players 
  on a team should not share roles. [Update: As of version 2.0.1, DEFINED ROLES 
  is automatically turned off if more or less than exactly one player has the 
  "Production/Capital" role on each team. I still need to think this through, 
  though - especially since HWRM now supports 8 players instead of just 6, and 
  there are only 3 roles for players to choose from.]
• Explore different options for using a single CPU player as the enemy in the 
  DEFINED ROLES mode instead of multiple CPU players. Getting all three CPU 
  players to cooperate with each other by modifying their AI scripts will 
  probably never work. However, I have made some attempts in the past, and 
  there is still some (currently disabled) experimental AI code in the mod 
  files from this period. The best solution IMO would be to use a single CPU 
  player, and for GearBox to implement per-player starting fleets and per-
  player unitcaps. But they have expressed trepidation about implementing this 
  and are unlikely to ever do so.
• To simulate per-player starting fleets, I could simply spawn all three CPU 
  players' ships, and then transfer them to the 'lead' player, leaving the 
  other CPU players in stasis. To simulate per-player unitcaps, I could create 
  four new CPU-only races with their own versions of all the ships, and alter 
  the unitcaps for those races. It could work, but would be a lot of effort to 
  set up, and a PITA to manage over time if GearBox decides to make additional 
  balancing changes to ships and races in the future.
• In the TEAM PROGRESS screen, maybe enemy players should also be listed, but 
  in red and minus the corresponding stats. [I've investigated this, and color 
  coding of player names is not possible since they use 2 byte wide characters 
  instead of normal 1 byte characters, and there is no way to modify the color 
  of a wide character string in HWRM, AFAIK.]
• The unit cap for non-capital ships in the DEFINED ROLES mode is effectively 
  unlimited because the routine that trades ships between players does not 
  understand unit caps. This is unfair, and means that large numbers of small 
  ships may always be superior to small numbers of capital ships.
• Make doubly sure that the "doscanpath()" function works for research and 
  build lists when some files are in the mod, and other files are in GearBox's 
  .BIG file.
• CPU players should hunt for crates, too. [May not be possible.]
• CRATES rule actually needs bounty values to work properly. Need to enable 
  BOUNTIES code when crates are enabled, but not actually *award* or *display* 
  the bounties to players unless the BOUNTIES mode is turned on by the host.
• Should crates only award ships belonging to the player's own race? What about 
  ships from other races?
• Gravwell and cloak generators are not platforms. However, my tech list treats 
  them as such. Not sure if this is good or bad.
• I compared Luke Moloney's HW1C-to-HW2C RU conversion formula based on the 
  relative costs of frigates in HW2C and HW1C (700 and 575 RUs respectively) to 
  HWRM's current ship costs. It turns out that HW2C frigates cost the same as 
  they did when HW2C was released, but that HW1 frigates are now actually more 
  expensive than HW2C frigates rather than less! How should this affect the RU 
  conversion formula I am using for the HW1C maps? Should I just leave it 
• The HYPERSPACE OFF rule was disabled at some point in time. Why? My notes say 
  there were performance issues. Need to test this further.
• There's a similar performance issue with the RESOURCING DISABLED rule that 
  could be solved by using modified starting fleets, maybe. [Update: The 
  RESOURCING DISABLED rule is now handled via starting fleet files rather than 
  a recurring script. So this issue is fixed I think.]
• The HW1C maps are often pretty scarce on resources. Unfortunately, CPU 
  players stop playing when resources are depleted. They just sit there doing 
  nothing. I'm not sure what to do about this.
• I need to compare the HW1C and HWRM assault frigate speeds again. Luke 
  Moloney devised a method of determining map scale adjustments when converting 
  HW1C maps to HW2C by comparing the speeds of HW1C and HW2C frigates. Since 
  frigate speeds have changed yet again in HWRM, I may need to look and see if 
  the conversion ratio needs another adjustment as well. On the other hand, 
  maybe I should stick with the meters/feet conversion ratio that I have been 
  using up until now. (E.g. instead of Luke's formula.) [Update: I am currently 
  using a ratio of 1/3, which lies somewhere between the meter/feet ratio and 
  the 1/3.5 ratio I was told by a forum user GearBox was using when porting the 
  HW1C ships to HWRM.]
• Some HW1C levels specify multiple ships in the same location and in a 
  formation. I need to find some away to put these ships into formation from 
  within the level files.
• Cataclysm slipgates, meteor showers, etc. are not currently supported by my 
  mod. Slipgates might be doable, but I have no clue about meteor showers.
• The map "HW1_Scout MadnessII8.level" does not use start points currently, and 
  causes the match to end right away when used. Instead of starting points, the
  map uses the "useasmothership" formation, which is unsupported at this time 
  by the map converter and this mod.
• Try and get Cataclysm ships into this mod, maybe.
• I could maybe disable the button hiding that goes on at the beginning of each 
  match. I could show all buttons regardless of which game rules are enabled or 
• Did HW1C place a limit on the number of collectors that could harvest a dust 
  cloud at one time? How many latch points do dust clouds have in HWRM? This 
  may be worth investigating. [Update: I was told that at least two collectors 
  could harvest a cloud at once in HW1C.]
• Being able to apply research items like "CarrierHealthUpgrade1_carrieronly1" 
  to multiple ships at once instead of having to duplicate the research items 
  would make the mod simpler to maintain. [Update: someone on the GearBox forum 
  showed me how to use loops and/or custom functions to populate the "research" 
  table. But this method required just as much work.]
• Likewise, it would be nice if the build list had a "Name" flag so I could 
  have multiple build options with different requirements, but with the same 
  target ship or sybsystem.
• There are so many combinations of settings affecting the names of build and 
  research items, that I might as well rename the original build and research 
  items to fit the new naming scheme. For instance, "Hgn_Shipyard" could be 
  renamed to "Hgn_Shipyard_research1_hyperspace1" going by this naming scheme.
• There are still many mod-specific texts that need to be localized for other 
  languages. For instance the GUI buttons and screens, and the subtitle texts. 
  I would need to find someone to translate these texts for me, however.
• Create an in-game screen just for documentation.
• The random audio track script switches songs based on the progress of game 
  time. However, when the game is paused the music continues to play, but game 
  time does not progress. Thus, music time and game time are no longer in sync.
• Maybe CRATES should not award capital ships when the CARRIER ONLY mode is 
  also enabled. [I have been told by a few people that crates used to award 
  capital ships in HW1C in carrer only battles.]
• Maybe insert all the game rule settings into a second smaller table. Then I 
  wouldn't need to parse the GameSetupOptions table a second time.
• Encountered an issue where crates weren't spawning while the DEFINED ROLES 
  mode was enabled due to {0,0,0} coordinates and divide by zero issue. Haven't 
  been able to reproduce this since then, so maybe it's fixed.
• "ChooseCrateRewardShip()", "ChooseCrateRewardSubsystem()" and 
  "ChooseCrateRewardTech()" are now very similar to each other. However, they 
  are different enough that I don't think I can consolidate them into a single 
• Currently, enabling the RESEARCH OFF rule automatically turns the BENTUSI 
  ROULETTE mode off as well. This is because there is no point in the BENTUSI 
  ROULETTE mode granting additional research when the RESEARCH OFF mode already 
  has granted all there is to grant. It may be possible to *restrict* some 
  research if I move the BENTUSI ROULETTE code before the RESEARCH OFF code. 
  But, it seems that a few of the other rules require that they come before 
  BENTUSI ROULETTE but after some of the other code... And thus an endless loop 
  is formed.
• The added production systems on "vgr_carrier_carrieronly1" are misaligned. 
  Supposedly the next GearBox patch will fix this.
• Should write the game type settings to the ADVANCED STATS files too.
• Need to test this mod in multiplayer against human players, not just in 
  skirmish battles. This can be done on one computer by running multiple 
  instances of HWRM, apparently.
• "HW1_Empty Sphere4.level" has a problem with "nan" values. Some calculation 
  error was made during conversion.
• Not sure if "Universe_RandomPlayerList()" is really necessary. Is it more 
  fair than just iterating from 0 to Player_Count?



2.2.0 --- 2016/07/10
• Fixes to some game type menu option texts.
• "CheckCaptureStatusRule()" now cycles through players using the 
  "WIN_AnyPlayerIndex" variable and the "CyclePlayers()" function instead of 
  picking a player at random, just like the other WIN CONDITION rules. I hope I 
  didn't break anything.
• Other minor tweaks to "CheckCaptureStatusRule()".
• Total overhaul of the "WriteStats()" script. The ADVANCED STATS now contain 
  time and date info, a list of game rule settings chosen by the host, and 
  lists of ships, subsystems and research. The output now also contains nearly 
  all the info that the vanilla stats the game normally writes to the profile 
  "stats" folder have. Thanks to Dwarfinator and radar3301!
• "WriteStats()" is also a rule now instead of just a regular function. This 
  apparently is necessary for the "Your fleet is victorious" and "Your fleet 
  has been defeated" messages to appear at the end of each battle. Not sure 
• The starting objective message text is now customized based on the current 
  WIN CONDITION. Unfortunately, I do not have audio files for each of the WIN 
  CONDITION settings.
• Modified "levelfunc.lua" to remove "meg_kharak" and "meg_kharakburned", which 
  were removed from the game by GearBox apparently.
• Fixed the ship "tur_ionarrayfrigate" since it had a bug in it that caused the 
  game to crash. The ship "der_lifeboat" also crashes the game, but I haven't 
  figured out why.
• Edited "data\ui\newui\ingamemenu.lua" to add the "BTN_EXITTOMAINMENU" button, 
  since exiting all the way to Windows makes testing the mod in multiplayer 
• Replaced instances of "Universe_PlayerCount() - 1" with a new global variable 
• Fixed a bug in "CheckTeamProductionShipsLeftRule()" and 
  "CheckTeamAnyShipsLeftRule()" where the game continued to try to kill players 
  even when they were already dead.
• The "CheckMothershipDeadRule()" function now uses the "WIN_AnyPlayerIndex" 
  global variable to iterate through players just like the other WIN CONDITION 
• Moved the "Player_Team()" and "Player_NumberOfShips()" functions to 
  "common.lua" from "wincondition.lua".
• Renamed "SetStartObjective()" to "SetWinObjective()".
• The BACKGROUND MUSIC rule now has a "Map Default" option that reverts to 
  playing whatever background music is specified in the level file.
• Replaced calls to the "CPU_Exist()" function with calls to the 
  "Player_GetLevelOfDifficulty" function since the former were causing desyncs.
• HWCM debug text changed slightly.
• Overhauled how seeds for my PRNG work. Before, each seed was generated using 
  the native Lua "random()" function. This caused desyncs however, which I did 
  not realize until I did some multiplayer testing over a LAN connection in the 
  last few days. Now, the seeds are generated by performing operations on game 
  setup options, and then summing the results. While the seed values are not as 
  "unique" as before, they will not cause desyncs. Thus, the mod can finally be 
  played against other human players over the Internet.

2.1.2 --- 2016/07/05
• Fixed some issues related to counting research grants and restrictions in 
  "BentusiRoulette_Init()". The BENTUSI ROULETTE mode works properly with the 
  DEFINED ROLES mode once again.
• The DEFINED ROLES and CRATES modes now work with each other again as well.
• Added a "Misc" category to "objectlist_rulerestrictions.lua".
• Disabled the "MPRestrict" category in "objectlist_rulerestrictions.lua" since 
  all the researches listed there are now located in "HW2Campaign.big" instead 
  of "Homeworld2.big", and thus no longer affect this mod.
• "BentusiRoulette_Init()" now fills in blank lines in the GUI display text if 
  it turns out there are too few available researches to grant or restrict.
• "BentusiRoulette_Init()" now counts the number of researches in 
  "def_research.lua" instead of the "TechList" table to determine a total.
• Made the last field in the TEAM PROGRESS screen a little wider to show more 
• Crate code now once again checks for ALL of a player's ships as a last resort 
  when determining the mothership position. I disabled this at some point in 
  the past for reasons I don't remember.
• Added the "viszero()" function to "utilfunc.lua". It checks whether a vector 
  has a length of zero.
• Made a few tweaks to "GetBestCrateLocation()".
• The TEAM PROGRESS screen now shows each player's DEFINED ROLES role if the 
  mode is enabled.
• Moved all the "MainRule()" stuff to its own file in the "lib" directory.

2.1.1 --- 2016/07/04
• Renamed the "type" parameter to "types" in the TechList table and related 
  scripts to avoid confusion with the Lua command of the same name.
• Disabled some lines in "DisableHyperspaceRule()" as the performance was poor 
  and the code may have been technically unnecessary.
• Merged "GetResearchGrant()" and "GetResearchRestriction()" into a single 
  function called "GetFreeResearchItem()".
• Removed "default.lua" from the AI scripts since the same functionality is 
  already provided in the DEFINED ROLES code.
• Re-used the "PlayerHasMothership()" function inside "GetBestCrateLocation()".
• The "PlayerHasMothership()" function now returns the mothership type and name 
  as well as true or false.
• Removed the "GetValidMothership()" function since it no longer serves a 
• Miscellaneous optimizations to loops.
• Split CRATES and BOUNTIES code into individual files separate from 
• In the "GrantAllResearchRule()" rule, I stopped using 
  "Player_GrantAllResearch()" and rolled my own routine that parses 
  "def_research.lua" and logs all grants to the "Player_GrantedResearch" table.
• Renamed all instances of "iPlayerIndex" to "playerIndex" to be consistent.
• The "GrantAllResearchRule()" function now checks whether the player is a CPU 
  or human before granting some items. Not sure it has any effect, though.
• Fixed the bug where frigates were immediately disappearing after being built 
  by carriers when playing with the RESEARCH OFF and CARRIER ONLY settings.
• Fixed the bug where the custom GUI displays crash when the local player dies.
• The custom GUI displays now show dashes instead of values when a player dies.
• Research meant for AI players only are now restricted for human players. They 
  were also removed from the "TechList" table.
• Research never meant to be used in multiplayer matches are now restricted.
• RESEARCH OFF rule now overrides and disables BENTUSI ROULETTE since RESEARCH 
  OFF already grants every type of research it can grant.
• Added a GAME RULES screen so players can double-check and see what settings 
  the host chose for the match.
• Fixed some mistakes in game rule tooltips.
• Reverted to Luke Moloney's original and much simpler method of determining 
  "ChooseCrateRewardShip" using "while" loops instead of "for" loops.
• Research wasn't being chosen randomly by CRATES mode. It is now.
• Copied some code from GearBox's "mainrule_updating()" function that plays 
  some speech files and displays some text at the beginning of each match and 
  when a player dies. Not sure if it's working properly.

2.1.0 --- 2016/07/01
• Fixed a bug in Vaygr research script that was also preventing the game from 
  ending and the ADVANCED stats from being written to the profile directory.
• Removed the "Map Default" STARTING RESOURCES option since RU values have 
  never been stored in the HW1C level files, anyway.
• Minor tweaks to game rule tooltips.
• Changed the way starting fleet suffixes are handled in the code. The strings 
  are are now built up over time as the game rule steps through each setting. A 
  starting fleet suffix might now look like 
  "_carrieronly1_research0_resource0_hyperspace1" depending on the final 
  combination of settings that the host chose.
• The tech items in the "TechList" table now have multiple sub-types depending 
  on which of the game rules are enabled or disabled. This required substantial 
  changes to the loop structure of CRATE and BENTUSI ROULETTE functions, for 
  HYPERSPACE OFF settings if turned on. This is until I can think of a better 
  solution to a problem. However, the SPECIAL FLEETS mode itself remains hidden 
  and disabled, so the change makes very little practical difference currently.
• Renamed the "_noresearch" ship/subsytem suffix to "_research0", and the 
  "_carrieronly" suffix to "_carrieronly1" in order to be consistent, and to 
  make way for the new "_resource0" and "_hyperspace0" suffixes.
• Forgot to add the Kushan and Taiidan motherships to the motherships table in 
  the rule restrictions object list.
• CARRIER ONLY research items are now applied properly when RESEARCH OFF mode 
  is enabled as well.
• Fixed a bug in the "UpdateBountyStats()" function that was preventing 
  bounties from working in 7 and 8 player battles.
• CRATES and BENTUSI ROULETTE are now automatically disabled when DEFINED ROLES 
  is turned on. I will need to work on getting them compatible again.
• Hiigaran and Vaygr shipyards no longer require a hyperspace module in order 
  to get built when the HYPERSPACE OFF rule is enabled. This is in order to 
  balance the four races.
• In the next release I am going to focus on optimizations. I noticed a number 
  of areas where things could be done more efficiently. (Especially with regard 
  to assigning and retrieving values from variables inside loops.)

2.0.4 --- 2016/06/28
• A "Crate detected" message is now also sent to the Events screen when a crate 
  is detected.
• Non-player squadrons are once again spawned on the map according to the 
  original map author's specifications. However, this happens only when 
  selecting the "HW1C Map Default" START WITH or similar setting in a game 
  rule. Unfortunately, these non-player ships are totally non-interactive, 
  unlike their counterparts in HW1C and HW Cataclysm. Also, formations are not 
  supported in level files, so I had to limit spawned ships to 1 ship per map 
• Tweaks to how map objects are counted for debug purposes.
• Added resourcing related items to the research restriction list when STARTING
• Starting music track is once again displayed on the screen when a battle 
• Custom GUI screens are now split into "Static" and "Dynamic" categories based 
  on how often they need to be updated.
• Added a new AUDIO TRACK HISTORY screen that lists the last ten battle and 
  ambient music tracks that have been played.
• Increased the duration of the opening text message display from 10 to 15 
• The random background music script now uses an explicitly declared seed value 
  to hopefully prevent the potential for further desyncs.
• Sobgroups are no longer moved to a distant radiation field first before being 
  killed due to the START WITH rule. Now they are being despawned right where 
  they are instead. Hopefully this remains a good solution.
• Changed ship and subsystem label "_nores" to "_noresearch" to be clearer.
• Extended the delay before granting all research in the RESEARCH OFF setting 
  back to 15 seconds. A too short delay was causing the game to crash.
• Multiple non-player ships are no longer spawned at the same coordinates in 
  the level file since formations remain unsupported in level files, and the 
  inert non-player ships cannot move apart from each other.
• CPU players are now able to at least fight when DEFINED ROLES is enabled. 
  They can't build or research. But they are able to engage in combat at least. 
  This means that large DEFINED ROLES battles are viable as long as the 
  CAPITAL/PRODUCTION roles are assigned to human players.

2.0.3 --- 2016/06/25
• When DEFINED ROLES is enabled, the Kill Player Production WIN CONDITION will 
  now default to Kill Team Production WIN CONDITION instead.
• Fixed a bug in DEFINED ROLES that caused the script to fail if all members of 
  a team died.
• Fixed a bug in CRATES mode preventing players from being granted with 
  research technologies.
• Fixed the paths to the HW1 battle music files in BACKGROUND MUSIC script.
• Updated song titles in BACKGROUND MUSIC script.
• Updated CrateExclusions table in "objectlist_misc.lua".
• Fixed the issue preventing the Kushan mothership from using the move ability.
• The "Research" button is now disabled when the RESEARCH mode is turned off. 
  Thanks GearBox!
• Included the now deprecated "Homeworld Classic Maps" game type in case people 
  want to play on the old maps but with GearBox's new game rules. THIS FILE HAS 
• The smallest asteroids, despite having zero resources, were still selectable 
  using the mouse, thereby fooling the player. This has been fixed.
• Increased RU values of asteroids a little more. They were simply too small!
• Changed the pixel sizes of the two smallest asteroids. Before this, asteroid0 
  actually looked larger than asteroid1.
• TEAM PROGRESS screen now shows the size of your teammates' fleets.
• Added some debugging functions to the WriteStats script.
• A message indicating that additional stats have been written to each player's 
  profile directory is now displayed at the end of a match.
• Slight tweak to some level debug messages.
• Fixed the bug where level names were being displayed inconsitently in the 
  game setup screen. Level names are now no longer prefixed with "HW1" or "HWC" 
  depending on the origin of the map.
• Changed MapScale in level files slightly.

2.0.2 --- 2016/06/24
• Increased RU values of asteroids back to Luke Moloney's original numbers. 
  Hopefully they will not be too few.
• Fixed the bug where the correct mothership position was not calculated when 
  determining crate spawn coordinates.
• Fixed the bug where crates were being expired/despawned in the wrong order.
  I.e. the newest crates were getting despawned first instead of last.
• Added an audio clip for when crates are spawned. Thanks GearBox!
• Added debug messages for both enabled and disabled states of game rules.
• Fixed an occasional divide-by-zero error that was preventing crates from 
• ADVANCED STATS should be printing properly to the profile directory at the 
  end of each match now.
• Lots of tweaks to CRATES debug messages.
• Included everything from my HWC Maps mod, and deprecated that mod in favor of 
  just having this one.
• Re-enabled the custom "classdef.lua" and updated it to Patch 2.0 specs. (The 
  stuff I made specifically for DEFINED ROLES is still disabled however.)
• Slight tweaks to map code.

2.0.1 --- 2016/06/21
• Forgot to upgrade the level functions to the latest version. This was causing 
• Updated items in tech list to reflect the changes made in GearBox's Patch 
• DEFINED ROLES mode now is automatically disabled if any team has more or less 
  than exactly one player with the Capital/Production role.
• Tweaked the subtitle message at the start of play a bit.
• Fixed an error in BENTUSI ROULETTE that was keeping some items from being 
  added to the research restrictions list.
• Fixed a bug preventing crates from spawning.
• A sensors ping now appears at the correct location when a crate is spawned.

2.0.0 --- 2016/06/21
• Ported the mod from Homeworld 2 to Homeworld Remastered.
• Disabled SPECIAL FLEETS mode since there are not enough drop-down menus to 
  accomadate every gametype setting. Maybe GearBox will fix this in the future.
• Disabled the in-game timer code since HWRM aldeady has an in-game timer.
• Slight tweak to how the mod detects whether the IN-GAME TIMER and TEAM 
  PROGRESS METER settings are enabled or disabled.
• Replaced the ATI text infos with standard UI screens. Each mode now has its 
  own screen and hotkey.
• The name of the currently playing music track is no longer displayed to the 
  player. Instead, there is a new message at the beginning of each match 
  telling the player how to access the new UI screens.
• Removed some of the customized ships, including Keeper ships. I don't recall 
  what changes I made to them, or why I made them. Also, since this mod mostly 
  only spawns Kushan and Taiidan ships in the HW1C maps, the old method of re-
  placing them with extra Keeper and Vaygr ships doesn't really make sense any 
• Updated scripts to work with the HWRM 2.0 patch.
• Rounded map object positions and angles to the nearest integer.
• Set RUScale to equal 1, which is much lower than it was before, and means 
  that it is now at HW1C levels.
• Combined the RUTable and CloudScale tables into a single new table called 
  ResourceTable in "levelfunc.lua".
• Copied resource files from "HW1Campaign.big" instead of "Homeworld2.big".
• Crystal HODs have been converted to the new Patch 2.0 HOD format thanks to 
• Switched to a different crate model.
• Removed cloud number models since they're already available in my Homeworld
  Classic Maps mod.
• Gave up and disabled the custom AI code for DEFINED ROLES mode. It's a pretty 
  hopeless situation getting the AI to work in this mode.



LOL my mod is 560MB and I have to upload it to Steam, ModDB and MediaFire. I have the slowest Internet service my ISP offers.


This is the second time now that Notepad++ has crashed and erased some of my files. Luckily I made a backup.


Version 2.0.3 is on Steam. Here’s my to-do list:




The to-do list is now in the first post of this thread, along with all the other documentation.


Version 2.1.2 is out!

Most of the rest of the stuff on the To-Do list I don’t know how to do, so this may be a good stopping point.


New version on Steam!

I have for the first time done real live multiplayer tests, so was able to iron out some bugs that have been causing desyncs since version 1.0 of this mod (and maybe before). Thanks to @EatThePath!