function genDungeon(%countx,%county,%panelw,%panelh) { for(%i = 0; %i < %countx * %county; %i++) { %list = %list @ %i @ " "; %chr[%i] = "M"; } %list = trim(%list); %index = 0; for(%i = 0; %i < 6; %i++) { %rand = getRandom(0,getWordCount(%list) - 1); %room = getWord(%list,%rand); %list = removeWord(%list,%rand); switch(%i) { case 0: %chr[%room] = "S"; case 1: %chr[%room] = "W"; case 2: %chr[%room] = "B"; default: %chr[%room] = "T"; } } for(%i = 1; %i <= %county; %i++) { for(%j = 1; %j <= %countx; %j++) { %roomw = getRandom(mFloor(%panelw / 2),%panelw - 2); %roomh = getRandom(mFloor(%panelh / 2),%panelh - 2); %roomx = getRandom(2,%panelw - %roomw); %roomy = getRandom(2,%panelh - %roomh); %roomr = %roomx + %roomw - 1; %roomb = %roomy + %roomh - 1; %hallx = getRandom(%roomx,%roomr); %hally = getRandom(%roomy,%roomb); if(%oldx[%j] $= "") %oldx[%j] = getRandom(%roomx,%roomr); if(%oldy $= "") %oldy = getRandom(%roomy,%roomb); for(%y = 1; %y <= %panelh; %y++) { for(%x = 1; %x <= %panelw; %x++) { if(%i != %county && %x == %hallx && %y > %roomb) %line = %line @ "."; else if(%j != %countx && %y == %hally && %x > %roomr) %line = %line @ "."; else if(%i != 1 && %x == %oldx[%j] && %y < %roomy) %line = %line @ "."; else if(%j != 1 && %y == %oldy && %x < %roomx) %line = %line @ "."; else if(%oldx[%j] == %roomx - 1 && %x == %oldx[%j] && %y <= %oldy && %y <= %roomy) %line = %line @ "."; else if(%oldx[%j] == %roomr + 1 && %x == %oldx[%j] && %y <= %hally && %y <= %roomy) %line = %line @ "."; else if(%oldy == %roomy - 1 && %y == %oldy && %x <= %oldx[%j] && %x <= %roomx) %line = %line @ "."; else if(%oldy == %roomb + 1 && %y == %oldy && %x <= %hallx && %x <= %roomx) %line = %line @ "."; else if(%oldx[%j] < %roomx - 1 && %x == %oldx[%j] && %y < %oldy) %line = %line @ "."; else if(%oldx[%j] > %roomr + 1 && %x == %oldx[%j] && %y < %hally) %line = %line @ "."; else if(%oldy < %roomy - 1 && %y == %oldy && %x < %oldx[%j]) %line = %line @ "."; else if(%oldy > %roomb + 1 && %y == %oldy && %x < %hallx) %line = %line @ "."; else if(%oldx[%j] < %roomx - 1 && %y == %oldy && %x >= %oldx[%j] && %x < %roomx) %line = %line @ "."; else if(%oldx[%j] > %roomr + 1 && %y == %hally && %x <= %oldx[%j] && %x > %roomr) %line = %line @ "."; else if(%oldy < %roomy - 1 && %x == %oldx[%j] && %y >= %oldy && %y < %roomy) %line = %line @ "."; else if(%oldy > %roomb + 1 && %x == %hallx && %y <= %oldy && %y > %roomb) %line = %line @ "."; else if(%y == 1 || %y == %panelh || %x == 1 || %x == %panelw) %line = %line @ "X"; else if(%y >= %roomy && %y <= %roomb && %x >= %roomx && %x <= %roomr) %line = %line @ %chr[%index]; else %line = %line @ "#"; } %idx = (%i - 1) * %panelh + (%y - 1); %row[%idx] = %row[%idx] @ %line; %line = ""; } %oldx[%j] = %hallx; %oldy = %hally; %index++; } %oldy = ""; } for(%i = 0; %i < %county * %panelh; %i++) %dungeon = %dungeon @ %row[%i] @ "\n"; return trim(%dungeon); } function demoDungeon(%dungeon) { %count = getRecordCount(%dungeon); for(%i = 0; %i < %count; %i++) { %line = getRecord(%dungeon,%i); %len = strLen(%line); for(%j = 0; %j < %len; %j++) { %chr = getSubStr(%line,%j,1); switch$(%chr) { case "X": %color = 7; case "#": %color = 7; case ".": %color = 15; case "S": %color = 3; case "W": %color = 2; case "B": %color = 16; case "T": %color = 1; case "M": %color = 0; } commandToServer('useSprayCan',%color); commandToServer('plantBrick'); commandToServer('superShiftBrick',0,-1); } commandToServer('superShiftBrick',-1,%len); } } function buildDungeon(%dungeon) { %x = 0; %y = 0; %count = getRecordCount(%dungeon); for(%i = 0; %i < %count; %i++) { %line = getRecord(%dungeon,%i); %len = strLen(%line); for(%j = 0; %j < %len; %j++) { %chr = getSubStr(%line,%j,1); %pos = %x SPC %y SPC 0.1; if(%chr $= "X") { %x -= 4; continue; } %col = 6; %str = strPos("SWBTM",%chr); if(%str != -1) { %chr = " "; %col = getWord("3 2 16 1 0",%str); } %upc = getSubStr(getRecord(%dungeon,%i - 1),%j,1); %leftc = getSubStr(%line,%j - 1,1); %rightc = getSubStr(%line,%j + 1,1); %downc = getSubStr(getRecord(%dungeon,%i + 1),%j,1); if(%chr $= " " || %chr $= ".") { newBrick("brick8x8fData",%pos,0,6); newBrick("brick8x8fData",vectorAdd(%pos,"0 0 4.4"),0,6); newBrick("brick8x8fData",vectorAdd(%pos,"0 0 4.6"),0,%col); if(strPos("SWBTM.",%upc) == -1) %up = 1; if(strPos("SWBTM.",%leftc) == -1) %left = 1; if(strPos("SWBTM.",%rightc) == -1) %right = 1; if(strPos("SWBTM.",%downc) == -1) %down = 1; %upd = 0; %leftd = 0; %rightd = 0; %downd = 0; if(!%up && %chr $= "." && strPos("SWBTM",%upc) != -1) { %up = 1; %upd = 1; } if(!%left && %chr $= "." && strPos("SWBTM",%leftc) != -1) { %left = 1; %leftd = 1; } if(!%right && %chr $= "." && strPos("SWBTM",%rightc) != -1) { %right = 1; %rightd = 1; } if(!%down && %chr $= "." && strPos("SWBTM",%downc) != -1) { %down = 1; %downd = 1; } if(%up || %left) { newBrick("brick1x1Data", vectorAdd(%pos,"1.75 -1.75 0.4"),0,6); newBrick("brick1x1x5Data",vectorAdd(%pos,"1.75 -1.75 2.2"),0,6); newBrick("brick1x1Data", vectorAdd(%pos,"1.75 -1.75 4 "),0,6); } if(%up || %right) { newBrick("brick1x1Data", vectorAdd(%pos,"-1.75 -1.75 0.4"),0,6); newBrick("brick1x1x5Data",vectorAdd(%pos,"-1.75 -1.75 2.2"),0,6); newBrick("brick1x1Data", vectorAdd(%pos,"-1.75 -1.75 4 "),0,6); } if(%down || %left) { newBrick("brick1x1Data", vectorAdd(%pos,"1.75 1.75 0.4"),0,6); newBrick("brick1x1x5Data",vectorAdd(%pos,"1.75 1.75 2.2"),0,6); newBrick("brick1x1Data", vectorAdd(%pos,"1.75 1.75 4 "),0,6); } if(%down || %right) { newBrick("brick1x1Data", vectorAdd(%pos,"-1.75 1.75 0.4"),0,6); newBrick("brick1x1x5Data",vectorAdd(%pos,"-1.75 1.75 2.2"),0,6); newBrick("brick1x1Data", vectorAdd(%pos,"-1.75 1.75 4 "),0,6); } %goal = %up + %left + %right + %down; for(%k = 0; %k < %goal; %k++) { %door = 0; if(%up) { %xoff = 0; %yoff = -1.75; %rot = 1; %up = 0; if(%upd) %door = 1; } else if(%left) { %xoff = 1.75; %yoff = 0; %rot = 0; %left = 0; if(%leftd) %door = 1; } else if(%right) { %xoff = -1.75; %yoff = 0; %rot = 0; %right = 0; if(%rightd) %door = 1; } else if(%down) { %xoff = 0; %yoff = 1.75; %rot = 1; %down = 0; if(%downd) %door = 1; } if(!%door) { newBrick("brick1x6Data",vectorAdd(%pos,%xoff SPC %yoff SPC 0.4),%rot,6); newBrick("brick1x6Data",vectorAdd(%pos,%xoff SPC %yoff SPC 4 ),%rot,6); newBrick("brick1x2Data",vectorAdd(%pos,%xoff + (!%xoff) * 1 SPC %yoff + (!%yoff) * 1 SPC 1 ),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff SPC %yoff SPC 1 ),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff - (!%xoff) * 1 SPC %yoff - (!%yoff) * 1 SPC 1 ),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff + (!%xoff) * 0.5 SPC %yoff + (!%yoff) * 0.5 SPC 1.6),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff - (!%xoff) * 0.5 SPC %yoff - (!%yoff) * 0.5 SPC 1.6),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff + (!%xoff) * 1 SPC %yoff + (!%yoff) * 1 SPC 2.2),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff SPC %yoff SPC 2.2),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff - (!%xoff) * 1 SPC %yoff - (!%yoff) * 1 SPC 2.2),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff + (!%xoff) * 0.5 SPC %yoff + (!%yoff) * 0.5 SPC 2.8),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff - (!%xoff) * 0.5 SPC %yoff - (!%yoff) * 0.5 SPC 2.8),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff + (!%xoff) * 1 SPC %yoff + (!%yoff) * 1 SPC 3.4),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff SPC %yoff SPC 3.4),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff - (!%xoff) * 1 SPC %yoff - (!%yoff) * 1 SPC 3.4),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 1.6),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 1.6),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 2.8),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 2.8),%rot,5); } else { newBrick("brick1x6Data",vectorAdd(%pos,%xoff SPC %yoff SPC 4),%rot,6); newBrick("brick1x2Data",vectorAdd(%pos,%xoff + (!%xoff) * 1 SPC %yoff + (!%yoff) * 1 SPC 3.4),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff SPC %yoff SPC 3.4),%rot,5); newBrick("brick1x2Data",vectorAdd(%pos,%xoff - (!%xoff) * 1 SPC %yoff - (!%yoff) * 1 SPC 3.4),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 0.4),%rot,6); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 0.4),%rot,6); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 1 ),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 1 ),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 1.6),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 1.6),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 2.2),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 2.2),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff + (!%xoff) * 1.25 SPC %yoff + (!%yoff) * 1.25 SPC 2.8),%rot,5); newBrick("brick1x1Data",vectorAdd(%pos,%xoff - (!%xoff) * 1.25 SPC %yoff - (!%yoff) * 1.25 SPC 2.8),%rot,5); if(%upd) newBrick("contentBrickCabinDoor",vectorAdd(%pos," 0 -1.75 1.6"),1,8); if(%leftd) newBrick("contentBrickCabinDoor",vectorAdd(%pos," 1.75 0 1.6"),0,8); if(%rightd) newBrick("contentBrickCabinDoor",vectorAdd(%pos,"-1.75 0 1.6"),2,8); if(%downd) newBrick("contentBrickCabinDoor",vectorAdd(%pos," 0 1.75 1.6"),3,8); } } } %x -= 4; } %x = 0; %y += 4; } } function newBrick(%data,%pos,%rot,%color) { switch(%rot) { case 0: %rot = "1 0 0 0"; case 1: %rot = "0 0 1 90"; case 2: %rot = "0 0 1 180"; case 3: %rot = "0 0 -1 90"; } %brick = new fxDTSBrick() { datablock = %data; position = %pos; rotation = %rot; colorID = %color; isPlanted = 1; }; %brick.setTrusted(1); %brick.plant(); localClientConnection.brickGroup.add(%brick); }