Map Indexing

From ALiVE Wiki
Jump to: navigation, search

Map Indexing Step by Step Instructions

Preparation

Read and follow these instructions very carefully!

  1. BattlEye MUST BE DISABLED - you can enable/disable through the A3 Launcher or using your .cfg file
  2. It is recommended you either temporarily disable your AV software or exclude the indexing folder from AV scanning
  3. ALiVE must be in @ALiVE folder in ArmA3 (Warning: folder name is case sensitive!)
  4. ALiVEClient.dll and alive_object_blacklist.txt must be in the @ALiVE folder
  5. Acquire a copy of Mikero's Tools, get them here https://www.dropbox.com/s/zs5iforxoflasdt/dewrp_alive.zip?dl=1
  6. DeWRP.exe must be installed on Windows (i.e. have a dewrp.exe directory set in your PATH environment variable)- http://www.computerhope.com/issues/ch000549.htm
  7. Make sure all .exe and .dll files are 'unblocked' in Windows (right-click, Properties)
  8. Download the following scripts folder and copy to C:\Users\*username*\My Documents\Arma 3
  9. Download Baretail and use it to monitor the ArmA3 rpt file as you run the Indexer (c:\users\username\appdata\local\ArmA 3\)

Index the Map!

  1. Start ArmA with command line -mod=@ALiVE; @CBA_A3; @YourCustomMap -filePatching
  2. Open the Editor
  3. Place down a player unit
  4. Place the ALiVE Map Indexer Module
    1. Settings
      1. Object Categorization:
        1. Yes Allows you to categorize map objects and is the default for all new maps.
        2. No Select No only if you have an existing static data file for this map (e.g. if you are re-indexing an old map OR you wish to accept the Stratis/Altis defaults). The existing static data files can be downloaded from the ALiVE repo on github here and must be placed in @ALiVE\indexing\mapname\x\alive\addons\main\static\mapname_staticData.sqf
      2. Map PBO file path Path and filename of the map in your ArmA3 folder (e.g. @mapname\addons\mapname.pbo)
      3. Custom Map Bounds Used for fixing cluster coverage on incorrectly configured map sizes. Set to 0 by default.
  5. Save the mission as index
  6. Launch game, go to map screen and zoom out to see whole map
  7. Open the ALiVE interaction menu (default key Right App Menu) and select Map Indexing
  8. A cmd.exe window will launch (this is deWRP doing its thing)
  9. Press UP arrow on your keyboard (do not press space bar or ESC) when it says to press any key to continue
  10. 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.
  11. 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.
    1. Check that all arrays in your staticData file are terminated i.e. finish in ]; for example the ALIVE_BLACKLIST array sometimes is not terminated correctly when lots of objects have been blacklisted.
  12. Then press any key to continue the indexing process.
  13. 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.
    1. NOTE: Open the RPT in Baretail - ensure the log is being updated. If it is stuck on Generating Sector Data then you will need to copy the \x folder found in the \scripts folder into your mission folder (C:\My Documents\Arma 3\missions\index.yourmap\x).
  14. Once completed all files will be in @ALiVE\indexing\mapname\x

If you have any issues please post your RPT and log.txt file (under @ALiVE\indexing\mapname\ to the ALiVE Forum (map indexing section)

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 IndexTest
  • Copy the @ALiVE\indexing\mapname\x folder into your IndexTest.YourMap mission folder, for example "C:\My Documents\Arma 3\missions\indexTest.Kunduz"
  • Check that C:\My Documents\Arma 3\missions\indexTest.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
    • If you have any issues, re-index the map, set the Map Bounds (in the Indexer Module settings) to the size of the map rounded up to the nearest 1000, i.e. 5120 = 6000. Make sure you delete everything under the @ALiVE\indexing\mapname\x\ folder EXCEPT for your @ALiVE\indexing\mapname\x\alive\addons\main\static\mapname_staticData.sqf file. Edit your static data file where the ALIVE_MapBounds value is set. Ensure you select No to object categorisation (in the Indexer Module settings).

Post on the ALiVE Forum

  • Zip up your x folder
  • Post on the ALiVE Forum a topic Complete Index of _mapname_
  • If you disabled your AV to run the indexing process don't forget to turn it back on!!

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"
    ];
};