runFireSimulation[gridSize_:80,initialFires_:2,timeSteps_:100,ignitionProbability_:0.8,windSpeed_:0.3,windDirection_:{1,0},moisture_:0.2,numRows_:1,numCols_:1,interRegionSpreadProb_:0.5,uphillMultiplier_:1.5,downhillMultiplier_:0.7,location_:Automatic]:=Module[{terrainGrids,elevationGrids,fireGrids,unburnedPositions,firePoints={},terrainAndElev,actualLocation,result,gridPos},actualLocation=If[location===Automatic,getRandomEarthLocation[],location];terrainGrids={};elevationGrids={};Table[terrainAndElev=initializeTerrainGrid[gridSize,actualLocation];AppendTo[terrainGrids,terrainAndElev[[1]]];AppendTo[elevationGrids,terrainAndElev[[2]]];,{i,numRows},{j,numCols}];terrainGrids=ArrayReshape[terrainGrids,{numRows,numCols,gridSize,gridSize}];elevationGrids=ArrayReshape[elevationGrids,{numRows,numCols,gridSize,gridSize}];fireGrids=Table[ConstantArray[0,{gridSize,gridSize}],{i,numRows},{j,numCols}];unburnedPositions=getUnburnedPositions[fireGrids[[1,1]]];unburnedPositions=Select[unburnedPositions,terrainGrids[[1,1,#[[1]],#[[2]]]]!=6&];result=DialogInput[DynamicModule[{currentPoint={15,15},selectedPoints={}},Column[{Text["Click on the terrain to place fire starting points"],Text[Dynamic["Points selected: "<>ToString[Length[selectedPoints]]<>"/"<>ToString[initialFires]]],LocatorPane[Dynamic[currentPoint],plotAllFireRegions[terrainGrids,fireGrids,numRows,numCols],Appearance->Graphics[{Red,PointSize[0.05],Point[{0,0}]}]],Row[{Button["Add Fire Point",gridPos={Clip[Round[currentPoint[[1]]],{1,gridSize}],Clip[gridSize-Round[currentPoint[[2]]],{1,gridSize}]};If[terrainGrids[[1,1,gridPos[[1]],gridPos[[2]]]]!=6,AppendTo[selectedPoints,gridPos];,MessageDialog["Cannot place fire on water!"]],Enabled->Dynamic[Length[selectedPoints]<initialFires]],Button["Reset",selectedPoints={}],Button["Run Simulation",If[Length[selectedPoints]>0,DialogReturn[selectedPoints],MessageDialog["Please select at least one fire point!"]],Enabled->Dynamic[Length[selectedPoints]>0]],Button["Cancel",DialogReturn[$Canceled]]}]}]]];If[result===$Canceled,Echo["Simulation canceled by user."];Return[$Canceled]];If[Length[result]==0,Echo["No fire points selected."];Return[$Failed]];firePoints=result;Echo[{"Starting simulation with ",Length[firePoints]," fire points at: ",firePoints}];showBurnFireGrids[firePoints,terrainGrids,elevationGrids,fireGrids,numRows,numCols,gridSize,ignitionProbability,windSpeed,windDirection,moisture,interRegionSpreadProb,timeSteps,initialFires,uphillMultiplier,downhillMultiplier,actualLocation]]