From 050157d05ef423983d67d97cc53655879be88baa Mon Sep 17 00:00:00 2001 From: Holly Date: Sun, 12 Jan 2025 23:24:42 +0000 Subject: [PATCH] progress on launcher + map system --- project.godot | 1 - scenes/screens/Launcher.tscn | 29 +- scenes/world/DynamicMap.tscn | 6 + src/Button.gd | 7 +- src/DynamicMap.gd | 778 ++++++++++++++++++++++++++++++++++- src/GameStartup.gd | 23 +- src/Global.gd | 18 +- src/IntroVideo.gd | 2 +- src/Launcher.gd | 11 +- src/Main.gd | 5 + src/MainMenu.gd | 2 +- src/MapSystem.gd | 751 --------------------------------- src/Options.gd | 6 - src/Startup.gd | 6 +- src/UpdateChecker.gd | 2 +- src/Utils.gd | 29 ++ src/file_parsers/INI.gd | 13 +- src/objects/MapZones.gd | 5 + 18 files changed, 900 insertions(+), 794 deletions(-) create mode 100644 src/Main.gd delete mode 100644 src/MapSystem.gd delete mode 100644 src/Options.gd create mode 100644 src/objects/MapZones.gd diff --git a/project.godot b/project.godot index bbf7fdb..ff4482e 100644 --- a/project.godot +++ b/project.godot @@ -21,7 +21,6 @@ config/icon="res://icon.png" [autoload] Global="*res://src/Global.gd" -Options="*res://src/Options.gd" DebugMenu="*res://addons/debug_menu/debug_menu.tscn" [display] diff --git a/scenes/screens/Launcher.tscn b/scenes/screens/Launcher.tscn index aeec365..c8a81ad 100644 --- a/scenes/screens/Launcher.tscn +++ b/scenes/screens/Launcher.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=4 format=3 uid="uid://dc8jcyubx5hv7"] +[gd_scene load_steps=5 format=3 uid="uid://dc8jcyubx5hv7"] [ext_resource type="Script" path="res://src/Launcher.gd" id="1_cf26g"] [ext_resource type="Texture2D" uid="uid://d3sh54nbyqqiu" path="res://GFX/menu/launcher.jpg" id="2_6ldjf"] [ext_resource type="PackedScene" uid="uid://5ktmpg8aurb7" path="res://scenes/gui/Button.tscn" id="3_nah2s"] +[ext_resource type="FontFile" uid="uid://xe31montgcoo" path="res://GFX/font/cour/Courier New.ttf" id="4_8vkjh"] [node name="Launcher" type="Control"] layout_mode = 3 @@ -22,8 +23,24 @@ grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("2_6ldjf") -[node name="Button" parent="." instance=ExtResource("3_nah2s")] -offset_left = 267.0 -offset_top = 255.0 -offset_right = 417.0 -offset_bottom = 305.0 +[node name="Launch" parent="." instance=ExtResource("3_nah2s")] +custom_minimum_size = Vector2(100, 30) +offset_left = 520.0 +offset_top = 375.0 +offset_right = 620.0 +offset_bottom = 405.0 +border_size = 2 +font = ExtResource("4_8vkjh") +text = "LAUNCH" +text_size = 58 + +[node name="Exit" parent="." instance=ExtResource("3_nah2s")] +custom_minimum_size = Vector2(100, 30) +offset_left = 520.0 +offset_top = 430.0 +offset_right = 620.0 +offset_bottom = 460.0 +border_size = 2 +font = ExtResource("4_8vkjh") +text = "EXIT" +text_size = 58 diff --git a/scenes/world/DynamicMap.tscn b/scenes/world/DynamicMap.tscn index 629ca83..ab518bc 100644 --- a/scenes/world/DynamicMap.tscn +++ b/scenes/world/DynamicMap.tscn @@ -4,6 +4,8 @@ [ext_resource type="Script" path="res://src/TempDebugCamera.gd" id="2_co6fy"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tvhkv"] +sky_top_color = Color(0.483795, 0.593484, 0.746094, 1) +sky_horizon_color = Color(0.615875, 0.658795, 0.726562, 1) [sub_resource type="Sky" id="Sky_qyldw"] sky_material = SubResource("ProceduralSkyMaterial_tvhkv") @@ -11,6 +13,7 @@ sky_material = SubResource("ProceduralSkyMaterial_tvhkv") [sub_resource type="Environment" id="Environment_d5g72"] background_mode = 2 sky = SubResource("Sky_qyldw") +sdfgi_use_occlusion = true [node name="DynamicMap" type="Node3D"] script = ExtResource("1_mytgt") @@ -22,3 +25,6 @@ environment = SubResource("Environment_d5g72") [node name="Camera3D" type="Camera3D" parent="CameraPivot"] script = ExtResource("2_co6fy") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0) diff --git a/src/Button.gd b/src/Button.gd index 9133d78..87b4303 100644 --- a/src/Button.gd +++ b/src/Button.gd @@ -21,6 +21,9 @@ func _ready(): textLabel.add_theme_font_override("font", font) textLabel.add_theme_font_size_override("font_size", int(text_size * Global.menuScale)) + setupSize.call_deferred() + +func setupSize(): background.position.x = border_size background.position.y = border_size background.size.x = background.size.x - border_size * 2 @@ -32,18 +35,16 @@ func _on_resized() -> void: func gotResized(): textLabel.add_theme_font_size_override("font_size", int(text_size * Global.menuScale)) - func _on_hit_area_mouse_entered() -> void: hoverColor.visible = true - func _on_hit_area_mouse_exited() -> void: hoverColor.visible = false var pressedLastEvent = false func _on_hit_area_gui_input(event: InputEvent) -> void: if event is InputEventMouseButton: - if event.pressed and not pressedLastEvent: + if event.button_index == 1 and event.pressed and not pressedLastEvent: pressedLastEvent = true Global.clickSound.play() clicked.emit() diff --git a/src/DynamicMap.gd b/src/DynamicMap.gd index 179fabd..859f45d 100644 --- a/src/DynamicMap.gd +++ b/src/DynamicMap.gd @@ -1,6 +1,6 @@ extends Node3D -var usableRooms = Dictionary() +var roomTemplatesRaw = Dictionary() func _ready() -> void: #RMesh.LoadRMesh(self, "GFX\\map\\gatea_opt.rmesh") @@ -17,7 +17,781 @@ func _ready() -> void: if not roomInfo.has("mesh path"): print(room, roomInfo) continue - usableRooms.get_or_add(room, roomInfo) + 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 diff --git a/src/GameStartup.gd b/src/GameStartup.gd index bed5e5a..d340da2 100644 --- a/src/GameStartup.gd +++ b/src/GameStartup.gd @@ -4,8 +4,25 @@ var skipIntro = false func _ready() -> void: DisplayServer.window_set_title(str("SCP - Containment Breach v", Global.GAME_VERSION)) + var width = Main.options.get("options").get("width").to_int() + var height = Main.options.get("options").get("height").to_int() + var fullscreen = Main.options.get("options").get("fullscreen").to_lower() == "true" + DisplayServer.window_set_max_size(Vector2i(width, height)) + DisplayServer.window_set_min_size(Vector2i(width, height)) + var window = get_window() + window.size = Vector2i(width, height) + if not fullscreen: + window.move_to_center() + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN if fullscreen else DisplayServer.WINDOW_MODE_WINDOWED) + if skipIntro: - get_tree().change_scene_to_file("res://scenes/screens/MainMenu.tscn") + skipIntroVideo.call_deferred() else: - Global.videoToPlay = "res://GFX/menu/startup_Undertow.avi" - get_tree().change_scene_to_file("res://scenes/screens/IntroVideo.tscn") + playIntro.call_deferred() + +func skipIntroVideo(): + get_tree().change_scene_to_file("res://scenes/screens/MainMenu.tscn") + +func playIntro(): + Global.videoToPlay = "res://GFX/menu/startup_Undertow.avi" + get_tree().change_scene_to_file("res://scenes/screens/IntroVideo.tscn") diff --git a/src/Global.gd b/src/Global.gd index 592bc14..13be63b 100644 --- a/src/Global.gd +++ b/src/Global.gd @@ -11,8 +11,8 @@ var clickSound: AudioStreamPlayer var FPSfactor: float -func GetTextureFromCache(name:String): - var fixedName = name.replace("\\", "/") +func GetTextureFromCache(rawFileName:String): + var fixedName = rawFileName.replace("\\", "/") if textureCache.has(fixedName): return textureCache.get(fixedName) return null @@ -20,8 +20,8 @@ func GetTextureFromCache(name:String): var TRANSPARENT_TEXTURE = load("res://a0.png") var MISSING_TEXTURE = load("res://missing.png") -func LoadTexture(name: String): - var fixedName = name.replace("\\", "/") +func LoadTexture(rawFileName: String): + var fixedName = rawFileName.replace("\\", "/") var fileName = Utils.GetCaseiFileName(str("res://", fixedName)) if fileName == null: return MISSING_TEXTURE @@ -30,15 +30,15 @@ func LoadTexture(name: String): return textureCache.get_or_add(fixedName, load(fileName)) -func GetTextureSafe(name: String): - var fixedName = name.replace("\\", "/") +func GetTextureSafe(rawFileName: String): + var fixedName = rawFileName.replace("\\", "/") if textureCache.has(fixedName): return textureCache.get(fixedName) else: - return LoadTexture(name) + return LoadTexture(rawFileName) -func LoadAudio(name: String): - var fixedName = name.replace("\\", "/") +func LoadAudio(rawFileName: String): + var fixedName = rawFileName.replace("\\", "/") return audioCache.get_or_add(fixedName, load(str("res://", fixedName))) func _ready(): diff --git a/src/IntroVideo.gd b/src/IntroVideo.gd index 6ca7031..7837881 100644 --- a/src/IntroVideo.gd +++ b/src/IntroVideo.gd @@ -7,7 +7,7 @@ func _ready() -> void: $AspectRatioContainer/VideoStreamPlayer.play() $AudioStreamPlayer.play() -func _process(delta: float) -> void: +func _process(_delta: float) -> void: if Input.is_action_just_pressed("ui_accept"): _on_video_stream_player_finished() diff --git a/src/Launcher.gd b/src/Launcher.gd index ae43f32..19ffa8b 100644 --- a/src/Launcher.gd +++ b/src/Launcher.gd @@ -1,10 +1,13 @@ extends Control -# Called when the node enters the scene tree for the first time. func _ready() -> void: DisplayServer.window_set_title("SCP - Containment Breach Launcher") + $Launch.connect("clicked", launch) + $Exit.connect("clicked", exit) -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: - pass +func launch(): + get_tree().change_scene_to_file("res://scenes/screens/GameStartup.tscn") + +func exit(): + get_tree().quit.call_deferred() diff --git a/src/Main.gd b/src/Main.gd new file mode 100644 index 0000000..efcbb7d --- /dev/null +++ b/src/Main.gd @@ -0,0 +1,5 @@ +class_name Main + +static var options = INI.Load("res://options.ini") + +static var SeedRnd = 0 diff --git a/src/MainMenu.gd b/src/MainMenu.gd index 368f5f2..8b749e6 100644 --- a/src/MainMenu.gd +++ b/src/MainMenu.gd @@ -27,7 +27,7 @@ func quitGame(): get_tree().quit.call_deferred() var jankyCounter = 0 -func _process(delta: float) -> void: +func _process(_delta: float) -> void: if jankyCounter >= 5 and jankyFix.visible: jankyFix.visible = false else: diff --git a/src/MapSystem.gd b/src/MapSystem.gd deleted file mode 100644 index a66c017..0000000 --- a/src/MapSystem.gd +++ /dev/null @@ -1,751 +0,0 @@ -class MapSystem - -const RandomSeed = 59395743 - -static func CreateMap() - #DebugLog ("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 - - Local x%, y%, temp% - Local i%, x2%, y2% - Local width%, height% - - Local zone% - - SeedRnd GenerateSeedNumber(RandomSeed) - - Dim MapName$(MapWidth, MapHeight) - - Dim MapRoomID%(ROOM4 + 1) - - x = Floor(MapWidth / 2) - y = MapHeight - 2;Rand(3, 5) - - For i = y To MapHeight - 1 - MapTemp(x, i) = True - Next - - Repeat - width = Rand(10, 15) - - If x > MapWidth*0.6 Then - width = -width - ElseIf x > MapWidth*0.4 - x = x-width/2 - EndIf - - ;make sure the hallway doesn't go outside the array - If x+width > MapWidth-3 Then - ;x = -width+MapWidth-4 - - width=MapWidth-3-x - ElseIf x+width < 2 - - ;x = 3-width - width=-x+2 - EndIf - - x = Min(x, x + width) - width = Abs(width) - For i = x To x + width - MapTemp(Min(i,MapWidth), y) = True - Next - - height = Rand(3, 4) - If y - height < 1 Then height = y-1 - - yhallways = Rand(4,5) - - If GetZone(y-height)<>GetZone(y-height+1) Then height=height-1 - - For i = 1 To yhallways - - x2 = Max(Min(Rand(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 - Wend - - If x2GetZone(y2+1) Then ;a room leading from zone to another - MapTemp(x2, y2) = 255 - Else - MapTemp(x2, y2) = True - EndIf - Next - - If tempheight = height Then temp = x2 - End If - - Next - - x = temp - y = y - height - Until y < 2 - - - Local ZoneAmount=3 - Local Room1Amount%[3], Room2Amount%[3],Room2CAmount%[3],Room3Amount%[3],Room4Amount%[3] - - ;count the amount of rooms - For y = 1 To MapHeight - 1 - zone% = GetZone(y) - - For x = 1 To MapWidth - 1 - If MapTemp(x, y) > 0 Then - temp = Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1) - temp = temp + Min(MapTemp(x, y + 1),1) + Min(MapTemp(x, y - 1),1) - If MapTemp(x,y)<255 Then MapTemp(x, y) = temp - Select MapTemp(x,y) - Case 1 - Room1Amount[zone]=Room1Amount[zone]+1 - Case 2 - If Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1)= 2 Then - Room2Amount[zone]=Room2Amount[zone]+1 - ElseIf Min(MapTemp(x, y + 1),1) + Min(MapTemp(x , y - 1),1)= 2 - Room2Amount[zone]=Room2Amount[zone]+1 - Else - Room2CAmount[zone] = Room2CAmount[zone]+1 - EndIf - Case 3 - Room3Amount[zone]=Room3Amount[zone]+1 - Case 4 - Room4Amount[zone]=Room4Amount[zone]+1 - End Select - EndIf - Next - Next - - ;force more room1s (if needed) - For i = 0 To 2 - ;need more rooms if there are less than 5 of them - temp = -Room1Amount[i]+5 - - If temp > 0 Then - - For y = (MapHeight/ZoneAmount)*(2-i)+1 To ((MapHeight/ZoneAmount) * ((2-i)+1.0))-2 - - For x = 2 To MapWidth - 2 - If MapTemp(x, y) = 0 Then - - If (Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1) + Min(MapTemp(x, y + 1),1) + Min(MapTemp(x, y - 1),1)) = 1 Then - ;If Rand(4)=1 Then - - If MapTemp(x + 1, y) Then - x2 = x+1 : y2 = y - ElseIf MapTemp(x - 1, y) - x2 = x-1 : y2 = y - ElseIf MapTemp(x, y+1) - x2 = x : y2 = y+1 - ElseIf MapTemp(x, y-1) - x2 = x : y2 = y-1 - EndIf - - placed = False - If MapTemp(x2,y2)>1 And MapTemp(x2,y2)<4 Then - Select MapTemp(x2,y2) - Case 2 - If Min(MapTemp(x2 + 1, y2),1) + Min(MapTemp(x2 - 1, y2),1)= 2 Then - Room2Amount[i]=Room2Amount[i]-1 - Room3Amount[i]=Room3Amount[i]+1 - placed = True - ElseIf 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 - EndIf - Case 3 - Room3Amount[i]=Room3Amount[i]-1 - Room4Amount[i]=Room4Amount[i]+1 - placed = True - End Select - - If placed Then - MapTemp(x2,y2)=MapTemp(x2,y2)+1 - - MapTemp(x, y) = 1 - Room1Amount[i] = Room1Amount[i]+1 - - temp=temp-1 - EndIf - EndIf - EndIf - - EndIf - If temp = 0 Then Exit - Next - If temp = 0 Then Exit - Next - EndIf - Next - - - - - - ;force more room4s and room2Cs - For i = 0 To 2 - - Select i - Case 2 - zone=2 - temp2=MapHeight/3;-1 - Case 1 - zone=MapHeight/3+1 - temp2=MapHeight*(2.0/3.0)-1 - Case 0 - zone=MapHeight*(2.0/3.0)+1 - temp2=MapHeight-2 - End Select - - If Room4Amount[i]<1 Then ;we want at least 1 ROOM4 - DebugLog "forcing a ROOM4 into zone "+i - temp=0 - - For y = zone To temp2 - For x = 2 To MapWidth - 2 - If MapTemp(x,y)=3 Then - Select 0 ;see if adding a ROOM1 is possible - Case (MapTemp(x+1,y) Or MapTemp(x+1,y+1) Or MapTemp(x+1,y-1) Or MapTemp(x+2,y)) - MapTemp(x+1,y)=1 - temp=1 - Case (MapTemp(x-1,y) Or MapTemp(x-1,y+1) Or MapTemp(x-1,y-1) Or MapTemp(x-2,y)) - MapTemp(x-1,y)=1 - temp=1 - Case (MapTemp(x,y+1) Or MapTemp(x+1,y+1) Or MapTemp(x-1,y+1) Or MapTemp(x,y+2)) - MapTemp(x,y+1)=1 - temp=1 - Case (MapTemp(x,y-1) Or MapTemp(x+1,y-1) Or MapTemp(x-1,y-1) Or MapTemp(x,y-2)) - MapTemp(x,y-1)=1 - temp=1 - End Select - If temp=1 Then - MapTemp(x,y)=4 ;turn this room into a ROOM4 - DebugLog "ROOM4 forced into slot ("+x+", "+y+")" - Room4Amount[i]=Room4Amount[i]+1 - Room3Amount[i]=Room3Amount[i]-1 - Room1Amount[i]=Room1Amount[i]+1 - EndIf - EndIf - If temp=1 Then Exit - Next - If temp=1 Then Exit - Next - - If temp=0 Then DebugLog "Couldn't place ROOM4 in zone "+i - EndIf - - If Room2CAmount[i]<1 Then ;we want at least 1 ROOM2C - DebugLog "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 - - Local 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) - Dim MapRoom$(ROOM4 + 1, MaxRooms) - - - ;zone 1 -------------------------------------------------------------------------------------------------- - - Local min_pos = 1, 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(Rnd(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" - - ;----------------------- luodaan kartta -------------------------------- - - 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 - -End Function diff --git a/src/Options.gd b/src/Options.gd deleted file mode 100644 index 0aea84c..0000000 --- a/src/Options.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends Node - -var options = ConfigFile.new() - -func _ready() -> void: - options.load("res://options.ini") diff --git a/src/Startup.gd b/src/Startup.gd index c531fe0..938c3d7 100644 --- a/src/Startup.gd +++ b/src/Startup.gd @@ -1,4 +1,8 @@ extends Control func _ready() -> void: - get_tree().change_scene_to_file("res://scenes/screens/UpdateChecker.tscn") + loadToLauncher.call_deferred() + +func loadToLauncher(): + #get_tree().change_scene_to_file("res://scenes/screens/UpdateChecker.tscn") + get_tree().change_scene_to_file("res://scenes/screens/Launcher.tscn") diff --git a/src/UpdateChecker.gd b/src/UpdateChecker.gd index ffb4cb7..a76cbc9 100644 --- a/src/UpdateChecker.gd +++ b/src/UpdateChecker.gd @@ -5,5 +5,5 @@ func _ready() -> void: DisplayServer.window_set_min_size(Vector2i(640, 480)) $HTTPRequest.request("https://www.scpcbgame.com/changelog.txt") -func _on_http_request_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void: +func _on_http_request_request_completed(_result: int, _response_code: int, _headers: PackedStringArray, _body: PackedByteArray) -> void: get_tree().change_scene_to_file("res://scenes/screens/Launcher.tscn") diff --git a/src/Utils.gd b/src/Utils.gd index ce07ee8..e6095b9 100644 --- a/src/Utils.gd +++ b/src/Utils.gd @@ -48,3 +48,32 @@ static func GetCaseiFileName(path: String): cachedLookupPaths.get_or_add(dirName.to_lower(), loadedFileNames) return str(dirName, "/", loadedFileNames.get(pathParts[-1].to_lower())) + +static func Init1DArray(size: int, initValue: Variant = null) -> Array: + var array = [] + for i in range(size): + array.append(initValue) + + return array + +# I want this to be array[y][x] but this is coming from b3d +static func Init2DArray(sizeX: int, sizeY: int, initValue: Variant = null) -> Array: + var array = [] + for i in range(sizeX): + var yArray = [] + array.append(yArray) + for i1 in range(sizeY): + yArray.append(initValue) + + return array + +static func GenerateSeedNumber(seedv: String): + var hashv = 0 + if len(seedv) == 0: + return hashv + + for i in range(len(seedv)): + var chr = seedv[i].to_ascii_buffer()[0]; + hashv = ((hashv << 5) - hashv) + chr + hashv |= 0 + return hashv diff --git a/src/file_parsers/INI.gd b/src/file_parsers/INI.gd index 04b0902..a5fd6b1 100644 --- a/src/file_parsers/INI.gd +++ b/src/file_parsers/INI.gd @@ -1,21 +1,24 @@ class_name INI -static func Load(file: String): +static func Load(file: String, ignoreLoose:bool = true): var sections = Dictionary() var fileHandle = FileAccess.open(file, FileAccess.READ) var fileContent = fileHandle.get_as_text().replace("\r\n", "\n").split("\n") fileHandle.close() - var currentSection: Dictionary = sections.get_or_add("loose", Dictionary()) + var currentSection: Dictionary = Dictionary() if ignoreLoose else sections.get_or_add("loose", Dictionary()) + var sectionName: String = "loose" for line in fileContent: if line.strip_edges().strip_escapes() == "" or line.begins_with(";"): continue if line.begins_with("[") and line.ends_with("]"): - currentSection = sections.get_or_add(line.substr(1, len(line) - 2), Dictionary()) + sectionName = line.substr(1, len(line) - 2) + currentSection = sections.get_or_add(sectionName, Dictionary()) else: - var segments = line.split("=") - currentSection.get_or_add(segments[0], segments[1]) + if not ignoreLoose or (ignoreLoose and sectionName != "loose"): + var segments = line.replace(" = ", "=").split("=") + currentSection.get_or_add(segments[0], segments[1]) return sections diff --git a/src/objects/MapZones.gd b/src/objects/MapZones.gd new file mode 100644 index 0000000..347af52 --- /dev/null +++ b/src/objects/MapZones.gd @@ -0,0 +1,5 @@ +class_name MapZones + +var Transition: Array = [0, 0] +var HasCustomForest: bool +var HasCustomMT: bool