@blamnetwork/blf 1.0.0-alpha.1
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.
- package/README.md +82 -0
- package/dist/bitstream/enum.d.ts +6 -0
- package/dist/bitstream/enum.d.ts.map +1 -0
- package/dist/bitstream/enum.js +15 -0
- package/dist/bitstream/enums.d.ts +21 -0
- package/dist/bitstream/enums.d.ts.map +1 -0
- package/dist/bitstream/enums.js +31 -0
- package/dist/bitstream/errors.d.ts +5 -0
- package/dist/bitstream/errors.d.ts.map +1 -0
- package/dist/bitstream/errors.js +11 -0
- package/dist/bitstream/index.d.ts +7 -0
- package/dist/bitstream/index.d.ts.map +1 -0
- package/dist/bitstream/index.js +5 -0
- package/dist/bitstream/math.d.ts +28 -0
- package/dist/bitstream/math.d.ts.map +1 -0
- package/dist/bitstream/math.js +149 -0
- package/dist/bitstream/reader.d.ts +81 -0
- package/dist/bitstream/reader.d.ts.map +1 -0
- package/dist/bitstream/reader.js +400 -0
- package/dist/bitstream/writer.d.ts +56 -0
- package/dist/bitstream/writer.d.ts.map +1 -0
- package/dist/bitstream/writer.js +330 -0
- package/dist/blam/common/cache/index.d.ts +2 -0
- package/dist/blam/common/cache/index.d.ts.map +1 -0
- package/dist/blam/common/cache/index.js +1 -0
- package/dist/blam/common/cache/security_functions.d.ts +2 -0
- package/dist/blam/common/cache/security_functions.d.ts.map +1 -0
- package/dist/blam/common/cache/security_functions.js +19 -0
- package/dist/blam/common/index.d.ts +3 -0
- package/dist/blam/common/index.d.ts.map +1 -0
- package/dist/blam/common/index.js +2 -0
- package/dist/blam/common/memory/data_compress.d.ts +10 -0
- package/dist/blam/common/memory/data_compress.d.ts.map +1 -0
- package/dist/blam/common/memory/data_compress.js +28 -0
- package/dist/blam/common/memory/index.d.ts +2 -0
- package/dist/blam/common/memory/index.d.ts.map +1 -0
- package/dist/blam/common/memory/index.js +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.d.ts +37 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.js +125 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.d.ts +14 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.js +30 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.d.ts +114 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.js +292 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.d.ts +70 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.js +174 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.d.ts +10 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.js +16 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.d.ts +28 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.js +109 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.d.ts +56 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.js +142 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.d.ts +27 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.js +190 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/index.d.ts +10 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/index.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/index.js +9 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.d.ts +10 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.js +18 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.d.ts +8 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.js +18 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.d.ts +13 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.js +39 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.d.ts +34 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.js +59 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/index.d.ts +14 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/index.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/index.js +13 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.d.ts +393 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.js +1590 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.d.ts +49 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.js +216 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.d.ts +79 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.js +496 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.d.ts +26 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.js +118 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.d.ts +29 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.js +116 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.d.ts +22 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.js +54 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.d.ts +22 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.js +82 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.d.ts +22 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.js +85 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.d.ts +13 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.js +75 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/index.d.ts +4 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/index.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/index.js +3 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.d.ts +2 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.js +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/saved_game_files.d.ts +66 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/saved_game_files.d.ts.map +1 -0
- package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/saved_game_files.js +586 -0
- package/dist/blf_chunk.d.ts +41 -0
- package/dist/blf_chunk.d.ts.map +1 -0
- package/dist/blf_chunk.js +126 -0
- package/dist/blffile.d.ts +5 -0
- package/dist/blffile.d.ts.map +1 -0
- package/dist/blffile.js +23 -0
- package/dist/chunk_signature.d.ts +10 -0
- package/dist/chunk_signature.d.ts.map +1 -0
- package/dist/chunk_signature.js +47 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/index.d.ts +4 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/index.d.ts.map +1 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/index.js +3 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_compressed_data.d.ts +21 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_compressed_data.d.ts.map +1 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_compressed_data.js +112 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_end_of_file.d.ts +7 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_end_of_file.d.ts.map +1 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_end_of_file.js +72 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_start_of_file.d.ts +13 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_start_of_file.d.ts.map +1 -0
- package/dist/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_start_of_file.js +83 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.d.ts +7 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.d.ts.map +1 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.js +6 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_author.d.ts +26 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_author.d.ts.map +1 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_author.js +109 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_compressed_data.d.ts +4 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_compressed_data.d.ts.map +1 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_compressed_data.js +3 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.d.ts +8 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.d.ts.map +1 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.js +78 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_game_variant.d.ts +24 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_game_variant.d.ts.map +1 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_game_variant.js +130 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_packed_game_variant.d.ts +15 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_packed_game_variant.d.ts.map +1 -0
- package/dist/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_packed_game_variant.js +85 -0
- package/dist/decorators.d.ts +38 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +68 -0
- package/dist/error.d.ts +4 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +6 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/s_blf_header.d.ts +14 -0
- package/dist/s_blf_header.d.ts.map +1 -0
- package/dist/s_blf_header.js +113 -0
- package/dist/versions/halo3/v12070_08_09_05_2031_halo3_ship.d.ts +5 -0
- package/dist/versions/halo3/v12070_08_09_05_2031_halo3_ship.d.ts.map +1 -0
- package/dist/versions/halo3/v12070_08_09_05_2031_halo3_ship.js +4 -0
- package/dist/versions/halo3odst/v13895_09_04_27_2201_atlas_release.d.ts +5 -0
- package/dist/versions/halo3odst/v13895_09_04_27_2201_atlas_release.d.ts.map +1 -0
- package/dist/versions/halo3odst/v13895_09_04_27_2201_atlas_release.js +4 -0
- package/dist/versions/haloreach/v12065_11_08_24_1738_tu1actual.d.ts +10 -0
- package/dist/versions/haloreach/v12065_11_08_24_1738_tu1actual.d.ts.map +1 -0
- package/dist/versions/haloreach/v12065_11_08_24_1738_tu1actual.js +9 -0
- package/dist-cjs/bitstream/enum.js +19 -0
- package/dist-cjs/bitstream/enums.js +34 -0
- package/dist-cjs/bitstream/errors.js +16 -0
- package/dist-cjs/bitstream/index.js +29 -0
- package/dist-cjs/bitstream/math.js +167 -0
- package/dist-cjs/bitstream/reader.js +404 -0
- package/dist-cjs/bitstream/writer.js +334 -0
- package/dist-cjs/blam/common/cache/index.js +17 -0
- package/dist-cjs/blam/common/cache/security_functions.js +22 -0
- package/dist-cjs/blam/common/index.js +18 -0
- package/dist-cjs/blam/common/memory/data_compress.js +33 -0
- package/dist-cjs/blam/common/memory/index.js +17 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.js +129 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.js +34 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_default.js +305 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_survival_variant.js +182 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_traits.js +20 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_variant.js +113 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_player_traits.js +151 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_string_table.js +195 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/index.js +25 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalo_game_statistic.js +22 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_megalogamengine_map_permissions.js +22 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_object_filter.js +43 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/c_trigger.js +63 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/index.js +29 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_actions.js +1640 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_conditions.js +224 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_references.js +508 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/megalogamengine_text.js +124 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_custom_game_engine_definition.js +120 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_game_engine_player_rating_parameters.js +58 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_user_defined_option.js +87 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variable_metadata.js +93 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/megalogamengine/s_variant_variable.js +79 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/index.js +19 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/index.js +17 -0
- package/dist-cjs/blam/haloreach/v12065_11_08_24_1738_tu1actual/saved_games/saved_game_files.js +591 -0
- package/dist-cjs/blf_chunk.js +139 -0
- package/dist-cjs/blffile.js +26 -0
- package/dist-cjs/chunk_signature.js +52 -0
- package/dist-cjs/chunks/halo3/v12070_08_09_05_2031_halo3_ship/index.js +10 -0
- package/dist-cjs/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_compressed_data.js +115 -0
- package/dist-cjs/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_end_of_file.js +75 -0
- package/dist-cjs/chunks/halo3/v12070_08_09_05_2031_halo3_ship/s_blf_chunk_start_of_file.js +86 -0
- package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/index.js +23 -0
- package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_author.js +115 -0
- package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_compressed_data.js +10 -0
- package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_content_header.js +81 -0
- package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_game_variant.js +133 -0
- package/dist-cjs/chunks/haloreach/v12065_11_08_24_1738_tu1actual/s_blf_chunk_packed_game_variant.js +88 -0
- package/dist-cjs/decorators.js +75 -0
- package/dist-cjs/error.js +10 -0
- package/dist-cjs/index.js +53 -0
- package/dist-cjs/package.json +1 -0
- package/dist-cjs/s_blf_header.js +117 -0
- package/dist-cjs/versions/halo3/v12070_08_09_05_2031_halo3_ship.js +20 -0
- package/dist-cjs/versions/halo3odst/v13895_09_04_27_2201_atlas_release.js +20 -0
- package/dist-cjs/versions/haloreach/v12065_11_08_24_1738_tu1actual.js +25 -0
- package/package.json +99 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { e_bitstream_byte_fill_direction, e_bitstream_byte_order, e_bitstream_state, } from "./enums";
|
|
2
|
+
import { assert_ok, BitstreamError } from "./errors";
|
|
3
|
+
import { quantize_real } from "./math";
|
|
4
|
+
const { _bitstream_byte_fill_direction_msb_to_lsb, _bitstream_byte_fill_direction_lsb_to_msb, } = e_bitstream_byte_fill_direction;
|
|
5
|
+
export class c_bitstream_writer {
|
|
6
|
+
m_data;
|
|
7
|
+
m_data_size_bytes;
|
|
8
|
+
m_state;
|
|
9
|
+
m_byte_order;
|
|
10
|
+
m_packed_byte_order;
|
|
11
|
+
m_byte_pack_direction;
|
|
12
|
+
m_byte_unpack_direction;
|
|
13
|
+
current_stream_bit_position;
|
|
14
|
+
current_stream_byte_position;
|
|
15
|
+
static new(size, byte_order) {
|
|
16
|
+
return new c_bitstream_writer(size, byte_order, {
|
|
17
|
+
packed_byte_order: byte_order,
|
|
18
|
+
byte_pack_direction: _bitstream_byte_fill_direction_msb_to_lsb,
|
|
19
|
+
byte_unpack_direction: _bitstream_byte_fill_direction_msb_to_lsb,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** Use this when dealing with bitstream data from the Halo 3 Beta or prior. */
|
|
23
|
+
static new_with_legacy_settings(size, byte_order) {
|
|
24
|
+
return new c_bitstream_writer(size, byte_order, {
|
|
25
|
+
packed_byte_order: e_bitstream_byte_order.swap(byte_order),
|
|
26
|
+
byte_pack_direction: _bitstream_byte_fill_direction_lsb_to_msb,
|
|
27
|
+
byte_unpack_direction: _bitstream_byte_fill_direction_lsb_to_msb,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
static new_from_instance(size, instance) {
|
|
31
|
+
return new c_bitstream_writer(size, instance.get_byte_order(), {
|
|
32
|
+
packed_byte_order: instance.m_packed_byte_order,
|
|
33
|
+
byte_pack_direction: instance.m_byte_pack_direction,
|
|
34
|
+
byte_unpack_direction: instance.m_byte_unpack_direction,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
constructor(size, byte_order, options) {
|
|
38
|
+
this.m_data = new Uint8Array(size);
|
|
39
|
+
this.m_data_size_bytes = size;
|
|
40
|
+
this.m_state = e_bitstream_state._bitstream_state_initial;
|
|
41
|
+
this.m_byte_order = byte_order;
|
|
42
|
+
this.m_packed_byte_order = options.packed_byte_order;
|
|
43
|
+
this.m_byte_pack_direction = options.byte_pack_direction;
|
|
44
|
+
this.m_byte_unpack_direction = options.byte_unpack_direction;
|
|
45
|
+
this.current_stream_bit_position = 0;
|
|
46
|
+
this.current_stream_byte_position = 0;
|
|
47
|
+
}
|
|
48
|
+
get_byte_order() {
|
|
49
|
+
return this.m_byte_order;
|
|
50
|
+
}
|
|
51
|
+
get_current_offset() {
|
|
52
|
+
return [
|
|
53
|
+
this.current_stream_byte_position,
|
|
54
|
+
this.current_stream_bit_position,
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
write_enum(value, size_in_bits) {
|
|
58
|
+
this.write_integer(value, size_in_bits);
|
|
59
|
+
}
|
|
60
|
+
write_integer(value, size_in_bits) {
|
|
61
|
+
assert_ok(this.writing());
|
|
62
|
+
const bytes = new Uint8Array(4);
|
|
63
|
+
const view = new DataView(bytes.buffer);
|
|
64
|
+
const u = value >>> 0;
|
|
65
|
+
switch (this.m_packed_byte_order) {
|
|
66
|
+
case e_bitstream_byte_order._bitstream_byte_order_little_endian:
|
|
67
|
+
view.setUint32(0, u, true);
|
|
68
|
+
break;
|
|
69
|
+
case e_bitstream_byte_order._bitstream_byte_order_big_endian:
|
|
70
|
+
view.setUint32(0, u, false);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
this.write_bits_internal(bytes, size_in_bits);
|
|
74
|
+
}
|
|
75
|
+
write_signed_integer(value, size_in_bits) {
|
|
76
|
+
assert_ok(this.writing());
|
|
77
|
+
assert_ok(size_in_bits > 0 && size_in_bits <= 32);
|
|
78
|
+
// Avoid `1 << 31` — JS bitwise ops are 32-bit signed and overflow.
|
|
79
|
+
const maximum = size_in_bits === 32 ? 0x7fffffff : (1 << (size_in_bits - 1)) - 1;
|
|
80
|
+
const minimum = size_in_bits === 32 ? -0x80000000 : ~maximum;
|
|
81
|
+
assert_ok(value >= minimum, "value>=minimum");
|
|
82
|
+
assert_ok(value <= maximum, "value<=maximum");
|
|
83
|
+
this.write_integer(value >>> 0, size_in_bits);
|
|
84
|
+
}
|
|
85
|
+
write_bool(value) {
|
|
86
|
+
this.write_integer(value ? 1 : 0, 1);
|
|
87
|
+
}
|
|
88
|
+
seek_relative(bits) {
|
|
89
|
+
const zero_bytes = new Uint8Array(Math.ceil(bits / 8));
|
|
90
|
+
this.write_bits_internal(zero_bytes, bits);
|
|
91
|
+
}
|
|
92
|
+
write_float(value, size_in_bits) {
|
|
93
|
+
assert_ok(this.writing());
|
|
94
|
+
const bytes = new Uint8Array(4);
|
|
95
|
+
const view = new DataView(bytes.buffer);
|
|
96
|
+
switch (this.m_packed_byte_order) {
|
|
97
|
+
case e_bitstream_byte_order._bitstream_byte_order_little_endian:
|
|
98
|
+
view.setFloat32(0, value, true);
|
|
99
|
+
break;
|
|
100
|
+
case e_bitstream_byte_order._bitstream_byte_order_big_endian:
|
|
101
|
+
view.setFloat32(0, value, false);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
this.write_bits_internal(bytes, size_in_bits);
|
|
105
|
+
}
|
|
106
|
+
write_raw_data(value, size_in_bits) {
|
|
107
|
+
assert_ok(value.length >= Math.ceil(size_in_bits / 8));
|
|
108
|
+
this.write_bits_internal(value, size_in_bits);
|
|
109
|
+
}
|
|
110
|
+
write_qword(value, size_in_bits) {
|
|
111
|
+
assert_ok(this.writing());
|
|
112
|
+
const bytes = new Uint8Array(8);
|
|
113
|
+
const view = new DataView(bytes.buffer);
|
|
114
|
+
switch (this.m_packed_byte_order) {
|
|
115
|
+
case e_bitstream_byte_order._bitstream_byte_order_little_endian:
|
|
116
|
+
view.setBigUint64(0, value, true);
|
|
117
|
+
break;
|
|
118
|
+
case e_bitstream_byte_order._bitstream_byte_order_big_endian:
|
|
119
|
+
view.setBigUint64(0, value, false);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
this.write_bits_internal(bytes, size_in_bits);
|
|
123
|
+
}
|
|
124
|
+
write_index(value, max_value, bit_size) {
|
|
125
|
+
assert_ok(value <= max_value);
|
|
126
|
+
if (value === -1) {
|
|
127
|
+
this.write_bool(true);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this.write_bool(false);
|
|
131
|
+
this.write_integer(value, bit_size);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
write_quantized_real(value, min_value, max_value, size_in_bits, exact_midpoint, exact_endpoints) {
|
|
135
|
+
const quantized = quantize_real(value, min_value, max_value, 1 << size_in_bits, exact_midpoint, exact_endpoints);
|
|
136
|
+
this.write_integer(quantized, size_in_bits);
|
|
137
|
+
}
|
|
138
|
+
write_point3d(point, axis_encoding_size_in_bits) {
|
|
139
|
+
assert_ok(axis_encoding_size_in_bits > 0 && axis_encoding_size_in_bits <= 32);
|
|
140
|
+
assert_ok(point.x < 1 << axis_encoding_size_in_bits);
|
|
141
|
+
assert_ok(point.y < 1 << axis_encoding_size_in_bits);
|
|
142
|
+
assert_ok(point.z < 1 << axis_encoding_size_in_bits);
|
|
143
|
+
this.write_integer(point.x, axis_encoding_size_in_bits);
|
|
144
|
+
this.write_integer(point.y, axis_encoding_size_in_bits);
|
|
145
|
+
this.write_integer(point.z, axis_encoding_size_in_bits);
|
|
146
|
+
}
|
|
147
|
+
write_point3d_efficient(point, axis_encoding_size_in_bits) {
|
|
148
|
+
assert_ok(axis_encoding_size_in_bits.x > 0 && axis_encoding_size_in_bits.x <= 32);
|
|
149
|
+
assert_ok(axis_encoding_size_in_bits.y > 0 && axis_encoding_size_in_bits.y <= 32);
|
|
150
|
+
assert_ok(axis_encoding_size_in_bits.z > 0 && axis_encoding_size_in_bits.z <= 32);
|
|
151
|
+
assert_ok(point.x >>> 0 < 1 << axis_encoding_size_in_bits.x);
|
|
152
|
+
assert_ok(point.y >>> 0 < 1 << axis_encoding_size_in_bits.y);
|
|
153
|
+
assert_ok(point.z >>> 0 < 1 << axis_encoding_size_in_bits.z);
|
|
154
|
+
this.write_integer(point.x, axis_encoding_size_in_bits.x);
|
|
155
|
+
this.write_integer(point.y, axis_encoding_size_in_bits.y);
|
|
156
|
+
this.write_integer(point.z, axis_encoding_size_in_bits.z);
|
|
157
|
+
}
|
|
158
|
+
/** Writes raw UTF-8 bytes + NUL (matches blf_lib `String::as_bytes()`). */
|
|
159
|
+
write_string_utf8(char_string, max_string_size) {
|
|
160
|
+
assert_ok(this.writing());
|
|
161
|
+
assert_ok(max_string_size > 0);
|
|
162
|
+
const bytes = new TextEncoder().encode(char_string);
|
|
163
|
+
assert_ok(bytes.length <= max_string_size);
|
|
164
|
+
for (const byte of bytes) {
|
|
165
|
+
this.write_value_internal(new Uint8Array([byte]), 8);
|
|
166
|
+
}
|
|
167
|
+
this.write_value_internal(new Uint8Array([0]), 8);
|
|
168
|
+
}
|
|
169
|
+
write_string_extended_ascii(char_string, max_string_size) {
|
|
170
|
+
assert_ok(this.writing());
|
|
171
|
+
assert_ok(max_string_size > 0);
|
|
172
|
+
assert_ok(char_string.length <= max_string_size);
|
|
173
|
+
for (const ch of char_string) {
|
|
174
|
+
const code = ch.codePointAt(0);
|
|
175
|
+
if (code > 0xff) {
|
|
176
|
+
throw new BitstreamError(`Cannot encode non-Latin-1 char: ${ch}`);
|
|
177
|
+
}
|
|
178
|
+
this.write_value_internal(new Uint8Array([code]), 8);
|
|
179
|
+
}
|
|
180
|
+
this.write_value_internal(new Uint8Array([0]), 8);
|
|
181
|
+
}
|
|
182
|
+
write_string_wchar(value, max_string_size) {
|
|
183
|
+
assert_ok(this.writing());
|
|
184
|
+
assert_ok(max_string_size > 0);
|
|
185
|
+
assert_ok(value.length <= max_string_size);
|
|
186
|
+
for (let i = 0; i < value.length; i++) {
|
|
187
|
+
const code = value.charCodeAt(i);
|
|
188
|
+
const bytes = new Uint8Array(2);
|
|
189
|
+
const view = new DataView(bytes.buffer);
|
|
190
|
+
switch (this.m_packed_byte_order) {
|
|
191
|
+
case e_bitstream_byte_order._bitstream_byte_order_little_endian:
|
|
192
|
+
view.setUint16(0, code, true);
|
|
193
|
+
break;
|
|
194
|
+
case e_bitstream_byte_order._bitstream_byte_order_big_endian:
|
|
195
|
+
view.setUint16(0, code, false);
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
this.write_value_internal(bytes, 16);
|
|
199
|
+
}
|
|
200
|
+
this.write_value_internal(new Uint8Array(2), 16);
|
|
201
|
+
}
|
|
202
|
+
begin_writing() {
|
|
203
|
+
this.reset(e_bitstream_state._bitstream_state_writing);
|
|
204
|
+
}
|
|
205
|
+
writing() {
|
|
206
|
+
return this.m_state === e_bitstream_state._bitstream_state_writing;
|
|
207
|
+
}
|
|
208
|
+
finish_writing() {
|
|
209
|
+
this.m_state = e_bitstream_state._bitstream_state_write_finished;
|
|
210
|
+
this.m_data_size_bytes = Math.ceil((this.current_stream_byte_position * 8 +
|
|
211
|
+
this.current_stream_bit_position) /
|
|
212
|
+
8);
|
|
213
|
+
}
|
|
214
|
+
get_data() {
|
|
215
|
+
assert_ok(!this.writing());
|
|
216
|
+
return this.m_data.slice(0, this.m_data_size_bytes);
|
|
217
|
+
}
|
|
218
|
+
write_value_internal(data, size_in_bits) {
|
|
219
|
+
this.write_bits_internal(data, size_in_bits);
|
|
220
|
+
}
|
|
221
|
+
write_bits_internal(data, size_in_bits) {
|
|
222
|
+
const size_in_bytes = Math.ceil(size_in_bits / 8);
|
|
223
|
+
if (data.length < size_in_bytes) {
|
|
224
|
+
throw new BitstreamError(`Tried to write ${size_in_bits} bits but only ${data.length * 8} were provided`);
|
|
225
|
+
}
|
|
226
|
+
const surplus_bytes = data.length - size_in_bytes;
|
|
227
|
+
const surplus_bits = (data.length * 8 - size_in_bits) % 8;
|
|
228
|
+
let remaining_bits_to_write = size_in_bits;
|
|
229
|
+
while (remaining_bits_to_write > 0) {
|
|
230
|
+
const bytes_written = Math.floor((size_in_bits - remaining_bits_to_write) / 8);
|
|
231
|
+
let bits_written = 0;
|
|
232
|
+
let writing_byte;
|
|
233
|
+
switch (this.m_packed_byte_order) {
|
|
234
|
+
case e_bitstream_byte_order._bitstream_byte_order_little_endian:
|
|
235
|
+
if (remaining_bits_to_write < 8) {
|
|
236
|
+
writing_byte =
|
|
237
|
+
(data[bytes_written] << (8 - remaining_bits_to_write)) & 0xff;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
writing_byte = data[bytes_written];
|
|
241
|
+
}
|
|
242
|
+
break;
|
|
243
|
+
case e_bitstream_byte_order._bitstream_byte_order_big_endian: {
|
|
244
|
+
let bits = (data[bytes_written + surplus_bytes] << surplus_bits) & 0xff;
|
|
245
|
+
if (surplus_bits !== 0 &&
|
|
246
|
+
remaining_bits_to_write > 8 - surplus_bits) {
|
|
247
|
+
bits |=
|
|
248
|
+
(data[bytes_written + surplus_bytes + 1] >> (8 - surplus_bits)) &
|
|
249
|
+
0xff;
|
|
250
|
+
}
|
|
251
|
+
writing_byte = bits;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
writing_byte &= 0xff << (8 - Math.min(8, remaining_bits_to_write));
|
|
256
|
+
const writing_bits_at_position = Math.min(8 - this.current_stream_bit_position, remaining_bits_to_write);
|
|
257
|
+
const remaining_bits_at_position = 8 - this.current_stream_bit_position;
|
|
258
|
+
let bits;
|
|
259
|
+
switch (this.m_byte_unpack_direction) {
|
|
260
|
+
case _bitstream_byte_fill_direction_lsb_to_msb:
|
|
261
|
+
bits =
|
|
262
|
+
(writing_byte <<
|
|
263
|
+
(Math.min(8, remaining_bits_to_write) -
|
|
264
|
+
writing_bits_at_position)) &
|
|
265
|
+
0xff;
|
|
266
|
+
break;
|
|
267
|
+
case _bitstream_byte_fill_direction_msb_to_lsb:
|
|
268
|
+
bits = writing_byte & (0xff << (8 - writing_bits_at_position));
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
switch (this.m_byte_pack_direction) {
|
|
272
|
+
case _bitstream_byte_fill_direction_lsb_to_msb:
|
|
273
|
+
bits >>>=
|
|
274
|
+
8 - (this.current_stream_bit_position + writing_bits_at_position);
|
|
275
|
+
break;
|
|
276
|
+
case _bitstream_byte_fill_direction_msb_to_lsb:
|
|
277
|
+
bits >>>= this.current_stream_bit_position;
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
this.ensure_byte_capacity(this.current_stream_byte_position);
|
|
281
|
+
this.m_data[this.current_stream_byte_position] |= bits;
|
|
282
|
+
bits_written += writing_bits_at_position;
|
|
283
|
+
if (writing_bits_at_position === remaining_bits_at_position) {
|
|
284
|
+
this.current_stream_bit_position = 0;
|
|
285
|
+
this.current_stream_byte_position += 1;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
this.current_stream_bit_position += writing_bits_at_position;
|
|
289
|
+
}
|
|
290
|
+
remaining_bits_to_write -= writing_bits_at_position;
|
|
291
|
+
if (remaining_bits_to_write > 0 && bits_written < 8) {
|
|
292
|
+
const extra_bits_at_position = Math.min(remaining_bits_to_write, 8 - bits_written);
|
|
293
|
+
let extra_bits;
|
|
294
|
+
switch (this.m_byte_unpack_direction) {
|
|
295
|
+
case _bitstream_byte_fill_direction_lsb_to_msb:
|
|
296
|
+
extra_bits = writing_byte & (0xff << (8 - extra_bits_at_position));
|
|
297
|
+
break;
|
|
298
|
+
case _bitstream_byte_fill_direction_msb_to_lsb:
|
|
299
|
+
extra_bits = (writing_byte << bits_written) & 0xff;
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
if (this.m_byte_pack_direction ===
|
|
303
|
+
_bitstream_byte_fill_direction_lsb_to_msb) {
|
|
304
|
+
extra_bits >>>= 8 - extra_bits_at_position;
|
|
305
|
+
}
|
|
306
|
+
this.ensure_byte_capacity(this.current_stream_byte_position);
|
|
307
|
+
this.m_data[this.current_stream_byte_position] |= extra_bits;
|
|
308
|
+
bits_written += extra_bits_at_position;
|
|
309
|
+
this.current_stream_bit_position = extra_bits_at_position;
|
|
310
|
+
remaining_bits_to_write -= extra_bits_at_position;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
ensure_byte_capacity(byte_index) {
|
|
315
|
+
if (byte_index < this.m_data.length) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const new_size = Math.max(this.m_data.length * 2, byte_index + 1);
|
|
319
|
+
const grown = new Uint8Array(new_size);
|
|
320
|
+
grown.set(this.m_data);
|
|
321
|
+
this.m_data = grown;
|
|
322
|
+
this.m_data_size_bytes = new_size;
|
|
323
|
+
}
|
|
324
|
+
reset(state) {
|
|
325
|
+
this.m_state = state;
|
|
326
|
+
this.current_stream_bit_position = 0;
|
|
327
|
+
this.current_stream_byte_position = 0;
|
|
328
|
+
this.m_data.fill(0);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blam/common/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./security_functions";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security_functions.d.ts","sourceRoot":"","sources":["../../../../src/blam/common/cache/security_functions.ts"],"names":[],"mappings":"AAcA,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAGpE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { sha1 } from "js-sha1";
|
|
2
|
+
const GEN3_SALT = hex_to_bytes("EDD43009666D5C4A5C3657FAB40E022F535AC6C9EE471F01F1A44756B7714F1C36EC");
|
|
3
|
+
function hex_to_bytes(hex) {
|
|
4
|
+
const out = new Uint8Array(hex.length / 2);
|
|
5
|
+
for (let i = 0; i < out.length; i++) {
|
|
6
|
+
out[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
7
|
+
}
|
|
8
|
+
return out;
|
|
9
|
+
}
|
|
10
|
+
export function security_calculate_hash(data) {
|
|
11
|
+
const digest = sha1.arrayBuffer(concat(GEN3_SALT, data));
|
|
12
|
+
return new Uint8Array(digest);
|
|
13
|
+
}
|
|
14
|
+
function concat(a, b) {
|
|
15
|
+
const out = new Uint8Array(a.length + b.length);
|
|
16
|
+
out.set(a, 0);
|
|
17
|
+
out.set(b, a.length);
|
|
18
|
+
return out;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blam/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zlib (RFC 1950) compression matching blf_lib `runtime_data_compress`:
|
|
3
|
+
* `Compress::new_with_window_bits(Compression::new(9), true, 15)` via flate2+zlib.
|
|
4
|
+
*/
|
|
5
|
+
export declare function zlib_compress(data: Uint8Array): Uint8Array;
|
|
6
|
+
/** Reach runtime blob: BE `u32` uncompressed size + zlib payload. */
|
|
7
|
+
export declare function runtime_data_compress(source: Uint8Array, big_endian?: boolean): Uint8Array;
|
|
8
|
+
/** Reach runtime blob: BE `u32` uncompressed size + zlib payload. */
|
|
9
|
+
export declare function runtime_data_decompress(source: Uint8Array, big_endian?: boolean): Uint8Array;
|
|
10
|
+
//# sourceMappingURL=data_compress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data_compress.d.ts","sourceRoot":"","sources":["../../../../src/blam/common/memory/data_compress.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAM1D;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,UAAU,UAAO,GAChB,UAAU,CAMZ;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,UAAU,UAAO,GAChB,UAAU,CAOZ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { deflate, inflate } from "pako";
|
|
2
|
+
import { BlfError } from "../../../error";
|
|
3
|
+
/**
|
|
4
|
+
* Zlib (RFC 1950) compression matching blf_lib `runtime_data_compress`:
|
|
5
|
+
* `Compress::new_with_window_bits(Compression::new(9), true, 15)` via flate2+zlib.
|
|
6
|
+
*/
|
|
7
|
+
export function zlib_compress(data) {
|
|
8
|
+
return deflate(data, {
|
|
9
|
+
level: 9,
|
|
10
|
+
windowBits: 15,
|
|
11
|
+
memLevel: 8,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/** Reach runtime blob: BE `u32` uncompressed size + zlib payload. */
|
|
15
|
+
export function runtime_data_compress(source, big_endian = true) {
|
|
16
|
+
const compressed = zlib_compress(source);
|
|
17
|
+
const out = new Uint8Array(4 + compressed.length);
|
|
18
|
+
new DataView(out.buffer).setUint32(0, source.length, !big_endian);
|
|
19
|
+
out.set(compressed, 4);
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
/** Reach runtime blob: BE `u32` uncompressed size + zlib payload. */
|
|
23
|
+
export function runtime_data_decompress(source, big_endian = true) {
|
|
24
|
+
if (source.length < 4) {
|
|
25
|
+
throw new BlfError(`runtime_data_decompress needs at least 4 bytes, got ${source.length}`);
|
|
26
|
+
}
|
|
27
|
+
return inflate(source.subarray(4));
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blam/common/memory/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./data_compress";
|
package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { c_bitstream_reader, c_bitstream_writer } from "../../../../bitstream";
|
|
2
|
+
import { c_game_engine_custom_variant_au1_settings } from "./c_game_engine_custom_variant_au1_settings";
|
|
3
|
+
import { c_game_engine_base_variant } from "./c_game_engine_default";
|
|
4
|
+
import { s_player_trait_option } from "./c_game_engine_traits";
|
|
5
|
+
import { c_string_table } from "./c_string_table";
|
|
6
|
+
import { c_megalogamengine_map_permissions } from "./megalogamengine/c_megalogamengine_map_permissions";
|
|
7
|
+
import { s_custom_game_engine_definition } from "./megalogamengine/s_custom_game_engine_definition";
|
|
8
|
+
import { s_game_engine_player_rating_parameters } from "./megalogamengine/s_game_engine_player_rating_parameters";
|
|
9
|
+
import { s_user_defined_option } from "./megalogamengine/s_user_defined_option";
|
|
10
|
+
export declare class c_game_engine_custom_variant {
|
|
11
|
+
m_encoding_version: number;
|
|
12
|
+
m_build_number: number;
|
|
13
|
+
m_base_variant: c_game_engine_base_variant;
|
|
14
|
+
m_player_traits: s_player_trait_option[];
|
|
15
|
+
m_user_defined_options: s_user_defined_option[];
|
|
16
|
+
m_script_strings: c_string_table;
|
|
17
|
+
m_base_name_string_index: number;
|
|
18
|
+
m_localized_name: c_string_table;
|
|
19
|
+
m_localized_description: c_string_table;
|
|
20
|
+
m_localized_category: c_string_table;
|
|
21
|
+
m_engine_icon: number;
|
|
22
|
+
m_engine_category: number;
|
|
23
|
+
m_map_permissions: c_megalogamengine_map_permissions;
|
|
24
|
+
m_player_ratings: s_game_engine_player_rating_parameters;
|
|
25
|
+
m_score_to_win_round: number;
|
|
26
|
+
m_fire_teams_enabled: boolean;
|
|
27
|
+
m_symmetric_gametype: boolean;
|
|
28
|
+
m_base_variant_parameters_locked: boolean[];
|
|
29
|
+
m_base_variant_parameters_hidden: boolean[];
|
|
30
|
+
m_user_defined_options_locked: boolean[];
|
|
31
|
+
m_user_defined_options_hidden: boolean[];
|
|
32
|
+
m_game_engine: s_custom_game_engine_definition;
|
|
33
|
+
m_au1_settings?: c_game_engine_custom_variant_au1_settings;
|
|
34
|
+
decode(bitstream: c_bitstream_reader): void;
|
|
35
|
+
encode(bitstream: c_bitstream_writer): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=c_game_engine_custom_variant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c_game_engine_custom_variant.d.ts","sourceRoot":"","sources":["../../../../../src/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iCAAiC,EAAE,MAAM,qDAAqD,CAAC;AACxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACpG,OAAO,EAAE,sCAAsC,EAAE,MAAM,0DAA0D,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,qBAAa,4BAA4B;IACvC,kBAAkB,SAAK;IACvB,cAAc,SAAK;IACnB,cAAc,6BAAoC;IAClD,eAAe,EAAE,qBAAqB,EAAE,CAAM;IAC9C,sBAAsB,EAAE,qBAAqB,EAAE,CAAM;IACrD,gBAAgB,iBAA8C;IAC9D,wBAAwB,SAAK;IAC7B,gBAAgB,iBAAyC;IACzD,uBAAuB,iBAA2C;IAClE,oBAAoB,iBAAyC;IAC7D,aAAa,SAAK;IAClB,iBAAiB,SAAK;IACtB,iBAAiB,oCAA2C;IAC5D,gBAAgB,yCAAgD;IAChE,oBAAoB,SAAK;IACzB,oBAAoB,UAAS;IAC7B,oBAAoB,UAAS;IAC7B,gCAAgC,EAAE,OAAO,EAAE,CAGzC;IACF,gCAAgC,EAAE,OAAO,EAAE,CAGzC;IACF,6BAA6B,EAAE,OAAO,EAAE,CAGtC;IACF,6BAA6B,EAAE,OAAO,EAAE,CAGtC;IACF,aAAa,kCAAyC;IACtD,cAAc,CAAC,EAAE,yCAAyC,CAAC;IAE3D,MAAM,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IA0E3C,MAAM,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;CA8C5C"}
|
package/dist/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { BlfError } from "../../../../error";
|
|
2
|
+
import { c_game_engine_custom_variant_au1_settings } from "./c_game_engine_custom_variant_au1_settings";
|
|
3
|
+
import { c_game_engine_base_variant } from "./c_game_engine_default";
|
|
4
|
+
import { s_player_trait_option } from "./c_game_engine_traits";
|
|
5
|
+
import { c_string_table } from "./c_string_table";
|
|
6
|
+
import { c_megalogamengine_map_permissions } from "./megalogamengine/c_megalogamengine_map_permissions";
|
|
7
|
+
import { s_custom_game_engine_definition } from "./megalogamengine/s_custom_game_engine_definition";
|
|
8
|
+
import { s_game_engine_player_rating_parameters } from "./megalogamengine/s_game_engine_player_rating_parameters";
|
|
9
|
+
import { s_user_defined_option } from "./megalogamengine/s_user_defined_option";
|
|
10
|
+
export class c_game_engine_custom_variant {
|
|
11
|
+
m_encoding_version = 0;
|
|
12
|
+
m_build_number = 0;
|
|
13
|
+
m_base_variant = new c_game_engine_base_variant();
|
|
14
|
+
m_player_traits = [];
|
|
15
|
+
m_user_defined_options = [];
|
|
16
|
+
m_script_strings = new c_string_table(112, 0x4c00, 15, 15, 7);
|
|
17
|
+
m_base_name_string_index = 0;
|
|
18
|
+
m_localized_name = new c_string_table(1, 0x180, 9, 9, 1);
|
|
19
|
+
m_localized_description = new c_string_table(1, 0xc00, 12, 12, 1);
|
|
20
|
+
m_localized_category = new c_string_table(1, 0x180, 9, 9, 1);
|
|
21
|
+
m_engine_icon = 0;
|
|
22
|
+
m_engine_category = 0;
|
|
23
|
+
m_map_permissions = new c_megalogamengine_map_permissions();
|
|
24
|
+
m_player_ratings = new s_game_engine_player_rating_parameters();
|
|
25
|
+
m_score_to_win_round = 0;
|
|
26
|
+
m_fire_teams_enabled = false;
|
|
27
|
+
m_symmetric_gametype = false;
|
|
28
|
+
m_base_variant_parameters_locked = Array.from({ length: 1280 }, () => false);
|
|
29
|
+
m_base_variant_parameters_hidden = Array.from({ length: 1280 }, () => false);
|
|
30
|
+
m_user_defined_options_locked = Array.from({ length: 32 }, () => false);
|
|
31
|
+
m_user_defined_options_hidden = Array.from({ length: 32 }, () => false);
|
|
32
|
+
m_game_engine = new s_custom_game_engine_definition();
|
|
33
|
+
m_au1_settings;
|
|
34
|
+
decode(bitstream) {
|
|
35
|
+
this.m_encoding_version = bitstream.read_signed_integer("encoding-version", 32);
|
|
36
|
+
this.m_build_number = bitstream.read_signed_integer("version", 32);
|
|
37
|
+
this.m_base_variant.decode(bitstream);
|
|
38
|
+
const player_trait_count = bitstream.read_integer("player-trait-count", 5);
|
|
39
|
+
for (let i = 0; i < player_trait_count; i++) {
|
|
40
|
+
const traits = new s_player_trait_option();
|
|
41
|
+
traits.decode(bitstream);
|
|
42
|
+
this.m_player_traits.push(traits);
|
|
43
|
+
}
|
|
44
|
+
const user_defined_option_count = bitstream.read_integer("user-defined-option-count", 5);
|
|
45
|
+
for (let i = 0; i < user_defined_option_count; i++) {
|
|
46
|
+
const option = new s_user_defined_option();
|
|
47
|
+
option.decode(bitstream);
|
|
48
|
+
this.m_user_defined_options.push(option);
|
|
49
|
+
}
|
|
50
|
+
this.m_script_strings.decode(bitstream);
|
|
51
|
+
this.m_base_name_string_index = bitstream.read_integer("base-name-string-index", 7);
|
|
52
|
+
this.m_localized_name.decode(bitstream);
|
|
53
|
+
this.m_localized_description.decode(bitstream);
|
|
54
|
+
this.m_localized_category.decode(bitstream);
|
|
55
|
+
this.m_engine_icon = bitstream.read_integer("engine-icon-index", 5);
|
|
56
|
+
this.m_engine_category = bitstream.read_integer("engine-category", 5);
|
|
57
|
+
this.m_map_permissions.decode(bitstream);
|
|
58
|
+
this.m_player_ratings.decode(bitstream);
|
|
59
|
+
this.m_score_to_win_round = bitstream.read_signed_integer("score-to-win-round", 16);
|
|
60
|
+
this.m_fire_teams_enabled = bitstream.read_bool("fire-teams-enabled");
|
|
61
|
+
this.m_symmetric_gametype = bitstream.read_bool("symmetric-gametype");
|
|
62
|
+
for (let i = 0; i < 1280; i++) {
|
|
63
|
+
this.m_base_variant_parameters_locked[i] = bitstream.read_bool("base-variant-parameters-locked");
|
|
64
|
+
}
|
|
65
|
+
for (let i = 0; i < 1280; i++) {
|
|
66
|
+
this.m_base_variant_parameters_hidden[i] = bitstream.read_bool("base-variant-parameters-hidden");
|
|
67
|
+
}
|
|
68
|
+
for (let i = 0; i < 32; i++) {
|
|
69
|
+
this.m_user_defined_options_locked[i] = bitstream.read_bool("user-defined-options-locked");
|
|
70
|
+
}
|
|
71
|
+
for (let i = 0; i < 32; i++) {
|
|
72
|
+
this.m_user_defined_options_hidden[i] = bitstream.read_bool("user-defined-options-hidden");
|
|
73
|
+
}
|
|
74
|
+
this.m_game_engine.decode(bitstream);
|
|
75
|
+
if (this.m_encoding_version > 106) {
|
|
76
|
+
const au1 = new c_game_engine_custom_variant_au1_settings();
|
|
77
|
+
au1.decode(bitstream);
|
|
78
|
+
this.m_au1_settings = au1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
encode(bitstream) {
|
|
82
|
+
bitstream.write_signed_integer(this.m_encoding_version, 32);
|
|
83
|
+
bitstream.write_signed_integer(this.m_build_number, 32);
|
|
84
|
+
this.m_base_variant.encode(bitstream);
|
|
85
|
+
bitstream.write_integer(this.m_player_traits.length, 5);
|
|
86
|
+
for (const player_trait of this.m_player_traits) {
|
|
87
|
+
player_trait.encode(bitstream);
|
|
88
|
+
}
|
|
89
|
+
bitstream.write_integer(this.m_user_defined_options.length, 5);
|
|
90
|
+
for (const option of this.m_user_defined_options) {
|
|
91
|
+
option.encode(bitstream);
|
|
92
|
+
}
|
|
93
|
+
this.m_script_strings.encode(bitstream);
|
|
94
|
+
bitstream.write_integer(this.m_base_name_string_index, 7);
|
|
95
|
+
this.m_localized_name.encode(bitstream);
|
|
96
|
+
this.m_localized_description.encode(bitstream);
|
|
97
|
+
this.m_localized_category.encode(bitstream);
|
|
98
|
+
bitstream.write_integer(this.m_engine_icon, 5);
|
|
99
|
+
bitstream.write_integer(this.m_engine_category, 5);
|
|
100
|
+
this.m_map_permissions.encode(bitstream);
|
|
101
|
+
this.m_player_ratings.encode(bitstream);
|
|
102
|
+
bitstream.write_signed_integer(this.m_score_to_win_round, 16);
|
|
103
|
+
bitstream.write_bool(this.m_fire_teams_enabled);
|
|
104
|
+
bitstream.write_bool(this.m_symmetric_gametype);
|
|
105
|
+
for (const parameter of this.m_base_variant_parameters_locked) {
|
|
106
|
+
bitstream.write_bool(parameter);
|
|
107
|
+
}
|
|
108
|
+
for (const parameter of this.m_base_variant_parameters_hidden) {
|
|
109
|
+
bitstream.write_bool(parameter);
|
|
110
|
+
}
|
|
111
|
+
for (const parameter of this.m_user_defined_options_locked) {
|
|
112
|
+
bitstream.write_bool(parameter);
|
|
113
|
+
}
|
|
114
|
+
for (const parameter of this.m_user_defined_options_hidden) {
|
|
115
|
+
bitstream.write_bool(parameter);
|
|
116
|
+
}
|
|
117
|
+
this.m_game_engine.encode(bitstream);
|
|
118
|
+
if (this.m_encoding_version > 106) {
|
|
119
|
+
if (!this.m_au1_settings) {
|
|
120
|
+
throw new BlfError("Writing v107 gametypes (and higher) requires AU1 Options to be set.");
|
|
121
|
+
}
|
|
122
|
+
this.m_au1_settings.encode(bitstream);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { c_bitstream_reader, c_bitstream_writer } from "../../../../bitstream";
|
|
2
|
+
export declare class c_game_engine_custom_variant_au1_settings {
|
|
3
|
+
m_flags: number;
|
|
4
|
+
m_precision_bloom: number;
|
|
5
|
+
m_active_camo_energy_curve_min: number;
|
|
6
|
+
m_active_camo_energy_curve_max: number;
|
|
7
|
+
m_armor_lock_damage_drain: number;
|
|
8
|
+
m_armor_lock_damage_drain_limit: number;
|
|
9
|
+
m_magnum_damage: number;
|
|
10
|
+
m_magnum_fire_delay: number;
|
|
11
|
+
decode(bitstream: c_bitstream_reader): void;
|
|
12
|
+
encode(bitstream: c_bitstream_writer): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=c_game_engine_custom_variant_au1_settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c_game_engine_custom_variant_au1_settings.d.ts","sourceRoot":"","sources":["../../../../../src/blam/haloreach/v12065_11_08_24_1738_tu1actual/game/c_game_engine_custom_variant_au1_settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,yCAAyC;IACpD,OAAO,SAAK;IACZ,iBAAiB,SAAK;IACtB,8BAA8B,SAAK;IACnC,8BAA8B,SAAK;IACnC,yBAAyB,SAAK;IAC9B,+BAA+B,SAAK;IACpC,eAAe,SAAK;IACpB,mBAAmB,SAAK;IAExB,MAAM,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IA+C3C,MAAM,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;CAoD5C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class c_game_engine_custom_variant_au1_settings {
|
|
2
|
+
m_flags = 0;
|
|
3
|
+
m_precision_bloom = 0;
|
|
4
|
+
m_active_camo_energy_curve_min = 0;
|
|
5
|
+
m_active_camo_energy_curve_max = 0;
|
|
6
|
+
m_armor_lock_damage_drain = 0;
|
|
7
|
+
m_armor_lock_damage_drain_limit = 0;
|
|
8
|
+
m_magnum_damage = 0;
|
|
9
|
+
m_magnum_fire_delay = 0;
|
|
10
|
+
decode(bitstream) {
|
|
11
|
+
this.m_flags = bitstream.read_integer("flags", 32);
|
|
12
|
+
this.m_precision_bloom = bitstream.read_quantized_real(0, 2, 8, false, true);
|
|
13
|
+
this.m_active_camo_energy_curve_min = bitstream.read_quantized_real(0, 2, 8, false, true);
|
|
14
|
+
this.m_active_camo_energy_curve_max = bitstream.read_quantized_real(0, 2, 8, false, true);
|
|
15
|
+
this.m_armor_lock_damage_drain = bitstream.read_quantized_real(0, 2, 8, false, true);
|
|
16
|
+
this.m_armor_lock_damage_drain_limit = bitstream.read_quantized_real(0, 2, 8, false, true);
|
|
17
|
+
this.m_magnum_damage = bitstream.read_quantized_real(0, 10, 8, false, true);
|
|
18
|
+
this.m_magnum_fire_delay = bitstream.read_quantized_real(0, 10, 8, false, true);
|
|
19
|
+
}
|
|
20
|
+
encode(bitstream) {
|
|
21
|
+
bitstream.write_integer(this.m_flags, 32);
|
|
22
|
+
bitstream.write_quantized_real(this.m_precision_bloom, 0, 2, 8, false, true);
|
|
23
|
+
bitstream.write_quantized_real(this.m_active_camo_energy_curve_min, 0, 2, 8, false, true);
|
|
24
|
+
bitstream.write_quantized_real(this.m_active_camo_energy_curve_max, 0, 2, 8, false, true);
|
|
25
|
+
bitstream.write_quantized_real(this.m_armor_lock_damage_drain, 0, 2, 8, false, true);
|
|
26
|
+
bitstream.write_quantized_real(this.m_armor_lock_damage_drain_limit, 0, 2, 8, false, true);
|
|
27
|
+
bitstream.write_quantized_real(this.m_magnum_damage, 0, 10, 8, false, true);
|
|
28
|
+
bitstream.write_quantized_real(this.m_magnum_fire_delay, 0, 10, 8, false, true);
|
|
29
|
+
}
|
|
30
|
+
}
|