{"name":"surfaceType","operator":null,"title":"surfaceType","type":"command","url":"https://community.bistudio.com/wiki/surfaceType","revid":379085,"updated":"2026-09-27T08:28:22Z","groups":["Positions"],"status":"ok","replaced_by":[],"games":[{"game":"ofpe","name":"Operation Flashpoint: Elite","version":"1.00"},{"game":"arma1","name":"Armed Assault","version":"1.00"},{"game":"arma2","name":"Arma 2","version":"1.00"},{"game":"arma2oa","name":"Arma 2: Operation Arrowhead","version":"1.50"},{"game":"tkoh","name":"Take On Helicopters","version":"1.00"},{"game":"arma3","name":"Arma 3","version":"0.50"}],"since":{"game":"ofpe","name":"Operation Flashpoint: Elite","version":"1.00"},"arma3_since":"0.50","branch":null,"locality":{"argument":null,"effect":null,"server_exec":false},"exec":null,"description":"Returns what surface type is at the given position. For surface texture see surfaceTexture command.\n\n> [!NOTE]\n> The command returns surface type of the ground, even underneath objects such as buildings and roads\n\n- #GRASSSOUTH\n- #GRASSGENERAL\n- #SANDGENERAL\n\n- #UTGRASS - for natural surfaces\n- #UTCONCRETE - for urban surfaces\n\n- BuildingRubble\n- BuildingRubble_exp\n- cardboard\n- cardboard_exp\n- carpet\n- carpet_exp\n- carpet_inside\n- carpet_in_exp\n- concrete\n- concrete_exp\n- concrete_hall\n- concrete_hall_exp\n- concrete_inside\n- concrete_in_exp\n- concrete_out\n- Default\n- dirtrunway\n- floor\n- floor_exp\n- floor_inside\n- floor_in_exp\n- GdtAsphalt\n- GdtBeach\n- GdtCliff\n- GdtConcrete\n- GdtDead\n- GdtDesert\n- GdtDirt\n- GdtField\n- GdtForest\n- GdtForestMalden\n- GdtForestPine\n- GdtGrassDry\n- GdtGrassGreen\n- GdtGrassLong\n- GdtGrassShort\n- GdtGrassTall\n- GdtGrassWild\n- GdtKLCobblestone\n- GdtKLDirt\n- GdtKlField\n- GdtKLForestCon\n- GdtKLForestDec\n- GdtKLGrass1\n- GdtKLGrass2\n- GdtKlSoil\n- GdtKlStubble\n- GdtKlTarmac\n- GdtKlWeatheredTarmac\n- GdtMarsh\n- GdtMud\n- GdtRedDirt\n- GdtRock\n- GdtRubble\n- GdtSeabed\n- GdtSeabedExp\n- GdtSoil\n- GdtStony\n- GdtStonyThistle\n- GdtStratisBeach\n- GdtStratisConcrete\n- GdtStratisDirt\n- GdtStratisDryGrass\n- GdtStratisForestPine\n- GdtStratisGreenGrass\n- GdtStratisRocky\n- GdtStratisSeabed\n- GdtStratisSeabedCluttered\n- GdtStratisThistles\n- GdtThorn\n- GdtVolcano\n- GdtVolcanoBeach\n- GdtVRsurface01\n- GdtWeed\n- GdtWildField\n- grid\n- grid_exp\n- lino\n- lino_exp\n- lino_in_exp\n- mat_in_exp\n- metalPlate\n- metalPlatePressed_exp\n- metalPlate_exp\n- metalPlate_in_exp\n- mud\n- mud_exp\n- parquet\n- planks\n- planks_exp\n- planks_inside\n- planks_in_exp\n- road\n- road_exp\n- roof_tiles_exp\n- rubble\n- rubble_exp\n- sand\n- sand_exp\n- softwood_in_exp\n- steel\n- steel_exp\n- stones\n- stones_exp\n- straw_exp\n- SurfIntConcrete\n- SurfIntMetal\n- SurfIntTiles\n- SurfIntWood\n- surfint_concrete\n- surfint_metal\n- surfint_tiles\n- surfint_wood\n- SurfMetal\n- SurfRoadConcrete\n- SurfRoadConcrete_exp\n- SurfRoadDirt\n- SurfRoadDirt_Enoch\n- SurfRoadDirt_exp\n- SurfRoadTarmac\n- SurfRoadTarmac1_Enoch\n- SurfRoadTarmac2_Enoch\n- SurfRoadTarmac3_Enoch\n- SurfRoadTarmac_exp\n- SurfRoofTiles\n- SurfRoofTin\n- SurfTrailDirt_Enoch\n- SurfTrailDirt_exp\n- SurfWater\n- SurfWood\n- surf_metal\n- surf_roadconcrete\n- surf_roaddirt\n- surf_roadtarmac\n- surf_rooftiles\n- surf_rooftin\n- surf_wood\n- TEST_SurfNormal\n- tiling\n- trash\n- trash_exp\n- Water\n- wavyMetal\n- wavyMetal_exp\n- woodenFloor","syntaxes":[{"syntax":"surfaceType [x, y, z or useLayerMask]","since":null,"effect":null,"exec":null,"params":[{"name":"x","type":"Number","optional":false,"default":null,"description":"world x coordinate of the position","types":["Number"],"since":null,"text":"x: Number - world x coordinate of the position"},{"name":"y","type":"Number","optional":false,"default":null,"description":"world y coordinate of the position","types":["Number"],"since":null,"text":"y: Number - world y coordinate of the position"},{"name":"z or useLayerMask","type":"Number or Boolean","optional":true,"default":null,"description":"When a number is provided (Z in 3D positions), it is ignored. When a boolean is provided, it defines whether the layer mask should be used. Using the layer mask is more accurate but slightly slower.","types":["Number","Boolean"],"since":"arma3 2.18","text":"z or useLayerMask: Number or Boolean - (Optional) When a number is provided (Z in 3D positions), it is ignored. When a boolean is provided, it defines whether the layer mask should be used. Using the layer mask is more accurate but slightly slower."}],"returns":{"type":"String","types":["String"],"description":"Surface type","text":"String - Surface type"},"form":"unary","operator":null,"left":null,"right":{"text":"[x, y, z or useLayerMask]","types":["Array"]}}],"examples":[{"text":"```sqf\nprivate _surface = surfaceType [4500, 4500];\n```","code":["private _surface = surfaceType [4500, 4500];"]},{"text":"```sqf\nhint surfaceType getPosWorld player;\n```","code":["hint surfaceType getPosWorld player;"]},{"text":"```sqf\nprivate _pos = getPosWorld player;\n_pos set [2, true]; // use layer mask\nsurfaceType _pos;\n```","code":["private _pos = getPosWorld player;\n_pos set [2, true]; // use layer mask\nsurfaceType _pos;"]}],"multiplayer":null,"problems":null,"aliases":[],"see_also":["surfaceTexture","surfaceIsWater","surfaceNormal","getAllEnvSoundControllers"],"notes":[],"categories":["ArmA: Armed Assault: Scripting Commands","Arma 2: Operation Arrowhead: Scripting Commands","Arma 2: Scripting Commands","Arma 3: Scripting Commands","Command Group: Positions","Introduced with Operation Flashpoint: Elite version 1.00","Operation Flashpoint: Elite: New Scripting Commands","Operation Flashpoint: Elite: Scripting Commands","Scripting Commands","Take On Helicopters: Scripting Commands"]}