The multi-function display framework, developed by myself along with advice from the team at Worst Case Scenario (WCS), along with some good feedback from ceo_of_bacon (sorry for log spam!), is intended for use in modern helicopters. MFDF comes with multiple prebuilt pages designed for the H-47 Chinook but also includes a Custom page function which allows for configuration of a custom layout, and dynamic altering of text and progress bars (percent tapes).

Preface

The purpose of MFDF is to provide the ability to display vital information virtually within world space, originally developed for the H-47 Chinook mod. The MFD relies on scripting to gather signal information (generated for vehicles via game code - or by other scripts), and updating GUI layout files with that information. The framework handles several pain points relating to replication - which ensures that displays are synchronized between players. This was a relatively easy hurdle to tackle through the use of RplProps - which are essentially replicated variables which are updated for players within streaming range. The most important feature of the framework is through understanding how script components work within Arma Reforger.

graph TD
    %% Main Vehicle and Component Relationship
    Vehicle["Vehicle Prefab"] --> ScriptComp["ScriptComponent Instance"]
    
    %% Server-side Flow
    subgraph Server["Server Instance"]
        ScriptComp --> ServerLogic["Server-side Logic"]
        ServerLogic --> RplProps["Replicated Properties (RplProps)"]
    end
    
    %% Client-side Flow
    subgraph Client["Client Instance"]
        RplProps --> ClientLogic["Client-side Logic"]
        ClientLogic --> LocalState["Local State Updates"]
        LocalState --> Display["Display Updates"]
    end
    
    %% Streaming Range Mechanics
    StreamRange{"Player in Streaming Range?"}
    StreamRange -- Yes --> ClientLogic
    StreamRange -- No --> Inactive["Component Inactive"]
    
    %% Player Actions
    PlayerActions["Player Actions (Turn On/Off, Change Settings)"] --> RplProps
    
    %% Global State Sync
    RplProps --> GlobalSync["Global State Synchronization"]
    GlobalSync --> |"Updates All Players"| Display
    
    %% Styling
    classDef server fill:#f96,stroke:#333
    classDef client fill:#9cf,stroke:#333
    class Server server
    class Client client

<aside> đź’ˇ

If you are familiar with Optional Dependencies, this framework uses #define AG0_MFDFramework.

</aside>

Set Up

<aside> ⚠️

Please do not create modded overrides for the component script, as it will affect all helicopters with the MFD ScriptComponent. There are future plans to open up custom functions for display updates so please hang tight!

</aside>

As of this point in time no screens are included with the mod (eventually will come with some). To make a screen in Blender, add a mesh (plane) and assign a material to it. After manipulating screen size, unwrap the UV map onto the material/texture. You can use texture editor to draw a smiley face on the screen to ensure that it shows up properly on the texture. Collider is necessary if you have a destruction component on the screen’s prefab - you can add one to future proof and prevent issues down the road. Due to game limitations for render targets - using SlotManager is a requirement.

Download the MFD Framework mod within Arma Reforger. https://reforger.armaplatform.com/workshop/64EE818E08AFCF94-MFDFramework

Open your mod with the MFD Framework addon in Workbench and create a GenericEntity prefab for your screen. You simply need a mesh object and hierarchy component for it.

image.png

The MFD Framework mod comes with a PIP material located in Assets, you can assign it via MeshObject component. You can also create your own, as long as you set the AlbedoMap to $rendertarget.

image.png

Then, navigate to your vehicle and find the SlotManagerComponent. Add a RegisteringComponentSlotInfo to it, remember what you name it, and add your prefab to it. At this point in time all checkboxes can be unchecked.

We can pivot to MFD page creation, make a duplicate of MFD_CustomBase located in UI/layouts. For easy visual editing, drag the Frame0 widget outside of the RTTextureWidget:

image.png

image.png

image.png

image.png

Add text widgets, image widgets, and progressbarwidgets to your hearts content to prettify the display. Later on, you will link named widgets to the script component config, so it is recommended to use some type of prefix to help you keep things organized (like SignalTorque).

Just remember to drag the Frame0 back to being a child of RTTextureWidget before testing/publishing - otherwise the display will be white and your widgets will render on top of the player screen.

Go back to the vehicle properties window, Right Click on Vehicle and hit “Add Component”. Search for AG0_MultiFunctionDisplayComponent. Add it to your aircraft.

image.png

| Enabled Compartments:

Uses UniqueCompartmentName defined in CompartmentManager to determine what compartments are checked for functionality of MFDs. Especially important for Map page.
Enabled: Self explanatory
MFD Configs:
Add as many as screens exist on your aircraft. Each config is linked to the Slot Name given by Slot Manager, ensure they match!

Page config is found by scrolling down.