public function terrainInit(CouchService $cs, WargameService $ws, $game = "MartianCivilWar", $arg = false, $terrainDocId = false)
 {
     $user = Auth::user()['name'];
     $battle = Battle::battleFromName($game, $arg);
     if (method_exists($battle, 'terrainGen')) {
         $cs->setDb("rest");
         $terrainDoc = $cs->get($terrainDocId);
         $mapId = $terrainDoc->hexStr->map;
         $mapDoc = $cs->get($mapId);
         $battle->terrainGen($mapDoc, $terrainDoc);
     } else {
         echo "No TerrainGen ";
         return;
     }
     $mapUrl = $battle->terrain->mapUrl;
     $mapWidth = $battle->terrain->mapWidth;
     if ($mapWidth && $mapWidth !== "auto") {
         $mapWidth = preg_replace("/[^\\d]*(\\d*)[^\\d]*/", "\$1", $mapWidth);
         $battle->terrain->mapUrl = $ws->resizeImage($mapUrl, $mapWidth, "images");
         if (!empty($mapDoc->map->trueRows)) {
             $ws->rotateImage($battle->terrain->mapUrl, "images");
         }
     }
     $battle->terrain->smallMapUrl = $ws->resizeImage($mapUrl);
     //        $this->rotateImage($mapUrl);
     $battle->terrainName = false;
     $wargameDoc = $battle->save();
     $terrainName = "terrain-{$game}";
     $ws->saveTerrainDoc(urldecode($terrainName . "." . $arg), $battle);
     if (!empty($mapDoc->map->isDefault)) {
         $ws->saveTerrainDoc(urldecode($terrainName), $battle);
     }
     $ret = new \stdClass();
     $ret->ok = true;
     return response()->json($ret);
 }