Revolution RPG is an atypical roleplaying gamemode in Arma 3.
The ultimate goal of this project is to bring back the Arma 2 style, mindset and feel of RPG/Life gameplay with improved feature set.
- light, arcade roleplay that's still fun for everyone, including new players
- allowing as much creativity by players as possible
- minimal ruleset by default
- fast progression
- endgame
- lots of PvP action.
Another important aspect of Revolution RPG is that it returns the control of the game back to players: e.g. leaders ingame are voted by the players.
Join our Discord if you're interested in the project.
Please note that due to e.g. some external code used in this project, the license of the source code is GNU GPLv3. See LICENSE
file in main directory of the repository. See https://fossa.com/blog/open-source-software-licenses-101-gpl-v3/ for well written explanation.
In short, you are allowed to...
- use the code for commercial purposes
- change the code
- distribute copies or modifications of the code (including binaries)
- place warranty
...as long as you...
- release the modified source code publicly
- explain/state the changes made to the original source code
- include the same license (GNU GPLv3) with full license text in the modified source code
- include copies of the original copyright notices already included in the source code that you've edited
- include installation instructions of the modified source code.
- Arma 3
- Arma 3 DLCs (optional, depending on the server)
- Arma 3 or Arma 3 Server dedicated Steam package (see Development setup below). Note that you need to host the gamemode on a dedicated server, i.e. with
arma3server_x64.exe
. Player hosted (ingame) servers do not work properly.
Please note that:
- There are two important core folders (containing code and data) in the main directory of repository:
core
andcoreUi
. - This guide is mostly for Windows users. (I assume that most Linux users can figure the following out mostly themselves.)
- Clone this repository either with a Git client or download the ZIP file from the button in upper part of this page.
- Unzip the ZIP file (if it's what you downloaded manually).
- Copy the
core
folder (located at the main directory of this repository, wherever you have it on your disk) intoRevolution.WORLDNAME/functions/
(whereWORLDNAME
is the internal Arma 3 world name of the map you want to play on – note that e.g. Livonia is internally named asEnoch
!).
4. Deploying Revolution RPG on server — Copying common core user interfaces and related base defines to mission folder
- Copy the
coreUi
folder (located at the main directory of this repository, wherever you have it on your disk) intoRevolution.WORLDNAME/ui/
folder (whereWORLDNAME
is the internal Arma 3 world name of the map you want to play on – note that e.g. Livonia is internally named asEnoch
!).
- Note that this step is strongly recommended in production, i.e. if you're actually hosting the gamemode for others to play.
- Optionally, you probably want to compile the mission files into a packed PBO file for multiple reasons (like optimization and bunch of other reasons). Use the tool you prefer for that.
Please note that:
- I strongly suggest creating some hard (directory) links (not symbolic links or file links!) as follows. See the example general level guide how to create symbolic and hard links here: https://www.howtogeek.com/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/.
- This allows you to have the luxury of editing single file ("source of truth") that gets reflected automatically to other relevant folders by your operating system. There's no need to copy and paste edited files manually anymore every time you make a change to source code! (It's a very common source of bugs and errors too.)
- As you will notice, everything in the development process that can be automated has been automated (or it's intended to become automated eventually at least). This reduces the number of possible sources of bugs (as manual processes tend to be error prone). It also frees a surprisingly large amount of your mental capacity to be used in actual development and not focusing on basically useless and repetitive tasks that indeed also tend to create those nasty bugs when you forgot to copy-paste a file or folder in the correct directory and it resulted in weird error that you spent hours debugging until realizing that the files are not in sync, and so forth.
- Fork this repository with Git (or just download it with a Git client or directly as ZIP file from the upper part of this page) – it's up to you to choose the method.
Then start creating the hard directory links (with a tool you've chosen or command line – again, it's up to you to choose the method).
(1.2) Development setup — Prerequisites — Creating hard link from core folder to actual mission folder
- Destination/Link #1:
Revolution.WORLDNAME/functions/core
folder (whereWORLDNAME
is the internal Arma 3 world name of the map you want to play on – note that e.g. Livonia is internally named asEnoch
!). Depending on the tool or script/command line you're using, you might need to create an emptyRevolution.WORLDNAME/functions/core
folder at first. - Source/Target #1:
core
folder (located at the main directory of this repository, wherever you have it on your disk).
(1.3) Development setup — Prerequisites — Creating hard link from coreUi folder to actual mission folder
- Destination/Link #2:
Revolution.WORLDNAME/ui/coreUi
folder (whereWORLDNAME
is the internal Arma 3 world name of the map you want to play on – note that e.g. Livonia is internally named asEnoch
!). Depending on the tool or script/command line you're using, you might need to create an emptyRevolution.WORLDNAME/ui/coreUi
folder at first. - Source/Target #2:
coreUi
folder (located at the main directory of this repository, wherever you have it on your disk).
- Additionally, after completing the previous steps in Development setup, you might want to make (preferably again hard) directory links to your profile MPMissions folder (
yourArma3ProfileFolder/mpmissions
(for quick development in 3DEN editor) and game installation MPMissions directory (Steam/steamapps/common/Arma 3/MPMissions
) for actual testing (including locality) with other players. - Note!
yourArma3ProfileFolder
might be located atyourUsername\Documents\Arma 3
oryourUsername\Documents\Arma 3 - Other Profiles
on Windows.
- Destination/Link #3:
Revolution.WORLDNAME
folder inyourArma3ProfileFolder
(!). (Depending on the tool or script/command line you're using, you might need to create an emptyyourArma3ProfileFolder/mpmissions/Revolution.WORLDNAME
folder at first). - Source/Target #3:
Revolution.WORLDNAME
folder (located at the main directory of this repository, wherever you have it on your disk).
For locality testing or testing the code with multiple players on an actual dedicated Arma 3 server:
yourArma3ServerInstallDirectory
can be either Arma 3 install directory or dedicated Arma 3 Server Steam package.- Note! If you're using dedicated Arma 3 Server Steam package, you need to edit a file called
steam_appid.txt
in its install directory and replace the value with in the file with107410
with e.g. Notepad (do not use a text editor like Word or Wordpad!). Then set thesteam_appid.txt
file to read-only mode. (Right-click the file in File Explorer and select "Properties", then tick the "Read only" box and save the changes.)
(3.2) Development setup — local dedicated server setup — Creating a hard link from development folder to your local dedicated server
- Destination/Link #4:
Revolution.WORLDNAME
folder in your Arma 3 (Server) installation folder ->MPMissions
folder. (Depending on the tool or script/command line you're using, you might need to create an emptyArma3OrArma3ServerInstallDirectory/MPMissions/Revolution.WORLDNAME
folder at first). - Source/Target #4:
Revolution.WORLDNAME
folder (located at the main directory of this repository, wherever you have it on your disk).
- Repeat the development setup steps above for each Arma 3 map that you wish to play on (that's supported, unless you create the configs and map specific functions for the map yourself).
- You might need to close the server process (if it's running) every time before saving your edits to the source code when editing the mission, as the server process locks the files that it uses while it's running, thus preventing them from being overwritten. I haven't tested this myself, so I'm not sure how different operating systems handle the hard links if linked files are locked/in use by a process.
- Open the main directory of this repository (wherever you have it on your disk) with your favourite code editor and start editing! (My choice is Visual Studio Code with some awesome Arma 3 related extensions that make scripting Arma a ton easier.)
In case of you completed the previous steps in development setup (again, strongly recommended):
- If you want to modify core files, edit only files inside the
core
andcoreUI
folders in the main repository folder, wherever it's located on your disk. The changes you'll make to the core folders get reflected to other folders automatically thanks to the (hard directory) links that you created in previous steps. (Just remember to save your changes in the code editor unless your editor does it automatically.)
CfgFunctions
is a modern way to declare your functions in Arma 3. It offers various important benefits, like better security, more advanced debugging opportunities, and even improved performance. See Bohemia Wiki - Arma 3: Functions Library for further information.- This repository contains several copies of a Python script named
generate.py
that automatically generatesCfgFunctions.hpp
file that you can run after adding, removing or renaming functions (instead of updatingCfgFunctions.hpp
manually). If you decide to not to use the Python script, you need to updateCfgFunctions.hpp
by yourself. The Python script has been originally developed by 7erra and further modified by me, Ezcoo. You need to have modern version of Python installed for it to work. CfgFunctions.hpp
and the Python scripts (generate.py
) for each map are located atRevolution.WORLDNAME/functions
folder.- Note: As you might have noticed already, the Python script needs to be run separately for each map (for now at least) so that the map specific functions in
Revolution.WORLDNAME/functions/mapSpecific
get included as well. (A fully automated solution might appear here in future. Soon™.) - Install Python from Microsoft Store (recommended method) on Windows or download and install it from here: https://www.python.org/downloads/).
- Configure the script: open
generate.py
in a code editor and replace thetag
variable's (marked with comment) value with your own value if needed. Do not change the variable name itself!
- After installing Python, you can run the script (located at
Revolution.WORLDNAME/functions/generate.py
) from command line with command:python3 generate.py
(on Windows). Note that your current command line/terminal folder needs to be the folder where the script is located at; you can open the current directory on command line by right-clicking empty space in the folder in File Explorer and choosing the appropriate option from the menu. The same applies to most Linux distributions as well. - Repeat this step (4.2.) for each map and every time you rename, add or remove function files (such as imaginary
core/functions/gps/fn_tutorialExample.sqf
) regardless of whether they are contained in core or map specific files before launching the mission in editor or launching your server. - It's probably a good idea to keep a command line or terminal in a correct folder open in the background while developing, using a shortcut in it (press UP arrow key to get the last line you've written to the command line/terminal) and then pressing ENTER to recompile the script since you need to do it all the time while at it.
(5.4) Automatic generation of CfgFunctions
— Function file naming standards & folder structure (mandatory)
- Note: the function filenames must adhere to the official naming standard (
fn_yourFunction.sqf
) and adhere to a proper folder structure too! See more info aboutCfgFunctions
and the required standards here: Bohemia Wiki - Arma 3: Functions Library: Function Declaration. - Core files (core file = used on all maps) must be added to
core
(functions) orcoreUi
(user interfaces and base defines) folders (located at the main directory of this repository, wherever you have it on your disk). - Map specific files have to be added to
Revolution.WORLDNAME/functions/mapSpecific/WORLDNAME
(functions) orRevolution.WORLDNAME/ui/mapSpecific/WORLDNAME
(map specific defines and user interfaces).
Use CfgFunctions! It was added for a reason. Really, I'm not joking here.
I'd like to thank everyone involved in this project and it's predecessors. Special thanks go to the following people and projects:
- AmauryD
- code34
- Kifkick
Others:
- qbt for allowing me to use the code of the predecessor of this project, Daylight RP (and teaching me so many things about SQF in general etc.)
- Chewz for generously allowing me to use his server for testing and being helpful person in general
- 7erra for his awesome CfgFunctions generation script that I modified further
- Everyone in the Arma community who has helped me to make this happen (just to name a few: Leopard20, Dedmen, Lou Montana, Sa-Matra, koalas, R3vo) – if I forgot to name you here, contact me!