function portalSpeedGo(numPairs) if nargin < 1 numPairs = 110; end isIn = @(idxVar, array) any(array == idxVar) == 1; floor = zeros(1, 1, 3); floor(:) = 212; portal = zeros(1, 1, 3); portal(1) = 202; portal(2) = 192; boost = zeros(1, 1, 3); boost(1) = 255; boost(2) = 255; floorTiles = zeros(0); cdata = imread('WarpSpeed.png'); %spawning area blueRows = 8:12; blueCols = 51:55; redRows = 28:32; redCols = 7:11; %loop over inside area, keeping the outside paths clear for i = 5:35 for j = 5:57 %keep spawning tiles clear if (isIn(i, blueRows) && isIn(j, blueCols)) || (isIn(i, redRows) && isIn(j, redCols)) continue; end pixel = cdata(i, j, :); if isequal(pixel, floor) floorTiles = [floorTiles, [i; j]]; end end end %pick just few enough to stay under the JSON file size limit %Subtracting one because javascript has 0-based arrays floorTiles = floorTiles(:,randperm(size(floorTiles, 2))); portalTiles = floorTiles(:, numPairs+1:2*numPairs) - 1; floorTiles = floorTiles(:, 1:numPairs) - 1; %make new image file for n = 1:numPairs loc = floorTiles(:, n) + 1; cdata(loc(1), loc(2), :) = portal; loc = portalTiles(:, n) + 1; cdata(loc(1), loc(2), :) = portal; end %make portal-only version portalsOnly = cdata; for i = 1:size(cdata, 1) for j = 1:size(cdata, 2) if isequal(portalsOnly(i, j, :), boost) portalsOnly(i, j, :) = floor; end end end %write JSON file fid = fopen('PortalSpeed.json', 'w'); fprintf(fid, '{'); fprintf(fid, '"info": {\n"name": "PortalSpeed",\n "author": "BBQchicken"\n},\n'); fprintf(fid, '"portals": {\n'); for i = 1:size(floorTiles, 2) source = ['"', num2str(floorTiles(2, i)), ',',... num2str(floorTiles(1, i)), '"']; destination = [' "x": ', num2str(portalTiles(2, i)), ', "y": '... num2str(portalTiles(1, i))]; line = [source, ': { "destination": { ', destination, ... ' } },\n']; fprintf(fid, line); %Then do reverse direction source = ['"', num2str(portalTiles(2, i)), ',',... num2str(portalTiles(1, i)), '"']; destination = [' "x": ', num2str(floorTiles(2, i)), ', "y": '... num2str(floorTiles(1, i))]; line = [source, ': { "destination": { ', destination, ... ' } }']; if i ~= size(floorTiles, 2) line = [line, ',\n']; else line = [line, '\n']; end fprintf(fid, line); end fprintf(fid, '}\n'); fprintf(fid, '}'); imwrite(cdata, 'PortalSpeed.png'); imwrite(portalsOnly, 'PortalsOnly.png'); disp('Maps are ready!');