@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
package/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# @Blam-Network/blf
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@Blam-Network/blf)
|
|
4
|
+
|
|
5
|
+
TypeScript library for reading and writing Halo **BLF** (binary layout file) chunks — Reach, Halo 3, and Halo 3: ODST builds.
|
|
6
|
+
|
|
7
|
+
Built on [@craftycodie/cstruct](https://www.npmjs.com/package/@craftycodie/cstruct) for packed struct layouts and a Halo-style **bitstream** for custom chunk bodies.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- Chunk discovery with `search_for_chunk` and `find_chunk`
|
|
12
|
+
- Per-game **version bundles** (`haloreach/*`, `halo3/*`, `halo3odst/*`) with chunk classes and blam types for a specific exe build
|
|
13
|
+
- Struct-backed chunks via `CStructBLFChunk` and `@blf.chunk` decorators (compiled away in published `dist/`)
|
|
14
|
+
- Bitstream reader/writer exported from the package root
|
|
15
|
+
- Little- and big-endian BLF headers
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @Blam-Network/blf @craftycodie/cstruct
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Consumers import from published **`dist/`** exports only. Decorators are lowered at build time — **you do not need `experimentalDecorators`** to use exported chunk classes.
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
### Find and read chunks
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { readFileSync } from "node:fs";
|
|
31
|
+
import { search_for_chunk } from "@Blam-Network/blf";
|
|
32
|
+
import {
|
|
33
|
+
s_blf_chunk_content_header,
|
|
34
|
+
s_blf_chunk_game_variant,
|
|
35
|
+
} from "@Blam-Network/blf/haloreach/v12065_11_08_24_1738_tu1actual";
|
|
36
|
+
|
|
37
|
+
const file = new Uint8Array(readFileSync("map.blf"));
|
|
38
|
+
|
|
39
|
+
const chdr = new s_blf_chunk_content_header();
|
|
40
|
+
search_for_chunk(file, chdr, "big");
|
|
41
|
+
|
|
42
|
+
const mpvr = new s_blf_chunk_game_variant();
|
|
43
|
+
search_for_chunk(file, mpvr, "big");
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Bitstream (root export only)
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import { bitstream } from "@Blam-Network/blf";
|
|
50
|
+
|
|
51
|
+
const reader = new bitstream.BitstreamReader(buffer, "little");
|
|
52
|
+
const mode = reader.read_enum("game-mode", 4, e_game_mode);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Game build subpaths
|
|
56
|
+
|
|
57
|
+
Each implementation build is a single module:
|
|
58
|
+
|
|
59
|
+
| Import | Build |
|
|
60
|
+
|--------|--------|
|
|
61
|
+
| `@Blam-Network/blf/haloreach/v12065_11_08_24_1738_tu1actual` | Reach TU1 |
|
|
62
|
+
| `@Blam-Network/blf/halo3/v12070_08_09_05_2031_halo3_ship` | Halo 3 ship |
|
|
63
|
+
| `@Blam-Network/blf/halo3odst/v13895_09_04_27_2201_atlas_release` | ODST Atlas |
|
|
64
|
+
|
|
65
|
+
Add a build by creating `src/versions/<game>/<build_id>.ts` and re-exporting its chunks — wildcard `exports` in `package.json` pick it up automatically.
|
|
66
|
+
|
|
67
|
+
## Development
|
|
68
|
+
|
|
69
|
+
From `blf-ts/`:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install
|
|
73
|
+
npm run validate # lint, test, typecheck
|
|
74
|
+
npm run build
|
|
75
|
+
npm run release # bump version, tag, push (CI publishes on tag)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Chunk authoring (forking the library) uses Stage 3 decorators (`@blf.chunk`, `@c.struct`) with the same SWC/Vitest setup as the repo. Decorator order: `@blf.chunk` on the class, `@c.struct` below, `@c.field` on properties.
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
MIT
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** TypeScript numeric enum object passed to {@link c_bitstream_reader.read_enum}. */
|
|
2
|
+
export type NumericEnum = Record<string, number | string>;
|
|
3
|
+
export type EnumNumber<E extends NumericEnum> = Extract<E[keyof E], number>;
|
|
4
|
+
export declare function isNumericEnumValue(enumObj: NumericEnum, value: number): boolean;
|
|
5
|
+
export declare function assertFitsInBits(name: string, value: number, size_in_bits: number): void;
|
|
6
|
+
//# sourceMappingURL=enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/bitstream/enum.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAE5E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAOT;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,IAAI,CAON"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BitstreamError } from "./errors";
|
|
2
|
+
export function isNumericEnumValue(enumObj, value) {
|
|
3
|
+
for (const member of Object.values(enumObj)) {
|
|
4
|
+
if (typeof member === "number" && member === value) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
export function assertFitsInBits(name, value, size_in_bits) {
|
|
11
|
+
const max = (1 << size_in_bits) - 1;
|
|
12
|
+
if (value < 0 || value > max) {
|
|
13
|
+
throw new BitstreamError(`Value ${value} for ${name} does not fit in ${size_in_bits} bits (max ${max})`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare enum e_bitstream_byte_order {
|
|
2
|
+
_bitstream_byte_order_little_endian = 0,
|
|
3
|
+
_bitstream_byte_order_big_endian = 1
|
|
4
|
+
}
|
|
5
|
+
export declare namespace e_bitstream_byte_order {
|
|
6
|
+
function swap(order: e_bitstream_byte_order): e_bitstream_byte_order;
|
|
7
|
+
}
|
|
8
|
+
export declare enum e_bitstream_byte_fill_direction {
|
|
9
|
+
_bitstream_byte_fill_direction_msb_to_lsb = 0,
|
|
10
|
+
_bitstream_byte_fill_direction_lsb_to_msb = 1
|
|
11
|
+
}
|
|
12
|
+
export declare enum e_bitstream_state {
|
|
13
|
+
_bitstream_state_initial = 0,
|
|
14
|
+
_bitstream_state_writing = 1,
|
|
15
|
+
_bitstream_state_write_finished = 2,
|
|
16
|
+
_bitstream_state_reading = 3,
|
|
17
|
+
_bitstream_state_read_only_for_consistency = 4,
|
|
18
|
+
_bitstream_state_read_finished = 5,
|
|
19
|
+
k_bitstream_state_count = 6
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=enums.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/bitstream/enums.ts"],"names":[],"mappings":"AAAA,oBAAY,sBAAsB;IAChC,mCAAmC,IAAI;IACvC,gCAAgC,IAAI;CACrC;AAED,yBAAiB,sBAAsB,CAAC;IACtC,SAAgB,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,sBAAsB,CAO1E;CACF;AAED,oBAAY,+BAA+B;IACzC,yCAAyC,IAAI;IAC7C,yCAAyC,IAAI;CAC9C;AAED,oBAAY,iBAAiB;IAC3B,wBAAwB,IAAI;IAC5B,wBAAwB,IAAI;IAC5B,+BAA+B,IAAI;IACnC,wBAAwB,IAAI;IAC5B,0CAA0C,IAAI;IAC9C,8BAA8B,IAAI;IAElC,uBAAuB,IAAI;CAC5B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export var e_bitstream_byte_order;
|
|
2
|
+
(function (e_bitstream_byte_order) {
|
|
3
|
+
e_bitstream_byte_order[e_bitstream_byte_order["_bitstream_byte_order_little_endian"] = 0] = "_bitstream_byte_order_little_endian";
|
|
4
|
+
e_bitstream_byte_order[e_bitstream_byte_order["_bitstream_byte_order_big_endian"] = 1] = "_bitstream_byte_order_big_endian";
|
|
5
|
+
})(e_bitstream_byte_order || (e_bitstream_byte_order = {}));
|
|
6
|
+
(function (e_bitstream_byte_order) {
|
|
7
|
+
function swap(order) {
|
|
8
|
+
switch (order) {
|
|
9
|
+
case e_bitstream_byte_order._bitstream_byte_order_little_endian:
|
|
10
|
+
return e_bitstream_byte_order._bitstream_byte_order_big_endian;
|
|
11
|
+
case e_bitstream_byte_order._bitstream_byte_order_big_endian:
|
|
12
|
+
return e_bitstream_byte_order._bitstream_byte_order_little_endian;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
e_bitstream_byte_order.swap = swap;
|
|
16
|
+
})(e_bitstream_byte_order || (e_bitstream_byte_order = {}));
|
|
17
|
+
export var e_bitstream_byte_fill_direction;
|
|
18
|
+
(function (e_bitstream_byte_fill_direction) {
|
|
19
|
+
e_bitstream_byte_fill_direction[e_bitstream_byte_fill_direction["_bitstream_byte_fill_direction_msb_to_lsb"] = 0] = "_bitstream_byte_fill_direction_msb_to_lsb";
|
|
20
|
+
e_bitstream_byte_fill_direction[e_bitstream_byte_fill_direction["_bitstream_byte_fill_direction_lsb_to_msb"] = 1] = "_bitstream_byte_fill_direction_lsb_to_msb";
|
|
21
|
+
})(e_bitstream_byte_fill_direction || (e_bitstream_byte_fill_direction = {}));
|
|
22
|
+
export var e_bitstream_state;
|
|
23
|
+
(function (e_bitstream_state) {
|
|
24
|
+
e_bitstream_state[e_bitstream_state["_bitstream_state_initial"] = 0] = "_bitstream_state_initial";
|
|
25
|
+
e_bitstream_state[e_bitstream_state["_bitstream_state_writing"] = 1] = "_bitstream_state_writing";
|
|
26
|
+
e_bitstream_state[e_bitstream_state["_bitstream_state_write_finished"] = 2] = "_bitstream_state_write_finished";
|
|
27
|
+
e_bitstream_state[e_bitstream_state["_bitstream_state_reading"] = 3] = "_bitstream_state_reading";
|
|
28
|
+
e_bitstream_state[e_bitstream_state["_bitstream_state_read_only_for_consistency"] = 4] = "_bitstream_state_read_only_for_consistency";
|
|
29
|
+
e_bitstream_state[e_bitstream_state["_bitstream_state_read_finished"] = 5] = "_bitstream_state_read_finished";
|
|
30
|
+
e_bitstream_state[e_bitstream_state["k_bitstream_state_count"] = 6] = "k_bitstream_state_count";
|
|
31
|
+
})(e_bitstream_state || (e_bitstream_state = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/bitstream/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,SAAS,CACvB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAInB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class BitstreamError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "BitstreamError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function assert_ok(condition, message) {
|
|
8
|
+
if (!condition) {
|
|
9
|
+
throw new BitstreamError(message ?? "assert_ok failed");
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { EnumNumber, NumericEnum } from "./enum";
|
|
2
|
+
export { e_bitstream_byte_fill_direction, e_bitstream_byte_order, e_bitstream_state, } from "./enums";
|
|
3
|
+
export { assert_ok, BitstreamError } from "./errors";
|
|
4
|
+
export * from "./math";
|
|
5
|
+
export { c_bitstream_reader } from "./reader";
|
|
6
|
+
export { c_bitstream_writer } from "./writer";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bitstream/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACrD,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { e_bitstream_byte_fill_direction, e_bitstream_byte_order, e_bitstream_state, } from "./enums";
|
|
2
|
+
export { assert_ok, BitstreamError } from "./errors";
|
|
3
|
+
export * from "./math";
|
|
4
|
+
export { c_bitstream_reader } from "./reader";
|
|
5
|
+
export { c_bitstream_writer } from "./writer";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type real_vector3d = {
|
|
2
|
+
i: number;
|
|
3
|
+
j: number;
|
|
4
|
+
k: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const k_real_epsilon = 0.000001;
|
|
7
|
+
export declare const k_pi: number;
|
|
8
|
+
export declare const global_forward3d: real_vector3d;
|
|
9
|
+
export declare const global_left3d: real_vector3d;
|
|
10
|
+
export declare const global_up3d: real_vector3d;
|
|
11
|
+
export declare function real_vector3d_default(): real_vector3d;
|
|
12
|
+
export declare function dot_product3d(a: real_vector3d, b: real_vector3d): number;
|
|
13
|
+
export declare function cross_product3d(a: real_vector3d, b: real_vector3d, out: real_vector3d): void;
|
|
14
|
+
export declare function magnitude3d(v: real_vector3d): number;
|
|
15
|
+
/** Matches blf_lib `quantize_real` for Reach bitstreams. */
|
|
16
|
+
export declare function quantize_real(value: number, min_value: number, max_value: number, quantized_value_count: number, exact_midpoint: boolean, exact_endpoints: boolean): number;
|
|
17
|
+
/** Matches blf_lib `dequantize_real` for Reach bitstreams. */
|
|
18
|
+
export declare function dequantize_real(quantized: number, min_value: number, max_value: number, quantized_value_count: number, exact_midpoints: boolean, exact_endpoints: boolean): number;
|
|
19
|
+
export declare function normalize3d(v: real_vector3d): number;
|
|
20
|
+
export declare function arctangent(y: number, x: number): number;
|
|
21
|
+
export declare function assert_valid_real_normal3d(v: real_vector3d): boolean;
|
|
22
|
+
export declare function valid_real_vector3d_axes2(a: real_vector3d, b: real_vector3d): boolean;
|
|
23
|
+
export declare function valid_real_vector3d_axes3(a: real_vector3d, b: real_vector3d, c: real_vector3d): boolean;
|
|
24
|
+
export declare function rotate_vector_about_axis(vector: real_vector3d, axis: real_vector3d, sine: number, cosine: number): void;
|
|
25
|
+
export declare function axes_compute_reference_internal(up: real_vector3d, forward_reference: real_vector3d, left_reference: real_vector3d): void;
|
|
26
|
+
export declare function axes_to_angle_internal(forward: real_vector3d, up: real_vector3d): number;
|
|
27
|
+
export declare function angle_to_axes_internal(up: real_vector3d, angle: number, forward: real_vector3d): void;
|
|
28
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/bitstream/math.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,cAAc,WAAO,CAAC;AACnC,eAAO,MAAM,IAAI,QAAU,CAAC;AAE5B,eAAO,MAAM,gBAAgB,EAAE,aAAoC,CAAC;AACpE,eAAO,MAAM,aAAa,EAAE,aAAoC,CAAC;AACjE,eAAO,MAAM,WAAW,EAAE,aAAoC,CAAC;AAE/D,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAExE;AAED,wBAAgB,eAAe,CAC7B,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,EAChB,GAAG,EAAE,aAAa,GACjB,IAAI,CAIN;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAEpD;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,MAAM,EAC7B,cAAc,EAAE,OAAO,EACvB,eAAe,EAAE,OAAO,GACvB,MAAM,CA4BR;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,MAAM,EAC7B,eAAe,EAAE,OAAO,EACxB,eAAe,EAAE,OAAO,GACvB,MAAM,CAqBR;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAQpD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAGpE;AAED,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,GACf,OAAO,CAET;AAED,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,GACf,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,IAAI,CAYN;AAED,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,aAAa,EACjB,iBAAiB,EAAE,aAAa,EAChC,cAAc,EAAE,aAAa,GAC5B,IAAI,CAwBN;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,aAAa,GAChB,MAAM,CAQR;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GACrB,IAAI,CAwBN"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { assert_ok } from "./errors";
|
|
2
|
+
export const k_real_epsilon = 1e-6;
|
|
3
|
+
export const k_pi = Math.PI;
|
|
4
|
+
export const global_forward3d = { i: 0, j: 0, k: 1 };
|
|
5
|
+
export const global_left3d = { i: 1, j: 0, k: 0 };
|
|
6
|
+
export const global_up3d = { i: 0, j: 1, k: 0 };
|
|
7
|
+
export function real_vector3d_default() {
|
|
8
|
+
return { i: 0, j: 0, k: 0 };
|
|
9
|
+
}
|
|
10
|
+
export function dot_product3d(a, b) {
|
|
11
|
+
return a.i * b.i + a.j * b.j + a.k * b.k;
|
|
12
|
+
}
|
|
13
|
+
export function cross_product3d(a, b, out) {
|
|
14
|
+
out.i = a.j * b.k - a.k * b.j;
|
|
15
|
+
out.j = a.k * b.i - a.i * b.k;
|
|
16
|
+
out.k = a.i * b.j - a.j * b.i;
|
|
17
|
+
}
|
|
18
|
+
export function magnitude3d(v) {
|
|
19
|
+
return Math.sqrt(dot_product3d(v, v));
|
|
20
|
+
}
|
|
21
|
+
/** Matches blf_lib `quantize_real` for Reach bitstreams. */
|
|
22
|
+
export function quantize_real(value, min_value, max_value, quantized_value_count, exact_midpoint, exact_endpoints) {
|
|
23
|
+
let adjusted_count = quantized_value_count;
|
|
24
|
+
if (exact_midpoint) {
|
|
25
|
+
adjusted_count -= 1;
|
|
26
|
+
}
|
|
27
|
+
if (exact_endpoints) {
|
|
28
|
+
if (value === min_value) {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
if (value === max_value) {
|
|
32
|
+
return adjusted_count - 1;
|
|
33
|
+
}
|
|
34
|
+
const divisor = adjusted_count - 2;
|
|
35
|
+
const step = (max_value - min_value) / divisor;
|
|
36
|
+
let temp = Math.floor((value - min_value) / step) + 1;
|
|
37
|
+
if (temp <= 1) {
|
|
38
|
+
temp = 1;
|
|
39
|
+
}
|
|
40
|
+
return temp > adjusted_count - 2 ? adjusted_count - 2 : temp;
|
|
41
|
+
}
|
|
42
|
+
const step = (max_value - min_value) / adjusted_count;
|
|
43
|
+
let result = Math.floor((value - min_value) / step);
|
|
44
|
+
if (result > adjusted_count - 1) {
|
|
45
|
+
result = adjusted_count - 1;
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
/** Matches blf_lib `dequantize_real` for Reach bitstreams. */
|
|
50
|
+
export function dequantize_real(quantized, min_value, max_value, quantized_value_count, exact_midpoints, exact_endpoints) {
|
|
51
|
+
let value_count = quantized_value_count;
|
|
52
|
+
if (exact_midpoints) {
|
|
53
|
+
value_count -= 1;
|
|
54
|
+
}
|
|
55
|
+
if (exact_endpoints) {
|
|
56
|
+
if (quantized === 0) {
|
|
57
|
+
return min_value;
|
|
58
|
+
}
|
|
59
|
+
if (quantized === value_count - 1) {
|
|
60
|
+
return max_value;
|
|
61
|
+
}
|
|
62
|
+
const denom = value_count - 2;
|
|
63
|
+
const step = (max_value - min_value) / denom;
|
|
64
|
+
const fquant = quantized - 1;
|
|
65
|
+
return min_value + step * (fquant + 0.5);
|
|
66
|
+
}
|
|
67
|
+
const step = (max_value - min_value) / value_count;
|
|
68
|
+
return min_value + step * (quantized + 0.5);
|
|
69
|
+
}
|
|
70
|
+
export function normalize3d(v) {
|
|
71
|
+
const mag = magnitude3d(v);
|
|
72
|
+
if (mag > k_real_epsilon) {
|
|
73
|
+
v.i /= mag;
|
|
74
|
+
v.j /= mag;
|
|
75
|
+
v.k /= mag;
|
|
76
|
+
}
|
|
77
|
+
return mag;
|
|
78
|
+
}
|
|
79
|
+
export function arctangent(y, x) {
|
|
80
|
+
return Math.atan2(y, x);
|
|
81
|
+
}
|
|
82
|
+
export function assert_valid_real_normal3d(v) {
|
|
83
|
+
const mag = magnitude3d(v);
|
|
84
|
+
return Math.abs(mag - 1) <= k_real_epsilon;
|
|
85
|
+
}
|
|
86
|
+
export function valid_real_vector3d_axes2(a, b) {
|
|
87
|
+
return Math.abs(dot_product3d(a, b)) <= k_real_epsilon;
|
|
88
|
+
}
|
|
89
|
+
export function valid_real_vector3d_axes3(a, b, c) {
|
|
90
|
+
return (valid_real_vector3d_axes2(a, b) &&
|
|
91
|
+
valid_real_vector3d_axes2(a, c) &&
|
|
92
|
+
valid_real_vector3d_axes2(b, c));
|
|
93
|
+
}
|
|
94
|
+
export function rotate_vector_about_axis(vector, axis, sine, cosine) {
|
|
95
|
+
const cross = { i: 0, j: 0, k: 0 };
|
|
96
|
+
cross_product3d(axis, vector, cross);
|
|
97
|
+
const dot = dot_product3d(axis, vector);
|
|
98
|
+
const one_minus_cosine = 1 - cosine;
|
|
99
|
+
vector.i =
|
|
100
|
+
vector.i * cosine + cross.i * sine + axis.i * dot * one_minus_cosine;
|
|
101
|
+
vector.j =
|
|
102
|
+
vector.j * cosine + cross.j * sine + axis.j * dot * one_minus_cosine;
|
|
103
|
+
vector.k =
|
|
104
|
+
vector.k * cosine + cross.k * sine + axis.k * dot * one_minus_cosine;
|
|
105
|
+
}
|
|
106
|
+
export function axes_compute_reference_internal(up, forward_reference, left_reference) {
|
|
107
|
+
assert_ok(assert_valid_real_normal3d(up));
|
|
108
|
+
const v10 = Math.abs(dot_product3d(up, global_forward3d));
|
|
109
|
+
const v9 = Math.abs(dot_product3d(up, global_left3d));
|
|
110
|
+
if (v10 >= v9) {
|
|
111
|
+
cross_product3d(global_left3d, up, forward_reference);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
cross_product3d(up, global_forward3d, forward_reference);
|
|
115
|
+
}
|
|
116
|
+
const forward_magnitude = normalize3d(forward_reference);
|
|
117
|
+
assert_ok(forward_magnitude > k_real_epsilon, "forward_magnitude>k_real_epsilon");
|
|
118
|
+
cross_product3d(up, forward_reference, left_reference);
|
|
119
|
+
const left_magnitude = normalize3d(left_reference);
|
|
120
|
+
assert_ok(left_magnitude > k_real_epsilon, "left_magnitude>k_real_epsilon");
|
|
121
|
+
assert_ok(valid_real_vector3d_axes3(forward_reference, left_reference, up));
|
|
122
|
+
}
|
|
123
|
+
export function axes_to_angle_internal(forward, up) {
|
|
124
|
+
const forward_reference = real_vector3d_default();
|
|
125
|
+
const left_reference = real_vector3d_default();
|
|
126
|
+
axes_compute_reference_internal(up, forward_reference, left_reference);
|
|
127
|
+
return arctangent(dot_product3d(left_reference, forward), dot_product3d(forward_reference, forward));
|
|
128
|
+
}
|
|
129
|
+
export function angle_to_axes_internal(up, angle, forward) {
|
|
130
|
+
const forward_reference = real_vector3d_default();
|
|
131
|
+
const left_reference = real_vector3d_default();
|
|
132
|
+
axes_compute_reference_internal(up, forward_reference, left_reference);
|
|
133
|
+
forward.i = forward_reference.i;
|
|
134
|
+
forward.j = forward_reference.j;
|
|
135
|
+
forward.k = forward_reference.k;
|
|
136
|
+
let u;
|
|
137
|
+
let v;
|
|
138
|
+
if (angle === k_pi || angle === -k_pi) {
|
|
139
|
+
u = 0;
|
|
140
|
+
v = -1;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
u = Math.sin(angle);
|
|
144
|
+
v = Math.cos(angle);
|
|
145
|
+
}
|
|
146
|
+
rotate_vector_about_axis(forward, up, u, v);
|
|
147
|
+
normalize3d(forward);
|
|
148
|
+
assert_ok(valid_real_vector3d_axes2(forward, up));
|
|
149
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type EnumNumber, type NumericEnum } from "./enum";
|
|
2
|
+
import { e_bitstream_byte_order } from "./enums";
|
|
3
|
+
import { type real_vector3d } from "./math";
|
|
4
|
+
export declare class c_bitstream_reader {
|
|
5
|
+
private m_data;
|
|
6
|
+
private m_data_size_bytes;
|
|
7
|
+
private m_state;
|
|
8
|
+
private m_byte_order;
|
|
9
|
+
private m_packed_byte_order;
|
|
10
|
+
private m_byte_pack_direction;
|
|
11
|
+
private m_byte_unpack_direction;
|
|
12
|
+
private current_stream_bit_position;
|
|
13
|
+
private current_stream_byte_position;
|
|
14
|
+
static new(data: Uint8Array, byte_order: e_bitstream_byte_order): c_bitstream_reader;
|
|
15
|
+
/** Use this when dealing with bitstream data from the Halo 3 Beta or prior. */
|
|
16
|
+
static new_with_legacy_settings(data: Uint8Array, byte_order: e_bitstream_byte_order): c_bitstream_reader;
|
|
17
|
+
static new_from_instance(data: Uint8Array, instance: c_bitstream_reader): c_bitstream_reader;
|
|
18
|
+
private constructor();
|
|
19
|
+
get_byte_order(): e_bitstream_byte_order;
|
|
20
|
+
seek_relative(bits: number): void;
|
|
21
|
+
seek(byte: number): void;
|
|
22
|
+
seek_bit(byte: number, bit: number): void;
|
|
23
|
+
get_current_offset(): [number, number];
|
|
24
|
+
read_raw_data(size_in_bits: number): Uint8Array;
|
|
25
|
+
read_bool(_name: string): boolean;
|
|
26
|
+
read_bits_internal(output: Uint8Array, size_in_bits: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Read a numeric enum. Pass the enum object; no per-enum parser required.
|
|
29
|
+
*
|
|
30
|
+
* - Default: value must be a declared enum member.
|
|
31
|
+
* - `{ within_bits: true }`: any value that fits in `size_in_bits` (reserved slots).
|
|
32
|
+
*/
|
|
33
|
+
read_enum<E extends NumericEnum>(name: string, size_in_bits: number, enumObj: E, options?: {
|
|
34
|
+
within_bits?: boolean;
|
|
35
|
+
}): EnumNumber<E>;
|
|
36
|
+
read_enum<T extends number>(name: string, size_in_bits: number, from_u32: (value: number) => T | undefined): T;
|
|
37
|
+
read_integer(_name: string, size_in_bits: number): number;
|
|
38
|
+
read_index(name: string, max: number, size_in_bits: number): number;
|
|
39
|
+
read_quantized_real(min_value: number, max_value: number, size_in_bits: number, exact_midpoint: boolean, exact_endpoints: boolean): number;
|
|
40
|
+
read_float(_name: string, size_in_bits: number): number;
|
|
41
|
+
read_i16(size_in_bits: number): number;
|
|
42
|
+
read_signed_integer(_name: string, size_in_bits: number): number;
|
|
43
|
+
read_qword(size_in_bits: number): bigint;
|
|
44
|
+
read_identifier(_identifier: string): void;
|
|
45
|
+
read_point3d(point: {
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
z: number;
|
|
49
|
+
}, axis_encoding_size_in_bits: number): void;
|
|
50
|
+
read_point3d_efficient(point: {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
z: number;
|
|
54
|
+
}, axis_encoding_size_in_bits: {
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
z: number;
|
|
58
|
+
}): void;
|
|
59
|
+
read_qword_internal(_size_in_bits: number): bigint;
|
|
60
|
+
read_secure_address(_address: unknown): void;
|
|
61
|
+
angle_to_axes_internal(up: real_vector3d, angle: number, forward: real_vector3d): void;
|
|
62
|
+
read_string(_string: {
|
|
63
|
+
value: string;
|
|
64
|
+
}, _max_string_size: number): void;
|
|
65
|
+
read_string_utf8(max_string_size: number): string;
|
|
66
|
+
read_string_extended_ascii(max_string_size: number): string;
|
|
67
|
+
read_string_wchar(max_string_size: number): string;
|
|
68
|
+
read_unit_vector(_unit_vector: unknown, _size_in_bits: number): void;
|
|
69
|
+
read_vector(_vector: unknown, _min_value: number, _max_value: number, _step_count_size_in_bits: number, _size_in_bits: number): void;
|
|
70
|
+
begin_reading(): void;
|
|
71
|
+
reading(): boolean;
|
|
72
|
+
finish_reading(): void;
|
|
73
|
+
get_data(): readonly [Uint8Array, number];
|
|
74
|
+
private reset;
|
|
75
|
+
private set_data;
|
|
76
|
+
private skip;
|
|
77
|
+
private would_overflow;
|
|
78
|
+
static axes_compute_reference_internal(up: real_vector3d, forward_reference: real_vector3d, left_reference: real_vector3d): void;
|
|
79
|
+
private static axes_to_angle_internal;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/bitstream/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,WAAW,EACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAEL,sBAAsB,EAEvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,QAAQ,CAAC;AAOhB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,mBAAmB,CAAyB;IACpD,OAAO,CAAC,qBAAqB,CAAkC;IAC/D,OAAO,CAAC,uBAAuB,CAAkC;IAEjE,OAAO,CAAC,2BAA2B,CAAS;IAC5C,OAAO,CAAC,4BAA4B,CAAS;IAE7C,MAAM,CAAC,GAAG,CACR,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,sBAAsB,GACjC,kBAAkB;IAUrB,+EAA+E;IAC/E,MAAM,CAAC,wBAAwB,CAC7B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,sBAAsB,GACjC,kBAAkB;IAQrB,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB;IAQrB,OAAO;IAoBP,cAAc,IAAI,sBAAsB;IAIxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAUjC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAOzC,kBAAkB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAOtC,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;IAM/C,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjC,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAuJlE;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,WAAW,EAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAClC,UAAU,CAAC,CAAC,CAAC;IAChB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,GACzC,CAAC;IA8BJ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAuBzD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IASnE,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,EACvB,eAAe,EAAE,OAAO,GACvB,MAAM;IAYT,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAevD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAetC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAUhE,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAexC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI1C,YAAY,CACV,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1C,0BAA0B,EAAE,MAAM,GACjC,IAAI;IAUP,sBAAsB,CACpB,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1C,0BAA0B,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9D,IAAI;IAgBP,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAIlD,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI5C,sBAAsB,CACpB,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GACrB,IAAI;IAIP,WAAW,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAIvE,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAkBjD,0BAA0B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAkB3D,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAkBlD,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAIpE,WAAW,CACT,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,wBAAwB,EAAE,MAAM,EAChC,aAAa,EAAE,MAAM,GACpB,IAAI;IAIP,aAAa,IAAI,IAAI;IAIrB,OAAO,IAAI,OAAO;IAQlB,cAAc,IAAI,IAAI;IAItB,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAIzC,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,cAAc;IAItB,MAAM,CAAC,+BAA+B,CACpC,EAAE,EAAE,aAAa,EACjB,iBAAiB,EAAE,aAAa,EAChC,cAAc,EAAE,aAAa,GAC5B,IAAI;IAIP,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAMtC"}
|