@blamnetwork/blf 1.0.0-beta.1 → 1.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/README.md +1 -1
  2. package/dist/automapper/create_map.d.ts +5 -0
  3. package/dist/automapper/create_map.d.ts.map +1 -0
  4. package/dist/automapper/create_map.js +6 -0
  5. package/dist/automapper/create_mapper.d.ts +6 -0
  6. package/dist/automapper/create_mapper.d.ts.map +1 -0
  7. package/dist/automapper/create_mapper.js +9 -0
  8. package/dist/automapper/enum_by_name.d.ts +16 -0
  9. package/dist/automapper/enum_by_name.d.ts.map +1 -0
  10. package/dist/automapper/enum_by_name.js +50 -0
  11. package/dist/automapper/index.d.ts +7 -0
  12. package/dist/automapper/index.d.ts.map +1 -0
  13. package/dist/automapper/index.js +6 -0
  14. package/dist/automapper/stage3_metadata.d.ts +7 -0
  15. package/dist/automapper/stage3_metadata.d.ts.map +1 -0
  16. package/dist/automapper/stage3_metadata.js +38 -0
  17. package/dist/bitstream/enum.d.ts +5 -1
  18. package/dist/bitstream/enum.d.ts.map +1 -1
  19. package/dist/bitstream/enum.js +21 -1
  20. package/dist/bitstream/reader.d.ts.map +1 -1
  21. package/dist/bitstream/reader.js +3 -6
  22. package/dist/bitstream/writer.d.ts +2 -1
  23. package/dist/bitstream/writer.d.ts.map +1 -1
  24. package/dist/bitstream/writer.js +3 -2
  25. package/dist/blam/common/math/real_types.d.ts +19 -0
  26. package/dist/blam/common/math/real_types.d.ts.map +1 -0
  27. package/dist/blam/common/math/real_types.js +21 -0
  28. package/dist/blam/common/math/unit_vector_quantization.d.ts +6 -0
  29. package/dist/blam/common/math/unit_vector_quantization.d.ts.map +1 -0
  30. package/dist/blam/common/math/unit_vector_quantization.js +26 -0
  31. package/dist/blam/common/simulation/simulation_encoding.d.ts +7 -0
  32. package/dist/blam/common/simulation/simulation_encoding.d.ts.map +1 -0
  33. package/dist/blam/common/simulation/simulation_encoding.js +23 -0
  34. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.d.ts.map +1 -1
  35. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.js +272 -112
  36. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.d.ts.map +1 -1
  37. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.js +113 -28
  38. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.d.ts +7 -4
  39. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.d.ts.map +1 -1
  40. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.js +752 -279
  41. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.d.ts.map +1 -1
  42. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.js +485 -170
  43. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.d.ts.map +1 -1
  44. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.js +74 -14
  45. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.d.ts +2 -1
  46. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.d.ts.map +1 -1
  47. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.js +153 -87
  48. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.d.ts.map +1 -1
  49. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.js +435 -140
  50. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.d.ts.map +1 -1
  51. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.js +206 -144
  52. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/game_engine_enums.d.ts.map +1 -1
  53. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/game_engine_enums.js +93 -23
  54. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.d.ts.map +1 -1
  55. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.js +81 -16
  56. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.d.ts.map +1 -1
  57. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.js +70 -15
  58. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.d.ts.map +1 -1
  59. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.js +108 -33
  60. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.d.ts.map +1 -1
  61. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.js +113 -33
  62. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.d.ts +130 -26
  63. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.d.ts.map +1 -1
  64. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.js +3193 -1602
  65. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.d.ts.map +1 -1
  66. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.js +418 -208
  67. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.d.ts.map +1 -1
  68. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.js +744 -459
  69. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.d.ts.map +1 -1
  70. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.js +218 -98
  71. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.d.ts +5 -4
  72. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.d.ts.map +1 -1
  73. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.js +242 -107
  74. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.d.ts.map +1 -1
  75. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.js +177 -52
  76. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.d.ts.map +1 -1
  77. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.js +187 -72
  78. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.d.ts.map +1 -1
  79. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.js +134 -66
  80. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.d.ts.map +1 -1
  81. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.js +138 -63
  82. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/math/real_math.d.ts +23 -0
  83. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/math/real_math.d.ts.map +1 -0
  84. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/math/real_math.js +110 -0
  85. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/memory/bitstream_extensions.d.ts +5 -0
  86. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/memory/bitstream_extensions.d.ts.map +1 -0
  87. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/memory/bitstream_extensions.js +39 -0
  88. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.d.ts +1 -0
  89. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.d.ts.map +1 -1
  90. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.js +1 -0
  91. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/scenario_map_variant.d.ts +104 -0
  92. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/scenario_map_variant.d.ts.map +1 -0
  93. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/scenario_map_variant.js +681 -0
  94. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/simulation/simulation_encoding.d.ts +5 -0
  95. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/simulation/simulation_encoding.d.ts.map +1 -0
  96. package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/simulation/simulation_encoding.js +28 -0
  97. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_custom_variant.d.ts.map +1 -0
  98. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_custom_variant.js +285 -0
  99. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_custom_variant_au1_settings.d.ts.map +1 -0
  100. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_custom_variant_au1_settings.js +115 -0
  101. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_game_engine_default.d.ts +7 -4
  102. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_default.d.ts.map +1 -0
  103. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_default.js +765 -0
  104. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_survival_variant.d.ts.map +1 -0
  105. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_survival_variant.js +504 -0
  106. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_traits.d.ts.map +1 -0
  107. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_traits.js +76 -0
  108. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_game_variant.d.ts +2 -1
  109. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_variant.d.ts.map +1 -0
  110. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_variant.js +175 -0
  111. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_player_traits.d.ts.map +1 -0
  112. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_player_traits.js +437 -0
  113. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_string_table.d.ts.map +1 -0
  114. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_string_table.js +252 -0
  115. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/game_engine_enums.d.ts.map +1 -1
  116. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/game_engine_enums.js +130 -0
  117. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/index.d.ts.map +1 -1
  118. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_megalo_game_statistic.d.ts.map +1 -0
  119. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_megalo_game_statistic.js +83 -0
  120. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/c_megalogamengine_map_permissions.d.ts.map +1 -1
  121. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_megalogamengine_map_permissions.js +73 -0
  122. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_object_filter.d.ts.map +1 -0
  123. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_object_filter.js +114 -0
  124. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_trigger.d.ts.map +1 -0
  125. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_trigger.js +139 -0
  126. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/index.d.ts.map +1 -1
  127. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_actions.d.ts +187 -26
  128. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_actions.d.ts.map +1 -0
  129. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_actions.js +3636 -0
  130. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_conditions.d.ts.map +1 -0
  131. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_conditions.js +436 -0
  132. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_object.d.ts.map +1 -1
  133. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_player.d.ts.map +1 -1
  134. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_team.d.ts.map +1 -1
  135. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_hud_widgets.d.ts.map +1 -1
  136. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_references.d.ts.map +1 -0
  137. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_references.js +787 -0
  138. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_text.d.ts.map +1 -0
  139. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_text.js +239 -0
  140. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/s_custom_game_engine_definition.d.ts +5 -4
  141. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_custom_game_engine_definition.d.ts.map +1 -0
  142. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_custom_game_engine_definition.js +251 -0
  143. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_game_engine_player_rating_parameters.d.ts.map +1 -0
  144. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_game_engine_player_rating_parameters.js +179 -0
  145. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_user_defined_option.d.ts.map +1 -0
  146. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_user_defined_option.js +197 -0
  147. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_variable_metadata.d.ts.map +1 -0
  148. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_variable_metadata.js +153 -0
  149. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_variant_variable.d.ts.map +1 -0
  150. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_variant_variable.js +150 -0
  151. package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/index.d.ts.map +1 -1
  152. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/index.d.ts +3 -0
  153. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/index.d.ts.map +1 -0
  154. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/index.js +2 -0
  155. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/saved_game_files.d.ts +2 -0
  156. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/saved_game_files.d.ts.map +1 -0
  157. package/dist/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/saved_game_files.js +1 -0
  158. package/dist/blf_chunk.d.ts +2 -2
  159. package/dist/blf_chunk.d.ts.map +1 -1
  160. package/dist/blf_chunk.js +20 -15
  161. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.d.ts +3 -2
  162. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.d.ts.map +1 -1
  163. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.js +3 -2
  164. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.d.ts +1 -1
  165. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.d.ts.map +1 -1
  166. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.js +7 -7
  167. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_map_variant.d.ts +19 -0
  168. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_map_variant.d.ts.map +1 -0
  169. package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_map_variant.js +106 -0
  170. package/dist/chunks/haloreach_mcc/v_untracked_25_08_16_1352/index.d.ts +6 -0
  171. package/dist/chunks/haloreach_mcc/v_untracked_25_08_16_1352/index.d.ts.map +1 -0
  172. package/dist/chunks/haloreach_mcc/v_untracked_25_08_16_1352/index.js +5 -0
  173. package/dist/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_game_variant.d.ts +1 -1
  174. package/dist/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_game_variant.d.ts.map +1 -1
  175. package/dist/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_game_variant.js +1 -1
  176. package/dist/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_packed_game_variant.d.ts +1 -1
  177. package/dist/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_packed_game_variant.d.ts.map +1 -1
  178. package/dist/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_packed_game_variant.js +1 -1
  179. package/dist/chunks/mcc/s_blf_chunk_fileshare_metadata.d.ts +12 -0
  180. package/dist/chunks/mcc/s_blf_chunk_fileshare_metadata.d.ts.map +1 -0
  181. package/dist/chunks/mcc/s_blf_chunk_fileshare_metadata.js +107 -0
  182. package/dist/helpers/automap.d.ts +9 -0
  183. package/dist/helpers/automap.d.ts.map +1 -0
  184. package/dist/helpers/automap.js +34 -0
  185. package/dist/helpers/convert_reach_gametype.d.ts +12 -11
  186. package/dist/helpers/convert_reach_gametype.d.ts.map +1 -1
  187. package/dist/helpers/convert_reach_gametype.js +403 -109
  188. package/dist/helpers/game_variant_json.d.ts +19 -0
  189. package/dist/helpers/game_variant_json.d.ts.map +1 -0
  190. package/dist/helpers/game_variant_json.js +121 -0
  191. package/dist/helpers/index.d.ts +1 -1
  192. package/dist/helpers/index.d.ts.map +1 -1
  193. package/dist/helpers/index.js +1 -1
  194. package/dist/helpers/reach_gametype_automap.d.ts +10 -0
  195. package/dist/helpers/reach_gametype_automap.d.ts.map +1 -0
  196. package/dist/helpers/reach_gametype_automap.js +45 -0
  197. package/dist/helpers/reach_gametype_automapper.d.ts +5 -0
  198. package/dist/helpers/reach_gametype_automapper.d.ts.map +1 -0
  199. package/dist/helpers/reach_gametype_automapper.js +9 -0
  200. package/dist/helpers/reach_gametype_conversion_error.d.ts +11 -0
  201. package/dist/helpers/reach_gametype_conversion_error.d.ts.map +1 -0
  202. package/dist/helpers/reach_gametype_conversion_error.js +11 -0
  203. package/dist/types/static_array.d.ts +6 -0
  204. package/dist/types/static_array.d.ts.map +1 -0
  205. package/dist/types/static_array.js +3 -0
  206. package/dist/versions/haloreach/v12065_11_08_24_1738_tu1actual.d.ts +1 -0
  207. package/dist/versions/haloreach/v12065_11_08_24_1738_tu1actual.d.ts.map +1 -1
  208. package/dist/versions/haloreach/v12065_11_08_24_1738_tu1actual.js +1 -0
  209. package/dist/versions/haloreach_mcc/{v_untracked_25_08_19_1352.js → v_untracked_25_08_16_1352.d.ts} +5 -3
  210. package/dist/versions/haloreach_mcc/{v_untracked_25_08_19_1352.d.ts.map → v_untracked_25_08_16_1352.d.ts.map} +1 -1
  211. package/dist/versions/haloreach_mcc/{v_untracked_25_08_19_1352.d.ts → v_untracked_25_08_16_1352.js} +4 -4
  212. package/dist/versions/mcc/v2025_08_16_178512_1_release.d.ts +4 -0
  213. package/dist/versions/mcc/v2025_08_16_178512_1_release.d.ts.map +1 -0
  214. package/dist/versions/mcc/v2025_08_16_178512_1_release.js +3 -0
  215. package/dist-cjs/automapper/create_map.js +9 -0
  216. package/dist-cjs/automapper/create_mapper.js +12 -0
  217. package/dist-cjs/automapper/enum_by_name.js +55 -0
  218. package/dist-cjs/automapper/index.js +20 -0
  219. package/dist-cjs/automapper/stage3_metadata.js +43 -0
  220. package/dist-cjs/bitstream/enum.js +25 -2
  221. package/dist-cjs/bitstream/reader.js +2 -5
  222. package/dist-cjs/bitstream/writer.js +3 -2
  223. package/dist-cjs/blam/common/math/real_types.js +27 -0
  224. package/dist-cjs/blam/common/math/unit_vector_quantization.js +29 -0
  225. package/dist-cjs/blam/common/simulation/simulation_encoding.js +26 -0
  226. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.js +271 -112
  227. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.js +114 -30
  228. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.js +743 -280
  229. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.js +480 -170
  230. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.js +74 -15
  231. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.js +152 -87
  232. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.js +431 -142
  233. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.js +205 -145
  234. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/game_engine_enums.js +92 -23
  235. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.js +82 -18
  236. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.js +70 -16
  237. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.js +108 -34
  238. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.js +112 -33
  239. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.js +3150 -1607
  240. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.js +413 -208
  241. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.js +735 -459
  242. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.js +216 -99
  243. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.js +240 -106
  244. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.js +178 -54
  245. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.js +186 -73
  246. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.js +135 -68
  247. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.js +137 -63
  248. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/math/real_math.js +116 -0
  249. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/memory/bitstream_extensions.js +43 -0
  250. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.js +1 -0
  251. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/scenario_map_variant.js +687 -0
  252. package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/simulation/simulation_encoding.js +32 -0
  253. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_custom_variant.js +288 -0
  254. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_custom_variant_au1_settings.js +118 -0
  255. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_default.js +768 -0
  256. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_survival_variant.js +507 -0
  257. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_engine_traits.js +79 -0
  258. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_variant.js +178 -0
  259. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_player_traits.js +440 -0
  260. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_string_table.js +255 -0
  261. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/game_engine_enums.js +133 -0
  262. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_megalo_game_statistic.js +86 -0
  263. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_megalogamengine_map_permissions.js +76 -0
  264. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_object_filter.js +117 -0
  265. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/c_trigger.js +142 -0
  266. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_actions.js +3640 -0
  267. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_conditions.js +439 -0
  268. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_references.js +793 -0
  269. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_text.js +242 -0
  270. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_custom_game_engine_definition.js +254 -0
  271. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_game_engine_player_rating_parameters.js +182 -0
  272. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_user_defined_option.js +200 -0
  273. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_variable_metadata.js +160 -0
  274. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/s_variant_variable.js +153 -0
  275. package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/saved_games/index.js +1 -0
  276. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_16_1352/saved_games/saved_game_files.js +17 -0
  277. package/dist-cjs/blf_chunk.js +20 -15
  278. package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.js +19 -13
  279. package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.js +7 -7
  280. package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_map_variant.js +109 -0
  281. package/dist-cjs/chunks/haloreach_mcc/v_untracked_25_08_16_1352/index.js +26 -0
  282. package/dist-cjs/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_game_variant.js +1 -1
  283. package/dist-cjs/chunks/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/s_blf_chunk_packed_game_variant.js +1 -1
  284. package/dist-cjs/chunks/mcc/s_blf_chunk_fileshare_metadata.js +110 -0
  285. package/dist-cjs/helpers/automap.js +40 -0
  286. package/dist-cjs/helpers/convert_reach_gametype.js +407 -111
  287. package/dist-cjs/helpers/game_variant_json.js +127 -0
  288. package/dist-cjs/helpers/index.js +2 -1
  289. package/dist-cjs/helpers/reach_gametype_automap.js +81 -0
  290. package/dist-cjs/helpers/reach_gametype_automapper.js +13 -0
  291. package/dist-cjs/helpers/reach_gametype_conversion_error.js +14 -0
  292. package/dist-cjs/types/static_array.js +6 -0
  293. package/dist-cjs/versions/haloreach/v12065_11_08_24_1738_tu1actual.js +1 -0
  294. package/dist-cjs/versions/haloreach_mcc/{v_untracked_25_08_19_1352.js → v_untracked_25_08_16_1352.js} +4 -3
  295. package/dist-cjs/versions/mcc/v2025_08_16_178512_1_release.js +20 -0
  296. package/package.json +14 -3
  297. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_custom_variant.d.ts.map +0 -1
  298. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_custom_variant.js +0 -125
  299. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_custom_variant_au1_settings.d.ts.map +0 -1
  300. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_custom_variant_au1_settings.js +0 -30
  301. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_default.d.ts.map +0 -1
  302. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_default.js +0 -292
  303. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_survival_variant.d.ts.map +0 -1
  304. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_survival_variant.js +0 -184
  305. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_traits.d.ts.map +0 -1
  306. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_traits.js +0 -16
  307. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_variant.d.ts.map +0 -1
  308. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_variant.js +0 -109
  309. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_player_traits.d.ts.map +0 -1
  310. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_player_traits.js +0 -142
  311. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_string_table.d.ts.map +0 -1
  312. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_string_table.js +0 -190
  313. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/game_engine_enums.js +0 -60
  314. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_megalo_game_statistic.d.ts.map +0 -1
  315. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_megalo_game_statistic.js +0 -18
  316. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_megalogamengine_map_permissions.js +0 -18
  317. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_object_filter.d.ts.map +0 -1
  318. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_object_filter.js +0 -39
  319. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_trigger.d.ts.map +0 -1
  320. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_trigger.js +0 -59
  321. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_actions.d.ts.map +0 -1
  322. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_actions.js +0 -1696
  323. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_conditions.d.ts.map +0 -1
  324. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_conditions.js +0 -226
  325. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_references.d.ts.map +0 -1
  326. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_references.js +0 -502
  327. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_text.d.ts.map +0 -1
  328. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_text.js +0 -119
  329. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_custom_game_engine_definition.d.ts.map +0 -1
  330. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_custom_game_engine_definition.js +0 -116
  331. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_game_engine_player_rating_parameters.d.ts.map +0 -1
  332. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_game_engine_player_rating_parameters.js +0 -54
  333. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_user_defined_option.d.ts.map +0 -1
  334. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_user_defined_option.js +0 -82
  335. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_variable_metadata.d.ts.map +0 -1
  336. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_variable_metadata.js +0 -85
  337. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_variant_variable.d.ts.map +0 -1
  338. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_variant_variable.js +0 -75
  339. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/index.d.ts +0 -2
  340. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/index.d.ts.map +0 -1
  341. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/index.js +0 -1
  342. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/saved_game_files.d.ts +0 -66
  343. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/saved_game_files.d.ts.map +0 -1
  344. package/dist/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/saved_game_files.js +0 -586
  345. package/dist/chunks/haloreach_mcc/v_untracked_25_08_19_1352/index.d.ts +0 -5
  346. package/dist/chunks/haloreach_mcc/v_untracked_25_08_19_1352/index.d.ts.map +0 -1
  347. package/dist/chunks/haloreach_mcc/v_untracked_25_08_19_1352/index.js +0 -4
  348. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_custom_variant.js +0 -129
  349. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_custom_variant_au1_settings.js +0 -34
  350. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_default.js +0 -305
  351. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_survival_variant.js +0 -192
  352. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_engine_traits.js +0 -20
  353. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_variant.js +0 -113
  354. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_player_traits.js +0 -151
  355. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_string_table.js +0 -195
  356. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/game_engine_enums.js +0 -64
  357. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_megalo_game_statistic.js +0 -22
  358. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_megalogamengine_map_permissions.js +0 -22
  359. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_object_filter.js +0 -43
  360. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/c_trigger.js +0 -63
  361. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_actions.js +0 -1748
  362. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_conditions.js +0 -234
  363. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_references.js +0 -517
  364. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_text.js +0 -125
  365. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_custom_game_engine_definition.js +0 -120
  366. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_game_engine_player_rating_parameters.js +0 -58
  367. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_user_defined_option.js +0 -87
  368. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_variable_metadata.js +0 -93
  369. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/s_variant_variable.js +0 -79
  370. package/dist-cjs/blam/haloreach_mcc/v_untracked_25_08_19_1352/saved_games/saved_game_files.js +0 -591
  371. package/dist-cjs/chunks/haloreach_mcc/v_untracked_25_08_19_1352/index.js +0 -19
  372. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_game_engine_custom_variant.d.ts +0 -0
  373. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_game_engine_custom_variant_au1_settings.d.ts +0 -0
  374. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_game_engine_survival_variant.d.ts +0 -0
  375. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_game_engine_traits.d.ts +0 -0
  376. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_player_traits.d.ts +0 -0
  377. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/c_string_table.d.ts +0 -0
  378. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/game_engine_enums.d.ts +0 -0
  379. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/index.d.ts +0 -0
  380. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/index.js +0 -0
  381. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/c_megalo_game_statistic.d.ts +0 -0
  382. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/c_megalogamengine_map_permissions.d.ts +0 -0
  383. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/c_object_filter.d.ts +0 -0
  384. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/c_trigger.d.ts +0 -0
  385. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/index.d.ts +0 -0
  386. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/index.js +0 -0
  387. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_conditions.d.ts +0 -0
  388. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_object.d.ts +0 -0
  389. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_object.js +0 -0
  390. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_player.d.ts +0 -0
  391. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_player.js +0 -0
  392. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_team.d.ts +0 -0
  393. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_team.js +0 -0
  394. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_hud_widgets.d.ts +0 -0
  395. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_hud_widgets.js +0 -0
  396. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_references.d.ts +0 -0
  397. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_text.d.ts +0 -0
  398. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/s_game_engine_player_rating_parameters.d.ts +0 -0
  399. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/s_user_defined_option.d.ts +0 -0
  400. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/s_variable_metadata.d.ts +0 -0
  401. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/s_variant_variable.d.ts +0 -0
  402. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/index.d.ts +0 -0
  403. /package/dist/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/index.js +0 -0
  404. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/index.js +0 -0
  405. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/index.js +0 -0
  406. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_object.js +0 -0
  407. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_player.js +0 -0
  408. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_explicit_team.js +0 -0
  409. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/game/megalogamengine/megalogamengine_hud_widgets.js +0 -0
  410. /package/dist-cjs/blam/haloreach_mcc/{v_untracked_25_08_19_1352 → v_untracked_25_08_16_1352}/index.js +0 -0
@@ -1,47 +1,50 @@
1
1
  /**
2
- * Convert game variants between Halo Reach TU1 and MCC builds.
2
+ * Convert game variants between Halo: Reach TU1 (Xbox 360) and MCC.
3
3
  *
4
- * JSON-clone the variant, reject MCC-only megalo features, remap what moved
5
- * between builds, then write the four top-level fields onto `to`.
4
+ * Cross-build conversion uses AutoMapper (`@automapper/core` + `@automapper/classes`)
5
+ * with profiles registered from the source instance graph, then applies build-specific
6
+ * remaps in place on the mapped target instances.
6
7
  *
7
- * Differences handled here:
8
- * - MCC-only: temporary explicit refs, `<<=`, `>>=`
9
- * - `set_to_absolute` exists in both builds but moved (TU1 = 10, MCC = 12)
10
- * - Survival: unrelated fields — MCC→TU1 sets `m_campaign_difficulty_level` to 1;
11
- * TU1→MCC sets `m_encoding_version` to 2; `m_additional_flags` only on MCC
8
+ * TU1 MCC is always possible for supported variant kinds (custom / survival).
9
+ * MCC → TU1 rejects MCC-only megalo features and fails when temporary object,
10
+ * player, or team references cannot be mapped onto free global slots.
12
11
  */
13
12
  import { e_game_mode as e_game_mode_tu1, } from "../blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant";
14
- import { e_math_operation as e_math_operation_tu1 } from "../blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions";
15
- import { c_game_variant as c_game_variant_mcc, e_game_mode as e_game_mode_mcc, } from "../blam/haloreach_mcc/v_untracked_25_08_19_1352/game/c_game_variant";
16
- import { e_math_operation as e_math_operation_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_actions";
17
- import { e_explicit_object_type as e_explicit_object_type_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_explicit_object";
18
- import { e_explicit_player_type as e_explicit_player_type_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_explicit_player";
19
- import { e_explicit_team_type as e_explicit_team_type_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_19_1352/game/megalogamengine/megalogamengine_explicit_team";
13
+ import { e_explicit_object_type as e_explicit_object_type_tu1 } from "../blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_explicit_object";
14
+ import { e_explicit_player_type as e_explicit_player_type_tu1 } from "../blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_explicit_player";
15
+ import { e_explicit_team_type as e_explicit_team_type_tu1 } from "../blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_explicit_team";
16
+ import { c_custom_variable_reference as c_custom_variable_reference_tu1 } from "../blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references";
17
+ import { c_game_variant as c_game_variant_mcc, e_game_mode as e_game_mode_mcc, } from "../blam/haloreach_mcc/v_untracked_25_08_16_1352/game/c_game_variant";
18
+ import { e_action_type as e_action_type_mcc, e_math_operation as e_math_operation_mcc, } from "../blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_actions";
19
+ import { e_explicit_object_type as e_explicit_object_type_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_explicit_object";
20
+ import { e_explicit_player_type as e_explicit_player_type_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_explicit_player";
21
+ import { e_explicit_team_type as e_explicit_team_type_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_explicit_team";
22
+ import { c_custom_variable_reference as c_custom_variable_reference_mcc } from "../blam/haloreach_mcc/v_untracked_25_08_16_1352/game/megalogamengine/megalogamengine_references";
20
23
  import { BlfError } from "../error";
21
- /** MCC math ops with no TU1 equivalent (`<<=`, `>>=`). */
24
+ import { mccToTu1Mapper, tu1ToMccMapper } from "./reach_gametype_automap";
25
+ import { map_reach_gametype_mcc_to_tu1, map_reach_gametype_tu1_to_mcc, } from "./reach_gametype_automapper";
26
+ import { e_reach_gametype_conversion_error } from "./reach_gametype_conversion_error";
27
+ export { e_reach_gametype_conversion_error } from "./reach_gametype_conversion_error";
22
28
  const MCC_ONLY_MATH_OPS = [
23
29
  e_math_operation_mcc.shift_left_with,
24
30
  e_math_operation_mcc.shift_right_with,
25
31
  ];
26
- /** TU1 survival `m_campaign_difficulty_level` when converting from MCC. */
32
+ const MCC_ONLY_ACTION_TYPES = [
33
+ e_action_type_mcc.begin,
34
+ e_action_type_mcc.hs_function_call,
35
+ e_action_type_mcc.get_button_time,
36
+ e_action_type_mcc.team_set_vehicle_spawning,
37
+ e_action_type_mcc.player_set_vehicle_spawning,
38
+ e_action_type_mcc.set_player_respawn_vehicle,
39
+ e_action_type_mcc.set_team_respawn_vehicle,
40
+ e_action_type_mcc.hide_object,
41
+ ];
27
42
  const TU1_SURVIVAL_CAMPAIGN_DIFFICULTY = 1;
28
- /** MCC survival `m_encoding_version` when converting from TU1. */
29
43
  const MCC_SURVIVAL_ENCODING_VERSION = 2;
30
- // ---------------------------------------------------------------------------
31
- // JSON helpers
32
- // ---------------------------------------------------------------------------
33
- function json_clone(value) {
34
- return JSON.parse(JSON.stringify(value));
35
- }
36
- function write_game_variant_json(to, data) {
37
- to.m_game_engine = data.m_game_engine;
38
- to.m_campaign_variant = data.m_campaign_variant;
39
- to.m_custom_variant = data.m_custom_variant;
40
- to.m_survival_variant = data.m_survival_variant;
41
- }
42
- // ---------------------------------------------------------------------------
43
- // Tree walk
44
- // ---------------------------------------------------------------------------
44
+ const HR_GVAR_PREFIX = "$hr_gvar_";
45
+ const MAX_OBJECT_GLOBALS = 16;
46
+ const MAX_PLAYER_GLOBALS = 8;
47
+ const MAX_TEAM_GLOBALS = 8;
45
48
  function visit_object_tree(root, fn) {
46
49
  if (root === null || typeof root !== "object") {
47
50
  return;
@@ -58,133 +61,424 @@ function visit_object_tree(root, fn) {
58
61
  visit_object_tree(value, fn);
59
62
  }
60
63
  }
61
- function remap_set_to_absolute_mcc_to_tu1(root) {
64
+ function remap_temporary_explicit_refs(root, maps) {
62
65
  visit_object_tree(root, (obj) => {
63
- if (obj.m_operation === e_math_operation_mcc.set_to_absolute) {
64
- obj.m_operation = e_math_operation_tu1.set_to_absolute;
66
+ const objectType = obj.m_explicit_object_type;
67
+ if (typeof objectType === "number" &&
68
+ objectType >= e_explicit_object_type_mcc.temporary_0 &&
69
+ objectType <= e_explicit_object_type_mcc.temporary_7) {
70
+ const temporaryIndex = objectType - e_explicit_object_type_mcc.temporary_0;
71
+ const globalIndex = maps.object.get(temporaryIndex);
72
+ if (globalIndex !== undefined) {
73
+ obj.m_explicit_object_type =
74
+ e_explicit_object_type_tu1.global_0 + globalIndex;
75
+ }
76
+ }
77
+ const playerType = obj.m_explicit_player_type;
78
+ if (typeof playerType === "number" &&
79
+ playerType >= e_explicit_player_type_mcc.temporary_0 &&
80
+ playerType <= e_explicit_player_type_mcc.temporary_2) {
81
+ const temporaryIndex = playerType - e_explicit_player_type_mcc.temporary_0;
82
+ const globalIndex = maps.player.get(temporaryIndex);
83
+ if (globalIndex !== undefined) {
84
+ obj.m_explicit_player_type =
85
+ e_explicit_player_type_tu1.global_0 + globalIndex;
86
+ }
65
87
  }
66
- if (obj.m_math_operation === e_math_operation_mcc.set_to_absolute) {
67
- obj.m_math_operation = e_math_operation_tu1.set_to_absolute;
88
+ const teamType = obj.m_explicit_team_type;
89
+ if (typeof teamType === "number" &&
90
+ teamType >= e_explicit_team_type_mcc.temporary_0 &&
91
+ teamType <= e_explicit_team_type_mcc.temporary_5) {
92
+ const temporaryIndex = teamType - e_explicit_team_type_mcc.temporary_0;
93
+ const globalIndex = maps.team.get(temporaryIndex);
94
+ if (globalIndex !== undefined) {
95
+ obj.m_explicit_team_type =
96
+ e_explicit_team_type_tu1.global_0 + globalIndex;
97
+ }
68
98
  }
69
99
  });
70
100
  }
71
- function remap_set_to_absolute_tu1_to_mcc(root) {
72
- visit_object_tree(root, (obj) => {
73
- if (obj.m_operation === e_math_operation_tu1.set_to_absolute) {
74
- obj.m_operation = e_math_operation_mcc.set_to_absolute;
101
+ function extend_global_metadata(metadata, maps) {
102
+ const maxObjectGlobal = Math.max(0, ...maps.object.values());
103
+ while (metadata.m_object_variables.length <= maxObjectGlobal) {
104
+ metadata.m_object_variables.push(0);
105
+ }
106
+ const maxPlayerGlobal = Math.max(0, ...maps.player.values());
107
+ while (metadata.m_player_variables.length <= maxPlayerGlobal) {
108
+ metadata.m_player_variables.push(0);
109
+ }
110
+ const maxTeamGlobal = Math.max(0, ...maps.team.values());
111
+ while (metadata.m_team_variables.length <= maxTeamGlobal) {
112
+ metadata.m_team_variables.push([0, 0]);
113
+ }
114
+ }
115
+ function apply_survival_mcc_to_tu1(survival) {
116
+ if (survival === undefined) {
117
+ return;
118
+ }
119
+ survival.m_campaign_difficulty_level = TU1_SURVIVAL_CAMPAIGN_DIFFICULTY;
120
+ delete survival.m_encoding_version;
121
+ delete survival.m_additional_flags;
122
+ }
123
+ function apply_survival_tu1_to_mcc(survival) {
124
+ if (survival === undefined) {
125
+ return;
126
+ }
127
+ survival.m_encoding_version = MCC_SURVIVAL_ENCODING_VERSION;
128
+ survival.m_additional_flags = 0;
129
+ delete survival.m_campaign_difficulty_level;
130
+ }
131
+ function first_localized_string(table) {
132
+ const value = table?.strings[0]?.[0];
133
+ if (value === null || value === undefined || value.length === 0) {
134
+ return;
135
+ }
136
+ return value;
137
+ }
138
+ function resolve_hr_gvar_name(value, localized_name) {
139
+ if (value === undefined || !value.startsWith(HR_GVAR_PREFIX)) {
140
+ return value ?? "";
141
+ }
142
+ const localized = first_localized_string(localized_name);
143
+ if (localized !== undefined) {
144
+ return localized;
145
+ }
146
+ return value.slice(HR_GVAR_PREFIX.length).replaceAll("_", " ");
147
+ }
148
+ function resolve_hr_gvar_description(value, localized_description) {
149
+ if (value === undefined || !value.startsWith(HR_GVAR_PREFIX)) {
150
+ return value ?? "";
151
+ }
152
+ return first_localized_string(localized_description) ?? "";
153
+ }
154
+ function apply_mcc_to_tu1_name_description(from, to) {
155
+ const mccCustom = from.m_custom_variant;
156
+ const tu1Custom = to.m_custom_variant;
157
+ if (mccCustom === undefined || tu1Custom === undefined) {
158
+ return;
159
+ }
160
+ const metadata = tu1Custom.m_base_variant.m_metadata;
161
+ metadata.name = resolve_hr_gvar_name(mccCustom.m_base_variant.m_metadata.name, mccCustom.m_localized_name);
162
+ metadata.description = resolve_hr_gvar_description(mccCustom.m_base_variant.m_metadata.description, mccCustom.m_localized_description);
163
+ }
164
+ function object_global_index(value) {
165
+ if (value >= e_explicit_object_type_tu1.global_0 &&
166
+ value <= e_explicit_object_type_tu1.global_15) {
167
+ return value - e_explicit_object_type_tu1.global_0;
168
+ }
169
+ return;
170
+ }
171
+ function object_temporary_index(value) {
172
+ if (value >= e_explicit_object_type_mcc.temporary_0 &&
173
+ value <= e_explicit_object_type_mcc.temporary_7) {
174
+ return value - e_explicit_object_type_mcc.temporary_0;
175
+ }
176
+ return;
177
+ }
178
+ function player_global_index(value) {
179
+ if (value >= e_explicit_player_type_tu1.global_0 &&
180
+ value <= e_explicit_player_type_tu1.global_7) {
181
+ return value - e_explicit_player_type_tu1.global_0;
182
+ }
183
+ return;
184
+ }
185
+ function player_temporary_index(value) {
186
+ if (value >= e_explicit_player_type_mcc.temporary_0 &&
187
+ value <= e_explicit_player_type_mcc.temporary_2) {
188
+ return value - e_explicit_player_type_mcc.temporary_0;
189
+ }
190
+ return;
191
+ }
192
+ function team_global_index(value) {
193
+ if (value >= e_explicit_team_type_tu1.global_0 &&
194
+ value <= e_explicit_team_type_tu1.global_7) {
195
+ return value - e_explicit_team_type_tu1.global_0;
196
+ }
197
+ return;
198
+ }
199
+ function team_temporary_index(value) {
200
+ if (value >= e_explicit_team_type_mcc.temporary_0 &&
201
+ value <= e_explicit_team_type_mcc.temporary_5) {
202
+ return value - e_explicit_team_type_mcc.temporary_0;
203
+ }
204
+ return;
205
+ }
206
+ function reserve_metadata_slots(usage, metadata) {
207
+ for (let i = 0; i < metadata.m_object_variables.length; i++) {
208
+ usage.object.add(i);
209
+ }
210
+ for (let i = 0; i < metadata.m_player_variables.length; i++) {
211
+ usage.player.add(i);
212
+ }
213
+ for (let i = 0; i < metadata.m_team_variables.length; i++) {
214
+ usage.team.add(i);
215
+ }
216
+ for (let i = 0; i < metadata.m_numeric_variables.length; i++) {
217
+ usage.numeric.add(i);
218
+ }
219
+ }
220
+ function collect_slot_usage_from_object(obj, globals, temporaries) {
221
+ const objectType = obj.m_explicit_object_type;
222
+ if (typeof objectType === "number") {
223
+ const globalIndex = object_global_index(objectType);
224
+ if (globalIndex !== undefined) {
225
+ globals.object.add(globalIndex);
75
226
  }
76
- if (obj.m_math_operation === e_math_operation_tu1.set_to_absolute) {
77
- obj.m_math_operation = e_math_operation_mcc.set_to_absolute;
227
+ const temporaryIndex = object_temporary_index(objectType);
228
+ if (temporaryIndex !== undefined) {
229
+ temporaries.object.add(temporaryIndex);
78
230
  }
79
- });
231
+ }
232
+ const playerType = obj.m_explicit_player_type;
233
+ if (typeof playerType === "number") {
234
+ const globalIndex = player_global_index(playerType);
235
+ if (globalIndex !== undefined) {
236
+ globals.player.add(globalIndex);
237
+ }
238
+ const temporaryIndex = player_temporary_index(playerType);
239
+ if (temporaryIndex !== undefined) {
240
+ temporaries.player.add(temporaryIndex);
241
+ }
242
+ }
243
+ const teamType = obj.m_explicit_team_type;
244
+ if (typeof teamType === "number") {
245
+ const globalIndex = team_global_index(teamType);
246
+ if (globalIndex !== undefined) {
247
+ globals.team.add(globalIndex);
248
+ }
249
+ const temporaryIndex = team_temporary_index(teamType);
250
+ if (temporaryIndex !== undefined) {
251
+ temporaries.team.add(temporaryIndex);
252
+ }
253
+ }
254
+ if (obj.m_type === 4 && typeof obj.m_variable_index === "number") {
255
+ globals.numeric.add(obj.m_variable_index);
256
+ }
80
257
  }
81
- // ---------------------------------------------------------------------------
82
- // MCC TU1 compatibility checks
83
- // ---------------------------------------------------------------------------
84
- function variant_uses_temporary_explicit_refs(variant) {
85
- let found = false;
86
- visit_object_tree(variant, (obj) => {
87
- if (found) {
258
+ function collect_slot_usage(root) {
259
+ const globals = {
260
+ object: new Set(),
261
+ player: new Set(),
262
+ team: new Set(),
263
+ numeric: new Set(),
264
+ };
265
+ const temporaries = {
266
+ object: new Set(),
267
+ player: new Set(),
268
+ team: new Set(),
269
+ };
270
+ visit_object_tree(root, (obj) => collect_slot_usage_from_object(obj, globals, temporaries));
271
+ return { globals, temporaries };
272
+ }
273
+ function allocate_global_slot(used, max) {
274
+ for (let index = 0; index < max; index++) {
275
+ if (!used.has(index)) {
276
+ used.add(index);
277
+ return index;
278
+ }
279
+ }
280
+ return;
281
+ }
282
+ function build_temporary_to_global_maps(globals, temporaries) {
283
+ const maps = {
284
+ object: new Map(),
285
+ player: new Map(),
286
+ team: new Map(),
287
+ };
288
+ for (const temporaryIndex of [...temporaries.object].sort((a, b) => a - b)) {
289
+ const globalIndex = allocate_global_slot(globals.object, MAX_OBJECT_GLOBALS);
290
+ if (globalIndex === undefined) {
88
291
  return;
89
292
  }
90
- const team = obj.m_explicit_team_type;
91
- if (typeof team === "number" &&
92
- team >= e_explicit_team_type_mcc.temporary_0 &&
93
- team <= e_explicit_team_type_mcc.temporary_5) {
94
- found = true;
293
+ maps.object.set(temporaryIndex, globalIndex);
294
+ }
295
+ for (const temporaryIndex of [...temporaries.player].sort((a, b) => a - b)) {
296
+ const globalIndex = allocate_global_slot(globals.player, MAX_PLAYER_GLOBALS);
297
+ if (globalIndex === undefined) {
95
298
  return;
96
299
  }
97
- const player = obj.m_explicit_player_type;
98
- if (typeof player === "number" &&
99
- player >= e_explicit_player_type_mcc.temporary_0 &&
100
- player <= e_explicit_player_type_mcc.temporary_2) {
101
- found = true;
300
+ maps.player.set(temporaryIndex, globalIndex);
301
+ }
302
+ for (const temporaryIndex of [...temporaries.team].sort((a, b) => a - b)) {
303
+ const globalIndex = allocate_global_slot(globals.team, MAX_TEAM_GLOBALS);
304
+ if (globalIndex === undefined) {
102
305
  return;
103
306
  }
104
- const object = obj.m_explicit_object_type;
105
- if (typeof object === "number" &&
106
- object >= e_explicit_object_type_mcc.temporary_0 &&
107
- object <= e_explicit_object_type_mcc.temporary_7) {
307
+ maps.team.set(temporaryIndex, globalIndex);
308
+ }
309
+ return maps;
310
+ }
311
+ function get_custom_engine_tu1(variant) {
312
+ return variant.m_custom_variant?.m_game_engine;
313
+ }
314
+ function copy_variable_metadata_mcc_to_tu1(from, to) {
315
+ to.m_numeric_variables = from.m_numeric_variables.map(([ref, state]) => [
316
+ mccToTu1Mapper.map(ref, c_custom_variable_reference_mcc, c_custom_variable_reference_tu1),
317
+ state,
318
+ ]);
319
+ to.m_timer_variables = from.m_timer_variables.map((ref) => mccToTu1Mapper.map(ref, c_custom_variable_reference_mcc, c_custom_variable_reference_tu1));
320
+ to.m_team_variables = from.m_team_variables.map(([value, state]) => [
321
+ value,
322
+ state,
323
+ ]);
324
+ to.m_player_variables = [...from.m_player_variables];
325
+ to.m_object_variables = [...from.m_object_variables];
326
+ }
327
+ function copy_variable_metadata_tu1_to_mcc(from, to) {
328
+ to.m_numeric_variables = from.m_numeric_variables.map(([ref, state]) => [
329
+ tu1ToMccMapper.map(ref, c_custom_variable_reference_tu1, c_custom_variable_reference_mcc),
330
+ state,
331
+ ]);
332
+ to.m_timer_variables = from.m_timer_variables.map((ref) => tu1ToMccMapper.map(ref, c_custom_variable_reference_tu1, c_custom_variable_reference_mcc));
333
+ to.m_team_variables = from.m_team_variables.map(([value, state]) => [
334
+ value,
335
+ state,
336
+ ]);
337
+ to.m_player_variables = [...from.m_player_variables];
338
+ to.m_object_variables = [...from.m_object_variables];
339
+ }
340
+ function copy_engine_variable_metadata_mcc_to_tu1(from, to) {
341
+ copy_variable_metadata_mcc_to_tu1(from.m_global_variable_metadata, to.m_global_variable_metadata);
342
+ copy_variable_metadata_mcc_to_tu1(from.m_player_variable_metadata, to.m_player_variable_metadata);
343
+ copy_variable_metadata_mcc_to_tu1(from.m_object_variable_metadata, to.m_object_variable_metadata);
344
+ copy_variable_metadata_mcc_to_tu1(from.m_team_variable_metadata, to.m_team_variable_metadata);
345
+ }
346
+ function copy_engine_variable_metadata_tu1_to_mcc(from, to) {
347
+ copy_variable_metadata_tu1_to_mcc(from.m_global_variable_metadata, to.m_global_variable_metadata);
348
+ copy_variable_metadata_tu1_to_mcc(from.m_player_variable_metadata, to.m_player_variable_metadata);
349
+ copy_variable_metadata_tu1_to_mcc(from.m_object_variable_metadata, to.m_object_variable_metadata);
350
+ copy_variable_metadata_tu1_to_mcc(from.m_team_variable_metadata, to.m_team_variable_metadata);
351
+ }
352
+ function get_custom_engine(variant) {
353
+ return variant.m_custom_variant?.m_game_engine;
354
+ }
355
+ function apply_mcc_to_tu1_megalo_remapping(variant, maps) {
356
+ const engine = variant.m_custom_variant?.m_game_engine;
357
+ if (!engine) {
358
+ return;
359
+ }
360
+ remap_temporary_explicit_refs(engine, maps);
361
+ extend_global_metadata(engine.m_global_variable_metadata, maps);
362
+ }
363
+ function variant_uses_mcc_only_math_ops(variant) {
364
+ let found = false;
365
+ visit_object_tree(variant, (obj) => {
366
+ if (found) {
367
+ return;
368
+ }
369
+ const op = obj.m_operation ?? obj.m_math_operation;
370
+ if (typeof op === "number" && MCC_ONLY_MATH_OPS.includes(op)) {
108
371
  found = true;
109
372
  }
110
373
  });
111
374
  return found;
112
375
  }
113
- function variant_uses_mcc_only_math_ops(variant) {
376
+ function variant_uses_mcc_only_action_types(variant) {
114
377
  let found = false;
115
378
  visit_object_tree(variant, (obj) => {
116
379
  if (found) {
117
380
  return;
118
381
  }
119
- const op = obj.m_operation ?? obj.m_math_operation;
120
- if (typeof op === "number" && MCC_ONLY_MATH_OPS.includes(op)) {
382
+ const actionType = obj.m_type;
383
+ if (typeof actionType === "number" &&
384
+ MCC_ONLY_ACTION_TYPES.includes(actionType)) {
121
385
  found = true;
122
386
  }
123
387
  });
124
388
  return found;
125
389
  }
126
- /** Returns false when MCC features cannot be represented in TU1. */
127
- function can_convert_mcc_game_variant_to_tu1(from) {
390
+ function plan_temporary_relocation(variant) {
391
+ const engine = get_custom_engine(variant);
392
+ if (!engine) {
393
+ return { object: new Map(), player: new Map(), team: new Map() };
394
+ }
395
+ const { globals, temporaries } = collect_slot_usage(engine);
396
+ reserve_metadata_slots(globals, engine.m_global_variable_metadata);
397
+ if (temporaries.object.size === 0 &&
398
+ temporaries.player.size === 0 &&
399
+ temporaries.team.size === 0) {
400
+ return { object: new Map(), player: new Map(), team: new Map() };
401
+ }
402
+ return build_temporary_to_global_maps(globals, temporaries);
403
+ }
404
+ function check_mcc_game_variant_to_tu1(from) {
405
+ if (from.m_game_engine === e_game_mode_mcc.sandbox) {
406
+ return e_reach_gametype_conversion_error.forge_variant;
407
+ }
408
+ if (from.m_game_engine === e_game_mode_mcc.campaign) {
409
+ return e_reach_gametype_conversion_error.campaign_variant;
410
+ }
128
411
  if (from.m_game_engine === e_game_mode_mcc.survival &&
129
412
  from.m_survival_variant !== undefined &&
130
413
  from.m_survival_variant.m_additional_flags !== 0) {
131
- return false;
414
+ return e_reach_gametype_conversion_error.mcc_survival_additional_flags;
132
415
  }
133
- if (variant_uses_temporary_explicit_refs(from)) {
134
- return false;
416
+ if (variant_uses_mcc_only_action_types(from)) {
417
+ return e_reach_gametype_conversion_error.mcc_exclusive_action;
135
418
  }
136
419
  if (variant_uses_mcc_only_math_ops(from)) {
137
- return false;
420
+ return e_reach_gametype_conversion_error.mcc_exclusive_math_operator;
138
421
  }
139
- return true;
140
- }
141
- // ---------------------------------------------------------------------------
142
- // Survival (MCC and TU1 use different field names for unrelated data)
143
- // ---------------------------------------------------------------------------
144
- function survival_json_mcc_to_tu1(survival) {
145
- survival.m_campaign_difficulty_level = TU1_SURVIVAL_CAMPAIGN_DIFFICULTY;
146
- survival.m_encoding_version = undefined;
147
- survival.m_additional_flags = undefined;
422
+ if (plan_temporary_relocation(from) === undefined) {
423
+ return e_reach_gametype_conversion_error.insufficient_global_slots;
424
+ }
425
+ return e_reach_gametype_conversion_error.ok;
148
426
  }
149
- function survival_json_tu1_to_mcc(survival) {
150
- survival.m_encoding_version = MCC_SURVIVAL_ENCODING_VERSION;
151
- survival.m_campaign_difficulty_level = undefined;
152
- survival.m_additional_flags = 0;
427
+ function check_tu1_game_variant_to_mcc(from) {
428
+ if (from.m_game_engine === e_game_mode_tu1.sandbox) {
429
+ return e_reach_gametype_conversion_error.forge_variant;
430
+ }
431
+ if (from.m_game_engine === e_game_mode_tu1.campaign) {
432
+ return e_reach_gametype_conversion_error.campaign_variant;
433
+ }
434
+ return e_reach_gametype_conversion_error.ok;
153
435
  }
154
- // ---------------------------------------------------------------------------
155
- // Conversion (cross-version only)
156
- // ---------------------------------------------------------------------------
157
436
  function convert_mcc_to_tu1(from, to) {
158
- if (!can_convert_mcc_game_variant_to_tu1(from)) {
159
- return false;
437
+ const error = check_mcc_game_variant_to_tu1(from);
438
+ if (error !== e_reach_gametype_conversion_error.ok) {
439
+ return error;
440
+ }
441
+ const maps = plan_temporary_relocation(from);
442
+ if (maps === undefined) {
443
+ return e_reach_gametype_conversion_error.insufficient_global_slots;
160
444
  }
161
- const data = json_clone(from);
162
- remap_set_to_absolute_mcc_to_tu1(data);
163
- if (data.m_survival_variant !== undefined) {
164
- survival_json_mcc_to_tu1(data.m_survival_variant);
445
+ const converted = map_reach_gametype_mcc_to_tu1(from);
446
+ const sourceEngine = get_custom_engine(from);
447
+ const targetEngine = converted.m_custom_variant?.m_game_engine;
448
+ if (sourceEngine !== undefined && targetEngine !== undefined) {
449
+ copy_engine_variable_metadata_mcc_to_tu1(sourceEngine, targetEngine);
165
450
  }
166
- write_game_variant_json(to, data);
167
- return true;
451
+ apply_mcc_to_tu1_megalo_remapping(converted, maps);
452
+ apply_mcc_to_tu1_name_description(from, converted);
453
+ apply_survival_mcc_to_tu1(converted.m_survival_variant);
454
+ Object.assign(to, converted);
455
+ return e_reach_gametype_conversion_error.ok;
168
456
  }
169
457
  function convert_tu1_to_mcc(from, to) {
170
- const data = json_clone(from);
171
- remap_set_to_absolute_tu1_to_mcc(data);
172
- if (data.m_survival_variant !== undefined) {
173
- survival_json_tu1_to_mcc(data.m_survival_variant);
458
+ const error = check_tu1_game_variant_to_mcc(from);
459
+ if (error !== e_reach_gametype_conversion_error.ok) {
460
+ return error;
174
461
  }
175
- write_game_variant_json(to, data);
176
- return true;
177
- }
178
- export function convert_reach_gametype(from, to) {
179
- if (from.m_game_engine === e_game_mode_tu1.sandbox) {
180
- throw new BlfError("Forge game variants are not supported. Where did you even get this?");
462
+ const converted = map_reach_gametype_tu1_to_mcc(from);
463
+ const sourceEngine = get_custom_engine_tu1(from);
464
+ const targetEngine = converted.m_custom_variant?.m_game_engine;
465
+ if (sourceEngine !== undefined && targetEngine !== undefined) {
466
+ copy_engine_variable_metadata_tu1_to_mcc(sourceEngine, targetEngine);
181
467
  }
468
+ apply_survival_tu1_to_mcc(converted.m_survival_variant);
469
+ Object.assign(to, converted);
470
+ return e_reach_gametype_conversion_error.ok;
471
+ }
472
+ function assert_cross_version(from, to) {
182
473
  const from_is_mcc = from instanceof c_game_variant_mcc;
183
474
  const to_is_mcc = to instanceof c_game_variant_mcc;
184
475
  if (from_is_mcc === to_is_mcc) {
185
476
  throw new BlfError("convert_reach_gametype only supports cross-version conversion between Reach TU1 and Reach MCC");
186
477
  }
187
- if (from_is_mcc) {
478
+ }
479
+ export function convert_reach_gametype(from, to) {
480
+ assert_cross_version(from, to);
481
+ if (from instanceof c_game_variant_mcc) {
188
482
  return convert_mcc_to_tu1(from, to);
189
483
  }
190
484
  return convert_tu1_to_mcc(from, to);
@@ -0,0 +1,19 @@
1
+ /**
2
+ * JSON round-trip for game variant class graphs.
3
+ *
4
+ * Uses `c.json` when a type is decorated with `@c.struct()`.
5
+ * Bitstream-decoded game variant types fall back to a cstruct-compatible walk
6
+ * that preserves numeric enums and serializes bigint values as strings.
7
+ */
8
+ type JsonRecord = Record<string, unknown>;
9
+ type ClassConstructor = new () => object;
10
+ /** Serialize a game variant instance to a cstruct-compatible JSON object. */
11
+ export declare function variantToJson<T extends object>(ctor: new () => T, instance: T): JsonRecord;
12
+ /** Build a game variant instance from JSON, optionally remapping nested constructors. */
13
+ export declare function variantFromJson<T extends object>(ctor: new () => T, json: JsonRecord, template?: object, ctorMap?: Map<ClassConstructor, ClassConstructor>): T;
14
+ /** Pair same-named exports from two version bundles for cross-build hydration. */
15
+ export declare function buildCrossVersionConstructorMap(sourceModule: Record<string, unknown>, targetModule: Record<string, unknown>): Map<ClassConstructor, ClassConstructor>;
16
+ /** Deep-clone a variant instance through JSON using cstruct-compatible encoding. */
17
+ export declare function cloneVariantViaJson<T extends object>(ctor: new () => T, instance: object, template?: object, ctorMap?: Map<ClassConstructor, ClassConstructor>): T;
18
+ export {};
19
+ //# sourceMappingURL=game_variant_json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game_variant_json.d.ts","sourceRoot":"","sources":["../../src/helpers/game_variant_json.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1C,KAAK,gBAAgB,GAAG,UAAU,MAAM,CAAC;AA0HzC,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,IAAI,EAAE,UAAU,CAAC,EACjB,QAAQ,EAAE,CAAC,GACV,UAAU,CAKZ;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAC9C,IAAI,EAAE,UAAU,CAAC,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAa,GAC3D,CAAC,CAEH;AAED,kFAAkF;AAClF,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAgBzC;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,IAAI,EAAE,UAAU,CAAC,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAa,GAC3D,CAAC,CAOH"}