Bohemia Interactive ARMA 3

About
Experience true combat gameplay in a massive military sandbox. Deploying a wide variety of single- and multiplayer content, over 20 vehicles and 40 weapons, and limitless opportunities for content creation, this is the PC’s premier military game. Authentic, diverse, open - Arma 3 sends you to war.

The Linux port looks to be a native port (not using Wine), with the binary executable named "arma.i386".

The following features have not been ported.
 * BattlEye - Good luck finding any multi-player servers not mandating BattlEye!
 * Controller Input Detection - There is apparently no auto detection for for your joystick or TrackIR device! Nor does it look like any devices are even operable aside from keyboard input.  FIXME: See below BI Studio Community Ports within References.  Configure joysticks within Steam's Big Picture menu.
 * No Advanced Flight Model - For those of us whom enjoy breaking tail rotors or main rotors, this is going to make flying boring. Not too mention, requiring a magnifying glass to read the instrument panel!
 * No Launcher - I and most others probably enjoy using command line instead, making debugging easier. This is probably the only item a Linux user can easily do without.

Install Steam
Install steam using "emerge games-util/steam-meta", or following the appropriate Gentoo Wiki for installing the Steam client.

Install ARMA 3
Once you have Steam installed and have either created or logged into your existing account, search for the ARMA 3 game clicking "Games" > "View Games Library" > "SteamOS + Linux" or if you haven't purchased the game, then purchase the game clicking "STORE" just below the top menu bar. The initial download requires 9-12 hours using DSL.

GPU Driver Requirements
ARMA 3 requires OpenGL 4.1, and doesn't appear to be GPU bound due to the various driver implementations.


 * NVIDIA: =x11-drivers/nvidia-drivers-352.30 works
 * AMD: ?

Common Startup Parameters

 * "-noLogs -nosplash -world=empty -skipIntro"
 * "-window"
 * "-winxp"

Folder Locations
The top root folder for all ARMA 3 folders appears to be "/home/USER/.local/share/bohemiainteractive/arma3/" which appears to contain the AppDataLocal/ AppDataShared/  GameDocuments/. With the exception of GameDocuments being equivalent to the "C:\Users\user\Documents\Arma 3\". (Replace USER with your user name!) This is really nice, as we now have a central location for almost all files, with the exception of the main program files still being located under the Steam root folder.

The following lists the equivalent folder locations for Windows folder locations in comparison to Linux folder locations.

User Configurations and User Editor Created Missions For example, the "C:\Users\user\Documents\Arma 3\" is similar to "/.local/share/bohemiainteractive/arma3/GameDocuments/Arma\ 3\ -\ Other\ Profiles/USER/" folder. (Unknown if this is an error, as it's slightly different on Linux.)

Error RPT logs "C:\Users\USER\AppData\Local\Arma 3" is similar to "/home/USER/.local/share/bohemiainteractive/arma3/AppDataLocal/Arma\ 3/" folder.

ARMA 3 Root Program Folder "C:\Program Files (x86)/Steam/SteamApps/common/Arma 3/" is similar to "/home/USER/.local/share/Steam/SteamApps/common/Arma\ 3/"

ARMA 3 does not Start on x86 64 bit Platforms

 * ARMA 3 is a 32 bit application and requires some applications to provide 32 bit libraries and executables.

Add "media-libs/libsdl2 abi_x86_32" to /etc/portage/package.use and recompile to provide a libsdl2 32 bit version for ARMA 3


 * Another likely more appropriate solution using internal Steam pre-compiled Linux libraries would be to create another wrapper start script (ie. arma3.sh) within the existing ARMA 3 starting script and binary, using the following statement:

LD_PRELOAD=$HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libSDL2-2.0.so.0 ./arma3

Change execute permissions (chmod 755 arma3.sh) and execute the game using this file (./arma3.sh). Do not forget to first, login in to steam. Users would use this solution, if for some reason, they cannot utilize the existing starting wrapper script.

ARMA 3 still does not start or shows on the wrong display.
When using multiple monitors or displays, use "--eon_force_display=0". (FIXME: You'll likely see the monitor being reported within one of the log files. Either the steam log or *.RPT file.)

Continuing Non-specific Startup Problems
Try running the game manually instead of using the Steam client. This manual execution method is also the apparent method for debugging Steam wine applications/games and being able to specify the extra Wine execution parameters.

Start and login with the Steam client within one window, without executing the game or application.

Change to the root application/game folder, replacing USER with your login name. $ cd /home/USER/.local/share/Steam/SteamApps/common/Arma\ 3

Manually execute arma3 binary $ ./arma3 --eon_force_display=0 -world=empty -skipIntro -window

Joystick not found
First, the Linux ARMA 3 port does not use the MS Windows DirectX method, and requires using SDL2. The ARMA 3 port chose to use Steam Big Picture mode for configuring controllers. First switch to Big Picture mode and verify your controller exists within the Setup > Controllers menu.

If your joystick controller does not show within the Setup > Controllers menu, then find your /dev/input/event device file relative to your joystick and make your /dev/input/event* world readable and possibly writable. (ie. chmod a+rw /dev/input/event15) Restart Steam and navigate back to the controller setup menu and your device should now be found. Also try using the following incantation when starting Steam, "env SDL_JOYSTICK_DEVICE=/dev/input/event15 steam" if you're still having problems.

Joystick not configurable or has incorrect scheme
Since the ARMA 3 Linux port uses the Steam Big Picture mode for controller configurations, as far as I know, this scheme seems to be only engineered for Game Pads and not really meant for joysticks!

I'll try to iterate what I've done so far to try to make my joystick usable.

Game controller settings are saved to "/home/$USER/.local/share/Steam/config/config.vdf". (You might find others whom have already configured and published their config.vdf controller settings.) You will only get a save dialogue once you've configured most or the required keys. Once you've saved any button mappings, you can likely use games-util/antimicro (and requires Qt5) for customizing or correcting the joystick axis and button mappings within the config.vdf. Another method instead of using AntiMicro for configuring your joystick, starting emerging (or compiling) libsdl2 and break out of the compile. Change to the root build folder containing the test utility folder. (ie. cd /var/tmp/portage/media-libs/libsdl2-2.0.3-r200/work/SDL2-2.0.3/test) Type "./configure" and then "make", should build all the utilities, but you'll just need the ./controllermap utility and can output the SDL2 game controller mapping for use with Steam's SDL_GamepadBind variable. SDL2 game controller mapping definitions can be found here http://wiki.libsdl.org/SDL_GameControllerAddMapping or within SDL_gamecontroller.h, further used within SDL_gamecontroller.c. Another tip, once you have the joystick showing within the ARMA 3 Configure > Controllers menu, the joystick may show only within the "Controllers with a Scheme" menu. Disabling this controller within this menu will then show the controller within the "Customizable Controllers" menu. After doing this, the controller will then be detected within the ARMA 3 mapping menus, but only the axis and buttons previously mentioned within the SDL2 SDL_GamepadBind will be detected. (This is as far as I've gotten, and only able to use only one or two buttons and axis. Joystick up axis, left axis, main trigger secondary button, throttle forward axis.)  The following text line should be the last line within the config.vdf file.

The following file is a little better, with most of the axis working except right/left bank inoperable and reversed. Trigger button can't be mapped.

The following provides some further game controller variables (ie. back, start, rightx, righty, leftx, lefty, ..., and seem to be further documented within SDL_gamecontroller.c) http://www-personal.umich.edu/~bazald/l/api/_s_d_l__gamecontroller_8c.html

Also note the config.vdf should be able to handle C style comments (ie. "//" and even '/'), but upon Steam each execution, commented lines appear to be unfortunately removed. Hence, you'll need to manually backup the file instead. As such, this is unhappy hacking for me.

No Multi Player Servers Available
The ARMA 3 Linux port is currently stuck at version 1.42. You or somebody else will need to host an ARMA 3 server using the previous 1.42 version. Per the below references, the ARMA 3 Linux/MAC port may unfortunately never see a newer version.

I speculate having no future version releases for the Linux or MAC ports is due to not having the following features; no BattlEye (anti cheat support), completed joystick support, and advanced helicopter controls. Without these features, many users maybe discouraged from using the Linux or MAC ports.

References: Basic

 * Bohemia Interactive ARMA 3 official web page: http://arma3.com/
 * Bohemia Interactive Experimental Ports: http://dev.arma3.com/ports
 * Arma 3 Feedback Tracker: http://feedback.arma3.com/
 * Bohemia Interactive ARMA 3 developer hub: http://dev.arma3.com/
 * BI Studio Community Ports: https://community.bistudio.com/wiki/Arma_3_Experimental_Ports
 * BI Studio Community Developer Change Log: http://forums.bistudio.com/topic/140837-development-branch-changelog/

References: Scripting

 * ArmA: Scripting - Getting Started: http://community.bistudio.com/wiki/ArmA:_Scripting_-_Getting_Started
 * Category:Scripting Topics: http://community.bistudio.com/wiki/Category:Scripting_Topics
 * Category:Scripting Commands: http://community.bistudio.com/wiki/Category:Scripting_Commands
 * Category:Arma 3: New Scripting Commands List: http://community.bistudio.com/wiki/Category:Arma_3:_New_Scripting_Commands_List