Map Indexing

From ALiVE Wiki
Revision as of 16:44, 25 March 2016 by Tupolovs (Talk | contribs)

Jump to: navigation, search

Map Indexing Step by Step Instructions

Preparation

Read and follow these instructions very carefully!

  • ALiVE must be in @ALiVE folder in ArmA3 (Warning: folder name is case sensitive!)
  • `ALiVEClient.dll` and alive_objects_blacklist.txt must be in the `@ALiVE` folder
  • Acquire a copy of Mikero's Tools and check the version of [deWRP https://github.com/ALiVEmod/alive/blob/develop/utils/tools/mikero/DeWrp.exe] (the version dated 09/08/2014 seems to work best). This requires [DePbo.dll https://github.com/ALiVEmod/alive/blob/develop/utils/tools/mikero/DePbo.dll]
  • `DeWRP.exe` must be installed on Windows (i.e. have a dewrp.exe directory set in your PATH environment variable)
  • Make sure all .exe and .dll files are 'unblocked' in Windows (right-click, Properties)
  • Download Baretail and use it to monitor the ArmA3 rpt file as you run the scripts (`c:\users\username\appdata\local\ArmA 3\`)

Index the Map!

  • Start ArmA with command line `-mod=@ALiVE; @CBA_A3; @YourCustomMap -filePatching`
  • Open the Editor
  • Place down a player unit
  • Place the `ALiVE Map Indexer` Module
  * Object Categorization:
     * `Yes` Allows you to categorize map objects and is the default for all new maps.
     * `No`  Select No only if you have an existing static data file for this map (e.g. if you are re-indexing and old map OR you wish to accept the Stratis/Altis defaults).  The existing static data file must be placed in `@ALiVE\indexing\mapname\x\alive\addons\main\static\mapname_staticData.sqf`
     * `Map PBO file path` Path and filename of the map in your ArmA3 folder (e.g. @mapname\addons\mapname.pbo)
     * `Custom Map Bounds` Used for fixing cluster coverage on incorrectly configured map sizes.  Set to 0 by default.
  • Launch game, go to map screen and zoom out to see whole map
  • Open the ALiVE interaction menu (default key `Right App Menu`) and select `Map Indexing`
  • A cmd.exe window will launch (this is deWRP doing its thing)
  • Press any key when it says so.
  • To categorise objects, select all the relevant criteria for the displayed object then click next. Refer to the section below on Static Data for details.
  • The process will pause after object categorising is complete, providing an opportunity to edit the statiddata.sqf in the `@ALiVE/indexing/x/alive/addons/main/static` folder and manually correct any mistakes. Then `Press any key to continue` the indexing process.
  • Sit back and relax while analysis and clustering happens. This can take up to 30 mins on vary large maps - monitor progress in baretail and don't worry if nothing seems to happen for several minutes. ArmA3 will not respond during this time - DO NOT CLOSE IT! Note that while you can alt tab out, ArmA3 must be the active window for indexing to conclude.
  • Once completed all files will be in `@ALiVE\indexing\mapname\x`

Test your Index

  • Go back to the editor and create a new mission
  • Place down a player unit
  • Place down the `ALiVE Required module`
  • Place down the `ALiVE Virtual AI module`, enable debug, virtualize all except synced units
  • Place down the `ALiVE Military Placement (Mil. Obj.)` module, enable debug
  • Place down the `ALiVE Military Placement (Civ. Obj.)` module, enable debug
  • Save the mission as Index
  • Copy the `@ALiVE\indexing\mapname\x` folder into your Index.YourMap mission folder, for example "`C:\My Documents\Arma 3\missions\index.Kunduz`"
  • Check that `C:\My Documents\Arma 3\missions\index.yourmap\x\alive\addons\main\static\yourmap_staticData.sqf` exists.
  • Press Play Scenario
  • Check the mission loads without error and that units are spawning in the correct locations

Push to GIT

  • Push the map folder to GIT with a remark [Main] Complete Index of _mapname_
  • Submit a Pull Request into the Develop branch
  • The ALiVE team will review, test and merge the PR


What is Static Object Data?

ALiVE indexing needs to know whether map objects are Civilian or Military before it can fine clusters to turn into Objectives for the AI Commanders. They are also used for the ambient placement of vehicles, supplies, HQ's, civilians, player tasks and many other things.

Unfortunately not all maps use objects the same way. For example, the ArmA object "hangar" is often used by map makers in a civilian factory setting. Some objects may appear in multiple categories. The only way to interpret this context correctly is for a human to do it. We therefore need to build a static data file which categorises the map objects for ALiVE.


What are the categories and what do they mean?

Using the Indexing Object Viewer, you should select all the categories that apply to each building object as they are displayed. These are added to a staticdata.sqf file for merging into the master code later.

A count of the number of objects to be categorised as at the bottom of the screen alongside the ArmA3 model name for reference. The model name gives a useful indication of the type of object you are looking at.

Objectview.png

  • Blacklist - objects that have no relevance and will be removed from the index (e.g. clutter, carts, boxes, pipes, wood blocks etc)
  • Military Buildings (General) - any building that is in a military base or camp (e.g. bunker). This is a very important building category for defining military objectives!
  * Allow Ambient Vehicles - ambient vehicles will be placed near these buildings by the Military Placement module.
  * Allow Ambient Supplies - ambient supply boxes will be spawned around these buildings by the Military Placement module.
  * Allow HQ - can be selected as HQ locations by the Military Placement module.  You should have at least one building of this type on the map.
  • Aircraft (Fixed Wing) - buildings such as control towers, runways and hangars. Mil Placement can also spawn fixed wing aircraft in suitable locations.
  * Military or Civilian - determines whether the buildings will be considered a military or civilian objective. For best results you should only select one.
  • Aircraft (Rotary Wing) - mostly helipads.
  * Military or Civilian - determines whether the object will be considered a military or civilian objective.
  • Civilian Buildings (General) - any civilian building (e.g. house). This is a very important building category for defining civilian objectives!
  * Allow HQ - Civ buildings that can be used as an HQ by the Mil Placement modules.
  * Allow Ambient Civilians - buildings which will be used by the Civ Pop module to spawn ambient civilians.  Works best with enterable buildings.
  • Civilian Infrastructure Buildings - these will be considered priority targets for Tasks and Insurgents in Asymmetric. They also contribute towards defining Civilian Objectives for Mil Placement.
  * Power - e.g. power plants
  * Comms - e.g. TV mast
  * Marine - e.g. pier
  * Rail - e.g. rail station
  * Fuel - e.g. gas station
  * Construction - e.g. WIP building site

Staticdata.sqf category translation

The static data arrays translated from the Object Viewer explains below with a description of how they are used by the various Placement Modules. You can manually edit these arrays to correct any errors made using the Object Viewer.

  • ALIVE_airBuildingTypes = buildings that ambient fixed wing aircraft will spawn in by the Military Placement module
  • ALIVE_militaryParkingBuildingTypes = buildings that ambient vehicles will be placed around / nearby by the Military Placement module
  • ALIVE_militarySupplyBuildingTypes = buildings that ambient supply boxes will be placed around by the Military Placement module
  • ALIVE_militaryHQBuildingTypes = buildings that can be selected as HQ locations by the Military Placement module
  • ALIVE_militaryHeliBuildingTypes = buildings that ambient military helicopters will spawn in by the Military Placement module
  • ALIVE_militaryBuildingTypes = All military buildings (should also include all buildings listed in Parking, Supply & HQ categories)
  • ALIVE_civilianPopulationBuildingTypes = buildings that ambient civs can spawn in and ambient vehicles can spawn around
  • ALIVE_civilianSettlementBuildingTypes = all buildings used to create a civilian cluster (this should include all buildings listed in CivilianPopulationBuildingType)
  • ALIVE_civilianHQBuildingTypes = civilian buildings that can be selected as HQ locations by Mil Placement module.

The remaining categories are used to determine civilian or military infrastructure targets for high priority objectives. Try include only buildings that are unique to this category.

  • ALIVE_militaryAirBuildingTypes = (e.g. control tower on a military airbase)
  • ALIVE_civilianAirBuildingTypes = (e.g. control tower on a civilian airport)
  • ALIVE_civilianHeliBuildingTypes = (e.g. helipads in civilian locations)
  • ALIVE_civilianPowerBuildingTypes = (e.g. power sub station)
  • ALIVE_civilianCommsBuildingTypes = (e.g. TV mast)
  • ALIVE_civilianMarineBuildingTypes = (e.g. pier)
  • ALIVE_civilianRailBuildingTypes = (e.g. rail station)
  • ALIVE_civilianFuelBuildingTypes = (e.g. gas station)
  • ALIVE_civilianConstructionBuildingTypes = (e.g. WIP building site)


Example Static Data

The static data arrays look something like this once they're all plugged in. Note that you do not need the full object name in the variable, so for example the variable mil_house recognises mil_house_1; mil_house_2; mil_house_2a...etc

    ALIVE_airBuildingTypes = ALIVE_airBuildingTypes + [
    	"hangar"
    ];
 
    ALIVE_militaryParkingBuildingTypes = ALIVE_militaryParkingBuildingTypes + [
    	"bunker",
    	"cargo_patrol_",
    	"research",
    	"barrack",
    	"airport",
        "mil_house",
        "mil_controltower",
        "mil_guardhouse",
        "deerstand",
        "u_barracks_v2_f"
    ];
 
    ALIVE_militarySupplyBuildingTypes = ALIVE_militarySupplyBuildingTypes + [
    	"barrack",
    	"cargo_hq_",
    	"cargo_patrol_",
    	"research",
    	"posed",
    	"mil_controltower",
    	"fuelstation_army",
    	"mil_house"
    ];
 
    ALIVE_militaryHQBuildingTypes = ALIVE_militaryHQBuildingTypes + [
    	"barrack",
    	"cargo_hq_",
    	"barrack",
        "mil_house"
    ];
 
    ALIVE_militaryAirBuildingTypes = ALIVE_militaryAirBuildingTypes + [
         "airport_tower"
 
    ];
 
    ALIVE_civilianAirBuildingTypes = ALIVE_civilianAirBuildingTypes + [
    	"ss_hangar",
        "hangar_2",
        "hangar",
        "runway_beton",
        "runway_end",
        "runway_main",
        "runway_secondary"
    ];
 
    ALIVE_militaryHeliBuildingTypes = ALIVE_militaryHeliBuildingTypes + [
 
    ];
 
    ALIVE_civilianHeliBuildingTypes = ALIVE_civilianHeliBuildingTypes + [
    	"heli_h_civil"
    ];
 
    ALIVE_militaryBuildingTypes = ALIVE_militaryBuildingTypes + [
    	"airport_tower",
    	"bunker",
    	"cargo_patrol_",
    	"research",
    	"army_hut",
    	"mil_wall",
    	"fortification",
    	"dome",
    	"deerstand",
        "barrack",
        "mil_house",
        "mil_controltower",
        "mil_guardhouse",
        "deerstand",
        "hospital"
    ];
 
    ALIVE_civilianPopulationBuildingTypes = ALIVE_civilianPopulationBuildingTypes + [
        "house_",
        "shop_",
        "garage_",
        "stone_"
    ];
 
    ALIVE_civilianHQBuildingTypes = ALIVE_civilianHQBuildingTypes + [
    	"offices",
    	"a_office01"
    ];
 
    ALIVE_civilianPowerBuildingTypes = ALIVE_civilianPowerBuildingTypes + [
    	"dp_main",
    	"spp_t",
    	"pec_",
        "powerstation",
        "trafostanica"
    ];
 
    ALIVE_civilianCommsBuildingTypes = ALIVE_civilianCommsBuildingTypes + [
    	"communication_f",
        "telek",
        "telek1",
        "transmitter_tower"
    ];
 
    ALIVE_civilianMarineBuildingTypes = ALIVE_civilianMarineBuildingTypes + [
    	"crane",
    	"lighthouse",
    	"nav_pier",
    	"pier_",
    	"pier"
    ];
 
    ALIVE_civilianRailBuildingTypes = ALIVE_civilianRailBuildingTypes + [
 
    ];
 
    ALIVE_civilianFuelBuildingTypes = ALIVE_civilianFuelBuildingTypes + [
    	"fuelstation",
    	"dp_bigtank",
        "indpipe",
        "komin",
        "ind_tankbig"
    ];
 
    ALIVE_civilianConstructionBuildingTypes = ALIVE_civilianConstructionBuildingTypes + [
    	"wip",
    	"bridge_highway",
    	"sawmillpen",
    	"workshop"
    ];
 
    ALIVE_civilianSettlementBuildingTypes = ALIVE_civilianSettlementBuildingTypes + [
        "church",
    	"hospital",
    	"amphitheater",
    	"chapel_v",
    	"households",
    	"generalstore",
        "house",
        "domek",
        "dum_",
        "kulna",
        "afbar",
        "panelak",
        "deutshe",
        "dum_mesto_in",
        "dum_mesto2",
        "hotel"
    ];
};