├── native └── src │ ├── ReachVariantTool │ ├── Resources │ │ ├── .gitignore │ │ ├── icon_128px.png │ │ ├── gametype_icons │ │ │ ├── -1.png │ │ │ ├── 0.png │ │ │ ├── 1.png │ │ │ ├── 10.png │ │ │ ├── 11.png │ │ │ ├── 12.png │ │ │ ├── 13.png │ │ │ ├── 14.png │ │ │ ├── 15.png │ │ │ ├── 16.png │ │ │ ├── 17.png │ │ │ ├── 18.png │ │ │ ├── 19.png │ │ │ ├── 2.png │ │ │ ├── 20.png │ │ │ ├── 21.png │ │ │ ├── 22.png │ │ │ ├── 23.png │ │ │ ├── 24.png │ │ │ ├── 25.png │ │ │ ├── 26.png │ │ │ ├── 27.png │ │ │ ├── 28.png │ │ │ ├── 29.png │ │ │ ├── 3.png │ │ │ ├── 30.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ ├── 8.png │ │ │ ├── 9.png │ │ │ └── 25_MCC.png │ │ ├── compiler_log │ │ │ ├── error.png │ │ │ ├── fatal.png │ │ │ ├── success.png │ │ │ ├── warning.png │ │ │ └── compiler log icons.xcf │ │ ├── hud_widget_preview │ │ │ ├── 0.png │ │ │ ├── 1.png │ │ │ ├── 10.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ ├── 8.png │ │ │ ├── 9.png │ │ │ └── base_hud.png │ │ ├── gametype_files │ │ │ ├── blank_ff.bin │ │ │ ├── blank_mp.bin │ │ │ └── blank_forge.bin │ │ └── localized_string_library │ │ │ └── LICENSE.md │ ├── help │ │ ├── resources │ │ │ ├── head.js │ │ │ ├── noscript.css │ │ │ └── header-links.js │ │ └── editor │ │ │ ├── main_window │ │ │ ├── tu1.png │ │ │ ├── forge.png │ │ │ ├── metadata.png │ │ │ ├── traits.png │ │ │ ├── options-map.png │ │ │ ├── options-team.png │ │ │ ├── options-general.png │ │ │ ├── options-loadout.png │ │ │ ├── options-megalo.png │ │ │ ├── options-respawn.png │ │ │ ├── options-social.png │ │ │ ├── option-visibility.png │ │ │ ├── options-team-specific.png │ │ │ └── options-loadout-specific.png │ │ │ ├── main_window_ff │ │ │ ├── lives.png │ │ │ ├── traits.png │ │ │ ├── bonus-wave.png │ │ │ ├── metadata.png │ │ │ ├── round-wave.png │ │ │ ├── scenario.png │ │ │ ├── options-team.png │ │ │ ├── round-skulls.png │ │ │ ├── traits-wave.png │ │ │ ├── options-general.png │ │ │ ├── options-loadout.png │ │ │ ├── options-respawn.png │ │ │ ├── options-social.png │ │ │ ├── options-team-specific.png │ │ │ └── options-loadout-specific.png │ │ │ └── script_window │ │ │ ├── forge-labels.png │ │ │ ├── gametype-code.png │ │ │ ├── meta-strings.png │ │ │ ├── script-stats.png │ │ │ ├── script-traits.png │ │ │ ├── string-editor.png │ │ │ ├── string-table.png │ │ │ ├── map-permissions.png │ │ │ ├── script-options.png │ │ │ ├── script-widgets.png │ │ │ ├── string-library.png │ │ │ ├── unresolved-strings.png │ │ │ ├── required-object-types.png │ │ │ ├── player-rating-parameters.png │ │ │ ├── string-editor-round-card-preview.png │ │ │ └── string-editor-round-card-preview-unicode.png │ ├── docs │ │ ├── working - help docs │ │ │ ├── resources │ │ │ │ ├── head.js │ │ │ │ ├── noscript.css │ │ │ │ └── header-links.js │ │ │ ├── .gitignore │ │ │ ├── editor │ │ │ │ ├── main_window_ff │ │ │ │ │ ├── traits.xml │ │ │ │ │ ├── options-team.xml │ │ │ │ │ ├── options-social.xml │ │ │ │ │ ├── options-loadout.xml │ │ │ │ │ ├── options-team-specific.xml │ │ │ │ │ ├── options-loadout-specific.xml │ │ │ │ │ ├── lives.png │ │ │ │ │ ├── traits.png │ │ │ │ │ ├── bonus-wave.png │ │ │ │ │ ├── metadata.png │ │ │ │ │ ├── round-wave.png │ │ │ │ │ ├── scenario.png │ │ │ │ │ ├── options-team.png │ │ │ │ │ ├── round-skulls.png │ │ │ │ │ ├── traits-wave.png │ │ │ │ │ ├── options-general.png │ │ │ │ │ ├── options-loadout.png │ │ │ │ │ ├── options-respawn.png │ │ │ │ │ ├── options-social.png │ │ │ │ │ ├── options-team-specific.png │ │ │ │ │ ├── options-loadout-specific.png │ │ │ │ │ ├── custom-skull.xml │ │ │ │ │ ├── bonus-wave.xml │ │ │ │ │ └── lives.xml │ │ │ │ ├── main_window │ │ │ │ │ ├── tu1.png │ │ │ │ │ ├── forge.png │ │ │ │ │ ├── metadata.png │ │ │ │ │ ├── traits.png │ │ │ │ │ ├── options-map.png │ │ │ │ │ ├── options-team.png │ │ │ │ │ ├── options-general.png │ │ │ │ │ ├── options-loadout.png │ │ │ │ │ ├── options-megalo.png │ │ │ │ │ ├── options-respawn.png │ │ │ │ │ ├── options-social.png │ │ │ │ │ ├── option-visibility.png │ │ │ │ │ ├── options-team-specific.png │ │ │ │ │ ├── options-loadout-specific.png │ │ │ │ │ ├── options-megalo.xml │ │ │ │ │ ├── options-loadout.xml │ │ │ │ │ └── forge.xml │ │ │ │ └── script_window │ │ │ │ │ ├── forge-labels.png │ │ │ │ │ ├── gametype-code.png │ │ │ │ │ ├── meta-strings.png │ │ │ │ │ ├── script-stats.png │ │ │ │ │ ├── script-traits.png │ │ │ │ │ ├── string-editor.png │ │ │ │ │ ├── string-table.png │ │ │ │ │ ├── map-permissions.png │ │ │ │ │ ├── script-options.png │ │ │ │ │ ├── script-widgets.png │ │ │ │ │ ├── string-library.png │ │ │ │ │ ├── unresolved-strings.png │ │ │ │ │ ├── required-object-types.png │ │ │ │ │ ├── player-rating-parameters.png │ │ │ │ │ ├── string-editor-round-card-preview.png │ │ │ │ │ ├── string-editor-round-card-preview-unicode.png │ │ │ │ │ ├── map-permissions.xml │ │ │ │ │ ├── script-traits.xml │ │ │ │ │ └── required-object-types.xml │ │ │ ├── script │ │ │ │ └── api │ │ │ │ │ ├── ns_unnamed │ │ │ │ │ ├── hud_player.xml │ │ │ │ │ ├── hud_player_team.xml │ │ │ │ │ └── hud_target_player_team.xml │ │ │ │ │ ├── player │ │ │ │ │ ├── properties │ │ │ │ │ │ └── unknown_09.xml │ │ │ │ │ └── actions │ │ │ │ │ │ ├── try_get_vehicle.xml │ │ │ │ │ │ ├── try_get_weapon.xml │ │ │ │ │ │ ├── set_round_card_title.xml │ │ │ │ │ │ ├── try_get_armor_ability.xml │ │ │ │ │ │ ├── set_round_card_icon.xml │ │ │ │ │ │ └── set_round_card_text.xml │ │ │ │ │ ├── object │ │ │ │ │ └── actions │ │ │ │ │ │ └── try_get_carrier.xml │ │ │ │ │ ├── player-traits.xml │ │ │ │ │ ├── index.xml │ │ │ │ │ ├── forge-label.xml │ │ │ │ │ ├── bool.xml │ │ │ │ │ ├── number.xml │ │ │ │ │ ├── ns_global.xml │ │ │ │ │ └── player-set.xml │ │ │ └── cli.xml │ │ ├── option toggle indices.md │ │ ├── design flaws │ │ │ └── README.md │ │ └── temporary variables.txt │ ├── themes │ │ └── default.qss │ ├── README.txt │ ├── ReachVariantTool.ico │ ├── helpers │ │ ├── miscellaneous.h │ │ ├── numeric.h │ │ ├── polyfills_cpp20.h │ │ ├── qt │ │ │ ├── ini.cpp │ │ │ ├── widget.h │ │ │ ├── color.h │ │ │ ├── ini.h │ │ │ ├── tree_widget.h │ │ │ └── string.h │ │ ├── string │ │ │ └── strieq_ascii.h │ │ ├── bytereader.cpp │ │ ├── intrusive_windows_defines.h │ │ ├── ini │ │ │ ├── change_callback.h │ │ │ └── setting_value_union.h │ │ ├── miscellaneous.cpp │ │ ├── sha1.h │ │ └── endianness.cpp │ ├── rvt_version_macros.h │ ├── game_variants │ │ ├── components │ │ │ ├── megalo │ │ │ │ ├── opcode_arg_types │ │ │ │ │ ├── variables │ │ │ │ │ │ ├── all_core.h │ │ │ │ │ │ ├── player.h │ │ │ │ │ │ ├── team.h │ │ │ │ │ │ └── timer.h │ │ │ │ │ ├── all.h │ │ │ │ │ ├── timer_rate.h │ │ │ │ │ ├── fireteam_list.h │ │ │ │ │ ├── megalo_scope.h │ │ │ │ │ ├── vector3.h │ │ │ │ │ ├── forge_label.h │ │ │ │ │ ├── sound.h │ │ │ │ │ ├── incident.h │ │ │ │ │ ├── object_type.h │ │ │ │ │ ├── variant_string_id.h │ │ │ │ │ ├── waypoint_icon.h │ │ │ │ │ └── player_traits.h │ │ │ │ ├── compiler │ │ │ │ │ ├── types.cpp │ │ │ │ │ ├── parsing │ │ │ │ │ │ ├── base.cpp │ │ │ │ │ │ └── base.h │ │ │ │ │ ├── enums.h │ │ │ │ │ └── enums.cpp │ │ │ │ ├── helpers │ │ │ │ │ └── format_strings.h │ │ │ │ ├── limits_bitnumbers.h │ │ │ │ ├── limits.h │ │ │ │ ├── widgets.h │ │ │ │ └── opcode_arg_type_registry.h │ │ │ ├── firefight_custom_skull.h │ │ │ ├── firefight_custom_skull.cpp │ │ │ ├── powerups.h │ │ │ ├── megalo_game_stats.cpp │ │ │ └── megalo_game_stats.h │ │ ├── data │ │ │ └── object_types.h │ │ ├── io_process.cpp │ │ ├── warnings.h │ │ └── editor_file_block.h │ ├── ui │ │ ├── widgets │ │ │ ├── GametypeIconCombobox.h │ │ │ ├── LoadoutForm.h │ │ │ ├── firefight_wave.h │ │ │ ├── firefight_squad_type.h │ │ │ ├── firefight_skull_list.h │ │ │ └── firefight_squad_type.ui │ │ ├── main_window │ │ │ ├── widget_macros_setup_end.h │ │ │ ├── widget_macros_update_end.h │ │ │ ├── debug_helper_functions.h │ │ │ ├── page_firefight_lives.h │ │ │ ├── page_firefight_bonus_wave.h │ │ │ ├── page_player_traits.h │ │ │ ├── page_multiplayer_title_update_1.h │ │ │ ├── page_firefight_wave_traits.h │ │ │ ├── page_loadout_palette.h │ │ │ ├── page_forge_settings_general.h │ │ │ ├── page_multiplayer_settings_social.h │ │ │ ├── page_multiplayer_settings_team.h │ │ │ ├── page_firefight_scenario.h │ │ │ ├── page_firefight_round.h │ │ │ ├── page_multiplayer_settings_loadout.h │ │ │ ├── page_multiplayer_settings_general.h │ │ │ ├── page_multiplayer_settings_map.h │ │ │ ├── page_multiplayer_settings_respawn.h │ │ │ ├── page_firefight_metadata.h │ │ │ ├── page_multiplayer_metadata.h │ │ │ ├── page_multiplayer_settings_scripted.h │ │ │ ├── page_multiplayer_settings_team_specific.h │ │ │ ├── page_loadout_palette.cpp │ │ │ ├── page_firefight_bonus_wave.cpp │ │ │ └── page_multiplayer_settings_loadout.cpp │ │ ├── script_editor │ │ │ ├── page_metadata_strings.h │ │ │ ├── page_req_obj_types.h │ │ │ ├── page_map_perms.h │ │ │ ├── page_player_rating_params.h │ │ │ ├── page_string_table.h │ │ │ ├── page_script_stats.h │ │ │ ├── page_script_traits.h │ │ │ ├── page_script_widgets.h │ │ │ ├── page_forge_labels.h │ │ │ ├── page_script_options.h │ │ │ ├── page_script_code.h │ │ │ ├── page_req_obj_types.ui │ │ │ └── compiler_unresolved_strings.h │ │ ├── generic │ │ │ ├── QListWidgetEx.h │ │ │ ├── ImageStackWidget.h │ │ │ ├── IconOnlyCombobox.cpp │ │ │ ├── QXBLGamertagValidator.h │ │ │ └── MenuButton.h │ │ ├── script_editor.h │ │ ├── options_window │ │ │ └── syntax_highlight_option_widget.h │ │ ├── localized_string_library.h │ │ └── options_window.h │ ├── Directory.build.props │ ├── formats │ │ ├── sha1.h │ │ ├── content_author.h │ │ ├── detailed_enum.cpp │ │ └── detailed_flags.cpp │ ├── resource.h │ ├── headless.h │ ├── services │ │ ├── RVTThemeEngine.h │ │ └── syntax_highlight_option.h │ ├── cli.h │ └── ReachVariantTool.vcxproj.user │ ├── zlib │ ├── zlib.3.pdf │ ├── zlib.vcxproj.user │ ├── inffast.h │ └── gzclose.c │ ├── InnoSetupInstaller │ ├── ReachVariantTool.ico │ ├── vc-version.iss │ ├── rvt-version.iss │ ├── InnoSetupInstaller.vcxproj.user │ ├── README.md │ └── InnoSetupInstaller.vcxproj.filters │ ├── RVTDocumentationProcessor │ ├── util │ │ ├── link_fixup.h │ │ ├── minimize_indent.h │ │ ├── strip_html.h │ │ └── html.h │ ├── content │ │ ├── category.h │ │ ├── category.cpp │ │ ├── api_namespace.h │ │ ├── api_accessor.h │ │ ├── api_property.h │ │ └── api_namespace_member.h │ ├── helpers │ │ ├── passkey.h │ │ ├── qt │ │ │ ├── xml_html_entity_resolver.h │ │ │ ├── xml_html_entity_resolver.cpp │ │ │ ├── save_file_to.h │ │ │ └── xml_stream_reader_to_dom.h │ │ └── all_html_entities.h │ ├── ui │ │ ├── MainWindow.h │ │ ├── FilePicker.h │ │ └── MainWindow.cpp │ └── RVTDocumentationProcessor.vcxproj.user │ └── RVTDocRenderer │ ├── RVTDocRenderer.vcxproj.user │ └── common.h ├── html ├── documentation │ └── build │ │ └── resources │ │ ├── noscript.css │ │ └── sidebar.js └── src │ ├── game-variant-map-permissions.js │ ├── game-variant-player-rating-params.js │ ├── raw │ └── game_variant_blam.js │ ├── script langauge design │ └── grammar.txt │ ├── variant-content-author.js │ └── game-variant-loadout.js ├── other └── example gametype scripts │ ├── test_veh_hp_api.bin │ ├── No-Armor-Lock Slayer.bin │ ├── test_cobb_script_tests_01.bin │ ├── test_motl_thorage_brute_force.bin │ ├── test_user_funcs_and_recursion.bin │ └── test_user_funcs_and_recursion.lua ├── .gitattributes └── .gitignore /native/src/ReachVariantTool/Resources/.gitignore: -------------------------------------------------------------------------------- 1 | !*.bin 2 | !*.mvar -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/resources/head.js: -------------------------------------------------------------------------------- 1 | window.page_load_start_time = Date.now(); -------------------------------------------------------------------------------- /html/documentation/build/resources/noscript.css: -------------------------------------------------------------------------------- 1 | #sidebar li.collapsed ul{display:unset!important} -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/resources/noscript.css: -------------------------------------------------------------------------------- 1 | #sidebar li.collapsed ul{display:unset!important} -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/resources/head.js: -------------------------------------------------------------------------------- 1 | window.page_load_start_time = Date.now(); -------------------------------------------------------------------------------- /native/src/zlib/zlib.3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/zlib/zlib.3.pdf -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/resources/noscript.css: -------------------------------------------------------------------------------- 1 | #sidebar li.collapsed ul{display:unset!important} -------------------------------------------------------------------------------- /native/src/ReachVariantTool/themes/default.qss: -------------------------------------------------------------------------------- 1 | /* This is empty because everything will be default unless dictated otherwise. */ -------------------------------------------------------------------------------- /native/src/ReachVariantTool/README.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/README.txt -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ReachVariantTool.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/ReachVariantTool.ico -------------------------------------------------------------------------------- /native/src/InnoSetupInstaller/ReachVariantTool.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/InnoSetupInstaller/ReachVariantTool.ico -------------------------------------------------------------------------------- /other/example gametype scripts/test_veh_hp_api.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/other/example gametype scripts/test_veh_hp_api.bin -------------------------------------------------------------------------------- /native/src/InnoSetupInstaller/vc-version.iss: -------------------------------------------------------------------------------- 1 | #define vc_version_major 14 2 | #define vc_version_minor 36 3 | #define vc_version_bld 32532 4 | #define vc_version_rbld 0 -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/icon_128px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/icon_128px.png -------------------------------------------------------------------------------- /other/example gametype scripts/No-Armor-Lock Slayer.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/other/example gametype scripts/No-Armor-Lock Slayer.bin -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/-1.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/0.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/1.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/10.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/11.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/12.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/13.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/14.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/15.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/16.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/17.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/18.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/19.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/2.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/20.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/21.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/22.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/23.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/24.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/25.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/26.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/27.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/28.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/29.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/3.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/30.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/4.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/5.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/6.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/7.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/8.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/9.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/option toggle indices.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/option toggle indices.md -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Don't upload baked documentation files unless they're in the folder that actually ships with the program 2 | *.html -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/tu1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/tu1.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/miscellaneous.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace cobb { 5 | void memswap(void* a, void* b, size_t size) noexcept; 6 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/compiler_log/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/compiler_log/error.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/compiler_log/fatal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/compiler_log/fatal.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/traits.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/ns_unnamed/hud_player.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/properties/unknown_09.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/forge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/forge.png -------------------------------------------------------------------------------- /other/example gametype scripts/test_cobb_script_tests_01.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/other/example gametype scripts/test_cobb_script_tests_01.bin -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/compiler_log/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/compiler_log/success.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/compiler_log/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/compiler_log/warning.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_icons/25_MCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_icons/25_MCC.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/0.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/1.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/10.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/2.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/3.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/4.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/5.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/6.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/7.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/8.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/9.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/ns_unnamed/hud_player_team.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/metadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/metadata.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/traits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/traits.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/lives.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/lives.png -------------------------------------------------------------------------------- /other/example gametype scripts/test_motl_thorage_brute_force.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/other/example gametype scripts/test_motl_thorage_brute_force.bin -------------------------------------------------------------------------------- /other/example gametype scripts/test_user_funcs_and_recursion.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/other/example gametype scripts/test_user_funcs_and_recursion.bin -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | html/documentation/* linguist-documentation 5 | native/src/ReachVariantTool/help/* linguist-documentation -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/util/link_fixup.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace util { 5 | extern void link_fixup(const QString& stem, QString& in_and_out); 6 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_files/blank_ff.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_files/blank_ff.bin -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_files/blank_mp.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_files/blank_mp.bin -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-team.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/object/actions/try_get_carrier.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/actions/try_get_vehicle.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/actions/try_get_weapon.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/traits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/traits.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/gametype_files/blank_forge.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/gametype_files/blank_forge.bin -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/hud_widget_preview/base_hud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/hud_widget_preview/base_hud.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-social.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/ns_unnamed/hud_target_player_team.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-map.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-team.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/bonus-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/bonus-wave.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/metadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/metadata.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/round-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/round-wave.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/scenario.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/scenario.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-loadout.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/actions/set_round_card_title.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/actions/try_get_armor_ability.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-general.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-loadout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-loadout.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-megalo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-megalo.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-respawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-respawn.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-social.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-team.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/round-skulls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/round-skulls.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/traits-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/traits-wave.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/forge-labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/forge-labels.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/gametype-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/gametype-code.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/meta-strings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/meta-strings.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/script-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/script-stats.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/script-traits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/script-traits.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/string-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/string-editor.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/string-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/string-table.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/rvt_version_macros.h: -------------------------------------------------------------------------------- 1 | // Edit these to control the embedded version information. 2 | #define VER_MAJOR 2 3 | #define VER_MINOR 3 4 | #define VER_PATCH 0 5 | #define VER_BUILD 0 6 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/compiler_log/compiler log icons.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/Resources/compiler_log/compiler log icons.xcf -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/variables/all_core.h: -------------------------------------------------------------------------------- 1 | #include "number.h" 2 | #include "object.h" 3 | #include "player.h" 4 | #include "team.h" 5 | #include "timer.h" -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/option-visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/option-visibility.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-general.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-loadout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-loadout.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-respawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-respawn.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-social.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/map-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/map-permissions.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/script-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/script-options.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/script-widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/script-widgets.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/string-library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/string-library.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-team-specific.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/actions/set_round_card_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player/actions/set_round_card_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/unresolved-strings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/unresolved-strings.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/tu1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/tu1.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-loadout-specific.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-team-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-team-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/required-object-types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/required-object-types.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/forge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/forge.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window/options-loadout-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window/options-loadout-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-team-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-team-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/metadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/metadata.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/traits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/traits.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/lives.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/lives.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/data/object_types.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../../../formats/detailed_enum.h" 3 | 4 | namespace Megalo { 5 | namespace enums { 6 | extern DetailedEnum object_type; 7 | } 8 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/main_window_ff/options-loadout-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/main_window_ff/options-loadout-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/player-rating-parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/player-rating-parameters.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/traits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/traits.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-map.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-team.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/bonus-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/bonus-wave.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/metadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/metadata.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/round-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/round-wave.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/scenario.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/scenario.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-general.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-loadout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-loadout.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-megalo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-megalo.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-respawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-respawn.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-social.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-team.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/round-skulls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/round-skulls.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/traits-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/traits-wave.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/forge-labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/forge-labels.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/gametype-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/gametype-code.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/meta-strings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/meta-strings.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-stats.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-traits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-traits.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-editor.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-table.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/string-editor-round-card-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/string-editor-round-card-preview.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/option-visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/option-visibility.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-general.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-loadout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-loadout.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-respawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-respawn.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-social.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/map-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/map-permissions.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-options.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-widgets.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-library.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/widgets/GametypeIconCombobox.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../generic/IconOnlyCombobox.h" 3 | 4 | class GametypeIconCombobox : public IconOnlyCombobox { 5 | public: 6 | GametypeIconCombobox(QWidget* parent); 7 | }; -------------------------------------------------------------------------------- /native/src/InnoSetupInstaller/rvt-version.iss: -------------------------------------------------------------------------------- 1 | #include "../ReachVariantTool/rvt_version_macros.h" 2 | #define rvt_version_major VER_MAJOR 3 | #define rvt_version_minor VER_MINOR 4 | #define rvt_version_patch VER_PATCH 5 | #define rvt_version_build VER_BUILD -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/unresolved-strings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/unresolved-strings.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-team-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-team-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/required-object-types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/required-object-types.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/editor/script_window/string-editor-round-card-preview-unicode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/help/editor/script_window/string-editor-round-card-preview-unicode.png -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/util/minimize_indent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace util { 5 | extern uint get_minimum_indent(const QString&, uint* last_non_space = nullptr); 6 | extern QString minimize_indent(const QString&); 7 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-loadout-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-loadout-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-team-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-team-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-loadout-specific.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/options-loadout-specific.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/player-rating-parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/player-rating-parameters.png -------------------------------------------------------------------------------- /native/src/zlib/zlib.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Directory.build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | 6 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-editor-round-card-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-editor-round-card-preview.png -------------------------------------------------------------------------------- /native/src/RVTDocRenderer/RVTDocRenderer.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player-traits.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Player Traits 4 | A script-defined set of player traits. 5 | -------------------------------------------------------------------------------- /native/src/InnoSetupInstaller/InnoSetupInstaller.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/widget_macros_setup_end.h: -------------------------------------------------------------------------------- 1 | #undef reach_main_window_setup_spinbox 2 | #undef reach_main_window_setup_flag_checkbox 3 | #undef reach_main_window_setup_bool_checkbox 4 | #undef reach_main_window_setup_spinbox 5 | #undef reach_main_window_setup_spinbox_dbl -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-editor-round-card-preview-unicode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DavidJCobb/ReachVariantEditor/HEAD/native/src/ReachVariantTool/docs/working - help docs/editor/script_window/string-editor-round-card-preview-unicode.png -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/widget_macros_update_end.h: -------------------------------------------------------------------------------- 1 | #undef reach_main_window_update_combobox 2 | #undef reach_main_window_update_flag_checkbox 3 | #undef reach_main_window_update_bool_checkbox 4 | #undef reach_main_window_update_spinbox 5 | #undef reach_main_window_update_spinbox_dbl -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/content/category.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | #include 4 | 5 | namespace content { 6 | class category { 7 | public: 8 | QString id; 9 | QVector articles; 10 | 11 | void add_article(base&); 12 | }; 13 | } -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/helpers/passkey.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace cobb { 4 | template class passkey { 5 | friend A; 6 | friend B; 7 | private: 8 | constexpr passkey() {} 9 | constexpr passkey(const passkey&) {} 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/content/category.cpp: -------------------------------------------------------------------------------- 1 | #include "category.h" 2 | 3 | namespace content { 4 | void category::add_article(base& article) { 5 | if (this->articles.indexOf(&article) >= 0) 6 | return; 7 | this->articles.push_back(&article); 8 | article.categories.push_back(this); 9 | } 10 | } -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/helpers/qt/xml_html_entity_resolver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace cobb::qt::xml { 5 | class XmlHtmlEntityResolver : public QXmlStreamEntityResolver { 6 | public: 7 | virtual QString resolveUndeclaredEntity(const QString& name) override; 8 | }; 9 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/index.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Script API Reference 4 | 5 |

6 | Use the sidebar to browse the namespaces and types in this scripting language. 7 |

8 | 9 |
-------------------------------------------------------------------------------- /native/src/InnoSetupInstaller/README.md: -------------------------------------------------------------------------------- 1 | 2 | # To use... 3 | 4 | 1. Build this project. Yes, even though there's no C/C++ code in it. I've modified the project file to run some custom C# code: it'll pull the VC redistributable file version and overwrite `vc-version.iss`. 5 | 6 | 2. Run the Inno Setup editor/compiler on `main.iss` and build the installer. -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/compiler/types.cpp: -------------------------------------------------------------------------------- 1 | #include "types.h" 2 | #include "../opcode_arg_types/variables/base.h" 3 | 4 | namespace Megalo::Script { 5 | bool Property::has_index() const noexcept { 6 | if (!this->scope) 7 | return false; 8 | return this->scope->has_index(); 9 | } 10 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/Resources/localized_string_library/LICENSE.md: -------------------------------------------------------------------------------- 1 | The text files in this folder contain localized strings extracted from Halo: Reach. 2 | I do not claim ownership over this content. None of the licenses that apply to this 3 | repo apply to this content. I can neither grant nor deny explicit permission to use 4 | the strings contained therein. -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/debug_helper_functions.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace DebugHelperFunctions { 5 | void break_on_variant(); 6 | void export_variant_triggers_english(QWidget* parentWindow); 7 | void export_variant_strings(QWidget* parentWindow); 8 | void test_loading_hrek_fonts(QWidget* parentWindow); 9 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Don't upload Halo: Reach game content... 2 | *.bin 3 | *.mvar 4 | 5 | # ...unless it's custom and we're uploading it for demonstrative purposes. 6 | !/other/*/*.bin 7 | !/other/*/*.mvar 8 | 9 | # Don't upload compiled/linked/etc. files 10 | *.obj 11 | 12 | # Don't upload the program's generated INI files 13 | *.ini 14 | *.ini.tmp 15 | *.ini.bak 16 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/forge-label.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Forge Label 4 | A string literal containing the name of a Forge label, or an integer constant 5 | denoting the index of a Forge label in the game variant's label list. 6 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/formats/sha1.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | constexpr uint8_t reachSHA1Salt[] = { 5 | 0xED, 0xD4, 0x30, 0x09, 6 | 0x66, 0x6D, 0x5C, 0x4A, 7 | 0x5C, 0x36, 0x57, 0xFA, 8 | 0xB4, 0x0E, 0x02, 0x2F, 9 | 0x53, 0x5A, 0xC6, 0xC9, 10 | 0xEE, 0x47, 0x1F, 0x01, 11 | 0xF1, 0xA4, 0x47, 0x56, 12 | 0xB7, 0x71, 0x4F, 0x1C, 13 | 0x36, 0xEC, 14 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/numeric.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace cobb { 5 | template inline bool integral_type_can_hold(const v value) noexcept { 6 | if (value > std::numeric_limits::max()) 7 | return false; 8 | if (value < std::numeric_limits::min()) 9 | return false; 10 | return true; 11 | } 12 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_lives.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_firefight_lives.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageFFLives : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageFFLives(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageFFLives ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_bonus_wave.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_firefight_bonus_wave.h" 3 | #include 4 | 5 | class GameVariant; 6 | 7 | class PageFFBonusWave : public QWidget { 8 | Q_OBJECT 9 | // 10 | public: 11 | PageFFBonusWave(QWidget* parent = nullptr); 12 | // 13 | private: 14 | Ui::PageFFBonusWave ui; 15 | // 16 | void updateFromVariant(GameVariant*); 17 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_player_traits.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_player_traits.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PagePlayerTraits : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PagePlayerTraits(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PagePlayerTraits ui; 14 | // 15 | void updateFromVariant(ReachPlayerTraits*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_metadata_strings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_metadata_strings.h" 3 | #include "../../editor_state.h" 4 | 5 | class ScriptEditorPageMetaStrings : public QWidget { 6 | Q_OBJECT 7 | public: 8 | ScriptEditorPageMetaStrings(QWidget* parent = nullptr); 9 | // 10 | protected: 11 | Ui::ScriptEditorPageMetaStrings ui; 12 | // 13 | void updateFromVariant(GameVariant* variant = nullptr); 14 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_req_obj_types.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_req_obj_types.h" 3 | #include "../../editor_state.h" 4 | 5 | class ScriptEditorPageReqObjTypes : public QWidget { 6 | Q_OBJECT 7 | public: 8 | ScriptEditorPageReqObjTypes(QWidget* parent = nullptr); 9 | // 10 | protected: 11 | Ui::ScriptEditorPageRequiredObjectTypes ui; 12 | // 13 | void updateFromVariant(GameVariant* variant = nullptr); 14 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/polyfills_cpp20.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #if __cplusplus <= 201703L && !(defined(_MSVC_LANG) || !defined(_HAS_CXX20)) 5 | namespace std { 6 | template struct is_bounded_array : std::false_type {}; 7 | template struct is_bounded_array : std::true_type {}; 8 | 9 | template inline constexpr bool is_bounded_array_v = is_bounded_array::value; 10 | } 11 | #endif -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_title_update_1.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_title_update_1.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPTU1Config : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPTU1Config(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPTU1Config ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | }; -------------------------------------------------------------------------------- /native/src/zlib/inffast.h: -------------------------------------------------------------------------------- 1 | /* inffast.h -- header to use inffast.c 2 | * Copyright (C) 1995-2003, 2010 Mark Adler 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* WARNING: this file should *not* be used by applications. It is 7 | part of the implementation of the compression library and is 8 | subject to change. Applications should only use zlib.h. 9 | */ 10 | 11 | void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); 12 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by ReachVariantTool.rc 4 | // 5 | 6 | // Next default values for new objects 7 | // 8 | #ifdef APSTUDIO_INVOKED 9 | #ifndef APSTUDIO_READONLY_SYMBOLS 10 | #define _APS_NEXT_RESOURCE_VALUE 103 11 | #define _APS_NEXT_COMMAND_VALUE 40001 12 | #define _APS_NEXT_CONTROL_VALUE 1000 13 | #define _APS_NEXT_SYMED_VALUE 101 14 | #endif 15 | #endif 16 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_wave_traits.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_firefight_wave_traits.h" 3 | #include 4 | 5 | class ReachFirefightWaveTraits; 6 | 7 | class PageFFWaveTraits : public QWidget { 8 | Q_OBJECT 9 | // 10 | public: 11 | PageFFWaveTraits(QWidget* parent = nullptr); 12 | // 13 | private: 14 | Ui::PageFFWaveTraits ui; 15 | // 16 | void updateFromData(ReachFirefightWaveTraits*); 17 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_loadout_palette.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_loadout_palette.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageLoadoutPaletteEditor : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageLoadoutPaletteEditor(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageLoadoutPaletteEditor ui; 14 | // 15 | void updateFromPalette(ReachLoadoutPalette*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_forge_settings_general.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_forge_settings_general.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageForgeSettingsGeneral : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageForgeSettingsGeneral(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageForgeSettingsGeneral ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_social.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_social.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsSocial : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsSocial(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsSocial ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_team.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_team.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsTeamOverall : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsTeamOverall(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsTeamOverall ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_map_perms.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_map_perms.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/map_permissions.h" 5 | 6 | class ScriptEditorPageMapPerms : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPageMapPerms(QWidget* parent = nullptr); 10 | // 11 | protected: 12 | Ui::ScriptEditorPageMapPerms ui; 13 | // 14 | void updateFromVariant(GameVariant* variant = nullptr); 15 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/helpers/all_html_entities.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace cobb::html { 6 | struct entity_definition { 7 | QString name; 8 | QString replace; 9 | 10 | entity_definition() {} 11 | entity_definition(uint char_code, QString n) : name(n), replace(QChar(char_code)) {} 12 | }; 13 | 14 | extern std::array all_entities; 15 | 16 | extern QString look_up_entity(const QString& name); 17 | } 18 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/compiler/parsing/base.cpp: -------------------------------------------------------------------------------- 1 | #include "base.h" 2 | 3 | namespace Megalo { 4 | namespace Script { 5 | void ParsedItem::set_start(const cobb::string_scanner::pos& pos) { 6 | this->line = pos.line; 7 | this->col = pos.offset - pos.last_newline; 8 | this->range.start = pos.offset; 9 | } 10 | void ParsedItem::set_end(const cobb::string_scanner::pos& pos) { 11 | this->range.end = pos.offset; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_scenario.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_firefight_scenario.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageFFScenario : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageFFScenario(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageFFScenario ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | void updateWaveLimitDetail(int raw_wave_count); 17 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/firefight_custom_skull.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "firefight_wave_traits.h" 3 | #include "player_traits.h" 4 | 5 | class ReachFirefightCustomSkull { 6 | public: 7 | ReachPlayerTraits traitsSpartan; 8 | ReachPlayerTraits traitsElite; 9 | ReachFirefightWaveTraits traitsWave; 10 | 11 | bool read(cobb::ibitreader& stream) noexcept; 12 | void write(cobb::bitwriter& stream) const noexcept; 13 | 14 | static uint32_t bitcount() noexcept; 15 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/qt/ini.cpp: -------------------------------------------------------------------------------- 1 | #include "ini.h" 2 | 3 | namespace cobb { 4 | namespace qt { 5 | namespace ini { 6 | void file::_send_change_event(setting* s, setting_value_union oldValue, setting_value_union newValue) { 7 | auto copy = this->changeCallbacks; // in case a callback unregisters itself 8 | for (auto cb : copy) 9 | cb(s, oldValue, newValue); 10 | emit settingChanged(s, oldValue, newValue); 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_round.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_firefight_round.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageFFRound : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageFFRound(QWidget* parent = nullptr); 11 | // 12 | void setIndex(int8_t); 13 | // 14 | private: 15 | Ui::PageFFRound ui; 16 | int8_t index = -1; 17 | // 18 | void updateFromVariant(GameVariant*); 19 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/helpers/qt/xml_html_entity_resolver.cpp: -------------------------------------------------------------------------------- 1 | #include "xml_html_entity_resolver.h" 2 | #include 3 | #include 4 | #include 5 | #include "../all_html_entities.h" 6 | 7 | namespace cobb::qt::xml { 8 | QString XmlHtmlEntityResolver::resolveUndeclaredEntity(const QString& name) { 9 | QString text = cobb::html::look_up_entity(name); 10 | if (text.isEmpty()) 11 | qDebug() << QString("Unrecognized entity: %1\n").arg(name); 12 | return text; 13 | } 14 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_loadout.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_loadout.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsLoadoutsOverall : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsLoadoutsOverall(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsLoadoutsOverall ui; 14 | // 15 | void updateFromVariant(GameVariant*); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_general.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_general.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsGeneral : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsGeneral(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsGeneral ui; 14 | // 15 | void updateEnableStates(); 16 | void updateFromVariant(GameVariant*); 17 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/ui/MainWindow.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | class FilePicker; 7 | 8 | class MainWindow : public QDialog { 9 | Q_OBJECT; 10 | public: 11 | MainWindow(); 12 | 13 | struct { 14 | FilePicker* input_folder; 15 | FilePicker* output_folder; 16 | QCheckBox* copy_assets_over; 17 | QPushButton* start; 18 | } widgets; 19 | 20 | signals: 21 | void onStartRequested(MainWindow*); 22 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_map.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_map.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsMapAndGame : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsMapAndGame(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsMapAndGame ui; 14 | // 15 | void updateEnableStates(); 16 | void updateFromVariant(GameVariant*); 17 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_respawn.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_respawn.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsRespawn : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsRespawn(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsRespawn ui; 14 | // 15 | void updateControlStates(); 16 | void updateFromData(ReachCGRespawnOptions*); 17 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/headless.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace rvt { 5 | struct command_line_params; 6 | } 7 | 8 | namespace rvt::headless { 9 | // Attempt to load a game variant, and give it to ReachEditorState if successful. 10 | // Returns true if successful. 11 | extern bool load_game_variant(const std::filesystem::path&); 12 | 13 | // Assumes the game variant is already loaded. 14 | extern bool recompile(const command_line_params&); 15 | 16 | extern bool save_game_variant(const command_line_params&); 17 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/io_process.cpp: -------------------------------------------------------------------------------- 1 | #include "io_process.h" 2 | 3 | GameVariantSaveProcess::~GameVariantSaveProcess() { 4 | for (auto* subrecord : this->xrvt_subrecords) 5 | if (subrecord) 6 | delete subrecord; 7 | this->xrvt_subrecords.clear(); 8 | } 9 | RVTEditorBlock::subrecord* GameVariantSaveProcess::create_subrecord(uint32_t signature) noexcept { 10 | auto subrecord = new RVTEditorBlock::subrecord; 11 | subrecord->signature = signature; 12 | this->xrvt_subrecords.push_back(subrecord); 13 | return subrecord; 14 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/helpers/format_strings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace Megalo { 6 | struct format_string_issue { 7 | size_t index = 0; 8 | QString code; 9 | bool crash = false; 10 | bool error = false; 11 | bool always_one = false; 12 | // 13 | bool is_floating_point = false; 14 | bool no_params_allowed = false; 15 | bool unusual_and_buggy = false; 16 | }; 17 | 18 | extern QVector check_format_string(const QString&); 19 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_metadata.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_firefight_metadata.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageFFMetadata : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageFFMetadata(QWidget* parent = nullptr); 11 | // 12 | signals: 13 | void titleChanged(const char16_t* title); 14 | // 15 | private: 16 | Ui::PageFFMetadata ui; 17 | // 18 | void updateFromVariant(GameVariant*); 19 | void updateDescriptionCharacterCount(); 20 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_metadata.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_metadata.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPMetadata : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPMetadata(QWidget* parent = nullptr); 11 | // 12 | signals: 13 | void titleChanged(const char16_t* title); 14 | // 15 | private: 16 | Ui::PageMPMetadata ui; 17 | // 18 | void updateFromVariant(GameVariant*); 19 | void updateDescriptionCharacterCount(); 20 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_scripted.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class ReachMegaloOption; 7 | 8 | class PageMPSettingsScripted : public QWidget { 9 | Q_OBJECT 10 | // 11 | public: 12 | PageMPSettingsScripted(QWidget* parent = nullptr); 13 | // 14 | private: 15 | void _renderOptionRow(uint32_t index, QGridLayout* layout, const ReachMegaloOption& option); 16 | void updateFromVariant(GameVariant*); 17 | void updateFromOption(ReachMegaloOption*); 18 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_player_rating_params.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_player_rating_params.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/player_rating_params.h" 5 | 6 | class ScriptEditorPagePlayerRating : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPagePlayerRating(QWidget* parent = nullptr); 10 | // 11 | protected: 12 | Ui::ScriptEditorPagePlayerRating ui; 13 | std::vector floatWidgets; 14 | // 15 | void updateFromVariant(GameVariant* variant = nullptr); 16 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/string/strieq_ascii.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace cobb { 5 | constexpr bool strieq_ascii(const std::string& a, const std::string& b) { 6 | size_t size = a.size(); 7 | if (size != b.size()) 8 | return false; 9 | for (size_t i = 0; i < size; ++i) { 10 | char x = a[i]; 11 | char y = b[i]; 12 | if (x >= 'A' && x <= 'Z') 13 | x |= 0x20; 14 | if (y >= 'A' && y <= 'Z') 15 | y |= 0x20; 16 | if (x != y) 17 | return false; 18 | } 19 | return true; 20 | } 21 | } -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/content/api_namespace.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "base.h" 4 | #include "api_parent_object.h" 5 | #include "page_template.h" 6 | #include "api_method.h" 7 | #include "api_namespace_member.h" 8 | 9 | namespace content { 10 | class api_namespace : public api_parent_object { 11 | public: 12 | api_namespace() : api_parent_object(entry_type::ns) {} 13 | 14 | QString friendly_name; 15 | 16 | QString get_friendly_name() const noexcept; 17 | 18 | void load(QDomDocument&); 19 | void write(QString base_output_folder); 20 | }; 21 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_team_specific.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "main_window/ui_page_multiplayer_settings_team_specific.h" 3 | #include 4 | #include "../../editor_state.h" 5 | 6 | class PageMPSettingsTeamSpecific : public QWidget { 7 | Q_OBJECT 8 | // 9 | public: 10 | PageMPSettingsTeamSpecific(QWidget* parent = nullptr); 11 | // 12 | private: 13 | Ui::PageMPSettingsTeamSpecific ui; 14 | int8_t team = -1; 15 | // 16 | void updateFromVariant(GameVariant*, int8_t teamIndex, ReachTeamData* team); 17 | void updateTeamColor(ReachTeamData* team); 18 | }; -------------------------------------------------------------------------------- /html/src/game-variant-map-permissions.js: -------------------------------------------------------------------------------- 1 | class GameVariantMapPermissions { 2 | constructor(stream) { 3 | this.mapIDs = []; // std::vector 4 | this.exceptionType = 1; // 0 = can only play on these maps; 1 = can play on any maps but these 5 | // 6 | if (stream) 7 | this.parse(stream); 8 | } 9 | parse(stream) { 10 | let count = stream.readBits(6, false); 11 | this.mapIDs = []; 12 | for(let i = 0; i < count; i++) 13 | this.mapIDs[i] = stream.readUInt16(); 14 | this.exceptionType = stream.readBits(1); // 0 = can only play on these maps; 1 = can play on any maps but these 15 | } 16 | } -------------------------------------------------------------------------------- /other/example gametype scripts/test_user_funcs_and_recursion.lua: -------------------------------------------------------------------------------- 1 | alias counter = global.number[0] 2 | alias basis = global.object[0] 3 | alias dummy = global.number[1] 4 | 5 | alias ran_once = global.number[2] 6 | 7 | function execute_task() 8 | counter -= 1 9 | basis = basis.place_at_me(skull, none, none, 0, 0, 1, none) 10 | if counter > 0 then 11 | execute_task() 12 | end 13 | dummy += 1 14 | end 15 | 16 | for each player do 17 | if current_player.biped != no_object and ran_once == 0 then 18 | ran_once = 1 19 | -- 20 | basis = current_player.biped 21 | counter = 5 22 | execute_task() 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/widgets/LoadoutForm.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "ui_LoadoutForm.h" 4 | 5 | class ReachLoadout; 6 | 7 | class LoadoutForm : public QWidget { 8 | Q_OBJECT 9 | public: 10 | LoadoutForm(QWidget* parent = nullptr); 11 | // 12 | int8_t loadoutIndex() const { 13 | QVariant value = this->property("loadoutIndex"); 14 | if (!value.isValid()) 15 | return -1; 16 | return value.toInt(); 17 | } 18 | void pullFromGameVariant(); 19 | // 20 | private: 21 | Ui::LoadoutForm ui; 22 | // 23 | ReachLoadout* _getLoadout() const noexcept; 24 | }; -------------------------------------------------------------------------------- /html/src/game-variant-player-rating-params.js: -------------------------------------------------------------------------------- 1 | class GameVariantPlayerRatingParams { 2 | constructor(stream) { 3 | this.unknownFloats = []; 4 | for(let i = 0; i < 15; i++) 5 | this.unknownFloats[i] = 0; 6 | this.unknownFlag = false; 7 | // 8 | if (stream) 9 | this.parse(stream); 10 | } 11 | parse(stream) { 12 | this.unknownFloats = []; 13 | for(let i = 0; i < 15; i++) 14 | // 15 | // JavaScript needs to flip the endianness; C++ does not: 16 | // 17 | this.unknownFloats[i] = stream.readFloat({ endianness: ENDIAN_BIG }); 18 | this.unknownFlag = stream.readBits(1) != 0; 19 | } 20 | } -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/content/api_accessor.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | #include "page_template.h" 4 | 5 | namespace content { 6 | class api_type; 7 | 8 | class api_accessor : public base { 9 | public: 10 | api_accessor() : base(entry_type::accessor) {} 11 | 12 | QString type; 13 | bool getter = false; 14 | bool setter = false; 15 | 16 | void load(QDomElement&, api_type& member_of); 17 | QString write(QString stem, api_type& member_of, page_creation_options); 18 | 19 | inline QString filename() const noexcept { 20 | return this->name + ".html"; 21 | } 22 | }; 23 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/services/RVTThemeEngine.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | class RVTThemeEngine : public QObject { 7 | Q_OBJECT; 8 | public: 9 | RVTThemeEngine(QObject* parent = nullptr); 10 | 11 | inline bool busy() const noexcept { return this->_busy; } 12 | 13 | void changeStyle(const QString& qss); 14 | void changeStyleFile(const QString& path); 15 | 16 | signals: 17 | void styleChangeStarted(); 18 | void styleChangeFinished(); 19 | 20 | protected: 21 | bool _busy = false; 22 | QDialog* _modal = nullptr; 23 | 24 | void _createDialog(); 25 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/content/api_property.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | #include "page_template.h" 4 | 5 | namespace content { 6 | class api_type; 7 | 8 | class api_property : public base { 9 | public: 10 | api_property() : base(entry_type::property) {} 11 | 12 | QString type; 13 | bool is_read_only = false; 14 | bool is_indexed = false; 15 | 16 | void load(QDomElement&, api_type& member_of); 17 | QString write(QString stem, api_type& member_of, page_creation_options); 18 | 19 | inline QString filename() const noexcept { 20 | return this->name + ".html"; 21 | } 22 | }; 23 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/generic/QListWidgetEx.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | class QListWidgetEx : public QListWidget { 6 | Q_OBJECT 7 | public: 8 | using copy_transform_functor_t = std::function; 9 | // 10 | public: 11 | QListWidgetEx(QWidget* parent = nullptr) : QListWidget(parent) {} 12 | // 13 | void copyAllToClipboard(); 14 | void setCopyTransformFunctor(copy_transform_functor_t); 15 | // 16 | protected: 17 | virtual void keyPressEvent(QKeyEvent* event) override; 18 | // 19 | copy_transform_functor_t _copyTransformFunctor = nullptr; 20 | }; 21 | -------------------------------------------------------------------------------- /native/src/RVTDocRenderer/common.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "helpers/xml.h" 5 | 6 | void ensure_paragraph(std::string&); 7 | void handle_base_tag(std::string& html, int depth); // change the HREF of a BASE tag to a string of the format "../../" using the given depth 8 | void handle_page_title_tag(std::string& html, std::string title_to_display); // change the content of a TITLE tag 9 | void minimize_indent(std::string& text); 10 | void syntax_highlight_in_html(const std::string& in, std::string& out); 11 | void syntax_highlight_in_html(std::string& out); 12 | size_t extract_html_from_xml(uint32_t token_index, cobb::xml::document& doc, std::string& out, std::string stem); -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/RVTDocumentationProcessor.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 2021-11-16T17:18:14.8397877Z 8 | 9 | 10 | 2021-11-16T22:01:14.5577526Z 11 | 12 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_string_table.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_string_table.h" 3 | #include 4 | 5 | class GameVariant; 6 | class ReachString; 7 | 8 | class ScriptEditorPageStringTable : public QWidget { 9 | Q_OBJECT 10 | public: 11 | ScriptEditorPageStringTable(QWidget* parent = nullptr); 12 | // 13 | protected: 14 | Ui::ScriptEditorPageStringTable ui; 15 | // 16 | ReachString* getSelected(); 17 | void updateFromVariant(GameVariant* variant = nullptr); 18 | // 19 | ReachString* _selected = nullptr; // This is ONLY used for maintaining the selection after redrawing the list; it should be considered opaque. 20 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_script_stats.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_script_stats.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/megalo_game_stats.h" 5 | 6 | class ScriptEditorPageScriptStats : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPageScriptStats(QWidget* parent = nullptr); 10 | // 11 | public slots: 12 | void selectStat(int32_t index); 13 | // 14 | protected: 15 | Ui::ScriptEditorPageScriptStats ui; 16 | // 17 | void updateStatsListFromVariant(GameVariant* variant = nullptr); 18 | void updateStatFromVariant(); 19 | // 20 | ReachMegaloGameStat* target = nullptr; 21 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_script_traits.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_script_traits.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/player_traits.h" 5 | 6 | class ScriptEditorPageScriptTraits : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPageScriptTraits(QWidget* parent = nullptr); 10 | // 11 | public slots: 12 | void selectTraits(int32_t index); 13 | // 14 | protected: 15 | Ui::ScriptEditorPageScriptTraits ui; 16 | // 17 | void updateTraitsListFromVariant(GameVariant* variant = nullptr); 18 | void updateTraitsFromVariant(); 19 | // 20 | ReachMegaloPlayerTraits* target = nullptr; 21 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/bytereader.cpp: -------------------------------------------------------------------------------- 1 | #include "bytereader.h" 2 | #include 3 | 4 | namespace cobb { 5 | void bytereader::read(void* out, uint32_t length) noexcept { 6 | this->read((uint8_t*)out, length); 7 | } 8 | void bytereader::read(uint8_t* out, uint32_t length) noexcept { 9 | memcpy(out, this->buffer + this->offset, length); 10 | this->offset += length; 11 | } 12 | void bytereader::read_string(char* out, uint32_t length) noexcept { 13 | this->read(out, length); 14 | } 15 | void bytereader::read_u16string(char16_t* out, uint32_t length, cobb::endian_t endianness) noexcept { 16 | for (int i = 0; i < length; i++) 17 | this->read(out[i], endianness); 18 | } 19 | } -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/ui/FilePicker.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | class FilePicker : public QWidget { 8 | Q_OBJECT; 9 | public: 10 | FilePicker(QWidget* parent); 11 | 12 | QString value() const noexcept; 13 | void setValue(const QString&) noexcept; 14 | 15 | QFileDialog* dialog() const noexcept { 16 | return this->subwidgets.dialog; 17 | } 18 | 19 | void makeOpenFolderDialog(); 20 | 21 | protected: 22 | struct { 23 | QFileDialog* dialog = nullptr; 24 | QLineEdit* text = nullptr; 25 | QPushButton* button = nullptr; 26 | } subwidgets; 27 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/widgets/firefight_wave.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "widgets/ui_firefight_wave.h" 3 | #include "../../game_variants/components/firefight_round.h" 4 | #include 5 | #include "firefight_squad_type.h" 6 | 7 | class FFWaveDefinitionWidget : public QWidget { 8 | Q_OBJECT 9 | // 10 | public: 11 | FFWaveDefinitionWidget(QWidget* parent = nullptr); 12 | // 13 | using wave_t = ReachFirefightWave; 14 | // 15 | void setTarget(wave_t&); 16 | void clearTarget(); 17 | // 18 | private: 19 | Ui::FFWaveDefinitionWidget ui; 20 | wave_t* target = nullptr; 21 | QList squadTypeWidgets; 22 | // 23 | void _updateFromTarget(); 24 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/cli.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace rvt { 5 | enum class headless_operation { 6 | none, 7 | recompile, 8 | }; 9 | 10 | struct command_line_params { 11 | command_line_params() {} 12 | command_line_params(int argc, char* argv[]); 13 | 14 | headless_operation operation = headless_operation::none; 15 | bool has_error = false; 16 | bool headless = false; 17 | bool help = false; 18 | struct { 19 | std::filesystem::path input; 20 | std::filesystem::path output; // if not specified, same as input 21 | } game_variant; 22 | std::filesystem::path megalo_source; 23 | }; 24 | 25 | extern void print_cli_help(); 26 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/design flaws/README.md: -------------------------------------------------------------------------------- 1 | 2 | I've gotten significantly better at working with C++ since I made ReachVariantTool. Coming back to it with more experience — particularly with metaprogramming — I can see that while it was very good for what it was, and for the level of experience I had at the time, it is by my current standards relatively messy and a challenge to maintain. Fixing its design flaws would in many cases require a total rewrite of the program, and leaving them as is means that new features built around them are similarly flawed. 3 | 4 | It seems worth documenting some of the problems. This folder is not an exhaustive list; there are other flaws that I am aware of, but haven't been able to organize and document as of yet. -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/map-permissions.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Map Permissions 4 | 5 |

6 | The map permissions page allows you to control what base maps the 7 | player is allowed to play this game variant on. 8 |

9 | 10 |

11 | This list can function as a whitelist, limiting the player to using specific 12 | maps, or a blacklist, preventing the player from using specific maps. The 13 | usual setup is to use a blacklist that doesn't actually have any maps checked. 14 |

15 | 16 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/custom-skull.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Custom Skulls 4 | 5 |

6 | Skulls are special gameplay modifiers that can be switched on and 7 | off. A Firefight round can use any of the game's original Campaign skulls, as 8 | well as any or all of three custom skulls: Red, Blue, and Yellow. 9 |

10 |

11 | Each Custom Skull offers a set of player traits for 12 | Spartans and Elites each, as well as a set of wave traits 13 | for NPCs. 14 |

15 | 16 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/warnings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | struct GameEngineVariantLoadWarningLog { 7 | std::vector warnings; 8 | 9 | static GameEngineVariantLoadWarningLog& get() { 10 | static thread_local GameEngineVariantLoadWarningLog instance; 11 | return instance; 12 | } 13 | inline void clear() noexcept { 14 | this->warnings.clear(); 15 | } 16 | inline bool empty() const noexcept { 17 | return this->warnings.empty(); 18 | } 19 | inline void push_back(const QString& item) noexcept { 20 | this->warnings.push_back(item); 21 | } 22 | inline size_t size() const noexcept { 23 | return this->warnings.size(); 24 | } 25 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/bool.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Bool 4 | The word true or the word false. 5 | 6 |

7 | A boolean value is either the word true or the word false. 8 | These values are typically used in cases where you need to specify whether 9 | something is "on" or "off," or "yes" or "no." 10 |

11 |

12 | In Megalo, you can also use an integer constant. Non-zero values are interpreted 13 | as "true," while zero values are interpreted as "false." 14 |

15 |
16 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_script_widgets.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_script_widgets.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/megalo/widgets.h" 5 | 6 | class ScriptEditorPageHUDWidgets : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPageHUDWidgets(QWidget* parent = nullptr); 10 | // 11 | public slots: 12 | void selectWidget(int32_t index); 13 | // 14 | protected: 15 | Ui::ScriptEditorPageHUDWidgets ui; 16 | // 17 | void updateWidgetsListFromVariant(GameVariant* variant = nullptr); 18 | void updateWidgetFromVariant(); 19 | void updateWidgetPreview(int8_t position = -1); 20 | // 21 | Megalo::HUDWidgetDeclaration* target = nullptr; 22 | }; 23 | -------------------------------------------------------------------------------- /native/src/zlib/gzclose.c: -------------------------------------------------------------------------------- 1 | /* gzclose.c -- zlib gzclose() function 2 | * Copyright (C) 2004, 2010 Mark Adler 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | #include "gzguts.h" 7 | 8 | /* gzclose() is in a separate file so that it is linked in only if it is used. 9 | That way the other gzclose functions can be used instead to avoid linking in 10 | unneeded compression or decompression routines. */ 11 | int ZEXPORT gzclose(file) 12 | gzFile file; 13 | { 14 | #ifndef NO_GZCOMPRESS 15 | gz_statep state; 16 | 17 | if (file == NULL) 18 | return Z_STREAM_ERROR; 19 | state = (gz_statep)file; 20 | 21 | return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); 22 | #else 23 | return gzclose_r(file); 24 | #endif 25 | } 26 | -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/util/strip_html.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace util { 5 | extern QString strip_html(const QString& html) { 6 | QXmlStreamReader xml(QString("%1").arg(html)); 7 | QString text; 8 | while (!xml.atEnd()) { 9 | switch (xml.readNext()) { 10 | case QXmlStreamReader::Characters: 11 | text += xml.text(); 12 | break; 13 | case QXmlStreamReader::StartElement: 14 | text += xml.readElementText(QXmlStreamReader::ReadElementTextBehaviour::IncludeChildElements); 15 | break; 16 | } 17 | } 18 | if (text.isEmpty()) // edge-case: no tags = no output 19 | return html; 20 | return text; 21 | } 22 | } -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/content/api_namespace_member.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | #include "page_template.h" 4 | 5 | namespace content { 6 | class api_namespace; 7 | 8 | class api_namespace_member : public base { 9 | public: 10 | api_namespace_member() : base(entry_type::generic) {} 11 | 12 | QString type; 13 | bool is_read_only = false; 14 | bool is_transient = false; 15 | bool is_indexed = false; 16 | bool is_none = false; 17 | 18 | void load(QDomElement&, api_namespace& member_of); 19 | QString write(QString stem, api_namespace& member_of, page_creation_options); 20 | 21 | inline QString filename() const noexcept { 22 | return this->name + ".html"; 23 | } 24 | }; 25 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_forge_labels.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_forge_labels.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/megalo/forge_label.h" 5 | 6 | class ScriptEditorPageForgeLabels : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPageForgeLabels(QWidget* parent = nullptr); 10 | // 11 | public slots: 12 | void selectLabel(int32_t labelIndex); 13 | // 14 | protected: 15 | Ui::ScriptEditorPageForgeLabels ui; 16 | // 17 | Megalo::ReachForgeLabel* getLabel() const noexcept; 18 | // 19 | void updateListFromVariant(GameVariant* variant = nullptr); 20 | void updateLabelFromVariant(GameVariant* variant = nullptr); 21 | // 22 | int32_t currentForgeLabel = -1; 23 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "ui_script_editor.h" 5 | #include "../editor_state.h" 6 | 7 | class MegaloScriptEditorWindow : public QDialog { 8 | Q_OBJECT 9 | public: 10 | MegaloScriptEditorWindow(QWidget* parent = nullptr); 11 | // 12 | protected: 13 | Ui::MegaloScriptEditorWindow ui; 14 | struct { 15 | QAction* save = nullptr; 16 | QAction* saveAs = nullptr; 17 | struct { 18 | QAction* web = nullptr; 19 | QAction* folder = nullptr; 20 | } help; 21 | } menu_actions; 22 | 23 | virtual void keyPressEvent(QKeyEvent* e) override; // override needed to handle Esc key 24 | 25 | protected slots: 26 | void updateSaveMenuItems(); 27 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-megalo.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Script-Specific Settings 4 | 5 |

6 | The script-specific settings page allows you to edit settings that are 7 | specific to the current gametype. 8 |

9 | 10 |

11 | The fields available to edit will vary depending on the gametype script. Most 12 | fields will display as drop-down boxes. Some fields will display as sliders; 13 | these do not show up in the in-game settings menus. Some fields may not have 14 | names or descriptions, if players were not meant to edit them normally. 15 |

16 | 17 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/bonus-wave.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Bonus Wave Settings 4 | 5 |

6 | The bonus wave page allows you to control which skulls are enabled 7 | during a Firefight bonus wave, and what enemy types spawn during the wave. 8 |

9 | 10 |

11 | Skulls and wave configuration work the same way as for rounds. 12 | Additionally, you can configure the bonus wave's duration in seconds. The value 13 | "disabled" replaces zero; to disable the bonus wave, set the duration to "1 second" 14 | and then decrease it by one. 15 |

16 | 17 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/firefight_custom_skull.cpp: -------------------------------------------------------------------------------- 1 | #include "firefight_custom_skull.h" 2 | 3 | bool ReachFirefightCustomSkull::read(cobb::ibitreader& stream) noexcept { 4 | this->traitsSpartan.read(stream); 5 | this->traitsElite.read(stream); 6 | this->traitsWave.read(stream); 7 | return true; 8 | } 9 | void ReachFirefightCustomSkull::write(cobb::bitwriter& stream) const noexcept { 10 | this->traitsSpartan.write(stream); 11 | this->traitsElite.write(stream); 12 | this->traitsWave.write(stream); 13 | } 14 | /*static*/ uint32_t ReachFirefightCustomSkull::bitcount() noexcept { 15 | uint32_t bitcount = 0; 16 | bitcount += decltype(traitsSpartan)::bitcount(); 17 | bitcount += decltype(traitsElite)::bitcount(); 18 | bitcount += decltype(traitsWave)::bitcount(); 19 | return bitcount; 20 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/powerups.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../../helpers/bitnumber.h" 3 | #include "player_traits.h" 4 | 5 | class ReachPowerupData { 6 | public: 7 | ReachPlayerTraits traits; 8 | cobb::bitnumber<7, uint8_t> duration; 9 | // 10 | #if __cplusplus <= 201703L 11 | bool operator==(const ReachPowerupData& other) const noexcept { 12 | if (this->duration != other.duration) 13 | return false; 14 | return this->traits == other.traits; 15 | } 16 | bool operator!=(const ReachPowerupData& other) const noexcept { return !(*this == other); } 17 | #else 18 | bool operator==(const ReachPowerupData&) const noexcept = default; 19 | bool operator!=(const ReachPowerupData&) const noexcept = default; 20 | #endif 21 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/helpers/qt/save_file_to.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | namespace cobb::qt { 8 | extern inline void save_file_to(const QString& file_path, const QString& content) { 9 | QString folder = file_path; 10 | { 11 | int i = folder.lastIndexOf('/'); 12 | int j = folder.lastIndexOf('\\'); 13 | i = std::max(i, j); 14 | if (i >= 0) 15 | folder.truncate(i); 16 | } 17 | QDir("/").mkpath(folder); 18 | // 19 | auto save = QSaveFile(file_path); 20 | if (save.open(QIODevice::WriteOnly)) { 21 | QTextStream stream(&save); 22 | stream.setCodec("UTF-8"); 23 | stream << content; 24 | save.commit(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/options-loadout.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Loadout Settings 4 | 5 |

6 | The loadout settings page allows you to edit baseline settings that apply 7 | to all loadouts. To edit settings for individual loadout palettes, refer to 8 | this page. 9 |

10 | 11 |

12 | The fields available to edit are as follows: 13 |

14 |
15 |
Spartan Loadouts
16 |
Unknown. Testing is pending.
17 |
Elite Loadouts
18 |
Unknown. Testing is pending.
19 |
20 | 21 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/help/resources/header-links.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | let node = document.querySelector("main"); 3 | if (!node) 4 | return; 5 | let filename = window.location.pathname.substring(window.location.pathname.lastIndexOf(/\\\//) + 1); 6 | let headers = node.querySelectorAll("h2,h3"); 7 | for(let header of headers) { 8 | let node = header.firstElementChild; 9 | if (!node) 10 | continue; 11 | if (node.nodeName[0].toLowerCase() == "a" && node.hasAttribute("name") && !node.hasAttribute("href")) { 12 | let link = document.createElement("a"); 13 | link.setAttribute("href", filename + "#" + node.getAttribute("name")); 14 | link.setAttribute("title", "permalink"); 15 | link.classList.add("header-permalink"); 16 | header.appendChild(link); 17 | } 18 | } 19 | })(); -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/intrusive_windows_defines.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file is provided under the Creative Commons 0 License. 4 | License: 5 | Summary: 6 | 7 | One-line summary: This file is public domain or the closest legal equivalent. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 12 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 14 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | */ 17 | #undef min 18 | #undef max -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/widgets/firefight_squad_type.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../../game_variants/components/firefight_round.h" 3 | #include 4 | 5 | // 6 | // Give an instance of this widget a reference to a squad value within a ReachFirefightWave, 7 | // and it will automatically synch to that. Remember to sever that reference with a call to 8 | // clearTarget when you're done with the wave data. 9 | // 10 | class FFSquadTypeWidget : public QComboBox { 11 | Q_OBJECT 12 | // 13 | public: 14 | FFSquadTypeWidget(QWidget* parent = nullptr); 15 | // 16 | using squad_type_t = ReachFirefightWave::squad_type_t; 17 | // 18 | void setTarget(squad_type_t&); 19 | void clearTarget(); 20 | // 21 | private: 22 | squad_type_t* target = nullptr; 23 | // 24 | void _updateFromTarget(); 25 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/helpers/qt/xml_stream_reader_to_dom.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace cobb::qt::xml { 6 | // 7 | // Uses QXmlStreamReader APIs to produce a QDomDocument. 8 | // 9 | class XmlStreamReaderToDom : public QXmlStreamReader { 10 | public: 11 | QDomDocument document; 12 | struct { 13 | QString version; 14 | QString encoding; 15 | bool standalone = false; 16 | } declaration; 17 | protected: 18 | QVector depth; 19 | 20 | void _append(QDomNode); 21 | 22 | public: 23 | void parse(const QString&); 24 | 25 | struct { 26 | bool strip_comments = false; 27 | bool strip_whitespace = false; 28 | } options; 29 | }; 30 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/compiler/parsing/base.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "../../../../../helpers/string_scanner.h" 5 | 6 | namespace Megalo { 7 | class Compiler; 8 | // 9 | namespace Script { 10 | class ParsedItem { 11 | public: 12 | virtual ~ParsedItem() {} 13 | 14 | ParsedItem* parent = nullptr; 15 | ParsedItem* owner = nullptr; // for conditions 16 | int32_t line = -1; 17 | int32_t col = -1; 18 | struct { 19 | int32_t start = -1; 20 | int32_t end = -1; 21 | } range; 22 | 23 | void set_start(const cobb::string_scanner::pos&); 24 | void set_end(const cobb::string_scanner::pos&); 25 | }; 26 | } 27 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_loadout_palette.cpp: -------------------------------------------------------------------------------- 1 | #include "page_loadout_palette.h" 2 | #include "../../game_variants/components/loadouts.h" 3 | 4 | PageLoadoutPaletteEditor::PageLoadoutPaletteEditor(QWidget* parent) : QWidget(parent) { 5 | ui.setupUi(this); 6 | // 7 | auto& editor = ReachEditorState::get(); 8 | QObject::connect(&editor, &ReachEditorState::switchedLoadoutPalette, this, &PageLoadoutPaletteEditor::updateFromPalette); 9 | } 10 | void PageLoadoutPaletteEditor::updateFromPalette(ReachLoadoutPalette* palette) { 11 | if (!palette) 12 | return; 13 | this->ui.loadout1Content->pullFromGameVariant(); 14 | this->ui.loadout2Content->pullFromGameVariant(); 15 | this->ui.loadout3Content->pullFromGameVariant(); 16 | this->ui.loadout4Content->pullFromGameVariant(); 17 | this->ui.loadout5Content->pullFromGameVariant(); 18 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/resources/header-links.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | let node = document.querySelector("main"); 3 | if (!node) 4 | return; 5 | let filename = window.location.pathname.substring(window.location.pathname.lastIndexOf(/\\\//) + 1); 6 | let headers = node.querySelectorAll("h2,h3"); 7 | for(let header of headers) { 8 | let node = header.firstElementChild; 9 | if (!node) 10 | continue; 11 | if (node.nodeName[0].toLowerCase() == "a" && node.hasAttribute("name") && !node.hasAttribute("href")) { 12 | let link = document.createElement("a"); 13 | link.setAttribute("href", filename + "#" + node.getAttribute("name")); 14 | link.setAttribute("title", "permalink"); 15 | link.classList.add("header-permalink"); 16 | header.appendChild(link); 17 | } 18 | } 19 | })(); -------------------------------------------------------------------------------- /native/src/ReachVariantTool/services/syntax_highlight_option.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | namespace ReachINI { 7 | struct syntax_highlight_option { 8 | bool bold = false; 9 | bool italic = false; 10 | bool underline = false; 11 | struct { 12 | QColor text; 13 | } colors; 14 | 15 | static syntax_highlight_option fromString(const QString&, bool& error); 16 | static syntax_highlight_option fromString(const QString&); 17 | 18 | QTextCharFormat toFormat() const noexcept; 19 | }; 20 | 21 | extern QTextCharFormat parse_syntax_highlight_option(const QString&, bool& error); 22 | extern QTextCharFormat parse_syntax_highlight_option(const std::string&, bool& error); 23 | extern QString stringify_syntax_highlight_option(const syntax_highlight_option&); 24 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/limits_bitnumbers.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "limits.h" 3 | #include "../../../helpers/bitnumber.h" 4 | 5 | namespace Megalo { 6 | using condition_index = cobb::bitnumber; 7 | using condition_count = cobb::bitnumber; 8 | using action_index = cobb::bitnumber; 9 | using action_count = cobb::bitnumber; 10 | // 11 | using const_team_index = cobb::bitnumber; 12 | // 13 | using object_type_index_optional = cobb::bitnumber; 14 | using forge_label_index = cobb::bitnumber; 15 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_script_options.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_script_options.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/megalo_options.h" 5 | 6 | class ScriptEditorPageScriptOptions : public QWidget { 7 | Q_OBJECT 8 | public: 9 | ScriptEditorPageScriptOptions(QWidget* parent = nullptr); 10 | // 11 | public slots: 12 | void selectOption(int32_t optionIndex); 13 | void selectOptionValue(int32_t valueIndex); 14 | // 15 | protected: 16 | Ui::ScriptEditorPageScriptOptions ui; 17 | // 18 | void updateOptionsListFromVariant(GameVariant* variant = nullptr); 19 | void updateOptionFromVariant(); 20 | void updateValuesListFromVariant(); 21 | void updateValueFromVariant(); 22 | // 23 | ReachMegaloOption* targetOption = nullptr; 24 | ReachMegaloOptionValueEntry* targetValue = nullptr; 25 | }; 26 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/generic/ImageStackWidget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | class ImageStackWidget : public QFrame { 8 | Q_OBJECT 9 | public: 10 | ImageStackWidget(QWidget* parent = nullptr) : QFrame(parent) {} 11 | // 12 | void paintEvent(QPaintEvent* event); 13 | QSize sizeHint() const; 14 | // 15 | inline size_t imageCount() const noexcept { return this->_images.size(); } 16 | inline const QList& images() const noexcept { return this->_images; } 17 | QImage* image(size_t index) noexcept { 18 | if (index >= this->_images.size()) 19 | return nullptr; 20 | return &this->_images[index]; 21 | } 22 | void addImage(QImage image) noexcept; 23 | void removeImage(size_t); 24 | void removeImage(QImage&); 25 | // 26 | protected: 27 | QList _images; 28 | }; 29 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/all.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "all_constants.h" 3 | #include "all_enums.h" 4 | #include "all_flags.h" 5 | #include "all_indices.h" 6 | #include "variables/number.h" 7 | #include "variables/player.h" 8 | #include "variables/object.h" 9 | #include "variables/team.h" 10 | #include "variables/timer.h" 11 | #include "variables/any_variable.h" 12 | #include "variables/player_or_group.h" 13 | // 14 | #include "fireteam_list.h" 15 | #include "forge_label.h" 16 | #include "format_string.h" 17 | #include "icons.h" 18 | #include "incident.h" 19 | #include "object_type.h" 20 | #include "player_set.h" 21 | #include "player_traits.h" 22 | #include "shape.h" 23 | #include "sound.h" 24 | #include "specific_variable.h" 25 | #include "timer_rate.h" 26 | #include "variant_string_id.h" 27 | #include "vector3.h" 28 | #include "waypoint_icon.h" 29 | #include "widget_related.h" 30 | // 31 | // MCC extensions: 32 | // 33 | #include "megalo_scope.h" 34 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_script_code.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_page_script_code.h" 3 | #include "../../editor_state.h" 4 | #include "../../game_variants/components/megalo/compiler/compiler.h" 5 | #include "../../game_variants/components/megalo/decompiler/decompiler.h" 6 | 7 | class ScriptEditorPageScriptCode : public QWidget { 8 | Q_OBJECT 9 | public: 10 | using Compiler = Megalo::Compiler; 11 | using log_t = Compiler::log_t; 12 | using pos_t = Compiler::pos; 13 | // 14 | public: 15 | ScriptEditorPageScriptCode(QWidget* parent = nullptr); 16 | // 17 | protected: 18 | Ui::ScriptEditorPageScriptCode ui; 19 | // 20 | log_t _lastNotices; 21 | log_t _lastWarnings; 22 | log_t _lastErrors; 23 | log_t _lastFatals; 24 | // 25 | void updateLog(Compiler&); 26 | void redrawLog(); 27 | 28 | void jumpToLogItem(QListWidgetItem&); 29 | 30 | void updateCodeEditorStyle(); 31 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window/forge.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Forge Settings 4 | 5 |

6 | The Forge settings page allows you to edit options related to Forge. 7 | It only appears when opening a Forge variant file. 8 |

9 | 10 |

11 | The fields available to edit are as follows: 12 |

13 |
14 |
Enable Open-Channel Voice
15 |
Unknown.
16 |
Unknown Flag 1
17 |
Unknown.
18 |
Editor Respawn Time
19 |
Presumably controls how long it takes for players to respawn if they 20 | die while in Edit Mode; however, testing suggests it may not be used.
21 |
Edit Mode Access
22 |
Unknown.
23 |
24 | 25 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/compiler/enums.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace Megalo { 6 | namespace Script { 7 | class Namespace; 8 | // 9 | class Enum { 10 | public: 11 | struct Value { 12 | QString name; 13 | int32_t value = 0; 14 | // 15 | Value() {} 16 | Value(int32_t v, QString n) : name(n), value(v) {} 17 | }; 18 | // 19 | QString name; 20 | std::vector values; 21 | // 22 | Enum() {} 23 | Enum(QString n) : name(n) {} 24 | Enum(QString n, std::initializer_list v) : name(n), values(v) {} 25 | Enum(QString n, std::initializer_list v); 26 | // 27 | void add_value(QString, int32_t) noexcept; 28 | bool lookup(const QString&, int32_t&) const noexcept; 29 | }; 30 | } 31 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/temporary variables.txt: -------------------------------------------------------------------------------- 1 | 2 | In mid-July 2023, MCC updated Halo: Reach's engine to backport "temporary variables," 3 | a feature from Halo 4's Megalo engine. These are, in concept, just global variables 4 | that don't need to be declared (i.e. they always exist) and that the compiler tracks 5 | differently. 6 | 7 | When you "declare" a temporary variable in MegaloEdit, it just finds an available 8 | temporary variable, maps that to the identifier you specify, and compiles in an 9 | assignment to zero-or-none. The variable is then marked as used, and will remain so 10 | until that identifier goes out of scope. 11 | 12 | If MegaloEdit runs out of temporary variables of the requested type, it will "spill 13 | over" into any unused global variables. This is easier to implement for them because 14 | they require that all globals be defined in advance of script code. For RVT, we'd 15 | need to implement a multi-pass parser (source -> compilable AST -> compiled) in 16 | order to achieve this. 17 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/qt/widget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | /* 3 | 4 | This file is provided under the Creative Commons 0 License. 5 | License: 6 | Summary: 7 | 8 | One-line summary: This file is public domain or the closest legal equivalent. 9 | 10 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 11 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 12 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 13 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 14 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 15 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 16 | 17 | */ 18 | #pragma once 19 | #include 20 | #include 21 | 22 | namespace cobb { 23 | namespace qt { 24 | QString dump_ancestors(const QWidget*, bool stopAtFirstWindow = true); 25 | } 26 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/generic/IconOnlyCombobox.cpp: -------------------------------------------------------------------------------- 1 | #include "IconOnlyCombobox.h" 2 | 3 | void IconOnlyComboboxItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { 4 | auto o = option; 5 | this->initStyleOption(&o, index); 6 | o.decorationSize.setWidth(o.rect.width()); 7 | auto style = o.widget ? o.widget->style() : QApplication::style(); 8 | style->drawControl(QStyle::CE_ItemViewItem, &o, painter, o.widget); 9 | } 10 | 11 | void IconOnlyComboboxProxyStyle::drawControl(QStyle::ControlElement element, const QStyleOption* opt, QPainter* p, const QWidget* w) const { 12 | if (element == QStyle::CE_ComboBoxLabel) { 13 | if (const QStyleOptionComboBox* cb = qstyleoption_cast(opt)) { 14 | QStyleOptionComboBox copy(*cb); 15 | copy.currentText = ""; 16 | QProxyStyle::drawControl(element, ©, p, w); 17 | return; 18 | } 19 | } 20 | QProxyStyle::drawControl(element, opt, p, w); // call super 21 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/ini/change_callback.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file is provided under the Creative Commons 0 License. 4 | License: 5 | Summary: 6 | 7 | One-line summary: This file is public domain or the closest legal equivalent. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 12 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 14 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | */ 17 | #pragma once 18 | 19 | namespace cobb::ini { 20 | class setting; 21 | union setting_value_union; 22 | 23 | using change_callback = void(*)(setting* s, setting_value_union oldValue, setting_value_union newValue); 24 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/timer_rate.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | 4 | namespace Megalo { 5 | class OpcodeArgValueTimerRate : public OpcodeArgValue { 6 | megalo_opcode_arg_value_make_create_override; 7 | public: 8 | static OpcodeArgTypeinfo typeinfo; 9 | static constexpr int bitcount = 5; 10 | // 11 | public: 12 | uint8_t value = 0; 13 | // 14 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 15 | virtual void write(cobb::bitwriter& stream) const noexcept override; 16 | virtual void to_string(std::string& out) const noexcept override; 17 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 18 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 19 | virtual void copy(const OpcodeArgValue*) noexcept override; 20 | }; 21 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo_game_stats.cpp: -------------------------------------------------------------------------------- 1 | #include "megalo_game_stats.h" 2 | #include "../types/multiplayer.h" 3 | 4 | void ReachMegaloGameStat::read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept { 5 | this->is_defined = true; 6 | // 7 | MegaloStringIndex index; 8 | index.read(stream); 9 | this->name = mp.scriptData.strings.get_entry(index); 10 | // 11 | this->format = (Format)stream.read_bits(2); 12 | this->sortOrder = (Sort)stream.read_bits(2); 13 | stream.read(this->groupByTeam); 14 | } 15 | void ReachMegaloGameStat::write(cobb::bitwriter& stream) const noexcept { 16 | MegaloStringIndex index = 0; 17 | if (this->name) 18 | index = this->name->index; 19 | index.write(stream); 20 | // 21 | stream.write((uint8_t)this->format, 2); 22 | stream.write((uint8_t)this->sortOrder, 2); 23 | stream.write(this->groupByTeam); 24 | } 25 | bool ReachMegaloGameStat::uses_string(ReachString* str) const noexcept { 26 | if (this->name == str) 27 | return true; 28 | return false; 29 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/number.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Number 4 | A numeric constant or variable. 5 | 6 |

7 | Numbers can be integer constants or numeric variables. There are twelve global 8 | number variables, numbered from 0 to 11, which can be accessed as global.number[n]. 9 |

10 |

11 | Integer constants can be any number between -32,768 and 32,767, inclusive. In 12 | the original version of Halo: Reach, the values of number variables are 13 | also limited to this range during play. 14 |

15 |

16 | In the Halo: The Master Chief Collection version of Halo: Reach, 17 | as of July 15, 2023, number variables can hold values between -2,147,483,648 and 18 | 2,147,483,647 during play. 19 |

20 |
21 |
-------------------------------------------------------------------------------- /html/src/raw/game_variant_blam.js: -------------------------------------------------------------------------------- 1 | const chunk_flags = Object.freeze({ 2 | initialized: 1, // always set 3 | is_header: 2, // _blf, chdr 4 | }); 5 | 6 | class GameVariantBlamHeader { 7 | constructor(stream) { 8 | this.signature = stream.readString(4); 9 | if (this.signature != "_blf") 10 | throw new Error(`GameVariantBlamHeader expected signature "_blf"; got "${this.signature}".`); 11 | let size = stream.readUInt32(); 12 | if (size != 0x30) { 13 | size = _byteswap_ulong(size); 14 | if (size != 0x30) 15 | throw new Error(`GameVariantBlamHeader expected size 0x30; got 0x${_byteswap_ulong(size).toString(16)} or 0x${size}.toString(16).`); 16 | stream.endianness = ENDIAN_BIG; 17 | } 18 | this.chunkVersion = _byteswap_ushort(stream.readUInt16()); // 08 19 | this.chunkFlags = _byteswap_ushort(stream.readUInt16()); // 0A 20 | this.unk0C = stream.readUInt16(); 21 | this.unk0E = stream.readBytes(0x20); 22 | this.unk2E = stream.readBytes(0x02); 23 | stream.assertBytePos(0x30); 24 | } 25 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/fireteam_list.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../limits.h" 4 | #include "../../../types/multiplayer.h" 5 | 6 | namespace Megalo { 7 | class OpcodeArgValueFireteamList : public OpcodeArgValue { 8 | megalo_opcode_arg_value_make_create_override; 9 | public: 10 | static OpcodeArgTypeinfo typeinfo; 11 | // 12 | public: 13 | uint8_t value = 0; 14 | // 15 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 16 | virtual void write(cobb::bitwriter& stream) const noexcept override; 17 | virtual void to_string(std::string& out) const noexcept override; 18 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 19 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 20 | virtual void copy(const OpcodeArgValue*) noexcept override; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/variables/player.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | 4 | namespace Megalo { 5 | class OpcodeArgValuePlayer : public Variable { 6 | megalo_opcode_arg_value_make_create_override; 7 | public: 8 | static OpcodeArgTypeinfo typeinfo; 9 | // 10 | OpcodeArgValuePlayer(); 11 | // 12 | virtual const OpcodeArgTypeinfo& get_variable_typeinfo() const noexcept override { return typeinfo; } 13 | virtual Variable* create_zero_or_none() const noexcept override; 14 | virtual bool set_to_zero_or_none() noexcept override; 15 | }; 16 | namespace variable_scope_indicators { 17 | namespace player { 18 | extern VariableScopeIndicatorValueList& as_list(); 19 | // 20 | extern VariableScopeIndicatorValue global_player; 21 | extern VariableScopeIndicatorValue player_player; 22 | extern VariableScopeIndicatorValue object_player; 23 | extern VariableScopeIndicatorValue team_player; 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/options_window/syntax_highlight_option_widget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "ui_syntax_highlight_option_widget.h" 5 | #include "../../services/syntax_highlight_option.h" 6 | 7 | class SyntaxHighlightOptionWidget : public QWidget { 8 | Q_OBJECT; 9 | public: 10 | SyntaxHighlightOptionWidget(QWidget* parent = nullptr); 11 | 12 | QString name() const noexcept; 13 | void setName(const QString&); 14 | 15 | QColor color() const noexcept; 16 | void setColor(QColor); 17 | 18 | bool bold() const noexcept; 19 | void setBold(bool); 20 | 21 | bool italic() const noexcept; 22 | void setItalic(bool); 23 | 24 | bool underline() const noexcept; 25 | void setUnderline(bool); 26 | 27 | ReachINI::syntax_highlight_option toOption() const noexcept; 28 | QTextCharFormat toFormat() const noexcept; 29 | 30 | void setFromString(const QString&); 31 | QString toString() const noexcept; 32 | 33 | private: 34 | Ui::SyntaxHighlightOptionWidget ui; 35 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/widgets/firefight_skull_list.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "widgets/ui_firefight_skull_list.h" 3 | #include "../../game_variants/components/firefight_round.h" 4 | #include 5 | #include 6 | 7 | // 8 | // Give an instance of this widget a reference to a squad value within a ReachFirefightWave, 9 | // and it will automatically synch to that. Remember to sever that reference with a call to 10 | // clearTarget when you're done with the wave data. 11 | // 12 | class FFSkullListWidget : public QWidget { 13 | Q_OBJECT 14 | // 15 | public: 16 | FFSkullListWidget(QWidget* parent = nullptr); 17 | // 18 | using skull_list_t = ReachFirefightRound::skull_list_t; 19 | // 20 | void setTarget(skull_list_t&); 21 | void clearTarget(); 22 | // 23 | private: 24 | Ui::FFSkullListWidget ui; 25 | skull_list_t* target = nullptr; 26 | // 27 | void _setupCheckbox(QCheckBox*, reach::firefight_skull); 28 | void _updateCheckbox(QCheckBox*, reach::firefight_skull); 29 | void _updateFromTarget(); 30 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/limits.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace Megalo { 5 | namespace Limits { 6 | constexpr int max_actions = 1024; 7 | constexpr int max_conditions = 512; 8 | constexpr int max_engine_sounds = 95; 9 | constexpr int max_incident_types = 1024; 10 | constexpr int max_object_types = 2048; 11 | constexpr int max_script_labels = 16; 12 | constexpr int max_script_options = 16; 13 | constexpr int max_script_option_values = 8; 14 | constexpr int max_script_stats = 4; 15 | constexpr int max_script_traits = 16; 16 | constexpr int max_script_widgets = 4; 17 | constexpr int max_string_ids = 256; 18 | constexpr int max_triggers = 320; 19 | constexpr int max_variant_strings = 112; 20 | } 21 | enum class const_team : int8_t { 22 | none = -1, 23 | team_1, 24 | team_2, 25 | team_3, 26 | team_4, 27 | team_5, 28 | team_6, 29 | team_7, 30 | team_8, 31 | neutral, 32 | // 33 | _count = 10, 34 | }; 35 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/megalo_scope.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../code_block.h" 4 | #include "../limits.h" 5 | #include "../limits_bitnumbers.h" 6 | 7 | namespace Megalo { 8 | class OpcodeArgValueMegaloScope : public OpcodeArgValue { 9 | megalo_opcode_arg_value_make_create_override; 10 | public: 11 | static OpcodeArgTypeinfo typeinfo; 12 | // 13 | public: 14 | CodeBlock data; 15 | // 16 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 17 | virtual void write(cobb::bitwriter& stream) const noexcept override; 18 | virtual void to_string(std::string& out) const noexcept override; 19 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 20 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 21 | virtual void copy(const OpcodeArgValue*) noexcept override; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/editor_file_block.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "../formats/block.h" 5 | #include "../helpers/memory.h" 6 | 7 | class RVTEditorBlock : public ReachFileBlock { 8 | public: 9 | RVTEditorBlock(); 10 | ~RVTEditorBlock(); 11 | // 12 | static constexpr uint32_t signature_megalo_string_table = 'mstr'; 13 | static constexpr uint32_t signature_megalo_script = 'mscr'; 14 | // 15 | struct subrecord { 16 | uint32_t signature = 0; 17 | uint32_t version = 0; 18 | uint32_t flags = 0; 19 | uint32_t size = 0; 20 | cobb::generic_buffer data; 21 | }; 22 | std::vector subrecords; 23 | // 24 | bool read(reach_block_stream&) noexcept; 25 | void write(cobb::bytewriter&) const noexcept; 26 | // 27 | void adopt(std::vector&) noexcept; 28 | subrecord* lookup(uint32_t signature) const; 29 | // 30 | inline bool has_subrecords() const noexcept { return this->subrecords.size(); } 31 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/util/html.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | namespace util { 7 | struct html_serialize_options { 8 | bool adapt_indented_pre_tags = false; 9 | bool include_containing_element = false; 10 | std::function pre_tag_content_tweak; 11 | std::function url_tweak; 12 | bool wrap_bare_text_in_paragraphs = false; 13 | 14 | // Can't make this member private without disallowing aggregate initialization, which would 15 | // defeat the purpose of this struct. Just don't screw with it, I guess. Leave it false. 16 | bool _is_recursing = false; 17 | }; 18 | extern QString serialize_element(QDomElement root, html_serialize_options options = html_serialize_options()); 19 | 20 | struct xml_encode_options { 21 | bool escape_newlines = false; 22 | bool escape_quotes = false; 23 | bool escape_brackets = true; 24 | }; 25 | extern QString xml_encode(const QString& text, xml_encode_options options = xml_encode_options()); 26 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/script-traits.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Scripted Traits 4 | 5 |

6 | The scripted traits page allows you to define player trait sets 7 | for the gametype, which can be viewed and configured in-game. You can 8 | add and reorder traits, and you can delete any traits that are not 9 | actively in use by the gametype script. 10 |

11 | 12 |

13 | The fields available to edit for each set of player traits are as follows: 14 |

15 |
16 |
Name
17 |
The string used for the traits name.
18 |
Description
19 |
The string used for the traits 20 | description.
21 |
22 |

23 | To edit the actual player traits themselves, use the main window. 24 |

25 | 26 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/compiler/enums.cpp: -------------------------------------------------------------------------------- 1 | #include "enums.h" 2 | #include "namespaces.h" 3 | 4 | namespace Megalo { 5 | namespace Script { 6 | Enum::Enum(QString n, std::initializer_list v) { 7 | auto size = v.size(); 8 | this->name = n; 9 | this->values.resize(size); 10 | // 11 | size_t i = 0; 12 | for (auto it = v.begin(); it != v.end(); ++it, ++i) { // really irritating that initializer_list doesn't have operator[] 13 | this->values[i].name = *it; 14 | this->values[i].value = i; 15 | } 16 | } 17 | void Enum::add_value(QString name, int32_t v) noexcept { 18 | this->values.emplace_back(v, name); 19 | } 20 | bool Enum::lookup(const QString& name, int32_t& out) const noexcept { 21 | for (auto& value : this->values) { 22 | if (value.name.compare(name, Qt::CaseInsensitive) == 0) { 23 | out = value.value; 24 | return true; 25 | } 26 | } 27 | return false; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/vector3.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | 4 | namespace Megalo { 5 | class OpcodeArgValueVector3 : public OpcodeArgValue { 6 | megalo_opcode_arg_value_make_create_override; 7 | public: 8 | static OpcodeArgTypeinfo typeinfo; 9 | // 10 | public: 11 | struct { 12 | int8_t x = 0; 13 | int8_t y = 0; 14 | int8_t z = 0; 15 | } value; // loaded value 16 | // 17 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 18 | virtual void write(cobb::bitwriter& stream) const noexcept override; 19 | virtual void to_string(std::string& out) const noexcept override; 20 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 21 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 22 | virtual void copy(const OpcodeArgValue*) noexcept override; 23 | }; 24 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/forge_label.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../limits.h" 4 | #include "../forge_label.h" 5 | #include "../../../types/multiplayer.h" 6 | 7 | namespace Megalo { 8 | class OpcodeArgValueForgeLabel : public OpcodeArgValue { 9 | megalo_opcode_arg_value_make_create_override; 10 | public: 11 | static OpcodeArgTypeinfo typeinfo; 12 | // 13 | public: 14 | cobb::refcount_ptr value; 15 | // 16 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 17 | virtual void write(cobb::bitwriter& stream) const noexcept override; 18 | virtual void to_string(std::string& out) const noexcept override; 19 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 20 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 21 | virtual void copy(const OpcodeArgValue*) noexcept override; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/ns_global.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Contains global variables. 4 | 5 | 6 | Globally scoped numbers. Twelve are available, numbered from 0 to 11. 7 | 8 | 9 | Globally scoped objects. Sixteen are available, numbered from 0 to 15. 10 | 11 | 12 | Globally scoped players. Eight are available, numbered from 0 to 7. 13 | 14 | 15 | Globally scoped teams. Eight are available, numbered from 0 to 7. 16 | 17 | 18 | Globally scoped timers. Eight are available, numbered from 0 to 7. 19 | 20 | 21 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/widgets.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "../../../helpers/bitnumber.h" 4 | #include "../../../helpers/bitwriter.h" 5 | #include "../../../helpers/refcounting.h" 6 | #include "../../../helpers/stream.h" 7 | #include "../../../formats/indexed_lists.h" 8 | 9 | namespace Megalo { 10 | class HUDWidgetDeclaration : public indexed_list_item { 11 | public: 12 | cobb::bitnumber<4, uint8_t> position; // values over 11 are not valid and will cause MCC to fail to load/display the game variant; if two widgets share a position, they align intelligently rather than overlapping 13 | // 14 | void read(cobb::ibitreader& stream) noexcept { 15 | this->is_defined = true; 16 | // 17 | this->position.read(stream); 18 | } 19 | void write(cobb::bitwriter& stream) const noexcept { 20 | this->position.write(stream); 21 | } 22 | // 23 | inline static constexpr uint32_t bitcount() noexcept { 24 | return decltype(position)::bitcount; 25 | } 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/qt/color.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace cobb::qt { 6 | enum class css_color_parse_error { 7 | none, 8 | hex_color_wrong_digit_count, 9 | hex_color_bad_digit, 10 | function_color_expected_open_paren, 11 | function_color_expected_comma, 12 | function_color_expected_slash, 13 | function_color_expected_close_paren, 14 | function_color_expected_number_1, // R or H 15 | function_color_expected_number_2, // G or S 16 | function_color_expected_number_3, // B or L 17 | function_color_expected_number_4, // alpha 18 | hsl_must_use_percentages, 19 | rgb_dont_mix_and_match_percentages, 20 | unexpected_trailing_content, 21 | unrecognized_color_name, 22 | }; 23 | extern QColor parse_css_color(const QString&, css_color_parse_error&); 24 | extern QColor parse_css_color(QStringRef, css_color_parse_error&); 25 | 26 | enum class css_color_format { 27 | hex, 28 | rgb, 29 | rgba, 30 | hsl, 31 | hsla, 32 | }; 33 | extern QString stringify_css_color(const QColor&, css_color_format); 34 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/qt/ini.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../ini.h" 3 | #include 4 | 5 | namespace cobb { 6 | namespace qt { 7 | namespace ini { 8 | using setting = cobb::ini::setting; 9 | using setting_value_union = cobb::ini::setting_value_union; 10 | class file : public QObject, public ::cobb::ini::file { 11 | Q_OBJECT 12 | private: 13 | using _superclass = ::cobb::ini::file; 14 | signals: 15 | void settingChanged(setting*, setting_value_union oldValue, setting_value_union newValue); 16 | protected: 17 | virtual void _send_change_event(setting*, setting_value_union oldValue, setting_value_union newValue) override; 18 | public: 19 | file() : QObject(nullptr), _superclass() {} 20 | file(std::filesystem::path filepath) : QObject(nullptr), _superclass(filepath) {} 21 | file(std::filesystem::path filepath, std::filesystem::path backup, std::filesystem::path working) : QObject(nullptr), _superclass(filepath, backup, working) {} 22 | }; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_type_registry.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace Megalo { 6 | class OpcodeArgTypeinfo; 7 | // 8 | class OpcodeArgTypeRegistry { 9 | public: 10 | using type_list_t = std::vector; 11 | // 12 | protected: 13 | OpcodeArgTypeRegistry(); 14 | // 15 | bool _has_type(const OpcodeArgTypeinfo&) const noexcept; 16 | // 17 | public: 18 | static OpcodeArgTypeRegistry& get() { 19 | static OpcodeArgTypeRegistry instance; 20 | return instance; 21 | } 22 | // 23 | std::vector types; 24 | // 25 | void register_type(const OpcodeArgTypeinfo& type); 26 | const OpcodeArgTypeinfo* get_by_internal_name(const QString& name) const; 27 | const OpcodeArgTypeinfo* get_static_indexable_type(const QString& name) const; 28 | const OpcodeArgTypeinfo* get_variable_type(const QString& name) const; 29 | void lookup_imported_name(const QString& name, type_list_t& out) const; 30 | }; 31 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/page_req_obj_types.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ScriptEditorPageRequiredObjectTypes 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 0 19 | 20 | 21 | 0 22 | 23 | 24 | 0 25 | 26 | 27 | 0 28 | 29 | 30 | 31 | 32 | false 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/widgets/firefight_squad_type.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | FFSquadTypeWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 0 19 | 20 | 21 | 0 22 | 23 | 24 | 0 25 | 26 | 27 | 0 28 | 29 | 30 | 31 | 32 | Squad Type 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/variables/team.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | 4 | namespace Megalo { 5 | class OpcodeArgValueTeam : public Variable { 6 | megalo_opcode_arg_value_make_create_override; 7 | public: 8 | static OpcodeArgTypeinfo typeinfo; 9 | // 10 | OpcodeArgValueTeam(); 11 | // 12 | virtual const OpcodeArgTypeinfo& get_variable_typeinfo() const noexcept override { return typeinfo; } 13 | virtual Variable* create_zero_or_none() const noexcept override; 14 | virtual bool set_to_zero_or_none() noexcept override; 15 | }; 16 | namespace variable_scope_indicators { 17 | namespace team { 18 | extern VariableScopeIndicatorValueList& as_list(); 19 | // 20 | extern VariableScopeIndicatorValue global_team; 21 | extern VariableScopeIndicatorValue player_team; 22 | extern VariableScopeIndicatorValue object_team; 23 | extern VariableScopeIndicatorValue team_team; 24 | extern VariableScopeIndicatorValue player_owner_team; 25 | extern VariableScopeIndicatorValue object_owner_team; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/qt/tree_widget.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file is provided under the Creative Commons 0 License. 4 | License: 5 | Summary: 6 | 7 | One-line summary: This file is public domain or the closest legal equivalent. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 12 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 14 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | */ 17 | #pragma once 18 | #include 19 | 20 | namespace cobb { 21 | namespace qt { 22 | namespace tree_widget { 23 | QTreeWidgetItem* find_item_by_data(QTreeWidget* widget, bool(*functor)(QVariant), int role, int column = 0); 24 | QTreeWidgetItem* find_item_by_data(QTreeWidgetItem* basis, bool(*functor)(QVariant), int role, int column = 0); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/miscellaneous.cpp: -------------------------------------------------------------------------------- 1 | #include "miscellaneous.h" 2 | #include 3 | 4 | namespace cobb { 5 | void memswap(void* a, void* b, size_t size) noexcept { 6 | size_t offset = 0; 7 | for (; offset + 8 <= size; offset += 8) { 8 | auto& x = *(uint64_t*)((std::intptr_t)a + offset); 9 | auto& y = *(uint64_t*)((std::intptr_t)b + offset); 10 | x ^= y; 11 | y ^= x; 12 | x ^= y; 13 | } 14 | for (; offset + 4 <= size; offset += 4) { 15 | auto& x = *(uint32_t*)((std::intptr_t)a + offset); 16 | auto& y = *(uint32_t*)((std::intptr_t)b + offset); 17 | x ^= y; 18 | y ^= x; 19 | x ^= y; 20 | } 21 | for (; offset + 2 <= size; offset += 2) { 22 | auto& x = *(uint16_t*)((std::intptr_t)a + offset); 23 | auto& y = *(uint16_t*)((std::intptr_t)b + offset); 24 | x ^= y; 25 | y ^= x; 26 | x ^= y; 27 | } 28 | for (; offset < size; ++offset) { 29 | auto& x = *(uint8_t*)((std::intptr_t)a + offset); 30 | auto& y = *(uint8_t*)((std::intptr_t)b + offset); 31 | x ^= y; 32 | y ^= x; 33 | x ^= y; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /native/src/InnoSetupInstaller/InnoSetupInstaller.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Resource Files 25 | 26 | 27 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/sound.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../../../formats/detailed_enum.h" 4 | #include "../limits.h" 5 | 6 | namespace Megalo { 7 | class OpcodeArgValueSound : public OpcodeArgValue { 8 | megalo_opcode_arg_value_make_create_override; 9 | public: 10 | static OpcodeArgTypeinfo typeinfo; 11 | // 12 | public: 13 | int8_t value = -1; 14 | // 15 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 16 | virtual void write(cobb::bitwriter& stream) const noexcept override; 17 | virtual void to_string(std::string& out) const noexcept override; 18 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 19 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 20 | virtual void copy(const OpcodeArgValue*) noexcept override; 21 | // 22 | static_assert(std::numeric_limits::max() >= Limits::max_engine_sounds, "You need to use a larger type to hold the value."); 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_firefight_bonus_wave.cpp: -------------------------------------------------------------------------------- 1 | #include "page_firefight_bonus_wave.h" 2 | #include "../../editor_state.h" 3 | #include "../../game_variants/types/firefight.h" 4 | 5 | PageFFBonusWave::PageFFBonusWave(QWidget* parent) : QWidget(parent) { 6 | ui.setupUi(this); 7 | // 8 | auto& editor = ReachEditorState::get(); 9 | QObject::connect(&editor, &ReachEditorState::variantAcquired, this, &PageFFBonusWave::updateFromVariant); 10 | // 11 | #include "widget_macros_setup_start.h" 12 | reach_main_window_setup_spinbox(firefightData, this->ui.bonusWaveDuration, bonusWaveDuration); 13 | #include "widget_macros_setup_end.h" 14 | } 15 | void PageFFBonusWave::updateFromVariant(GameVariant* variant) { 16 | auto data = variant->get_firefight_data(); 17 | if (!data) { 18 | this->ui.tabSkullsContent->clearTarget(); 19 | this->ui.tabWaveContent->clearTarget(); 20 | return; 21 | } 22 | this->ui.tabSkullsContent->setTarget(data->bonusWaveSkulls); 23 | this->ui.tabWaveContent->setTarget(data->bonusWave); 24 | #include "widget_macros_update_start.h" 25 | reach_main_window_update_spinbox(this->ui.bonusWaveDuration, bonusWaveDuration); 26 | #include "widget_macros_update_end.h" 27 | } -------------------------------------------------------------------------------- /html/src/script langauge design/grammar.txt: -------------------------------------------------------------------------------- 1 | 2 | // block-scoped: 3 | alias name = variable 4 | 5 | block_type { 6 | } 7 | 8 | block_type (block_arg) : optional_name { 9 | } 10 | 11 | subroutine: name { 12 | // statements 13 | } 14 | 15 | subroutine: name { 16 | expect variable == const_int // compile-time warning if caller didnt set variable to const_int before the call 17 | // statements 18 | } 19 | 20 | variable = const_int 21 | variable = variable 22 | variable = variable.property 23 | variable = variable.variable 24 | variable = variable.method(args) 25 | variable = ... 26 | subroutine_name() 27 | 28 | // line breaks are allowed within the condition list 29 | if (condition_list) { 30 | } 31 | 32 | // condition_list: condition[ join_operator condition[...]] 33 | // join_operator: && or || 34 | // condition: 35 | // variable compare_operator variable 36 | // variable compare_operator const_int 37 | // comparable_property compare_operator operand 38 | // variable.condition_method(args) 39 | 40 | if (variable variable) { 41 | } 42 | if (variable const_int) { 43 | } 44 | if (variable.comparable_property operand) { 45 | } 46 | 47 | send_incident(incident_name_or_index, player, player[, const_int]) -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/incident.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../../../formats/detailed_enum.h" 4 | #include "../limits.h" 5 | 6 | namespace Megalo { 7 | class OpcodeArgValueIncident : public OpcodeArgValue { 8 | megalo_opcode_arg_value_make_create_override; 9 | public: 10 | static OpcodeArgTypeinfo typeinfo; 11 | // 12 | public: 13 | int16_t value = -1; 14 | // 15 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 16 | virtual void write(cobb::bitwriter& stream) const noexcept override; 17 | virtual void to_string(std::string& out) const noexcept override; 18 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 19 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 20 | virtual void copy(const OpcodeArgValue*) noexcept override; 21 | // 22 | static_assert(std::numeric_limits::max() >= Limits::max_incident_types, "You need to use a larger type to hold the value."); 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/object_type.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../../../formats/detailed_enum.h" 4 | #include "../limits.h" 5 | 6 | namespace Megalo { 7 | class OpcodeArgValueObjectType : public OpcodeArgValue { 8 | megalo_opcode_arg_value_make_create_override; 9 | public: 10 | static OpcodeArgTypeinfo typeinfo; 11 | // 12 | public: 13 | int16_t value = -1; 14 | // 15 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 16 | virtual void write(cobb::bitwriter& stream) const noexcept override; 17 | virtual void to_string(std::string& out) const noexcept override; 18 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 19 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 20 | virtual void copy(const OpcodeArgValue*) noexcept override; 21 | // 22 | static_assert(std::numeric_limits::max() >= Limits::max_object_types, "You need to use a larger type to hold the value."); 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/qt/string.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | /* 3 | 4 | This file is provided under the Creative Commons 0 License. 5 | License: 6 | Summary: 7 | 8 | One-line summary: This file is public domain or the closest legal equivalent. 9 | 10 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 11 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 12 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 13 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 14 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 15 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 16 | 17 | */ 18 | #pragma once 19 | #include 20 | 21 | namespace cobb { 22 | namespace qt { 23 | bool string_has_any_of(const QString& text, const QString& charset); // compare to strpbrk 24 | bool string_has_any_of(const QString& text, const char* charset); // (charset) is treated as Latin-1 25 | bool string_is_integer(const QString& text); 26 | int stricmp(const QString& a, const std::string& b); 27 | } 28 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/cli.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Command line interface 4 | 5 |

6 | ReachVariantTool can be run from the command line, with commands like these: 7 |

8 |
 9 |          ReachVariantTool /?
10 |          ReachVariantTool --help
11 |          ReachVariantTool --headless path/to/variant --recompile path/to/megalo
12 |          ReachVariantTool --headless path/to/variant --recompile path/to/megalo --dst path/to/output
13 |       
14 |
15 |

16 | The --help or /? command displays a list of available commands. 17 |

18 |

19 | The --headless runs RVT without its GUI, loading a game variant as input. The 20 | --recompile operation allows you to load script source code from a file, try 21 | to compile it into the target variant, and then re-save it. If you specify --dst, 22 | then the recompiled variant will be saved to that destination (if compilation succeeds); 23 | otherwise, the original file is replaced. 24 |

25 | 26 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/script_window/required-object-types.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Required Object Types 4 | 5 |

6 | The required object types page allows you to determine which object 7 | types must be implemented on a map in order for a game variant to be compatible. 8 |

9 | 10 |

11 | If any object type in this list has its checkbox checked, then Halo: Reach 12 | will not allow players to play this game variant on any base map that does not 13 | define that object. For example, if the "Covenant Bomb" object is checked, then 14 | players will not be able to play the game variant on any map other than Breakpoint, 15 | which is the only one to define the Covenant Bomb. 16 |

17 |

18 | The list includes several object type names that aren't actually implemented in 19 | Halo: Reach, such as the Chopper, Brute Shot, and other Halo 3 20 | leftovers. No, there's no way to magically spawn these in the game. 21 |

22 | 23 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/variant_string_id.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../../../formats/detailed_enum.h" 4 | #include "../limits.h" 5 | 6 | namespace Megalo { 7 | class OpcodeArgValueVariantStringID : public OpcodeArgValue { 8 | megalo_opcode_arg_value_make_create_override; 9 | public: 10 | static OpcodeArgTypeinfo typeinfo; 11 | // 12 | public: 13 | int16_t value = -1; 14 | // 15 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 16 | virtual void write(cobb::bitwriter& stream) const noexcept override; 17 | virtual void to_string(std::string& out) const noexcept override; 18 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 19 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 20 | virtual void copy(const OpcodeArgValue*) noexcept override; 21 | // 22 | static_assert(std::numeric_limits::max() >= Limits::max_string_ids, "You need to use a larger type to hold the value."); 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/sha1.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file is provided under the Creative Commons 0 License. 4 | License: 5 | Summary: 6 | 7 | One-line summary: This file is public domain or the closest legal equivalent. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 12 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 14 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | */ 17 | #pragma once 18 | #include 19 | 20 | namespace cobb { 21 | class sha1 { 22 | public: 23 | sha1() {} 24 | sha1(const uint8_t* buffer, uint8_t size) { 25 | this->transform(buffer, size); 26 | } 27 | // 28 | uint32_t hash[5] = { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 }; 29 | // 30 | void transform(const uint8_t* buffer, uint32_t size); 31 | }; 32 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/localized_string_library.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ui_localized_string_library.h" 3 | #include "../services/localization_library.h" 4 | 5 | class LocalizedStringLibraryDialog : public QDialog { 6 | Q_OBJECT 7 | public: 8 | using entry_t = LocalizedStringLibrary::Entry; 9 | using token_t = LocalizedStringLibrary::token_type; 10 | public: 11 | LocalizedStringLibraryDialog(QWidget* parent = nullptr); 12 | // 13 | static bool openForString(QWidget* parent, ReachString* target = nullptr); 14 | // 15 | private: 16 | Ui::LocalizedStringLibraryDialog ui; 17 | // 18 | ReachString* target = nullptr; // string to apply to 19 | entry_t* current = nullptr; 20 | token_t last_token_type = token_t::none; 21 | reach::language previewLanguage = reach::language::english; 22 | // 23 | void selectItem(entry_t*); 24 | void updateControls(); 25 | void updateEntryList(); 26 | void updatePreview(); 27 | // 28 | void onOpened(); // called by openForString when the modal is first opened 29 | // 30 | entry_t* _getListSelection(QListWidgetItem* item = nullptr); 31 | void _makeString(QString&, reach::language); 32 | }; -------------------------------------------------------------------------------- /native/src/RVTDocumentationProcessor/ui/MainWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "MainWindow.h" 2 | #include "FilePicker.h" 3 | #include 4 | #include 5 | 6 | MainWindow::MainWindow() : QDialog(nullptr) { 7 | this->widgets.input_folder = new FilePicker(this); 8 | this->widgets.output_folder = new FilePicker(this); 9 | this->widgets.copy_assets_over = new QCheckBox("Copy non-HTML non-XML files", this); 10 | this->widgets.start = new QPushButton("Run", this); 11 | // 12 | this->widgets.input_folder->makeOpenFolderDialog(); 13 | this->widgets.output_folder->makeOpenFolderDialog(); 14 | // 15 | auto* layout = new QGridLayout(this); 16 | this->setLayout(layout); 17 | // 18 | layout->addWidget(new QLabel("Input folder:", this), 0, 0); 19 | layout->addWidget(this->widgets.input_folder, 0, 1); 20 | layout->addWidget(new QLabel("Output folder:", this), 1, 0); 21 | layout->addWidget(this->widgets.output_folder, 1, 1); 22 | layout->addWidget(this->widgets.copy_assets_over, 2, 0, 1, 2); 23 | layout->addWidget(this->widgets.start, 3, 1); 24 | // 25 | QObject::connect(this->widgets.start, &QPushButton::clicked, this, [this]() { 26 | emit this->onStartRequested(this); 27 | }); 28 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/variables/timer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "base.h" 3 | 4 | namespace Megalo { 5 | class OpcodeArgValueTimer : public Variable { 6 | megalo_opcode_arg_value_make_create_override; 7 | public: 8 | static OpcodeArgTypeinfo typeinfo; 9 | // 10 | OpcodeArgValueTimer(); 11 | // 12 | virtual const OpcodeArgTypeinfo& get_variable_typeinfo() const noexcept override { return typeinfo; } 13 | virtual Variable* create_zero_or_none() const noexcept override; 14 | virtual bool set_to_zero_or_none() noexcept override; 15 | }; 16 | namespace variable_scope_indicators { 17 | namespace timer { 18 | extern VariableScopeIndicatorValueList& as_list(); 19 | // 20 | extern VariableScopeIndicatorValue global_timer; 21 | extern VariableScopeIndicatorValue player_timer; 22 | extern VariableScopeIndicatorValue team_timer; 23 | extern VariableScopeIndicatorValue object_timer; 24 | extern VariableScopeIndicatorValue round_timer; 25 | extern VariableScopeIndicatorValue sudden_death_timer; 26 | extern VariableScopeIndicatorValue grace_period_timer; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/waypoint_icon.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "variables/number.h" 3 | #include "../../../formats/detailed_enum.h" 4 | 5 | namespace Megalo { 6 | class OpcodeArgValueWaypointIcon : public OpcodeArgValue { 7 | megalo_opcode_arg_value_make_create_override; 8 | public: 9 | static OpcodeArgTypeinfo typeinfo; 10 | // 11 | public: 12 | int8_t icon = 0; 13 | OpcodeArgValueScalar number; 14 | // 15 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 16 | virtual void write(cobb::bitwriter& stream) const noexcept override; 17 | virtual void to_string(std::string& out) const noexcept override; 18 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 19 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept override; 20 | virtual void copy(const OpcodeArgValue*) noexcept override; 21 | virtual void mark_used_variables(Script::variable_usage_set& usage) const noexcept override { 22 | number.mark_used_variables(usage); 23 | } 24 | }; 25 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ReachVariantTool.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | WindowsLocalDebugger 8 | 9 | 10 | 11 | 12 | 13 | 14 | WindowsLocalDebugger 15 | 16 | 17 | 2024-01-03T15:54:34.4610720Z 18 | 19 | 20 | 21 | 22 | 2024-01-03T15:54:34.5920734Z 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/endianness.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file is provided under the Creative Commons 0 License. 4 | License: 5 | Summary: 6 | 7 | One-line summary: This file is public domain or the closest legal equivalent. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 12 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 14 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | */ 17 | #include "endianness.h" 18 | 19 | #ifndef __cpp_lib_endian 20 | namespace { 21 | const cobb::endian_t _check() noexcept { 22 | union { 23 | uint32_t dword = 'ABCD'; 24 | uint8_t chars[4]; 25 | } sentinel; 26 | return sentinel.chars[0] == 'A' ? cobb::endian::big : cobb::endian::little; 27 | } 28 | } 29 | namespace cobb { 30 | namespace endian { 31 | extern const endian_t native = _check(); 32 | } 33 | } 34 | #endif -------------------------------------------------------------------------------- /native/src/ReachVariantTool/helpers/ini/setting_value_union.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file is provided under the Creative Commons 0 License. 4 | License: 5 | Summary: 6 | 7 | One-line summary: This file is public domain or the closest legal equivalent. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 12 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 14 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | */ 17 | #pragma once 18 | #include 19 | 20 | namespace cobb::ini { 21 | union setting_value_union { 22 | bool b; 23 | float f; 24 | int32_t i; 25 | uint32_t u; 26 | 27 | setting_value_union() : u(0) {}; 28 | setting_value_union(bool v) : b(v) {}; 29 | setting_value_union(float v) : f(v) {}; 30 | setting_value_union(int32_t v) : i(v) {}; 31 | setting_value_union(uint32_t v) : i(v) {}; 32 | }; 33 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/script_editor/compiler_unresolved_strings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "ui_compiler_unresolved_strings.h" 4 | #include "../../game_variants/components/megalo/compiler/compiler.h" 5 | 6 | class CompilerUnresolvedStringsDialog : public QDialog { 7 | Q_OBJECT 8 | // 9 | public: 10 | using unresolved_str = Megalo::Compiler::unresolved_str; 11 | // 12 | CompilerUnresolvedStringsDialog(QWidget* parent = Q_NULLPTR); 13 | // 14 | static bool handleCompiler(QWidget* parent, Megalo::Compiler&); 15 | // 16 | private slots: 17 | private: 18 | void commit(); 19 | void takeCompiler(Megalo::Compiler&); 20 | void selectReference(int32_t str, int32_t ref); 21 | void updateStatus(); 22 | // 23 | QList getRefsByKey(const QString &); 24 | // 25 | unresolved_str* getUnresolvedStr(); 26 | // 27 | private: 28 | Ui::CompilerUnresolvedStringsDialog ui; 29 | // 30 | Megalo::Compiler* _compiler = nullptr; 31 | int32_t _currentStr = -1; 32 | int32_t _currentRef = -1; 33 | MegaloStringRef _dummyStringRef; // used to interface with the ReachStringPicker widget 34 | // 35 | QList _keys; 36 | }; 37 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/main_window/page_multiplayer_settings_loadout.cpp: -------------------------------------------------------------------------------- 1 | #include "page_multiplayer_settings_loadout.h" 2 | #include "../../game_variants/base.h" 3 | #include "../../game_variants/components/custom_game_options.h" 4 | 5 | PageMPSettingsLoadoutsOverall::PageMPSettingsLoadoutsOverall(QWidget* parent) : QWidget(parent) { 6 | ui.setupUi(this); 7 | // 8 | auto& editor = ReachEditorState::get(); 9 | QObject::connect(&editor, &ReachEditorState::variantAcquired, this, &PageMPSettingsLoadoutsOverall::updateFromVariant); 10 | // 11 | #include "widget_macros_setup_start.h" 12 | reach_main_window_setup_flag_checkbox(customGameOptions, this->ui.fieldFlag0, loadouts.flags, 0x01); 13 | reach_main_window_setup_flag_checkbox(customGameOptions, this->ui.fieldFlag1, loadouts.flags, 0x02); 14 | #include "widget_macros_setup_end.h" 15 | } 16 | void PageMPSettingsLoadoutsOverall::updateFromVariant(GameVariant* variant) { 17 | auto data = variant->get_custom_game_options(); 18 | if (!data) 19 | return; 20 | #include "widget_macros_update_start.h" 21 | reach_main_window_update_flag_checkbox(this->ui.fieldFlag0, loadouts.flags, 0x01); 22 | reach_main_window_update_flag_checkbox(this->ui.fieldFlag1, loadouts.flags, 0x02); 23 | #include "widget_macros_update_end.h" 24 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/formats/content_author.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "../helpers/bitnumber.h" 4 | #include "../helpers/stream.h" 5 | 6 | class ReachContentAuthor { 7 | public: 8 | ReachContentAuthor(); 9 | // 10 | cobb::bytenumber timestamp; // seconds since Jan 1 1970 midnight GMT 11 | cobb::bytenumber xuid; 12 | char author[16]; // includes null terminator 13 | cobb::bitbool isOnlineID; 14 | // 15 | bool read(cobb::ibitreader&) noexcept; 16 | bool read(cobb::ibytereader&) noexcept; 17 | void write(cobb::bitwriter& stream) const noexcept; 18 | void write(cobb::bytewriter& stream) const noexcept; 19 | // 20 | void set_author_name(const char* s) noexcept; 21 | bool has_xuid() const noexcept; 22 | void erase_xuid() noexcept; 23 | void set_datetime(uint64_t seconds_since_jan_1_1970) noexcept; 24 | // 25 | static constexpr uint32_t bitcount() noexcept { 26 | uint32_t bitcount = 0; 27 | bitcount += decltype(timestamp)::max_bitcount; 28 | bitcount += decltype(xuid)::max_bitcount; 29 | bitcount += cobb::bits_in * 16; 30 | bitcount += decltype(isOnlineID)::max_bitcount; 31 | return bitcount; 32 | } 33 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/generic/QXBLGamertagValidator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | // 5 | // Made specifically for Halo: Reach, which stores gamertags into user-created content as 6 | // 16-character ASCII strings 7 | // 8 | 9 | class QXBLGamertagValidator : public QValidator { 10 | public: 11 | QXBLGamertagValidator(bool l = true, QObject* parent = nullptr) : QValidator(parent), lax(l) {} 12 | bool lax = true; 13 | // 14 | virtual QValidator::State validate(QString& input, int& pos) const { 15 | if (lax) { 16 | for (auto c : input) { 17 | if (c > 255) 18 | return QValidator::Invalid; 19 | } 20 | return QValidator::Acceptable; 21 | } 22 | for (auto c : input) { 23 | if (c >= QChar('A') && c <= QChar('Z')) 24 | continue; 25 | if (c == QChar(' ')) 26 | continue; 27 | if (c >= QChar('0') && c <= QChar('9')) 28 | continue; 29 | return QValidator::Invalid; 30 | } 31 | return QValidator::Acceptable; 32 | } 33 | 34 | static QXBLGamertagValidator* getReachInstance() { 35 | static QXBLGamertagValidator instance(true); 36 | return &instance; 37 | } 38 | }; -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo/opcode_arg_types/player_traits.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../opcode_arg.h" 3 | #include "../limits.h" 4 | #include "../../player_traits.h" 5 | #include "../../../types/multiplayer.h" 6 | 7 | namespace Megalo { 8 | class OpcodeArgValuePlayerTraits : public OpcodeArgValue { 9 | megalo_opcode_arg_value_make_create_override; 10 | public: 11 | static OpcodeArgTypeinfo typeinfo; 12 | // 13 | public: 14 | cobb::refcount_ptr value; 15 | // 16 | virtual bool read(cobb::ibitreader& stream, GameVariantDataMultiplayer& mp) noexcept override; 17 | virtual void write(cobb::bitwriter& stream) const noexcept override; 18 | virtual void to_string(std::string& out) const noexcept override; 19 | virtual void decompile(Decompiler& out, Decompiler::flags_t flags = Decompiler::flags::none) noexcept override; 20 | virtual arg_compile_result compile(Compiler&, cobb::string_scanner&, uint8_t part) noexcept; // uses VariableReference because we want you to be able to alias traits 21 | virtual arg_compile_result compile(Compiler&, Script::VariableReference&, uint8_t part) noexcept; 22 | virtual void copy(const OpcodeArgValue*) noexcept override; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/formats/detailed_enum.cpp: -------------------------------------------------------------------------------- 1 | #include "detailed_enum.h" 2 | #include "../helpers/qt/string.h" 3 | 4 | QString DetailedEnumValue::get_description() const noexcept { 5 | for (size_t i = 0; i < std::extentinfos)>::value; i++) { 6 | auto& info = this->infos[i]; 7 | if (info.type == DetailedEnumValueInfo::info_type::description) 8 | return info.string; 9 | } 10 | return ""; 11 | } 12 | QString DetailedEnumValue::get_friendly_name() const noexcept { 13 | for (size_t i = 0; i < std::extentinfos)>::value; i++) { 14 | auto& info = this->infos[i]; 15 | if (info.type == DetailedEnumValueInfo::info_type::friendly_name) 16 | return info.string; 17 | } 18 | return ""; 19 | } 20 | 21 | int DetailedEnum::lookup(const char* name) const noexcept { 22 | size_t s = this->size(); 23 | for (size_t i = 0; i < s; ++i) { 24 | const auto& item = this->values[i]; 25 | if (item.name == name) 26 | return i; 27 | } 28 | return -1; 29 | } 30 | int DetailedEnum::lookup(const QString& name) const noexcept { 31 | size_t s = this->size(); 32 | for (size_t i = 0; i < s; ++i) { 33 | const auto& item = this->values[i]; 34 | if (cobb::qt::stricmp(name, item.name) == 0) 35 | return i; 36 | } 37 | return -1; 38 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/formats/detailed_flags.cpp: -------------------------------------------------------------------------------- 1 | #include "detailed_flags.h" 2 | #include "../helpers/qt/string.h" 3 | 4 | QString DetailedFlagsValue::get_description() const noexcept { 5 | for (size_t i = 0; i < std::extentinfos)>::value; i++) { 6 | auto& info = this->infos[i]; 7 | if (info.type == DetailedFlagsValueInfo::info_type::description) 8 | return info.string; 9 | } 10 | return ""; 11 | } 12 | QString DetailedFlagsValue::get_friendly_name() const noexcept { 13 | for (size_t i = 0; i < std::extentinfos)>::value; i++) { 14 | auto& info = this->infos[i]; 15 | if (info.type == DetailedFlagsValueInfo::info_type::friendly_name) 16 | return info.string; 17 | } 18 | return ""; 19 | } 20 | 21 | int DetailedFlags::lookup(const char* name) const noexcept { 22 | size_t s = this->size(); 23 | for (size_t i = 0; i < s; ++i) { 24 | const auto& item = this->values[i]; 25 | if (item.name == name) 26 | return i; 27 | } 28 | return -1; 29 | } 30 | int DetailedFlags::lookup(const QString& name) const noexcept { 31 | size_t s = this->size(); 32 | for (size_t i = 0; i < s; ++i) { 33 | const auto& item = this->values[i]; 34 | if (cobb::qt::stricmp(name, item.name) == 0) 35 | return i; 36 | } 37 | return -1; 38 | } -------------------------------------------------------------------------------- /html/src/variant-content-author.js: -------------------------------------------------------------------------------- 1 | class VariantContentAuthor { 2 | constructor() { 3 | this.date = new Date(0); 4 | this.xuid = BigInt(0); 5 | this.author = ""; 6 | this.isOnlineID = false; 7 | } 8 | parseBytes(stream) { 9 | { 10 | let timestamp = stream.readUInt64(); 11 | this.date = new Date(0); // Unix epoch: Jan 1 1970 midnight GMT 12 | this.date.setSeconds(Number(timestamp)); 13 | } 14 | this.xuid = stream.readUInt64(); 15 | this.author = stream.readString(16, false); // ASCII CString, always 16-bytes in CHDR and variable-length capped to 16 bytes in MPVR; length includes null terminator 16 | this.isOnlineID = stream.readBool(); 17 | stream.skipBytes(3); 18 | } 19 | parseBits(stream) { 20 | { 21 | let timestamp = stream.readUInt64(); 22 | timestamp = _byteswap_uint64(timestamp); 23 | this.date = new Date(0); // Unix epoch: Jan 1 1970 midnight GMT 24 | this.date.setSeconds(Number(timestamp)); 25 | } 26 | this.xuid = stream.readUInt64(); 27 | this.author = stream.readString(16, true); // ASCII CString, always 16-bytes in CHDR and variable-length capped to 16 bytes in MPVR; length includes null terminator 28 | this.isOnlineID = stream.readBits(1) != 0; 29 | } 30 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/game_variants/components/megalo_game_stats.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../../helpers/bitnumber.h" 3 | #include "../../helpers/bitwriter.h" 4 | #include "../../formats/localized_string_table.h" 5 | #include "../../formats/indexed_lists.h" 6 | #include "../../helpers/refcounting.h" 7 | #include "../../helpers/stream.h" 8 | 9 | class GameVariantDataMultiplayer; 10 | 11 | class ReachMegaloGameStat : public indexed_list_item { 12 | public: 13 | enum class Format : uint8_t { 14 | number, 15 | number_with_sign, 16 | percentage, 17 | time, 18 | }; 19 | enum class Sort : int8_t { 20 | ascending = -1, 21 | ignored, 22 | descending, 23 | obsolete_2, 24 | }; 25 | MegaloStringRef name; 26 | Format format = Format::number; 27 | Sort sortOrder = Sort::ascending; 28 | bool groupByTeam = false; 29 | // 30 | void read(cobb::ibitreader&, GameVariantDataMultiplayer&) noexcept; 31 | void write(cobb::bitwriter& stream) const noexcept; 32 | // 33 | bool uses_string(ReachString*) const noexcept; 34 | // 35 | inline static constexpr uint32_t bitcount() noexcept { // constexpr implies inline but let's be explicit 36 | return MegaloStringIndex::bitcount + 2 + 2 + 1; 37 | } 38 | }; -------------------------------------------------------------------------------- /html/src/game-variant-loadout.js: -------------------------------------------------------------------------------- 1 | let LoadoutOptionFlags = new TypedBitfield({ 2 | name: "LoadoutOptionFlags", 3 | }, { 4 | mapLoadoutsEnabled: 0x01, // verify 5 | unknown02: 0x02, 6 | }); 7 | 8 | class GameVariantLoadout { 9 | constructor(stream) { 10 | this.flags = stream.readBits(0); // "enabled" flag 11 | this.nameIndex = -1; 12 | this.weaponPrimary = -3; 13 | this.weaponSecondary = -3; 14 | this.ability = -3; 15 | this.grenadeCount = 0; 16 | // 17 | if (stream) 18 | this.parse(stream); 19 | } 20 | parse(stream) { 21 | this.flags = stream.readBits(1); // "enabled" flag 22 | { 23 | let absent = stream.readBits(1) != 0; 24 | if (!absent) 25 | this.nameIndex = stream.readBits(7, BIT_ORDER_UNKNOWN); 26 | else 27 | this.nameIndex = -1; 28 | } 29 | this.weaponPrimary = stream.readSInt8(); 30 | this.weaponSecondary = stream.readSInt8(); 31 | this.ability = stream.readSInt8(); 32 | this.grenadeCount = stream.readBits(4, BIT_ORDER_UNKNOWN); 33 | } 34 | } 35 | class GameVariantLoadoutPalette { 36 | constructor(stream) { 37 | this.loadouts = []; 38 | for(let i = 0; i < 5; i++) 39 | this.loadouts[i] = new GameVariantLoadout(stream); 40 | } 41 | } -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/script/api/player-set.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Player Set 4 | A group of players. 5 | 6 |

7 | This type represents a group of players, defined relative to some object 8 | or player's affiliation. The following values are supported: 9 |

10 |
11 |
no_one
12 |
Set the relevant group of players to nobody.
13 |
everyone
14 |
Set the relevant group of players to everybody.
15 |
allies
16 |
Set the relevant group of players to all allied players.
17 |
enemies
18 |
Set the relevant group of players to all enemy players.
19 |
default
20 |
Unknown.
21 |
mod_player
22 |
Modifies whether a single player is in the player set. You must pass two 23 | additional arguments: a player variable, and a number or number variable. If 24 | the number is 0, then the player will be removed from the set; otherwise the 25 | player will be added.
26 |
27 |
28 |
-------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/options_window.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "ui_options_window.h" 4 | #include "main_window.h" 5 | 6 | namespace cobb::ini { 7 | class setting; 8 | } 9 | namespace ReachINI { 10 | struct syntax_highlight_option; 11 | } 12 | 13 | class ProgramOptionsDialog : public QDialog { 14 | Q_OBJECT 15 | // 16 | public: 17 | ProgramOptionsDialog(QWidget* parent = Q_NULLPTR); 18 | // 19 | static ProgramOptionsDialog& get() { 20 | static auto* instance = new ProgramOptionsDialog(&ReachVariantTool::get()); // TODO: change this someday 21 | return *instance; 22 | } 23 | void open() Q_DECL_OVERRIDE { 24 | this->refreshWidgetsFromINI(); 25 | QDialog::open(); 26 | } 27 | // 28 | private slots: 29 | private: 30 | void close(); 31 | void refreshWidgetsFromINI(); 32 | void saveAndClose(); 33 | // 34 | void defaultLoadTypeChanged(); 35 | void defaultSaveTypeChanged(); 36 | // 37 | void openFile(); 38 | 39 | private: 40 | Ui::ProgramOptionsDialog ui; 41 | 42 | QVector currentSyntaxHighlightOptions() const; 43 | ReachINI::syntax_highlight_option syntaxHighlightOptionFromUI() const; 44 | void setCurrentSyntaxHighlightOptions(const ReachINI::syntax_highlight_option&) const; 45 | }; 46 | -------------------------------------------------------------------------------- /native/src/ReachVariantTool/ui/generic/MenuButton.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | // 7 | // TODO: Until such time as I figure out how to make QPushButton only open its menu when you 8 | // click on the little down-arrow, this class is unnecessary. 9 | // 10 | // The goal was to have a QPushButton that shows the menu if you click the down arrow, OR 11 | // executes the last selected action (from that menu) if you click the rest of the button. 12 | // 13 | 14 | class MenuButton : public QPushButton { 15 | Q_OBJECT 16 | public: 17 | MenuButton(QWidget* parent = nullptr); 18 | // 19 | QAction* defaultAction(); 20 | void setDefaultAction(QAction*); 21 | QAction* lastAction(); 22 | void setLastAction(QAction*); 23 | // 24 | QList menuActions(); 25 | QAction* addMenuAction(); 26 | QAction* addMenuAction(const QString& text); 27 | void removeMenuAction(QAction* action); 28 | void setContextMenuPolicy(Qt::ContextMenuPolicy policy); 29 | virtual void paintEvent(QPaintEvent* event) override; 30 | // 31 | protected: 32 | QAction* _default = nullptr; 33 | QAction* _last = nullptr; 34 | QList _actions; 35 | int _cachedWidth = -1; 36 | // 37 | QAction* _getActionForClick(); 38 | void _updateText(); 39 | }; -------------------------------------------------------------------------------- /html/documentation/build/resources/sidebar.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | let node = document.querySelector("#sidebar>ul"); 3 | let items = node.querySelectorAll("li"); 4 | let found = null; 5 | for(let item of items) { 6 | if (!found) { 7 | // 8 | // If a sidebar item links to the page we're already on, identify 9 | // it with a CSS class so we can style it differently. 10 | // 11 | let link = item.firstElementChild; 12 | if (link.href == document.location.href) { 13 | link.classList.add("you-are-here"); 14 | found = item; 15 | } 16 | } 17 | if (item.hasAttribute("data-disallow-collapse")) 18 | continue; 19 | // 20 | // Set up expand/collapse buttons: 21 | // 22 | let sub = item.querySelector("ul"); 23 | if (!sub) 24 | continue; 25 | let toggle = document.createElement("a"); 26 | toggle.classList.add("toggle"); 27 | item.insertBefore(toggle, item.children[0]); 28 | } 29 | node.addEventListener("click", function(e) { 30 | // 31 | // Click handler for expand/collapse buttons. 32 | // 33 | let toggle = e.target.closest(".toggle"); 34 | if (!toggle) 35 | return true; 36 | e.preventDefault(); 37 | let item = toggle.parentNode; 38 | item.classList.toggle("collapsed"); 39 | }); 40 | })(); -------------------------------------------------------------------------------- /native/src/ReachVariantTool/docs/working - help docs/editor/main_window_ff/lives.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Player Lives 4 | 5 |

6 | The player lives page allows you to control how many lives players on each 7 | team have. 8 |

9 | 10 |

11 | The fields available to edit are as follows: 12 |

13 |
14 |
Spartan Starting Lives
15 |
Control the number of lives that Spartans start with. The value "unlimited" 16 | exists in place of -1 (i.e. to reach it, decrease the number of lives to "0 17 | lives" and then decrease it again).
18 |
Max Spartan Extra Lives
19 |
Control the maximum number of extra lives that Spartans are allowed to 20 | have.
21 |
Reward for Killing Elite Players
22 |
Control the number of lives that Spartans earn for killing enemy players.
23 |
Elite Starting Lives
24 |
Control the number of lives that Elites start with. The value "unlimited" 25 | exists in place of -1 (i.e. to reach it, decrease the number of lives to "0 26 | lives" and then decrease it again).
27 |
28 | 29 |
--------------------------------------------------------------------------------