# Installation Instructions

The only file which should be pre-existing in your mission folder is `mission.sqm`, once freshly saved from Arma 3's EDEN Editor.

Download the latest mission template zip from the [latest release](https://gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/MissionTemplate/releases/latest) and copy its contents to the folder where your mission file lives.

Once copied, the final structure should appear similar to the following:
```
├── defines/
├── framework/
├── images/
├── scripts/
├── sounds/
├── textures/
├── CHANGELOG.md
├── custom_leaflets.hpp
├── custom_scripts.hpp
├── CHANGELOG.md
├── description.ext
├── mission.jpg
├── mission.sqm
├── mission_settings.hpp
├── README.md
```

> **Note:** If you're building a mission for use and not actively developing code, you should download the `mission-maker-template` zip file which is a cleaned version of this framework. The `aaFrameworkUtils` and `framework\x` directories in the source tree are for the purposes of development and would only add size bloat to the mission download when players connect to your mission.

After the requisite configuration file edits have been made, your mission is ready to be packed into a pbo for deployment.

# Files

Almost none of the template files should be edited in anyway as they have been formatted specially and specifically for their purpose. 

*The following files however **must** be edited:*
`mission_settings.hpp`

*The following files however **should** be edited:*
`mission.jpg`

## mission_settings.hpp

The contents of this file must be edited to reflect the naming of your mission for display purposes. All variables are self-documented inside the file to clearly identify the purpose of each piece of required text

The contents of the lower half of the file contain templated declaration blocks where the mission maker can define custom waypoints to be automatically added to the ACE MicroDAGR, and define/edit the custom built in `#ace-fortify` preset.

## mission.jpg

This file will be displayed the client mission loading screen.
File should remain small *(under 300KiB)* and should optimally be `1024px by 512px` in resolution

## custom_leaflets.hpp

This file contains the temeplate block for declaring custom leaflets to be used within missions.

## custom_scripts.hpp

This file contains an accessbile `CfgFunctions` declaration block for custom functions which require setup in this manner.

## defines/

This directory contains the definition files use by the framework in various places. *Contents should not be edited*

## framework/

This directory contains the code for the mission framework. **Contents must not be edited.**

## images/

This directory is for organizational purposes for any images you wish to use in your mission

## scripts/

This directory is for organizational purposes for any custom scripts you wish to use in your mission.
> **Note:** Scripts may need to be edited to account for their new location

## sounds/

This directory is for organizational purposes for any custom scripts you wish to use in your mission.
> **Note:** Using custom sounds require adding the proper CfgSounds codeblock into mission_settings.hpp

## textures/

This directory is for organizational purposes for textures files used by mission scripts.


# Development Notes

All modules are broken apart as such in /framework. Client and server inits are managed in /framework/init.

Pay attention to framework/script_mod.hpp prior to deployment of releases, as the debug settings within will determine what is logged during prod missions.

CfgFunctions is sensitive to the folder/script_component.hpp of each module.

### `defines` Directory

This directory contains a number of hpp files used to define constants throughout the framework. These should ONLY be edited by or with the supervision of a developer to reflect format battalion-wide changes.

- `ApprovedAssets.hpp`: Contains subclasses for approved aerial assets with their assigned callsigns. Used primarily in `fbcb2_assets`.
- `BattalionInfo.hpp`: Used for representing Battalion structure, element callsigns, and radio frequency assignments. Used primarily in `fbcb2_main`.
- `DisallowedEquipment.hpp`: Contains flagged item classnames by category that players may not use, or may use only in specific roles. Used to monitor and enforce equipment restrictions.
- `SignalColors.hpp`: Contains smoke/flare/chemlight colors and what they represent in the field. Used primarily in `fbcb2_main` for the Signal Colors diary record.
- `SupplyCrates.hpp`: Contains the types, contents, and metadata for all supply crate types in the `resupply` module.
- `VehicleFlags.hpp`: Defines system information, flag categories, and flag options used to populate ACE3 interaction menus for vehicles. Used by the `vehicleFlags` module.


### Modules List

*Within `framework`:*

- `ambience`:
  - Adds ambient flak capabilities.
- `client`:
  - Contains core client-side event handlers and actions that don't fit into other modules.
- `common`:
  - Contains common functions and variables used by multiple modules.
- `fbcb2_main`:
  - Contains the main FBCB2 functionality and initialization code. Populates the briefing/diary with mission information.
- `fbcb2_assets`:
  - A subcomponent of `fbcb2_main`. Used to gather, display, and manage diary records as intel for assets near known bases.
- `init`:
  - Contains core initialization functions. Both server and client inits across all modules are managed here.
- `mapcopy`:
  - Gives players the ability to copy each other's maps.
- `performance`:
  - Contains functionality for monitoring and logging performance data.
- `reinsert`:
  - Provides a reinsertion queue system for players and pilots to maximize efficiency of the reinsertion process.
- `resupply`:
  - Provides a Zeus module and standalone function to spawn pre-equipped supply crates onto the battlefield.
  - Supply crate definitions are stored in `defines/SupplyCrates.hpp`.
  - Optionally, allows players to spawn supply crates from arsenal boxes.
- `triageIcons`:
  - For those with medical permissions (`ace_medical`), provides a configurable 3D icon over unconscious units indicating their current ACE Triage Card status.
- `vehicleFlags`:
  - Provides an ACE3 interaction menu that allows players to attach and remove flags from vehicles.
  - Flags are defined in `defines/VehicleFlags.hpp`.

c