diff --git a/README.md b/README.md index 5d4dc00..0fba7ab 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,19 @@ -The **Mission Maker Framework** is a modular mission making addon based on the [Olsen Framework](https://github.com/dklollol/Olsen-Framework-Arma-3) designed to help create high quality Arma 3 scenarios utilizing the in game editor and removing the requirement for mission makers to deal with manual editing of script setting files by implementing editor menus and settings for tailoring the mission. Originally designed for [United Operations](http://unitedoperations.net/). +The **Mission Maker Framework** is a modular mission making addon based on the [Olsen Framework](https://github.com/dklollol/Olsen-Framework-Arma-3) designed to help create high quality Arma 3 scenarios utilizing the in game editor and removing the requirement for mission makers to deal with manual editing of script setting files by implementing editor menus and settings for tailoring the mission. Originally designed for [Global Conflicts](https://globalconflicts.net/). -To learn more about the framework, visit [our wiki](). +To learn more about the framework, visit [our wiki](https://github.com/PiZZAD0X/MMFW/wiki/Intro:--What-is-the-MMFW%3F). -For information on how to make a mission using the framework read [this guide](). +For information on how to make a mission using the framework read [this guide](https://github.com/PiZZAD0X/MMFW/wiki/Intro:-How-the-MMFW-works). To view bugs or requested features, view the [issues](https://github.com/PiZZAD0X/MMFW/issues). If you want to report a bug and do not see your issue listed, you can open a [bug report](https://github.com/PiZZAD0X/MMFW/issues/new?assignees=&labels=&template=bug_report.md&title=). If you want to request a feature not listed you can do so using the [feature request](https://github.com/PiZZAD0X/MMFW/issues/new?assignees=&labels=&template=feature_request.md&title=). You can aid in development of this project by [contributing]() +## Build Instructions +1. [Read this article](https://github.com/PiZZAD0X/MMFW/wiki/Contributing:-Getting-Started) and follow setup instructions +2. Either run a build by navigating to the: + * `Project's root directory\` and run `./hemtt.exe build --release` or; + * `Project's root directory\scripts` and run `python build.py` (this is a helper Python build script) + ### Thanks - [KoffeinFlummi](https://github.com/KoffeinFlummi) for [armake2](https://github.com/KoffeinFlummi/armake2) diff --git a/addons/aidrivers/config.cpp b/addons/aidrivers/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/aidrivers/config.cpp +++ b/addons/aidrivers/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/antind/config.cpp b/addons/antind/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/antind/config.cpp +++ b/addons/antind/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/aolimit/config.cpp b/addons/aolimit/config.cpp index e8df3bb..03dbf86 100644 --- a/addons/aolimit/config.cpp +++ b/addons/aolimit/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/autotrack/config.cpp b/addons/autotrack/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/autotrack/config.cpp +++ b/addons/autotrack/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/briefing/config.cpp b/addons/briefing/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/briefing/config.cpp +++ b/addons/briefing/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/capturezone/config.cpp b/addons/capturezone/config.cpp index 0c35acb..4e4f520 100644 --- a/addons/capturezone/config.cpp +++ b/addons/capturezone/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/core/cfg3den/Respawn/MainRespawn.hpp b/addons/core/cfg3den/Respawn/MainRespawn.hpp index ec0b3f7..3a4723f 100644 --- a/addons/core/cfg3den/Respawn/MainRespawn.hpp +++ b/addons/core/cfg3den/Respawn/MainRespawn.hpp @@ -25,7 +25,7 @@ class EGVAR(Respawn,Category) { control = "CheckBox"; expression = SCENARIO_EXPRESSION; defaultValue = "(false)"; - } + }; class EGVAR(Respawn,SpawnPosRespawn) { property = QEGVAR(Respawn,KillCam); displayName = "SpawnPos Respawn"; diff --git a/addons/core/config.cpp b/addons/core/config.cpp index 9fbb7c7..53e70c2 100644 --- a/addons/core/config.cpp +++ b/addons/core/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main"}; authors[] = {"Olsen","PiZZADOX","Sacher","TheMagnetar","TrainDoc","TinfoilHate"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/core/functions/fnc_RespawnQueueInit.sqf b/addons/core/functions/fnc_RespawnQueueInit.sqf index 39664f3..9ac3f1c 100644 --- a/addons/core/functions/fnc_RespawnQueueInit.sqf +++ b/addons/core/functions/fnc_RespawnQueueInit.sqf @@ -28,14 +28,14 @@ EGVAR(Respawn,RespawnLocations_Civ) = []; [_idPFH] call CBA_fnc_removePerFrameHandler; }; [ - ["BLUFOR", EGVAR(Respawn,RespawnLocations_BLUFOR)], - ["OPFOR", EGVAR(Respawn,RespawnLocations_Opfor)], - ["INDFOR", EGVAR(Respawn,RespawnLocations_Indfor)], - ["CIVILIAN", EGVAR(Respawn,RespawnLocations_Civ)] + ["BLUFOR", EGVAR(Respawn,RespawnLocations_BLUFOR), QEGVAR(Respawn,RespawnLocations_BLUFOR)], + ["OPFOR", EGVAR(Respawn,RespawnLocations_Opfor), QEGVAR(Respawn,RespawnLocations_Opfor)], + ["INDFOR", EGVAR(Respawn,RespawnLocations_Indfor), QEGVAR(Respawn,RespawnLocations_Indfor)], + ["CIVILIAN", EGVAR(Respawn,RespawnLocations_Civ), QEGVAR(Respawn,RespawnLocations_Civ)] ] apply { - _x params ["_teamVar", "_array"]; + _x params ["_teamVar", "_array", "_qEGVar"]; private _eligibleRespawnLocations = [_teamVar] call FUNC(getRespawnLocations); - missionNamespace setVariable [_array, _eligibleRespawnLocations]; + missionNamespace setVariable [_qEGVar, _eligibleRespawnLocations]; }; }, 5, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/covermap/config.cpp b/addons/covermap/config.cpp index 64f1da3..427ecfe 100644 --- a/addons/covermap/config.cpp +++ b/addons/covermap/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/gear/config.cpp b/addons/gear/config.cpp index 0e03389..8306b9d 100644 --- a/addons/gear/config.cpp +++ b/addons/gear/config.cpp @@ -13,7 +13,7 @@ class CfgPatches { }; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/hostage/config.cpp b/addons/hostage/config.cpp index 5000474..ed51ab4 100644 --- a/addons/hostage/config.cpp +++ b/addons/hostage/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/markercontrol/config.cpp b/addons/markercontrol/config.cpp index a121724..beba327 100644 --- a/addons/markercontrol/config.cpp +++ b/addons/markercontrol/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/objectsettings/config.cpp b/addons/objectsettings/config.cpp index 788997f..2740793 100644 --- a/addons/objectsettings/config.cpp +++ b/addons/objectsettings/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"PiZZADOX"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/safestart/config.cpp b/addons/safestart/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/safestart/config.cpp +++ b/addons/safestart/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/selfactions/config.cpp b/addons/selfactions/config.cpp index bb91ab0..4697b1c 100644 --- a/addons/selfactions/config.cpp +++ b/addons/selfactions/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/setuptimer/config.cpp b/addons/setuptimer/config.cpp index 1e4c34e..8114c81 100644 --- a/addons/setuptimer/config.cpp +++ b/addons/setuptimer/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/shotcount/config.cpp b/addons/shotcount/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/shotcount/config.cpp +++ b/addons/shotcount/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/startinparachute/config.cpp b/addons/startinparachute/config.cpp index a121724..beba327 100644 --- a/addons/startinparachute/config.cpp +++ b/addons/startinparachute/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/starttext/config.cpp b/addons/starttext/config.cpp index 69fe42f..1c8444e 100644 --- a/addons/starttext/config.cpp +++ b/addons/starttext/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/addons/teamcolour/config.cpp b/addons/teamcolour/config.cpp index e331257..8722034 100644 --- a/addons/teamcolour/config.cpp +++ b/addons/teamcolour/config.cpp @@ -9,7 +9,7 @@ class CfgPatches { requiredAddons[] = {"MMFW_main","MMFW_core"}; authors[] = {"Olsen","PiZZADOX"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/hemtt.json b/hemtt.json index f027bd4..b3c4bf8 100644 --- a/hemtt.json +++ b/hemtt.json @@ -5,5 +5,6 @@ "files": [ "mod.cpp" ], + "exclude": [], "sigversion": 3 -} \ No newline at end of file +} diff --git a/optionals/acre/config.cpp b/optionals/acre/config.cpp index 42b4eae..4edebe2 100644 --- a/optionals/acre/config.cpp +++ b/optionals/acre/config.cpp @@ -13,7 +13,7 @@ class CfgPatches { }; authors[] = {"Olsen","PiZZADOX","Sacher"}; author = "MMFW Team"; - authorUrl = "https://github.com/unitedoperations"; + authorUrl = "https://github.com/Global-Conflicts-ArmA"; VERSION_CONFIG; }; }; diff --git a/scripts/build.py b/scripts/build.py new file mode 100644 index 0000000..8cd6f16 --- /dev/null +++ b/scripts/build.py @@ -0,0 +1,89 @@ +"""Mission Maker Framework Python Build Script + +Author: Edward McKnight (EM-Creations.co.uk) +Requires: Python 3.8 + +This script provides a more friendly interface to interact with the hemtt build +tool for this ArmA 3 addon. + +At the moment this tool only supports building in a Windows OS and requires that +the hemtt.exe file is located in the project's root directory. +""" + +import argparse, subprocess +from pathlib import Path + +arg_parser = argparse.ArgumentParser(description="Mission Maker Framework Python Build Script") +arg_parser.add_argument("-v", "--verbose", help="Verbose output", action="store_true") +arg_parser.add_argument("-s", "--silent", help="Silent / faster run", action="store_true") +args = arg_parser.parse_args() + +version_file_location = "..\VERSION" +hemtt_file_location = "..\hemtt.exe" + +hemtt_build_command = [hemtt_file_location, "build", "--release"] +hemtt_clean_force_command = [hemtt_file_location, "clean", "--force"] + +error_release_already_exists = "Release already exists" +output_cleaned = "all releases" + +def run_hemtt_build_command(): + process = subprocess.Popen(hemtt_build_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + allOutput = "" + allErrors = "" + + while True: + output = process.stdout.readline() + errors = process.stderr.readline() + if process.poll() is not None and output == b'': + break + if not args.silent: + if output: + output = output.decode("utf-8").strip() + allOutput = allOutput + output + print(output) + if errors: + errors = errors.decode("utf-8").strip() + allErrors = allErrors + errors + print(errors) + + return (allOutput, allErrors) + +if not args.silent: + print(""" + _ _ _ _ ____ _ _ _ ___ _ _ _ _ ___ ____ ____ ____ _ ___ ___ + |\/| |\/| |___ | | | |__] | | | | | \ [__ | |__/ | |__] | + | | | | | |_|_| |__] |__| | |___ |__/ ___] |___ | \ | | | + + """); + +if not args.silent: + if args.verbose: + print("Fetching version from '" + version_file_location + "'..") + + if Path(version_file_location).is_file(): + with open(version_file_location, 'r') as file: + versionData = file.read().rstrip() + + print("Version: " + versionData) + +if args.verbose: + print("Checking hemtt exe exists at '" + hemtt_file_location + "'..") + +if not Path(hemtt_file_location).is_file(): + print("Hemtt exe not found, exiting..") + exit() + +hemtt_build_output = run_hemtt_build_command() + +if error_release_already_exists in hemtt_build_output[1]: + if args.verbose: + print("Failed the initial build, cleaning and trying again..") + + hemtt_build_output = subprocess.run(hemtt_clean_force_command, capture_output=True, text=True) + + if output_cleaned in hemtt_build_output.stdout: + if args.verbose: + print("Clean succeeded, trying to build again..") + + run_hemtt_build_command()