function TopYesHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2 NEED TO FIGURE THIS OUT
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]]) //MAY NEED MultN1 AND MultN2
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]]) //IM USING MultN2 FOR ALL Num
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real x
set x = X1+64+Num2 //was +64 as well as +Num, but i dont kno0w why i need it. maybe will put it back in
loop
exitwhen x >= X2-(Audg_RoomSizeX[udg_RoomNumber[RoomNum]]/2)-Num1
call CreateDestructable('B004', x, Y2-Num2, 0, 1.5, 5 )
set x = x+Num1
endloop
set x = X2-(udg_RoomSizeX[udg_RoomNumber[RoomNum]]/2)+(1.5*128)
loop
exitwhen x >= X2-Num1
call CreateDestructable('B004', x, Y2-Num2, 0, 1.5, 5 )
set x = x+Num1
endloop
endfunction
function TopNoHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]]) // I know I already defined these in the CreateWalls function
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]]) // but I had already written these 'TopNoHall' etc functions before I
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]]) // realized I needed these variables in CreateWalls function as well.
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real x
set x = X1+64+Num2
loop
exitwhen x >= X2-Num1
call CreateDestructable('B004', x, Y2-Num2, 0, 1.5, 5 )
set x = x+Num1
endloop
endfunction
function BottomYesHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real x
set x = X1+64+Num2 //was +64 as well as +Num, but i dont kno0w why i need it. maybe will put it back in
loop
exitwhen x >= X2-(udg_RoomSizeX[udg_RoomNumber[RoomNum]]/2)-Num1
call CreateDestructable('B004', x, Y1+Num2, 0, 1.5, 5 )
set x = x+Num1
endloop
set x = X2-(udg_RoomSizeX[udg_RoomNumber[RoomNum]]/2)+(1.5*128)
loop
exitwhen x >= X2-Num1
call CreateDestructable('B004', x, Y1+Num2, 0, 1.5, 5 )
set x = x+Num1
endloop
endfunction
function BottomNoHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real x
set x = X1+64+Num2
loop
exitwhen x >= X2-Num1
call CreateDestructable('B004', x, Y1+Num2, 0, 1.5, 5 )
set x = x+Num1
endloop
endfunction
function RightYesHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real y
set y = Y1+64+Num2 //was +64 as well as +Num, but i dont know why i need it. maybe will put it back in
loop
exitwhen y >= Y2-(udg_RoomSizeY[udg_RoomNumber[RoomNum]]/2)-Num1
call CreateDestructable('B007', X2-Num2, y, 0, 1.5, 5 )
set y = y+Num1
endloop
set y = Y2-(udg_RoomSizeY[udg_RoomNumber[RoomNum]]/2)+(1.5*128)
loop
exitwhen y >= Y2-Num1
call CreateDestructable('B007', X2-Num2, y, 0, 1.5, 5 )
set y = y+Num1
endloop
endfunction
function RightNoHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real y
set y = Y1+64+Num2
loop
exitwhen y >= Y2-Num1
call CreateDestructable('B007', X2-Num2, y, 0, 1.5, 5 )
set y = y+Num1
endloop
endfunction
function LeftYesHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real y
set y = Y1+64+Num2 //was +64 as well as +Num, but i dont know why i need it. maybe will put it back in
loop
exitwhen y >= Y2-(udg_RoomSizeY[udg_RoomNumber[RoomNum]]/2)-Num1
call CreateDestructable('B007', X1+Num2, y, 0, 1.5, 5 )
set y = y+Num1
endloop
set y = Y2-(udg_RoomSizeY[udg_RoomNumber[RoomNum]]/2)+(1.5*128)
loop
exitwhen y >= Y2-Num1
call CreateDestructable('B007', X1+Num2, y, 0, 1.5, 5 )
set y = y+Num1
endloop
endfunction
function LeftNoHall takes integer RoomNum, integer Num1, integer Num2 returns nothing // X2 == X1, X2 == X2, Num == MultN2
local real X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]+(udg_RoomSizeX[udg_RoomNumber[RoomNum]])
local real Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]+(udg_RoomSizeY[udg_RoomNumber[RoomNum]])
local real y
set y = Y1+64+Num2
loop
exitwhen y >= Y2-Num1
call CreateDestructable('B007', X1+Num2, y, 0, 1.5, 5 )
set y = y+Num1
endloop
endfunction
//THIS FUNCTION CreateWalls IS WHERE IM HAVING PROBLEMS
//this is the most current variation, where I dont remove the wall destructables, but actually never make them in the first place
//I have some older versions where I do attempt to use rects to remove walls for Hallway openings, if anyone thinks that would be easier, I can post those older CreateWall functions as well
function CreateWalls takes nothing returns nothing // this function is called after both rooms and hallways have been spawned
local integer RoomNum = 0
local integer MultN1 = R2I(128*1.5)
local integer MultN2 = 64+6
local real X1
local real X2
local real Y1
local real Y2
local real WS = 32
local real Ws = 2+(I2R(GetRandomInt(2,9))*0.1)
local real WV = 0
loop
exitwhen RoomNum >= udg_RoomAmt
set X1 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-udg_RoomSizeX[udg_RoomNumber[RoomNum]]
set X2 = udg_RoomCellX[udg_RoomNumber[RoomNum]]-udg_RoomSizeX[udg_RoomNumber[RoomNum]]
set Y1 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-udg_RoomSizeY[udg_RoomNumber[RoomNum]]
set Y2 = udg_RoomCellY[udg_RoomNumber[RoomNum]]-udg_RoomSizeY[udg_RoomNumber[RoomNum]]
if udg_RoomFull[udg_RoomNumber[RoomNum]-9] == true then
call TopYesHall(RoomNum,MultN1,MultN2)
else
call TopNoHall(RoomNum,MultN1,MultN2)
endif
call TriggerSleepAction(0) //making sure it doesnt crash
if udg_RoomFull[udg_RoomNumber[RoomNum]-1] == true then
call LeftYesHall(RoomNum,MultN1,MultN2)
else
call LeftNoHall(RoomNum,MultN1,MultN2)
endif
call TriggerSleepAction(0)
if udg_RoomFull[udg_RoomNumber[RoomNum]+1] == true then
call RightYesHall(RoomNum,MultN1,MultN2)
else
call RightNoHall(RoomNum,MultN1,MultN2)
endif
call TriggerSleepAction(0)
if udg_RoomFull[udg_RoomNumber[RoomNum]+9] == true then
call BottomYesHall(RoomNum,MultN1,MultN2)
else
call BottomNoHall(RoomNum,MultN1,MultN2)
endif
call TriggerSleepAction(0)
// Creates Corner Columns
if GetRandomInt(1,2) == 1 then
call CreateDestructable( 'B00C', X1+WS, Y1+WS, GetRandomInt(0,360), Ws, WV ) //spawns corner spires
else //""
call CreateDestructable( 'B00D', X1+WS, Y1+WS, GetRandomInt(0,360), Ws, WV ) // ||
endif // \ /
if GetRandomInt(1,2) == 1 then // \/
call CreateDestructable( 'B00C', X1+WS, Y2-WS, GetRandomInt(0,360), Ws, WV )
else
call CreateDestructable( 'B00D', X1+WS, Y2-WS, GetRandomInt(0,360), Ws, WV )
endif
if GetRandomInt(1,2) == 1 then
call CreateDestructable( 'B00C', X2-WS, Y1+WS, GetRandomInt(0,360), Ws, WV )
else
call CreateDestructable( 'B00D', X2-WS, Y1+WS, GetRandomInt(0,360), Ws, WV )
endif
if GetRandomInt(1,2) == 1 then
call CreateDestructable( 'B00C', X2-WS, Y2-WS, GetRandomInt(0,360), Ws, WV )
else
call CreateDestructable( 'B00D', X2-WS, Y2-WS, GetRandomInt(0,360), Ws, WV ) //""
endif
set RoomNum = RoomNum+1
endloop
endfunction
function RemoveDes takes nothing returns nothing
call RemoveDestructable( GetEnumDestructable() )
endfunction
function HallwayVertUp takes integer SlotNum1, integer SlotNum2 returns nothing
local integer x
local integer y
local rect OpeningRect
set x = udg_RoomCellX[SlotNum1]
set y = udg_RoomCellY[SlotNum1]+udg_RoomSizeY[SlotNum1]
loop //terrain for hallway
exitwhen y >= udg_RoomCellY[SlotNum2]-udg_RoomSizeY[SlotNum2]
call SetTerrainType(x,y,'cYc1',2,2.5,1)
set y = y+(5*128)
endloop
set y = udg_RoomCellY[SlotNum1]+udg_RoomSizeY[SlotNum1]
loop //left wall for hallway
exitwhen y >= udg_RoomCellY[SlotNum2]-udg_RoomSizeY[SlotNum2]
call CreateDestructable( 'B007', x-2*128, y, 0, 1.5, 5 )
set y = y+R2I(128*1.5)
endloop
set y = udg_RoomCellY[SlotNum1]+udg_RoomSizeY[SlotNum1]
loop //right wall for hallway
exitwhen y >= udg_RoomCellY[SlotNum2]-udg_RoomSizeY[SlotNum2]
call CreateDestructable( 'B007', x+2*128, y, 0, 1.5, 5 )
set y = y+R2I(128*1.5)
endloop
// removes walls where openings for hallway are
// call SetRect(OpeningRect,x-128,udg_RoomCellY[SlotNum1]+udg_RoomSizeY[SlotNum1]-128,x+128,udg_RoomCellY[SlotNum1]+udg_RoomSizeY[SlotNum1]+128)
// call EnumDestructablesInRectAll(OpeningRect, function RemoveDes )
// call SetRect(OpeningRect,x-128,udg_RoomCellY[SlotNum2]-udg_RoomSizeY[SlotNum2]-128,x+128,udg_RoomCellY[SlotNum2]-udg_RoomSizeY[SlotNum2]+128)
// call EnumDestructablesInRectAll(OpeningRect, function RemoveDes )
endfunction
function HallwayVertDown takes integer SlotNum1, integer SlotNum2 returns nothing
local integer x
local integer y
local rect OpeningRect
set x = udg_RoomCellX[SlotNum1]
set y = udg_RoomCellY[SlotNum1]-udg_RoomSizeY[SlotNum1]
loop //terrain for hallway
exitwhen y <= udg_RoomCellY[SlotNum2]+udg_RoomSizeY[SlotNum2]
call SetTerrainType(x,y,'cYc1',2,2.5,1)
set y = y-(5*128)
endloop
set y = udg_RoomCellY[SlotNum1]-udg_RoomSizeY[SlotNum1]
loop //left wall for hallway
exitwhen y <= udg_RoomCellY[SlotNum2]+udg_RoomSizeY[SlotNum2]
call CreateDestructable( 'B007', x-2*128, y, 0, 1.5, 5 )
set y = y-R2I(128*1.5)
endloop
set y = udg_RoomCellY[SlotNum1]-udg_RoomSizeY[SlotNum1]
loop //right wall for hallway
exitwhen y <= udg_RoomCellY[SlotNum2]+udg_RoomSizeY[SlotNum2]
call CreateDestructable( 'B007', x+2*128, y, 0, 1.5, 5 )
set y = y-R2I(128*1.5)
endloop
// removes walls where openings for hallway are
// call SetRect(OpeningRect,x-128,udg_RoomCellY[SlotNum1]-udg_RoomSizeY[SlotNum1]-128,x+128,udg_RoomCellY[SlotNum1]-udg_RoomSizeY[SlotNum1]+128)
// loop
// exitwhen RandomDestructableInRectBJ(OpeningRect,null) == null
// call RemoveDestructable(RandomDestructableInRectBJ(OpeningRect,null))
// endloop
// call SetRect(OpeningRect,x-128,udg_RoomCellY[SlotNum2]+udg_RoomSizeY[SlotNum2]-128,x+128,udg_RoomCellY[SlotNum2]+udg_RoomSizeY[SlotNum2]+128)
// loop
// exitwhen RandomDestructableInRectBJ(OpeningRect,null) == null
// call RemoveDestructable(RandomDestructableInRectBJ(OpeningRect,null))
// endloop
endfunction
function HallwayHorLeft takes integer SlotNum1, integer SlotNum2 returns nothing
local integer x
local integer y
local rect OpeningRect
set x = udg_RoomCellX[SlotNum1]-udg_RoomSizeX[SlotNum1]
set y = udg_RoomCellY[SlotNum1]
loop //terrain for hallway
exitwhen x <= udg_RoomCellX[SlotNum2]+udg_RoomSizeX[SlotNum2]
call SetTerrainType(x,y,'cYc1',2,2.5,1)
set x = x-(5*128)
endloop
set x = udg_RoomCellX[SlotNum1]-udg_RoomSizeX[SlotNum1]
loop //left wall for hallway
exitwhen x <= udg_RoomCellX[SlotNum2]+udg_RoomSizeX[SlotNum2]
call CreateDestructable( 'B004', x, y-2*128, 0, 1.5, 5 )
set x = x-R2I(128*1.5)
endloop
set x = udg_RoomCellX[SlotNum1]-udg_RoomSizeX[SlotNum1]
loop //right wall for hallway
exitwhen x <= udg_RoomCellX[SlotNum2]+udg_RoomSizeX[SlotNum2]
call CreateDestructable( 'B004', x, y+2*128, 0, 1.5, 5 )
set x = x-R2I(128*1.5)
endloop
// removes walls where openings for hallway are
// call SetRect(OpeningRect,udg_RoomCellX[SlotNum1]-udg_RoomSizeX[SlotNum1]-128,y-128,udg_RoomCellX[SlotNum1]-udg_RoomSizeX[SlotNum1]+128,y+128)
// loop
// exitwhen RandomDestructableInRectBJ(OpeningRect,null) == null
// call RemoveDestructable(RandomDestructableInRectBJ(OpeningRect,null))
// endloop
// call SetRect(OpeningRect,udg_RoomCellX[SlotNum2]+udg_RoomSizeX[SlotNum2]-128,y-128,udg_RoomCellX[SlotNum2]+udg_RoomSizeX[SlotNum2]+128,y+128)
// loop
// exitwhen RandomDestructableInRectBJ(OpeningRect,null) == null
// call RemoveDestructable(RandomDestructableInRectBJ(OpeningRect,null))
// endloop
endfunction
function HallwayHorRight takes integer SlotNum1, integer SlotNum2 returns nothing
local integer x
local integer y
local rect OpeningRect
set x = udg_RoomCellX[SlotNum1]+udg_RoomSizeX[SlotNum1]
set y = udg_RoomCellY[SlotNum1]
loop //terrain for hallway
exitwhen x >= udg_RoomCellX[SlotNum2]-udg_RoomSizeX[SlotNum2]
call SetTerrainType(x,y,'cYc1',2,2.5,1)
set x = x+(5*128)
endloop
set x = udg_RoomCellX[SlotNum1]+udg_RoomSizeX[SlotNum1]
loop //left wall for hallway
exitwhen x >= udg_RoomCellX[SlotNum2]-udg_RoomSizeX[SlotNum2]
call CreateDestructable( 'B004', x, y-2*128, 0, 1.5, 5 )
set x = x+R2I(128*1.5)
endloop
set x = udg_RoomCellX[SlotNum1]+udg_RoomSizeX[SlotNum1]
loop //right wall for hallway
exitwhen x >= udg_RoomCellX[SlotNum2]-udg_RoomSizeX[SlotNum2]
call CreateDestructable( 'B004', x, y+2*128, 0, 1.5, 5 )
set x = x+R2I(128*1.5)
endloop
// removes walls where openings for hallway are
// call SetRect(OpeningRect,udg_RoomCellX[SlotNum1]+udg_RoomSizeX[SlotNum1]-128,y-128,udg_RoomCellX[SlotNum1]+udg_RoomSizeX[SlotNum1]+128,y+128)
// loop
// exitwhen RandomDestructableInRectBJ(OpeningRect,null) == null
// call RemoveDestructable(RandomDestructableInRectBJ(OpeningRect,null))
// endloop
// call SetRect(OpeningRect,udg_RoomCellX[SlotNum2]-udg_RoomSizeX[SlotNum2]-128,y-128,udg_RoomCellX[SlotNum2]-udg_RoomSizeX[SlotNum2]+128,y+128)
// loop
// exitwhen RandomDestructableInRectBJ(OpeningRect,null) == null
// call RemoveDestructable(RandomDestructableInRectBJ(OpeningRect,null))
// endloop
endfunction
function SpawnRoom takes integer XCoor, integer YCoor, integer AWidth, integer BLength, integer WhichRoom returns nothing // this is the main function which creates a room
local real X //x coordinate at center
local real Y //y coordinate at center
local real A //random integer to set different width for X
local real B //used for spawning terrain if its not a square (x coordinate)
local real a //"" (y coordinate)
local real b //random integer to set different length for y
local real X1 //minimum x coordinate (half of A from X) //so left side
local real Y1 //minimum y coordinate (half of B from Y) //bottom side
local real X2 //"" in other direction //right side
local real Y2 //"" //top side
local real x1
local real y1
local real x
local real y
local integer MultN1
local integer MultN2
local real WS = 32 //Variation for corner spires
local real Ws = 2+(I2R(GetRandomInt(2,9))*0.1)
local integer WV = 0
local integer HallLength
local integer RNum = WhichRoom
set HallLength = 7*128
set MultN1 = R2I(128*1.5)
set MultN2 = 64+6
set A = AWidth //randomizes A between 80 and 110 (i can change these later for diff sized rooms, can even set them to variables)
set B = BLength //"" but for B
set X = XCoor //GetLocationX( center ) //sets X to center (i can input my own location here if i want, will become the center of the room)
set Y = YCoor
set X1 = X-(A) //sets X1 to half of A less than X
set Y1 = Y-(B) //sets Y1 to half of B less than Y
set X2 = X+(A) //sets X2 to half of A more than X
set Y2 = Y+(B) //sets Y2 to half of B more than Y
call SetRect(udg_RegionRoom[RNum],X1+128,Y1+128,X2-128,Y2-128) //creates rect with bottom left X1,Y1 and top right X2,Y2 with center at X,Y
if A==B then //if its a square room (A=B) then //square room
call SetTerrainType(X,Y,'cYc1',2,R2I(B/128),1) //creates terrain in a square shape A*B centered at XY //""
elseif A>B then //if its not a square, and A>B //rectangular room, where width is greater than length
call SetTerrainType(X,Y,'cYc1',2,R2I(B/128),1) //create a square centered at XY of area smallest value (B) squared //spawns square terrain
set a = X1+64 //sets a to left side plus half of spawned tile size
set b = Y1+64 //sets b to bottom side plus half of spawned tile size
loop
exitwhen a>=X-B //exit loop when a > center minus Square Terrain minus spawned tile size
loop
exitwhen b>=Y2-128 //exit loop when b > top side minus spawned tile size
call SetTerrainType(a,b,'cYc1',2,1,1) //create terrain at ab of tile size 512 (4 tiles) //spawns column of terrain starting at bottom left (big size)
set b = b+128 //sets b to next row
endloop //repeat
set a = a+128 //sets a to next column over //spawns next column
set b = Y1+64 //resets b to bottom side plus half of spawned tile size
call TriggerSleepAction(0.05)
endloop //repeat
set a = X+B //sets a to edge of spawned square terrain plus half of spawned tile size
set b = Y1+64 //sets b to bottom side plus half of spawned tile size
loop
exitwhen a>=X+A //exit loop when a > center minus Square Terrain minus spawned tile size
loop
exitwhen b>=Y2-128 //exit loop when b > top side minus spawned tile size
call SetTerrainType(a,b,'cYc1',2,1,1) //create terrain at ab of tile size 512 (4 tiles) //spawns column of terrain starting at bottom left (big size)
set b = b+128 //sets b to next row up
endloop //repeat
set a = a+128 //sets a to next column over //spawns next column
set b = Y1+64 //resets b to bottom side plus half of spawned tile size
call TriggerSleepAction(0.05)
endloop //repeat
elseif B>A then //if its not a sqaure, and B>A
call SetTerrainType(X,Y,'cYc1',2,R2I(A/128),1) //creates a square centered at XY of area smallest value (A) squared
set a = X1+64 //sets a to left side plus half of spawned tile size
set b = Y1+64 //sets b to bottom side plus half of spawned tile size
loop
exitwhen b>=Y-A //exit loop when b > center minus Square Terrain minus spawned tile size
loop
exitwhen a>=X2-128 //exit loop when a > right side minus spawned tilse size
call SetTerrainType(a,b,'cYc1',2,1,1) //create terrain at ab of tile size 512 (4 tiles)
set a = a+128 //sets a to next column over
endloop //repeat
set b = b+128 //sets b to next row up
set a = X1+64 //resets a to left side plus half of spawned tile size
call TriggerSleepAction(0.05)
endloop //repeat
set a = X1+64 //sets a to left side plus half of spawned tile size
set b = Y+A //sets b to bottom side plus half of spawned tile size
loop
exitwhen b>=Y+B //exit loop when b > center minus Square Terrain minus spawned tile size
loop
exitwhen a>=X2-128 //exit loop when a > right side minus spawned tilse size
call SetTerrainType(a,b,'cYc1',2,1,1) //create terrain at ab of tile size 512 (4 tiles)
set a = a+128 //sets a to next column over
endloop //repeat
set b = b+128 //sets b to next row up
set a = X1+64 //resets a to left side plus half of spawned tile size
call TriggerSleepAction(0.05)
endloop //repeat
endfunction
function RRoom takes integer b, integer c returns integer
local integer a
set a = GetRandomInt(b,c)*128
return a
endfunction
function Trig_SpawnAllRooms_Actions takes nothing returns nothing // this calls the functinos for creating rooms, hallways, and walls, and decides which direction to spawn the next room in
local integer ASlot1
local integer ASlot2
local integer A
local integer B
local integer EnemyRooms
local integer LoopNum
local integer Message = 0
local integer RNumSlot = 0
local boolean NoSpace = false
local integer x
local integer y
// first room (Spawn)
set EnemyRooms = 0
set LoopNum = 0
set ASlot1 = GRInt9(31,32,33,40,41,42,49,50,51)
set udg_RoomNumber[RNumSlot] = ASlot1
set RNumSlot = 1
set A = RRoom(5,7)
set B = RRoom(5,7)
set udg_RoomSizeX[ASlot1] = A*128
set udg_RoomSizeY[ASlot1] = B*128
call SpawnRoom(udg_RoomCellX[ASlot1], udg_RoomCellY[ASlot1], A, B, ASlot1)
set x = udg_RoomCellX[ASlot1]
set y = udg_RoomCellY[ASlot1]
set udg_RoomAmt = 1
set udg_RoomFull[ASlot1] = true
set udg_RoomType[ASlot1] = 0
set ASlot2 = ASlot1
// next room (Must be enemy)
set ASlot1 = GRInt4(ASlot2-9, ASlot2-1, ASlot2+1, ASlot2+9)
set udg_RoomNumber[RNumSlot] = ASlot1
set RNumSlot = 2
set A = RRoom(7,13)
set B = RRoom(7,13)
set udg_RoomSizeX[ASlot1] = A*128
set udg_RoomSizeY[ASlot1] = B*128
call SpawnRoom(udg_RoomCellX[ASlot1], udg_RoomCellY[ASlot1], A, B, ASlot1)
if ASlot1 == ASlot2-9 then
call HallwayVertUp(ASlot2,ASlot1)
elseif ASlot1 == ASlot2-1 then
call HallwayHorLeft(ASlot2,ASlot1)
elseif ASlot1 == ASlot2+1 then
call HallwayHorRight(ASlot2,ASlot1)
elseif ASlot1 == ASlot2+9 then
call HallwayVertDown(ASlot2,ASlot1)
else
call DoNothing()
endif
set udg_RoomAmt = udg_RoomAmt+1
set udg_RoomFull[ASlot1] = true
set udg_RoomType[ASlot1] = 3
set EnemyRooms = 1
set ASlot2 = ASlot1
// next room (Any type)
loop
exitwhen (udg_RoomAmt >= 12) or (EnemyRooms >= 6) or (LoopNum >= 12)
set ASlot1 = GRInt4(ASlot2-9, ASlot2-1, ASlot2+1, ASlot2+9)
set udg_RoomNumber[RNumSlot] = ASlot
set RNumSlot = RNumSlot+1
if udg_RoomFull[ASlot1] == true then
loop
exitwhen (udg_RoomFull[ASlot1] == false) or (LoopNum >= 12)
set ASlot1 = GRInt4(ASlot2-9, ASlot2-1, ASlot2+1, ASlot2+9)
set LoopNum = LoopNum+1
if LoopNum >= 12 then
set NoSpace = true
else
call DoNothing()
endif
endloop
set LoopNum = 0
else
call DoNothing()
endif
if NoSpace == false then
set A = RRoom(7,13)
set B = RRoom(7,13)
set udg_RoomSizeX[ASlot1] = A*128
set udg_RoomSizeY[ASlot1] = B*128
call SpawnRoom(udg_RoomCellX[ASlot1], udg_RoomCellY[ASlot1], A, B, ASlot1)
if ASlot1 == ASlot2-9 then
call HallwayVertUp(ASlot2,ASlot1)
elseif ASlot1 == ASlot2-1 then
call HallwayHorLeft(ASlot2,ASlot1)
elseif ASlot1 == ASlot2+1 then
call HallwayHorRight(ASlot2,ASlot1)
elseif ASlot1 == ASlot2+9 then
call HallwayVertDown(ASlot2,ASlot1)
else
call DoNothing()
endif
set udg_RoomAmt = udg_RoomAmt+1
set udg_RoomFull[ASlot1] = true
set udg_RoomType[ASlot1] = GetRandomInt(1,8)
if (udg_RoomType[ASlot1] == 3) or (udg_RoomType[ASlot1] == 5) or (udg_RoomType[ASlot1] == 5) then
set EnemyRooms = EnemyRooms+1
else
call DoNothing()
endif
set ASlot2 = ASlot1
else
call DoNothing()
endif
endloop
call CreateWalls
//After here is all just testing
call DisplayTimedTextToPlayer(Player(0), 0, -50, 300, "Number of rooms spawned (udg_RoomAmt) is: "+I2S(udg_RoomAmt))
call DisplayTimedTextToPlayer(Player(0), 0, -50, 300, " ")
set Message = 10
loop
exitwhen Message >= 71
if udg_RoomFull[Message] == true then
call DisplayTimedTextToPlayer(Player(0), 0, -50, 300, "Room number "+I2S(Message)+" is type: "+I2S(udg_RoomType[Message]))
else
call DoNothing()
endif
if ((Message >= 10) and (Message < 16)) or ((Message >= 19) and (Message < 25)) or ((Message >= 28) and (Message < 34)) or ((Message >= 37) and (Message < 43)) or ((Message >= 46) and (Message < 52)) or ((Message >= 55) and (Message < 61)) or ((Message >= 64) and (Message < 70)) then
set Message = Message+1
else
set Message = Message+3
endif
endloop
set Message = 0
set NumberRooms = 0
loop
exitwhen Message >= 80
if udg_RoomFull[Message] == true then
set NumberRooms = NumberRooms+1
else
call DoNothing()
endif
if ((Message >= 10) and (Message < 16)) or ((Message >= 19) and (Message < 25)) or ((Message >= 28) and (Message < 34)) or ((Message >= 37) and (Message < 43)) or ((Message >= 46) and (Message < 52)) or ((Message >= 55) and (Message < 61)) or ((Message >= 64) and (Message < 70)) then
set Message = Message+1
else
set Message = Message+3
endif
endloop
call DisplayTimedTextToPlayer(Player(0), 0, 0, 300, "Number of full rooms (local var NumberRooms) == "+I2S(NumberRooms))
call DisplayTimedTextToPlayer(Player(0), 0, 0, 300, "Number of EnemyRooms == "+I2S(EnemyRooms))
endfunction
//===========================================================================
function InitTrig_SpawnAllRooms takes nothing returns nothing
set gg_trg_SpawnAllRooms = CreateTrigger( )
call TriggerRegisterTimerEvent(gg_trg_SpawnAllRooms, 1.00, false)
call TriggerAddAction( gg_trg_SpawnAllRooms, function Trig_SpawnAllRooms_Actions )
endfunction