extends Node3D var roomTemplatesRaw = Dictionary() func _ready() -> void: #RMesh.LoadRMesh(self, "GFX\\map\\gatea_opt.rmesh") #B3D.Load("GFX\\npcs\\106_2.b3d") add_child(B3D.Load("GFX\\apache.b3d")) var rooms = INI.Load("res://Data/rooms.ini") for room in rooms: if room == "loose": continue if room == "room ambience": continue var roomInfo = rooms[room] if not roomInfo.has("mesh path"): print(room, roomInfo) continue roomTemplatesRaw.get_or_add(room, roomInfo) #RMesh.LoadRMesh(self, roomInfo["mesh path"]) #CreateMap() var I_Zone: MapZones = MapZones.new() var RandomSeed: String = "" var MapWidth = Main.options.get("options").get("map size").to_int() var MapHeight = Main.options.get("options").get("map size").to_int() const RoomScale = 8.0 / 2048.0 const HideDistance = 15.0 var MapTemp = Utils.Init2DArray(MapWidth + 1, MapHeight + 1, 0) var MapFound = Utils.Init2DArray(MapWidth + 1, MapHeight + 1, 0) const ZONEAMOUNT = 3 const ROOM1 = 1 const ROOM2 = 2 const ROOM2C = 3 const ROOM3 = 4 const ROOM4 = 5 var MapRoom: Array var MapName = Utils.Init2DArray(MapWidth, MapHeight, "") var MapRoomID = Utils.Init1DArray(ROOM4 + 1, 0) func GetZone(y): return min(floor((float(MapWidth - y) / MapWidth * ZONEAMOUNT)), ZONEAMOUNT -1) func SetRoom(room_name, room_type, pos, min_pos, max_pos): # place a room without overwriting others if max_pos < min_pos: print(str("Can't place ", room_name)) return false print(str("--- SETROOM: ", room_name.to_upper(), " ---")) var looped = false var can_place = true while MapRoom[room_type][pos] != "": print(str("found ", MapRoom[room_type][pos])) pos = pos + 1 if pos > max_pos: if not looped: pos = min_pos + 1 looped = true else: can_place = false break print(str(room_name, " ", pos)) if can_place: print("--------------") MapRoom[room_type][pos] = room_name return true else: print(str("couldn't place ", room_name)) return false func CreateMap(): print(str("Generating a map using the seed ", RandomSeed)) I_Zone.Transition[0] = 13 I_Zone.Transition[1] = 7 I_Zone.HasCustomForest = false I_Zone.HasCustomMT = false var x: float var y: float var temp: float #var i: float var tempheight: float var x2: float #var y2: float var width: float var height: float var zone: float Main.SeedRnd = Utils.GenerateSeedNumber(RandomSeed) x = floor(MapWidth / 2) y = MapHeight - 2 # Rand(3, 5) for i1 in range(y, MapHeight - 1): MapTemp[x][i1] = 1 while y < 2: width = randi_range(10, 15) if x > MapWidth * 0.6: width = -width elif x > MapWidth * 0.4: x = x - width / 2 # make sure the hallway doesn't go outside the array if x + width > MapWidth - 3: #x = -width+MapWidth-4 width = MapWidth - 3 - x elif x + width < 2: #x = 3-width width = -x + 2 x = min(x, x + width) width = abs(width) for i1 in range(x, x + width): MapTemp[min(i1, MapWidth)][y] = 1 height = randi_range(3, 4) if y - height < 1: height = y - 1 var yhallways = randi_range(4, 5) if GetZone(y - height) != GetZone(y - height + 1): height = height - 1 #For i = 1 To yhallways for i in range(1, yhallways): x2 = max(min(randi_range(x, x + width - 1),MapWidth - 2), 2) while MapTemp[x2][y - 1] or MapTemp[x2 - 1][y - 1] or MapTemp[x2 + 1][y - 1]: x2 = x2 + 1 if x2 < x + width: if i == 1: tempheight = height if randi_range(1, 2) == 1: x2 = x else: x2 = x + width else: tempheight = randi_range(1, height) for y2 in range(y - tempheight, y): if GetZone(y2) != GetZone(y2 + 1): # a room leading from zone to another MapTemp[x2][y2] = 255 else: MapTemp[x2][y2] = 1 if tempheight == height: temp = x2 x = temp y = y - height var ZoneAmount = 3 var Room1Amount = Utils.Init1DArray(3, 0) var Room2Amount = Utils.Init1DArray(3, 0) var Room2CAmount = Utils.Init1DArray(3, 0) var Room3Amount = Utils.Init1DArray(3, 0) var Room4Amount = Utils.Init1DArray(3, 0) # count the amount of rooms #For y = 1 To MapHeight - 1 for y1 in range(1, MapHeight - 1): zone = GetZone(y) for x1 in range(1, MapWidth - 1): if MapTemp[x1][y1] > 0: temp = min(MapTemp[x1 + 1][y1], 1) + min(MapTemp[x1 - 1][y1], 1) temp = temp + min(MapTemp[x1][y1 + 1], 1) + min(MapTemp[x1][y1 - 1], 1) if MapTemp[x1][y1] < 255: MapTemp[x1][y1] = temp match MapTemp[x1][y1]: 1: Room1Amount[zone] = Room1Amount[zone] +1 2: if min(MapTemp[x1 + 1][y1], 1) + min(MapTemp[x1 - 1][y1], 1) == 2: Room2Amount[zone] = Room2Amount[zone] + 1 elif min(MapTemp[x1][y1 + 1], 1) + min(MapTemp[x1][y1 - 1], 1) == 2: Room2Amount[zone] = Room2Amount[zone] + 1 else: Room2CAmount[zone] = Room2CAmount[zone] + 1 3: Room3Amount[zone] = Room3Amount[zone] + 1 4: Room4Amount[zone] = Room4Amount[zone] + 1 # force more room1s (if needed) for i in range(0, 2): # need more rooms if there are less than 5 of them temp = -Room1Amount[i] + 5 var y2 = 0 var placed = false if temp > 0: for y1 in range((MapHeight/ZoneAmount) * (2 - i) + 1, ((MapHeight/ZoneAmount) * ((2 - i) + 1.0)) - 2): for x1 in range(2, MapWidth - 2): if MapTemp[x1][y1] == 0: if (min(MapTemp[x1 + 1][y], 1) + min(MapTemp[x1 - 1][y1], 1) + min(MapTemp[x1][y1 + 1], 1) + min(MapTemp[x1][y1 - 1], 1)) == 1: #If Rand(4)=1 Then if MapTemp[x1 + 1][y]: x2 = x1 + 1 y2 = y1 elif MapTemp[x - 1][y]: x2 = x1 - 1 y2 = y1 elif MapTemp[x][y + 1]: x2 = x1 y2 = y1 + 1 elif MapTemp[x][y-1]: x2 = x1 y2 = y1 - 1 placed = false if MapTemp[x2][y2] > 1 and MapTemp[x2][y2] < 4: match MapTemp[x2][y2]: 2: if min(MapTemp[x2 + 1][y2], 1) + min(MapTemp[x2 - 1][y2], 1) == 2: Room2Amount[i] = Room2Amount[i] - 1 Room3Amount[i] = Room3Amount[i] + 1 placed = true elif min(MapTemp[x2][y2 + 1], 1) + min(MapTemp[x2][y2 - 1], 1) == 2: Room2Amount[i] = Room2Amount[i] - 1 Room3Amount[i] = Room3Amount[i] + 1 placed = true 3: Room3Amount[i] = Room3Amount[i] - 1 Room4Amount[i] = Room4Amount[i] + 1 placed = true if placed: MapTemp[x2][y2] == MapTemp[x2][y2] + 1 MapTemp[x1][y1] = 1 Room1Amount[i] = Room1Amount[i] + 1 temp = temp - 1 if temp == 0: break if temp == 0: break # force more room4s and room2Cs for i in range(0, 2): var temp2 = 0 match i: 2: zone = 2 temp2 = MapHeight / 3 #-1 1: zone = MapHeight / 3 + 1 temp2 = MapHeight * (2.0 / 3.0) - 1 0: zone = MapHeight * (2.0 / 3.0) + 1 temp2 = MapHeight - 2 if Room4Amount[i] < 1: # we want at least 1 ROOM4 print(str("forcing a ROOM4 into zone ", i)) temp = 0 for y1 in range(zone, temp2): for x1 in range(2, MapWidth - 2): if MapTemp[x1][y1] == 3: if not (MapTemp[x1+1][y1] or MapTemp[x1+1][y1+1] or MapTemp[x1+1][y1-1] or MapTemp[x1+2][y1]): MapTemp[x1+1][y1] = 1 temp = 1 elif not (MapTemp[x1-1][y1] or MapTemp[x1-1][y1+1] or MapTemp[x1-1][y1-1] or MapTemp[x1-2][y1]): MapTemp[x1-1][y1] = 1 temp = 1 elif not (MapTemp[x1][y1+1] or MapTemp[x1+1][y1+1] or MapTemp[x1-1][y1+1] or MapTemp[x1][y1+2]): MapTemp[x1][y1+1] = 1 temp = 1 elif not (MapTemp[x1][y1-1] or MapTemp[x1+1][y1-1] or MapTemp[x1-1][y1-1] or MapTemp[x1][y1-2]): MapTemp[x1][y1-1] = 1 temp = 1 if temp == 1: MapTemp[x1][y1] = 4 # turn this room into a ROOM4 print(str("ROOM4 forced into slot (", x1, ", ", y1, ")")) Room4Amount[i] = Room4Amount[i] + 1 Room3Amount[i] = Room3Amount[i] - 1 Room1Amount[i] = Room1Amount[i] + 1 if temp == 1: break if temp == 1: break if temp == 0: print(str("Couldn't place ROOM4 in zone ", i)) if Room2CAmount[i] < 1: #we want at least 1 ROOM2C print(str("forcing a ROOM2C into zone ", i)) temp = 0 zone = zone + 1 temp2 = temp2 - 1 #For y = zone To temp2 #For x = 3 To MapWidth - 3 #If MapTemp(x,y)=1 Then #Select True ;see if adding some rooms is possible #Case MapTemp(x-1,y)>0 #If (MapTemp(x,y-1)+MapTemp(x,y+1)+MapTemp(x+2,y))=0 Then #If (MapTemp(x+1,y-2)+MapTemp(x+2,y-1)+MapTemp(x+1,y-1))=0 Then #MapTemp(x,y)=2 #MapTemp(x+1,y)=2 #DebugLog "ROOM2C forced into slot ("+(x+1)+", "+(y)+")" #MapTemp(x+1,y-1)=1 #temp=1 #Else If (MapTemp(x+1,y+2)+MapTemp(x+2,y+1)+MapTemp(x+1,y+1))=0 Then #MapTemp(x,y)=2 #MapTemp(x+1,y)=2 #DebugLog "ROOM2C forced into slot ("+(x+1)+", "+(y)+")" #MapTemp(x+1,y+1)=1 #temp=1 #EndIf #EndIf #Case MapTemp(x+1,y)>0 #If (MapTemp(x,y-1)+MapTemp(x,y+1)+MapTemp(x-2,y))=0 Then #If (MapTemp(x-1,y-2)+MapTemp(x-2,y-1)+MapTemp(x-1,y-1))=0 Then #MapTemp(x,y)=2 #MapTemp(x-1,y)=2 #DebugLog "ROOM2C forced into slot ("+(x-1)+", "+(y)+")" #MapTemp(x-1,y-1)=1 #temp=1 #Else If (MapTemp(x-1,y+2)+MapTemp(x-2,y+1)+MapTemp(x-1,y+1))=0 Then #MapTemp(x,y)=2 #MapTemp(x-1,y)=2 #DebugLog "ROOM2C forced into slot ("+(x-1)+", "+(y)+")" #MapTemp(x-1,y+1)=1 #temp=1 #EndIf #EndIf #Case MapTemp(x,y-1)>0 #If (MapTemp(x-1,y)+MapTemp(x+1,y)+MapTemp(x,y+2))=0 Then #If (MapTemp(x-2,y+1)+MapTemp(x-1,y+2)+MapTemp(x-1,y+1))=0 Then #MapTemp(x,y)=2 #MapTemp(x,y+1)=2 #DebugLog "ROOM2C forced into slot ("+(x)+", "+(y+1)+")" #MapTemp(x-1,y+1)=1 #temp=1 #Else If (MapTemp(x+2,y+1)+MapTemp(x+1,y+2)+MapTemp(x+1,y+1))=0 Then #MapTemp(x,y)=2 #MapTemp(x,y+1)=2 #DebugLog "ROOM2C forced into slot ("+(x)+", "+(y+1)+")" #MapTemp(x+1,y+1)=1 #temp=1 #EndIf #EndIf #Case MapTemp(x,y+1)>0 #If (MapTemp(x-1,y)+MapTemp(x+1,y)+MapTemp(x,y-2))=0 Then #If (MapTemp(x-2,y-1)+MapTemp(x-1,y-2)+MapTemp(x-1,y-1))=0 Then #MapTemp(x,y)=2 #MapTemp(x,y-1)=2 #DebugLog "ROOM2C forced into slot ("+(x)+", "+(y-1)+")" #MapTemp(x-1,y-1)=1 #temp=1 #Else If (MapTemp(x+2,y-1)+MapTemp(x+1,y-2)+MapTemp(x+1,y-1))=0 Then #MapTemp(x,y)=2 #MapTemp(x,y-1)=2 #DebugLog "ROOM2C forced into slot ("+(x)+", "+(y-1)+")" #MapTemp(x+1,y-1)=1 #temp=1 #EndIf #EndIf #End Select #If temp=1 Then #Room2CAmount[i]=Room2CAmount[i]+1 #Room2Amount[i]=Room2Amount[i]+1 #EndIf #EndIf #If temp=1 Then Exit #Next #If temp=1 Then Exit #Next # #If temp=0 Then DebugLog "Couldn't place ROOM2C in zone "+i #EndIf # #Next var MaxRooms = 55 * MapWidth / 20 MaxRooms = max(MaxRooms, Room1Amount[0] + Room1Amount[1] + Room1Amount[2] + 1) MaxRooms = max(MaxRooms, Room2Amount[0] + Room2Amount[1] + Room2Amount[2] + 1) MaxRooms = max(MaxRooms, Room2CAmount[0] + Room2CAmount[1] + Room2CAmount[2] + 1) MaxRooms = max(MaxRooms, Room3Amount[0] + Room3Amount[1] + Room3Amount[2] + 1) MaxRooms = max(MaxRooms, Room4Amount[0] + Room4Amount[1] + Room4Amount[2] + 1) MapRoom = Utils.Init2DArray(ROOM4 + 1, MaxRooms) # zone 1 -------------------------------------------------------------------------------------------------- var min_pos = 1 var max_pos = Room1Amount[0] - 1 MapRoom[ROOM1][0] = "start" SetRoom("roompj", ROOM1, floor(0.1 * float(Room1Amount[0])), min_pos,max_pos) SetRoom("914", ROOM1, floor(0.3 * float(Room1Amount[0])), min_pos, max_pos) SetRoom("room1archive",ROOM1,floor(0.5 * float(Room1Amount[0])), min_pos, max_pos) SetRoom("room205", ROOM1, floor(0.6 * float(Room1Amount[0])), min_pos, max_pos) MapRoom[ROOM2C][0] = "lockroom" min_pos = 1 max_pos = Room2Amount[0]-1 MapRoom[ROOM2][0] = "room2closets" SetRoom("room2testroom2", ROOM2, floor(0.1 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room2scps", ROOM2, floor(0.2 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room2storage", ROOM2, floor(0.3 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room2gw_b", ROOM2, floor(0.4 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room2sl", ROOM2, floor(0.5 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room012", ROOM2, floor(0.55 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room2scps2", ROOM2, floor(0.6 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room1123", ROOM2, floor(0.7 * float(Room2Amount[0])), min_pos, max_pos) SetRoom("room2elevator", ROOM2, floor(0.85 * float(Room2Amount[0])), min_pos, max_pos) MapRoom[ROOM3][floor(randf_range(0.2, 0.8) * float(Room3Amount[0]))] = "room3storage" MapRoom[ROOM2C][floor(0.5 * float(Room2CAmount[0]))] = "room1162" MapRoom[ROOM4][floor(0.3 * float(Room4Amount[0]))] = "room4info" # zone 2 -------------------------------------------------------------------------------------------------- min_pos = Room1Amount[0] max_pos = Room1Amount[0] + Room1Amount[1] - 1 SetRoom("room079", ROOM1, Room1Amount[0] + floor(0.15 * float(Room1Amount[1])), min_pos, max_pos) SetRoom("room106", ROOM1, Room1Amount[0] + floor(0.3 * float(Room1Amount[1])), min_pos, max_pos) SetRoom("008", ROOM1, Room1Amount[0] + floor(0.4 * float(Room1Amount[1])), min_pos, max_pos) SetRoom("room035", ROOM1, Room1Amount[0] + floor(0.5 * float(Room1Amount[1])), min_pos, max_pos) SetRoom("coffin", ROOM1, Room1Amount[0] + floor(0.7 * float(Room1Amount[1])), min_pos, max_pos) min_pos = Room2Amount[0] max_pos = Room2Amount[0] + Room2Amount[1] - 1 MapRoom[ROOM2][Room2Amount[0] + floor(0.1 * float(Room2Amount[1]))] = "room2nuke" SetRoom("room2tunnel", ROOM2, Room2Amount[0] + floor(0.25 * float(Room2Amount[1])), min_pos, max_pos) SetRoom("room049", ROOM2, Room2Amount[0] + floor(0.4 * float(Room2Amount[1])),min_pos,max_pos) SetRoom("room2shaft",ROOM2,Room2Amount[0] + floor(0.6 * float(Room2Amount[1])), min_pos, max_pos) SetRoom("testroom", ROOM2, Room2Amount[0] + floor(0.7 * float(Room2Amount[1])), min_pos, max_pos) SetRoom("room2servers", ROOM2, Room2Amount[0] + floor(0.9 * Room2Amount[1]), min_pos, max_pos) MapRoom[ROOM3][Room3Amount[0] + floor(0.3 * float(Room3Amount[1]))] = "room513" MapRoom[ROOM3][Room3Amount[0] + floor(0.6 * float(Room3Amount[1]))] = "room966" MapRoom[ROOM2C][Room2CAmount[0] + floor(0.5 * float(Room2CAmount[1]))] = "room2cpit" # zone 3 -------------------------------------------------------------------------------------------------- MapRoom[ROOM1][Room1Amount[0] + Room1Amount[1] + Room1Amount[2] - 2] = "exit1" MapRoom[ROOM1][Room1Amount[0] + Room1Amount[1] + Room1Amount[2] - 1] = "gateaentrance" MapRoom[ROOM1][Room1Amount[0] + Room1Amount[1]] = "room1lifts" min_pos = Room2Amount[0] + Room2Amount[1] max_pos = Room2Amount[0] + Room2Amount[1]+Room2Amount[2] - 1 MapRoom[ROOM2][min_pos + floor(0.1 * float(Room2Amount[2]))] = "room2poffices" SetRoom("room2cafeteria", ROOM2, min_pos + floor(0.2 * float(Room2Amount[2])), min_pos, max_pos) SetRoom("room2sroom", ROOM2, min_pos + floor(0.3 * float(Room2Amount[2])), min_pos, max_pos) SetRoom("room2servers2", ROOM2, min_pos + floor(0.4 * Room2Amount[2]), min_pos, max_pos) SetRoom("room2offices", ROOM2, min_pos + floor(0.45 * Room2Amount[2]), min_pos, max_pos) SetRoom("room2offices4", ROOM2, min_pos + floor(0.5 * Room2Amount[2]), min_pos, max_pos) SetRoom("room860", ROOM2, min_pos + floor(0.6 * Room2Amount[2]), min_pos, max_pos) SetRoom("medibay", ROOM2, min_pos + floor(0.7 * float(Room2Amount[2])), min_pos, max_pos) SetRoom("room2poffices2", ROOM2, min_pos + floor(0.8 * Room2Amount[2]), min_pos, max_pos) SetRoom("room2offices2", ROOM2, min_pos + floor(0.9 * float(Room2Amount[2])), min_pos, max_pos) MapRoom[ROOM2C][Room2CAmount[0] + Room2CAmount[1]] = "room2ccont" MapRoom[ROOM2C][Room2CAmount[0] + Room2CAmount[1] + 1] = "lockroom2" MapRoom[ROOM3][Room3Amount[0] + Room3Amount[1] + floor(0.3 * float(Room3Amount[2]))] = "room3servers" MapRoom[ROOM3][Room3Amount[0] + Room3Amount[1] + floor(0.7 * float(Room3Amount[2]))] = "room3servers2" #MapRoom(ROOM3, Room3Amount[0]+Room3Amount[1]) = "room3gw" MapRoom[ROOM3][Room3Amount[0] + Room3Amount[1] + floor(0.5 * float(Room3Amount[2]))] = "room3offices" print(MapRoom) #----------------------- creating the map -------------------------------- #temp = 0 #Local r.Rooms, spacing# = 8.0 #For y = MapHeight - 1 To 1 Step - 1 # #;zone% = GetZone(y) # #If y < MapHeight/3+1 Then #zone=3 #ElseIf y < MapHeight*(2.0/3.0);-1 #zone=2 #Else #zone=1 #EndIf # #For x = 1 To MapWidth - 2 #If MapTemp(x, y) = 255 Then #If y>MapHeight/2 Then ;zone = 2 #r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, "checkpoint1") #Else ;If zone = 3 #r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, "checkpoint2") #EndIf #ElseIf MapTemp(x, y) > 0 # #temp = Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1) + Min(MapTemp(x, y + 1),1) + Min(MapTemp(x, y - 1),1) # #Select temp ;viereisiss� ruuduissa olevien huoneiden m��r� #Case 1 #If MapRoomID(ROOM1) < MaxRooms And MapName(x,y) = "" Then #If MapRoom(ROOM1, MapRoomID(ROOM1)) <> "" Then MapName(x, y) = MapRoom(ROOM1, MapRoomID(ROOM1)) #EndIf # #r = CreateRoom(zone, ROOM1, x * 8, 0, y * 8, MapName(x, y)) #If MapTemp(x, y + 1) Then #r\angle = 180 #TurnEntity(r\obj, 0, r\angle, 0) #ElseIf MapTemp(x - 1, y) #r\angle = 270 #TurnEntity(r\obj, 0, r\angle, 0) #ElseIf MapTemp(x + 1, y) #r\angle = 90 #TurnEntity(r\obj, 0, r\angle, 0) #Else #r\angle = 0 #End If #MapRoomID(ROOM1)=MapRoomID(ROOM1)+1 #Case 2 #If MapTemp(x - 1, y)>0 And MapTemp(x + 1, y)>0 Then #If MapRoomID(ROOM2) < MaxRooms And MapName(x,y) = "" Then #If MapRoom(ROOM2, MapRoomID(ROOM2)) <> "" Then MapName(x, y) = MapRoom(ROOM2, MapRoomID(ROOM2)) #EndIf #r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, MapName(x, y)) #If Rand(2) = 1 Then r\angle = 90 Else r\angle = 270 #TurnEntity(r\obj, 0, r\angle, 0) #MapRoomID(ROOM2)=MapRoomID(ROOM2)+1 #ElseIf MapTemp(x, y - 1)>0 And MapTemp(x, y + 1)>0 #If MapRoomID(ROOM2) < MaxRooms And MapName(x,y) = "" Then #If MapRoom(ROOM2, MapRoomID(ROOM2)) <> "" Then MapName(x, y) = MapRoom(ROOM2, MapRoomID(ROOM2)) #EndIf #r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, MapName(x, y)) #If Rand(2) = 1 Then r\angle = 180 Else r\angle = 0 #TurnEntity(r\obj, 0, r\angle, 0) #MapRoomID(ROOM2)=MapRoomID(ROOM2)+1 #Else #If MapRoomID(ROOM2C) < MaxRooms And MapName(x,y) = "" Then #If MapRoom(ROOM2C, MapRoomID(ROOM2C)) <> "" Then MapName(x, y) = MapRoom(ROOM2C, MapRoomID(ROOM2C)) #EndIf # #If MapTemp(x - 1, y)>0 And MapTemp(x, y + 1)>0 Then #r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y)) #r\angle = 180 #TurnEntity(r\obj, 0, r\angle, 0) #ElseIf MapTemp(x + 1, y)>0 And MapTemp(x, y + 1)>0 #r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y)) #r\angle = 90 #TurnEntity(r\obj, 0, r\angle, 0) #ElseIf MapTemp(x - 1, y)>0 And MapTemp(x, y - 1)>0 #r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y)) #TurnEntity(r\obj, 0, 270, 0) #r\angle = 270 #Else #r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y)) #EndIf #MapRoomID(ROOM2C)=MapRoomID(ROOM2C)+1 #EndIf #Case 3 #If MapRoomID(ROOM3) < MaxRooms And MapName(x,y) = "" Then #If MapRoom(ROOM3, MapRoomID(ROOM3)) <> "" Then MapName(x, y) = MapRoom(ROOM3, MapRoomID(ROOM3)) #EndIf # #r = CreateRoom(zone, ROOM3, x * 8, 0, y * 8, MapName(x, y)) #If (Not MapTemp(x, y - 1)) Then #TurnEntity(r\obj, 0, 180, 0) #r\angle = 180 #ElseIf (Not MapTemp(x - 1, y)) #TurnEntity(r\obj, 0, 90, 0) #r\angle = 90 #ElseIf (Not MapTemp(x + 1, y)) #TurnEntity(r\obj, 0, -90, 0) #r\angle = 270 #End If #MapRoomID(ROOM3)=MapRoomID(ROOM3)+1 #Case 4 #If MapRoomID(ROOM4) < MaxRooms And MapName(x,y) = "" Then #If MapRoom(ROOM4, MapRoomID(ROOM4)) <> "" Then MapName(x, y) = MapRoom(ROOM4, MapRoomID(ROOM4)) #EndIf # #r = CreateRoom(zone, ROOM4, x * 8, 0, y * 8, MapName(x, y)) #MapRoomID(ROOM4)=MapRoomID(ROOM4)+1 #End Select # #EndIf # #Next #Next # #r = CreateRoom(0, ROOM1, (MapWidth-1) * 8, 500, 8, "gatea") #MapRoomID(ROOM1)=MapRoomID(ROOM1)+1 # #r = CreateRoom(0, ROOM1, (MapWidth-1) * 8, 0, (MapHeight-1) * 8, "pocketdimension") #MapRoomID(ROOM1)=MapRoomID(ROOM1)+1 # #If IntroEnabled #r = CreateRoom(0, ROOM1, 8, 0, (MapHeight-1) * 8, "173") #MapRoomID(ROOM1)=MapRoomID(ROOM1)+1 #EndIf # #r = CreateRoom(0, ROOM1, 8, 800, 0, "dimension1499") #MapRoomID(ROOM1)=MapRoomID(ROOM1)+1 # #For r.Rooms = Each Rooms #PreventRoomOverlap(r) #Next # #If 0 Then #Repeat #Cls #For x = 0 To MapWidth - 1 #For y = 0 To MapHeight - 1 #If MapTemp(x, y) = 0 Then # #zone=GetZone(y) # #Color 50*zone, 50*zone, 50*zone #Rect(x * 32, y * 32, 30, 30) #Else #If MapTemp(x, y) = 255 Then #Color 0,200,0 #Else If MapTemp(x,y)=4 Then #Color 50,50,255 #Else If MapTemp(x,y)=3 Then #Color 50,255,255 #Else If MapTemp(x,y)=2 Then #Color 255,255,50 #Else #Color 255, 255, 255 #EndIf #Rect(x * 32, y * 32, 30, 30) #End If #Next #Next # #For x = 0 To MapWidth - 1 #For y = 0 To MapHeight - 1 # #If MouseX()>x*32 And MouseX()y*32 And MouseY() 0 Then #Text x * 32 +2, (y) * 32 + 2,MapTemp(x, y) +" "+ MapName(x,y) #End If #Next #Next # #Flip #Until KeyHit(28) #EndIf # # #For y = 0 To MapHeight #For x = 0 To MapWidth #MapTemp(x, y) = Min(MapTemp(x, y),1) #Next #Next # #Local d.Doors #Local shouldSpawnDoor% #For y = MapHeight To 0 Step -1 # #If y=I_Zone\Transition[1]-1 And y 0 Then #If zone = 2 Then temp=2 Else temp=0 # #For r.Rooms = Each Rooms #r\angle = WrapAngle(r\angle) #If Int(r\x/8.0)=x And Int(r\z/8.0)=y Then #shouldSpawnDoor = False #Select r\RoomTemplate\Shape #Case ROOM1 #If r\angle=90 #shouldSpawnDoor = True #EndIf #Case ROOM2 #If r\angle=90 Or r\angle=270 #shouldSpawnDoor = True #EndIf #Case ROOM2C #If r\angle=0 Or r\angle=90 #shouldSpawnDoor = True #EndIf #Case ROOM3 #If r\angle=0 Or r\angle=180 Or r\angle=90 #shouldSpawnDoor = True #EndIf #Default #shouldSpawnDoor = True #End Select #If shouldSpawnDoor #If (x+1)<(MapWidth+1) #If MapTemp(x + 1, y) > 0 Then #d.Doors = CreateDoor(r\zone, Float(x) * spacing + spacing / 2.0, 0, Float(y) * spacing, 90, r, Max(Rand(-3, 1), 0), temp) #r\AdjDoor[0] = d #EndIf #EndIf #EndIf # #shouldSpawnDoor = False #Select r\RoomTemplate\Shape #Case ROOM1 #If r\angle=180 #shouldSpawnDoor = True #EndIf #Case ROOM2 #If r\angle=0 Or r\angle=180 #shouldSpawnDoor = True #EndIf #Case ROOM2C #If r\angle=180 Or r\angle=90 #shouldSpawnDoor = True #EndIf #Case ROOM3 #If r\angle=180 Or r\angle=90 Or r\angle=270 #shouldSpawnDoor = True #EndIf #Default #shouldSpawnDoor = True #End Select #If shouldSpawnDoor #If (y+1)<(MapHeight+1) #If MapTemp(x, y + 1) > 0 Then #d.Doors = CreateDoor(r\zone, Float(x) * spacing, 0, Float(y) * spacing + spacing / 2.0, 0, r, Max(Rand(-3, 1), 0), temp) #r\AdjDoor[3] = d #EndIf #EndIf #EndIf # #Exit #EndIf #Next # #End If # #Next #Next # #For r.Rooms = Each Rooms #;If r\angle >= 360 #; r\angle = r\angle-360 #;EndIf #r\angle = WrapAngle(r\angle) #r\Adjacent[0]=Null #r\Adjacent[1]=Null #r\Adjacent[2]=Null #r\Adjacent[3]=Null #For r2.Rooms = Each Rooms #If r<>r2 Then #If r2\z=r\z Then #If (r2\x)=(r\x+8.0) Then #r\Adjacent[0]=r2 #If r\AdjDoor[0] = Null Then r\AdjDoor[0] = r2\AdjDoor[2] #ElseIf (r2\x)=(r\x-8.0) #r\Adjacent[2]=r2 #If r\AdjDoor[2] = Null Then r\AdjDoor[2] = r2\AdjDoor[0] #EndIf #ElseIf r2\x=r\x Then #If (r2\z)=(r\z-8.0) Then #r\Adjacent[1]=r2 #If r\AdjDoor[1] = Null Then r\AdjDoor[1] = r2\AdjDoor[3] #ElseIf (r2\z)=(r\z+8.0) #r\Adjacent[3]=r2 #If r\AdjDoor[3] = Null Then r\AdjDoor[3] = r2\AdjDoor[1] #EndIf #EndIf #EndIf #If (r\Adjacent[0]<>Null) And (r\Adjacent[1]<>Null) And (r\Adjacent[2]<>Null) And (r\Adjacent[3]<>Null) Then Exit #Next #Next