first
BIN
Binaries/Spacebots/Spacebots.exe
Normal file
BIN
Binaries/Spacebots/fmodL.dll
Normal file
BIN
Binaries/Spacebots/fmodstudioL.dll
Normal file
BIN
Binaries/Spacebots/libtwovoip.windows.template_debug.x86_64.dll
Normal file
BIN
Binaries/Spacebots/steam_api64.dll
Normal file
BIN
Binaries/szip.zip
Normal file
129
Maps/Lobby/Lobby.tscn
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
[gd_scene load_steps=19 format=3 uid="uid://bco4seshb8fjf"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://fvwy57of2gvq" path="res://Maps/Lobby/lobby.gd" id="1_3j6ah"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cimsjl61nhh5s" path="res://assets/2D/HDR_blue_nebulae-1.hdr" id="1_o7c6e"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="3_b4v87"]
|
||||||
|
[ext_resource type="Script" uid="uid://cjgxd88k1bntf" path="res://script/pathfindingGridLoad.gd" id="3_bhyb3"]
|
||||||
|
[ext_resource type="Script" uid="uid://cjiiw7cybj24b" path="res://script/ButtonLogicImpulse.gd" id="4_2vvmy"]
|
||||||
|
[ext_resource type="Script" uid="uid://ymaax1x5fos3" path="res://script/interactBox.gd" id="5_f6mem"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://1bkjenax2g3s" path="res://assets/Audio/Ambience 1 SpaceBots Audio.mp3" id="6_f6mem"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://md1qkedi16r6" path="res://Minigames/Initiators/MinigameFuseBox.tscn" id="8_1nbv0"]
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_skcuv"]
|
||||||
|
interpolation_mode = 1
|
||||||
|
offsets = PackedFloat32Array(0, 0.25, 0.361502, 0.375, 0.488263, 0.5, 0.615023, 0.625, 0.732394, 0.75, 0.859155, 0.875, 1)
|
||||||
|
colors = PackedColorArray(0, 0, 0, 1, 0.25, 0.25, 0.25, 1, 0.28169, 0.28169, 0.28169, 1, 0.375, 0.375, 0.375, 1, 0.408451, 0.408451, 0.408451, 1, 0.5, 0.5, 0.5, 1, 0.530516, 0.530516, 0.530516, 1, 0.625, 0.625, 0.625, 1, 0.661972, 0.661972, 0.661972, 1, 0.75, 0.75, 0.75, 1, 0.802817, 0.802817, 0.802817, 1, 0.875, 0.875, 0.875, 1, 1, 1, 1, 1)
|
||||||
|
metadata/_snap_enabled = true
|
||||||
|
metadata/_snap_count = 8
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_1nbv0"]
|
||||||
|
gradient = SubResource("Gradient_skcuv")
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_3j6ah"]
|
||||||
|
offsets = PackedFloat32Array(0.187793, 0.704225, 0.929577)
|
||||||
|
colors = PackedColorArray(0, 0, 0, 1, 0.58042, 0.58042, 0.58042, 1, 0.860369, 0.860369, 0.860369, 1)
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_bhyb3"]
|
||||||
|
frequency = 0.03
|
||||||
|
fractal_octaves = 8
|
||||||
|
fractal_lacunarity = 5.0
|
||||||
|
fractal_gain = 0.495
|
||||||
|
fractal_weighted_strength = 0.23
|
||||||
|
domain_warp_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_g1wmu"]
|
||||||
|
noise = SubResource("FastNoiseLite_bhyb3")
|
||||||
|
color_ramp = SubResource("Gradient_3j6ah")
|
||||||
|
|
||||||
|
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_2vvmy"]
|
||||||
|
panorama = ExtResource("1_o7c6e")
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_b8rsf"]
|
||||||
|
sky_material = SubResource("PanoramaSkyMaterial_2vvmy")
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_f6mem"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_b8rsf")
|
||||||
|
glow_enabled = true
|
||||||
|
glow_levels/1 = 1.38
|
||||||
|
glow_levels/2 = 1.55
|
||||||
|
glow_levels/3 = 5.63
|
||||||
|
glow_levels/5 = 1.75
|
||||||
|
glow_levels/6 = 0.9
|
||||||
|
glow_levels/7 = 0.75
|
||||||
|
glow_strength = 1.73
|
||||||
|
glow_mix = 0.03
|
||||||
|
glow_bloom = 0.05
|
||||||
|
glow_blend_mode = 4
|
||||||
|
glow_hdr_luminance_cap = 1.5
|
||||||
|
glow_map = SubResource("NoiseTexture2D_g1wmu")
|
||||||
|
volumetric_fog_emission = Color(1, 1, 1, 1)
|
||||||
|
volumetric_fog_emission_energy = 0.04
|
||||||
|
adjustment_brightness = 1.5
|
||||||
|
adjustment_color_correction = SubResource("GradientTexture1D_1nbv0")
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1nbv0"]
|
||||||
|
albedo_color = Color(0.881937, 0.881937, 0.881937, 1)
|
||||||
|
albedo_texture = ExtResource("3_b4v87")
|
||||||
|
metallic = 0.4
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_b4v87"]
|
||||||
|
size = Vector3(4.5, 1, 1)
|
||||||
|
|
||||||
|
[node name="Lobby" type="Node3D"]
|
||||||
|
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0)
|
||||||
|
script = ExtResource("1_3j6ah")
|
||||||
|
playerStartPos = Vector3(0, 1, 0)
|
||||||
|
metadata/_custom_type_script = "uid://cbjn7f7r081q8"
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_f6mem")
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
material_overlay = SubResource("StandardMaterial3D_1nbv0")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
size = Vector3(49, 0.2, 49)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.47177, 0)
|
||||||
|
omni_range = 19.6325
|
||||||
|
|
||||||
|
[node name="PathfindingGridLoader" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 2.01037, -25)
|
||||||
|
script = ExtResource("3_bhyb3")
|
||||||
|
lengthX = 25
|
||||||
|
lengthZ = 25
|
||||||
|
metadata/_custom_type_script = "uid://cjgxd88k1bntf"
|
||||||
|
|
||||||
|
[node name="StartMission" type="Label3D" parent="."]
|
||||||
|
transform = Transform3D(-1, 0, -1.509958e-07, 0, 1, 0, 1.509958e-07, 0, -1, 0, 1.69191, 1.21511)
|
||||||
|
text = "Start Mission"
|
||||||
|
font_size = 152
|
||||||
|
|
||||||
|
[node name="ButtonLogicImpulse" type="Timer" parent="StartMission" node_paths=PackedStringArray("interactBox")]
|
||||||
|
script = ExtResource("4_2vvmy")
|
||||||
|
interactBox = NodePath("../InteractBox")
|
||||||
|
metadata/_custom_type_script = "uid://cjiiw7cybj24b"
|
||||||
|
|
||||||
|
[node name="InteractBox" type="Area3D" parent="StartMission" node_paths=PackedStringArray("object")]
|
||||||
|
script = ExtResource("5_f6mem")
|
||||||
|
object = NodePath("../ButtonLogicImpulse")
|
||||||
|
metadata/_custom_type_script = "uid://ymaax1x5fos3"
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StartMission/InteractBox"]
|
||||||
|
shape = SubResource("BoxShape3D_b4v87")
|
||||||
|
|
||||||
|
[node name="WiresMinigame" type="Label3D" parent="."]
|
||||||
|
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -6.260252, 1.69191, 1.2151097)
|
||||||
|
visible = false
|
||||||
|
pixel_size = 0.02
|
||||||
|
text = "Wires Minigame"
|
||||||
|
|
||||||
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("6_f6mem")
|
||||||
|
parameters/looping = true
|
||||||
|
|
||||||
|
[node name="MinigameFuseBox" parent="." instance=ExtResource("8_1nbv0")]
|
||||||
|
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -6.407519, 0, 1.8378651)
|
||||||
129
Maps/Lobby/Lobby.tscn936352877.tmp
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
[gd_scene load_steps=19 format=3 uid="uid://bco4seshb8fjf"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://fvwy57of2gvq" path="res://Maps/Lobby/lobby.gd" id="1_3j6ah"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cimsjl61nhh5s" path="res://assets/2D/HDR_blue_nebulae-1.hdr" id="1_o7c6e"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="3_b4v87"]
|
||||||
|
[ext_resource type="Script" uid="uid://cjgxd88k1bntf" path="res://script/pathfindingGridLoad.gd" id="3_bhyb3"]
|
||||||
|
[ext_resource type="Script" uid="uid://cjiiw7cybj24b" path="res://script/ButtonLogicImpulse.gd" id="4_2vvmy"]
|
||||||
|
[ext_resource type="Script" uid="uid://ymaax1x5fos3" path="res://script/interactBox.gd" id="5_f6mem"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://1bkjenax2g3s" path="res://assets/Audio/Ambience 1 SpaceBots Audio.mp3" id="6_f6mem"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dwrjtwtsp4jgy" path="res://Minigames/Minigames/Wires.tscn" id="8_1nbv0"]
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_skcuv"]
|
||||||
|
interpolation_mode = 1
|
||||||
|
offsets = PackedFloat32Array(0, 0.25, 0.361502, 0.375, 0.488263, 0.5, 0.615023, 0.625, 0.732394, 0.75, 0.859155, 0.875, 1)
|
||||||
|
colors = PackedColorArray(0, 0, 0, 1, 0.25, 0.25, 0.25, 1, 0.28169, 0.28169, 0.28169, 1, 0.375, 0.375, 0.375, 1, 0.408451, 0.408451, 0.408451, 1, 0.5, 0.5, 0.5, 1, 0.530516, 0.530516, 0.530516, 1, 0.625, 0.625, 0.625, 1, 0.661972, 0.661972, 0.661972, 1, 0.75, 0.75, 0.75, 1, 0.802817, 0.802817, 0.802817, 1, 0.875, 0.875, 0.875, 1, 1, 1, 1, 1)
|
||||||
|
metadata/_snap_enabled = true
|
||||||
|
metadata/_snap_count = 8
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_h11mn"]
|
||||||
|
gradient = SubResource("Gradient_skcuv")
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_3j6ah"]
|
||||||
|
offsets = PackedFloat32Array(0.187793, 0.704225, 0.929577)
|
||||||
|
colors = PackedColorArray(0, 0, 0, 1, 0.58042, 0.58042, 0.58042, 1, 0.860369, 0.860369, 0.860369, 1)
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_bhyb3"]
|
||||||
|
frequency = 0.03
|
||||||
|
fractal_octaves = 8
|
||||||
|
fractal_lacunarity = 5.0
|
||||||
|
fractal_gain = 0.495
|
||||||
|
fractal_weighted_strength = 0.23
|
||||||
|
domain_warp_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_jyrsd"]
|
||||||
|
noise = SubResource("FastNoiseLite_bhyb3")
|
||||||
|
color_ramp = SubResource("Gradient_3j6ah")
|
||||||
|
|
||||||
|
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_2vvmy"]
|
||||||
|
panorama = ExtResource("1_o7c6e")
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_bs3qb"]
|
||||||
|
sky_material = SubResource("PanoramaSkyMaterial_2vvmy")
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_f6mem"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_bs3qb")
|
||||||
|
glow_enabled = true
|
||||||
|
glow_levels/1 = 1.38
|
||||||
|
glow_levels/2 = 1.55
|
||||||
|
glow_levels/3 = 5.63
|
||||||
|
glow_levels/5 = 1.75
|
||||||
|
glow_levels/6 = 0.9
|
||||||
|
glow_levels/7 = 0.75
|
||||||
|
glow_strength = 1.73
|
||||||
|
glow_mix = 0.03
|
||||||
|
glow_bloom = 0.05
|
||||||
|
glow_blend_mode = 4
|
||||||
|
glow_hdr_luminance_cap = 1.5
|
||||||
|
glow_map = SubResource("NoiseTexture2D_jyrsd")
|
||||||
|
volumetric_fog_emission = Color(1, 1, 1, 1)
|
||||||
|
volumetric_fog_emission_energy = 0.04
|
||||||
|
adjustment_brightness = 1.5
|
||||||
|
adjustment_color_correction = SubResource("GradientTexture1D_h11mn")
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1nbv0"]
|
||||||
|
albedo_color = Color(0.881937, 0.881937, 0.881937, 1)
|
||||||
|
albedo_texture = ExtResource("3_b4v87")
|
||||||
|
metallic = 0.4
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_b4v87"]
|
||||||
|
size = Vector3(4.5, 1, 1)
|
||||||
|
|
||||||
|
[node name="Lobby" type="Node3D"]
|
||||||
|
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0)
|
||||||
|
script = ExtResource("1_3j6ah")
|
||||||
|
playerStartPos = Vector3(0, 1, 0)
|
||||||
|
metadata/_custom_type_script = "uid://cbjn7f7r081q8"
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_f6mem")
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10.1725, 0)
|
||||||
|
material_overlay = SubResource("StandardMaterial3D_1nbv0")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00969505, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(49, 19, 49)
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
flip_faces = true
|
||||||
|
size = Vector3(50, 20, 50)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.47177, 0)
|
||||||
|
omni_range = 19.6325
|
||||||
|
|
||||||
|
[node name="PathfindingGridLoader" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 2.01037, -25)
|
||||||
|
script = ExtResource("3_bhyb3")
|
||||||
|
lengthX = 25
|
||||||
|
lengthZ = 25
|
||||||
|
metadata/_custom_type_script = "uid://cjgxd88k1bntf"
|
||||||
|
|
||||||
|
[node name="StartMission" type="Label3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.69191, 1.21511)
|
||||||
|
pixel_size = 0.02
|
||||||
|
text = "Start Mission"
|
||||||
|
|
||||||
|
[node name="ButtonLogicImpulse" type="Timer" parent="StartMission" node_paths=PackedStringArray("interactBox")]
|
||||||
|
script = ExtResource("4_2vvmy")
|
||||||
|
interactBox = NodePath("../InteractBox")
|
||||||
|
metadata/_custom_type_script = "uid://cjiiw7cybj24b"
|
||||||
|
|
||||||
|
[node name="InteractBox" type="Area3D" parent="StartMission" node_paths=PackedStringArray("object")]
|
||||||
|
script = ExtResource("5_f6mem")
|
||||||
|
object = NodePath("../ButtonLogicImpulse")
|
||||||
|
metadata/_custom_type_script = "uid://ymaax1x5fos3"
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StartMission/InteractBox"]
|
||||||
|
shape = SubResource("BoxShape3D_b4v87")
|
||||||
|
|
||||||
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("6_f6mem")
|
||||||
|
parameters/looping = true
|
||||||
|
|
||||||
|
[node name="Wires" parent="." instance=ExtResource("8_1nbv0")]
|
||||||
22
Maps/Lobby/lobby.gd
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
extends MapLogic
|
||||||
|
|
||||||
|
var main: Main
|
||||||
|
|
||||||
|
@onready var startMissionButton: ButtonLogicImpulse = $StartMission/ButtonLogicImpulse
|
||||||
|
|
||||||
|
var spaceshipScene: String = "res://test/spaceship_test.tscn"
|
||||||
|
|
||||||
|
var test: ParamterList = ParamterList.new()
|
||||||
|
var parameters: Dictionary[String,float] = {}
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
main = get_node("/root/Main")
|
||||||
|
|
||||||
|
startMissionButton.onPressed.connect(startMission)
|
||||||
|
|
||||||
|
test.addParameter("foo",3.3)
|
||||||
|
print(test.calculateParameterDistance(test.parameters,parameters))
|
||||||
|
|
||||||
|
func startMission() -> void:
|
||||||
|
if not is_multiplayer_authority(): return
|
||||||
|
main.changeMap.rpc(spaceshipScene, randi())
|
||||||
1
Maps/Lobby/lobby.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://fvwy57of2gvq
|
||||||
16
Maps/MapGenerator/Biome.gd
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
extends Object
|
||||||
|
class_name Biome
|
||||||
|
|
||||||
|
var name: String
|
||||||
|
var roomList: RoomList
|
||||||
|
var starterRoom: RoomData
|
||||||
|
|
||||||
|
var spread: float
|
||||||
|
var priority: int #Biomes with a prio of 0 will always be placed, afterwards Biomes of lower priority will be placed
|
||||||
|
|
||||||
|
func _init(bName: String, rList: RoomList, sRoom: RoomData, bSpread: float, bPrio: int) -> void:
|
||||||
|
name = bName
|
||||||
|
roomList = rList
|
||||||
|
starterRoom = sRoom
|
||||||
|
spread = bSpread
|
||||||
|
priority = bPrio
|
||||||
1
Maps/MapGenerator/Biome.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://yjvmb1ivvxb0
|
||||||
9
Maps/MapGenerator/BiomeExit.gd
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
extends DoorPosition
|
||||||
|
class_name BiomeExit
|
||||||
|
|
||||||
|
var biome: String
|
||||||
|
|
||||||
|
func _init(position: Vector2i = Vector2i(0,0),DoorOrientation : int = 0,biomeName: String = "") -> void:
|
||||||
|
pos = position
|
||||||
|
orientation = DoorOrientation
|
||||||
|
biome = biomeName
|
||||||
1
Maps/MapGenerator/BiomeExit.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cptl6phh2t8tl
|
||||||
BIN
Maps/MapGenerator/BiomeExitChecker.png
Normal file
|
After Width: | Height: | Size: 349 B |
40
Maps/MapGenerator/BiomeExitChecker.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c07ms152i77j0"
|
||||||
|
path="res://.godot/imported/BiomeExitChecker.png-a0cdf239bba0df1644b5e7c7b49312b1.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/MapGenerator/BiomeExitChecker.png"
|
||||||
|
dest_files=["res://.godot/imported/BiomeExitChecker.png-a0cdf239bba0df1644b5e7c7b49312b1.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
19
Maps/MapGenerator/DoorPosition.gd
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
extends Object
|
||||||
|
class_name DoorPosition
|
||||||
|
|
||||||
|
var pos : Vector2i
|
||||||
|
var orientation : int #0 north, 1 east, 2south, 3west
|
||||||
|
enum doorOrientations {north,east,south,west}
|
||||||
|
|
||||||
|
func rotatePosRight(roomGridSideLength: int,numberOfRotations: int) -> void: #Rotates the doorPosition along the room grid by 90 degrees
|
||||||
|
for n in numberOfRotations % 4:
|
||||||
|
var x: int = pos.x
|
||||||
|
var y: int = pos.y
|
||||||
|
pos = Vector2i (y,roomGridSideLength-x-1)
|
||||||
|
orientation = wrapi((orientation - 1),0,4)
|
||||||
|
|
||||||
|
func duplicate() -> DoorPosition:
|
||||||
|
var returnData: DoorPosition = DoorPosition.new()
|
||||||
|
returnData.pos = pos
|
||||||
|
returnData.orientation = orientation
|
||||||
|
return returnData
|
||||||
1
Maps/MapGenerator/DoorPosition.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b5mjpi1nhmn4s
|
||||||
3
Maps/MapGenerator/EmptyRoom.tscn
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[gd_scene format=3 uid="uid://bspc320js4suv"]
|
||||||
|
|
||||||
|
[node name="EmptyRoom" type="Node3D"]
|
||||||
2
Maps/MapGenerator/LevelGenRoomHandler.gd
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
extends Object
|
||||||
|
class_name LevelGenRoomHandler
|
||||||
1
Maps/MapGenerator/LevelGenRoomHandler.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://d38bme3bydjkj
|
||||||
5
Maps/MapGenerator/MissionTypes/Mission.gd
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
extends Object
|
||||||
|
class_name Mission
|
||||||
|
|
||||||
|
var biomes: Array[Array] #Array containing arrays that contain biomes
|
||||||
|
#Index of Array = Biome priorety
|
||||||
1
Maps/MapGenerator/MissionTypes/Mission.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dyirs8de8f0k3
|
||||||
34
Maps/MapGenerator/MissionTypes/RescueMission.gd
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
extends Mission
|
||||||
|
class_name RescueMission
|
||||||
|
|
||||||
|
func _init() -> void:
|
||||||
|
var prio0Biomes: Array[Biome]
|
||||||
|
|
||||||
|
prio0Biomes.push_back(biomeStarterTest())
|
||||||
|
prio0Biomes.push_back(generatorBiome())
|
||||||
|
prio0Biomes.push_back(biomeTestOrange())
|
||||||
|
biomes.push_front(prio0Biomes)
|
||||||
|
|
||||||
|
func biomeStarterTest() -> Biome:
|
||||||
|
var roomList: RoomList = RoomList.new()
|
||||||
|
|
||||||
|
return Biome.new("starter",roomList,RoomData.new(preload("res://test/StartTest.png").get_image(),"res://test/StartTest1.tscn"),0,0)
|
||||||
|
|
||||||
|
func generatorBiome() -> Biome:
|
||||||
|
var roomList: RoomList = RoomList.new()
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/4Way/4WayRoomData.png").get_image(),"res://Maps/Rooms/Generator/4Way/4WayRoomGenerator.tscn")
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/Corner/CornerRoomData.png").get_image(),"res://Maps/Rooms/Generator/Corner/CornerRoomGenerator.tscn")
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/THallway/THallwayRoomData.png").get_image(),"res://Maps/Rooms/Generator/THallway/THallwayGenerator.tscn")
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/Hallway/HallwayRoomData.png").get_image(),"res://Maps/Rooms/Generator/Hallway/HallwayGenerator.tscn")
|
||||||
|
|
||||||
|
return Biome.new("generator",roomList,RoomData.new(preload("res://Maps/Rooms/Generator/MainGenerator/Generator.png").get_image(),"res://Maps/Rooms/Generator/MainGenerator/Generator.tscn"),0.2,0)
|
||||||
|
|
||||||
|
func biomeTestOrange() -> Biome:
|
||||||
|
var roomList: RoomList = RoomList.new()
|
||||||
|
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/4Way/4WayRoomData.png").get_image(),"res://Maps/Rooms/Generic Connectors/4Way/4WayRoom.tscn")
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/Corner/CornerRoomData.png").get_image(),"res://Maps/Rooms/Generic Connectors/Corner/CornerRoom.tscn")
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/Hallway/HallwayRoomData.png").get_image(),"res://Maps/Rooms/Generic Connectors/Hallway/Hallway.tscn")
|
||||||
|
roomList.addRoom(preload("res://Maps/Rooms/Generic Connectors/THallway/THallwayRoomData.png").get_image(),"res://Maps/Rooms/Generic Connectors/THallway/THallway.tscn")
|
||||||
|
|
||||||
|
return Biome.new("orange",roomList,RoomData.new(preload("res://test/test4Way.png").get_image(),"res://test/Test4Way.tscn"),1,0)
|
||||||
1
Maps/MapGenerator/MissionTypes/RescueMission.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dl7tb27ncsmxe
|
||||||
38
Maps/MapGenerator/ParameterList.gd
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
extends Object
|
||||||
|
class_name ParamterList
|
||||||
|
|
||||||
|
var parameters: Dictionary[String,float] = {}
|
||||||
|
|
||||||
|
func numberOfParameters() -> int:
|
||||||
|
return parameters.size()
|
||||||
|
|
||||||
|
func get_Parameters() -> Dictionary[String,float]:
|
||||||
|
return parameters
|
||||||
|
|
||||||
|
func addParameter(name: String, value: float) -> void:
|
||||||
|
if parameters.has(name):
|
||||||
|
parameters[name] += value
|
||||||
|
else:
|
||||||
|
parameters[name] = value
|
||||||
|
|
||||||
|
func calculateParameterDistance(a:Dictionary[String,float],b:Dictionary[String,float]) -> float:
|
||||||
|
var total: Dictionary[String,float] = a.duplicate()
|
||||||
|
total.merge(b) ##total contains all keys
|
||||||
|
|
||||||
|
var c: Dictionary[String,float] ##c will be used to calculate the distance
|
||||||
|
var lengthC: float = 0 ##Return value
|
||||||
|
|
||||||
|
##For each param in total either subtract or add if only one has param
|
||||||
|
for param in total:
|
||||||
|
if b.has(param) and a.has(param):
|
||||||
|
c[param] = a[param] - b[param]
|
||||||
|
else:
|
||||||
|
c[param] = total[param]
|
||||||
|
|
||||||
|
##Add together all values
|
||||||
|
for param in c:
|
||||||
|
lengthC += pow(c[param],2)
|
||||||
|
## Squareroot to get length of n-Dimensional Vector made up of all entries of c (a - b = c)
|
||||||
|
lengthC = sqrt(lengthC)
|
||||||
|
|
||||||
|
return lengthC
|
||||||
1
Maps/MapGenerator/ParameterList.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://u1rj3gsvudis
|
||||||
39
Maps/MapGenerator/RoomData.gd
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
extends Object
|
||||||
|
class_name RoomData
|
||||||
|
|
||||||
|
var rotations: int = 0
|
||||||
|
var doorPositions: Array[DoorPosition]
|
||||||
|
var roomGrid: Array[Array]
|
||||||
|
var roomSceneRef: String
|
||||||
|
var roomScene: PackedScene
|
||||||
|
|
||||||
|
func _init(roomImage: Image = null, roomSceneReference: String = "") -> void:
|
||||||
|
if !roomImage: return
|
||||||
|
roomSceneRef = roomSceneReference
|
||||||
|
|
||||||
|
if !roomSceneReference == "":
|
||||||
|
roomScene = load(roomSceneReference)
|
||||||
|
|
||||||
|
var roomImmageLoader: RoomImageLoader = RoomImageLoader.new()
|
||||||
|
|
||||||
|
roomGrid = roomImmageLoader.loadRoomData(roomImage)
|
||||||
|
|
||||||
|
doorPositions = roomImmageLoader.getDoors(roomGrid)
|
||||||
|
|
||||||
|
roomImmageLoader.free()
|
||||||
|
|
||||||
|
func duplicateRoom() -> RoomData:
|
||||||
|
var returnData: RoomData = RoomData.new()
|
||||||
|
returnData.rotations = rotations
|
||||||
|
for position in doorPositions:
|
||||||
|
returnData.doorPositions.push_back(position.duplicate())
|
||||||
|
for x in roomGrid.size():
|
||||||
|
var array: Array
|
||||||
|
returnData.roomGrid.push_back(array)
|
||||||
|
for y in roomGrid[x].size():
|
||||||
|
returnData.roomGrid[x].push_back(null)
|
||||||
|
returnData.roomGrid[x][y] = roomGrid[x][y].duplicate()
|
||||||
|
returnData.roomGrid = roomGrid.duplicate(true)
|
||||||
|
returnData.roomSceneRef = roomSceneRef
|
||||||
|
returnData.roomScene = roomScene
|
||||||
|
return returnData
|
||||||
1
Maps/MapGenerator/RoomData.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://28gkh48f7sib
|
||||||
14
Maps/MapGenerator/RoomList.gd
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
extends Object
|
||||||
|
class_name RoomList
|
||||||
|
|
||||||
|
var rooms: Array[RoomData]
|
||||||
|
|
||||||
|
func addRoom(roomImage: Image, roomSceneRef: String) -> void:
|
||||||
|
var newRoom: RoomData = RoomData.new(roomImage,roomSceneRef)
|
||||||
|
rooms.push_back(newRoom)
|
||||||
|
|
||||||
|
func duplicate() -> RoomList:
|
||||||
|
var returnList: RoomList = RoomList.new()
|
||||||
|
for room in rooms:
|
||||||
|
returnList.rooms.push_back(room.duplicateRoom())
|
||||||
|
return returnList
|
||||||
1
Maps/MapGenerator/RoomList.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bkvffyhw5vnxv
|
||||||
6
Maps/MapGenerator/RoomLists/RoomListSpaceship.gd
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
extends RoomList
|
||||||
|
class_name RoomListSpaceship
|
||||||
|
|
||||||
|
func _init() -> void:
|
||||||
|
addRoom(preload("res://test/StartTest.png").get_image(),"res://test/StartTest.tscn")
|
||||||
|
addRoom(preload("res://test/test4Way.png").get_image(),"res://test/Test4Way.tscn")
|
||||||
1
Maps/MapGenerator/RoomLists/RoomListSpaceship.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cpnvaegn20rby
|
||||||
2
Maps/MapGenerator/RoomNode.gd
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
extends Object
|
||||||
|
class_name RoomNode
|
||||||
1
Maps/MapGenerator/RoomNode.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dj5k87xytm45v
|
||||||
20
Maps/MapGenerator/gridCell.gd
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
extends Object
|
||||||
|
class_name GridCell
|
||||||
|
|
||||||
|
var position: Vector3i
|
||||||
|
var spaceTaken: bool = false
|
||||||
|
var biomeConnection: bool = false
|
||||||
|
var door: bool = false
|
||||||
|
var doorOrientation: int
|
||||||
|
enum doorOrientations {north,east,south,west}
|
||||||
|
|
||||||
|
var biome: String
|
||||||
|
|
||||||
|
func duplicate() -> GridCell:
|
||||||
|
var returnData := GridCell.new()
|
||||||
|
returnData.spaceTaken = spaceTaken
|
||||||
|
returnData.door = door
|
||||||
|
returnData.doorOrientation = doorOrientation
|
||||||
|
returnData.biome = biome
|
||||||
|
returnData.biomeConnection = biomeConnection
|
||||||
|
return returnData
|
||||||
1
Maps/MapGenerator/gridCell.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://105kn4rcg8bd
|
||||||
14
Maps/MapGenerator/itemSpawner.gd
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
extends Node3D
|
||||||
|
class_name ItemSpawner
|
||||||
|
|
||||||
|
@export var identifier: String
|
||||||
|
@export var spawnedItem: PackedScene
|
||||||
|
|
||||||
|
func spawnItem() -> Node:
|
||||||
|
if spawnedItem:
|
||||||
|
var obj = spawnedItem.instantiate()
|
||||||
|
self.add_child(obj)
|
||||||
|
#obj.position = position
|
||||||
|
#obj.rotation = rotation
|
||||||
|
return obj
|
||||||
|
return null
|
||||||
1
Maps/MapGenerator/itemSpawner.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://deea7d20s1612
|
||||||
720
Maps/MapGenerator/levelGenerator.gd
Normal file
@@ -0,0 +1,720 @@
|
|||||||
|
extends Node3D
|
||||||
|
class_name LevelGenerator
|
||||||
|
|
||||||
|
var levelGrid: Array[Array]
|
||||||
|
@export var gridSizeX: int = 15
|
||||||
|
@export var gridSizeY: int = 3
|
||||||
|
@export var gridSizeZ: int = 15
|
||||||
|
|
||||||
|
@export var bufferSize: int = 5
|
||||||
|
|
||||||
|
@export var shipLogic: ShipLogic
|
||||||
|
|
||||||
|
@export var doorBlock: PackedScene # Temporary
|
||||||
|
@export var doorOBJ: PackedScene #Temporary
|
||||||
|
@export var tile: PackedScene # Temporary
|
||||||
|
@export var lamp: PackedScene # Temporary
|
||||||
|
@export var tileWall: PackedScene # Temporary
|
||||||
|
@export var tileCorner: PackedScene # Temporary
|
||||||
|
|
||||||
|
var levelGenSeed: int = 0
|
||||||
|
|
||||||
|
var globalParameters: ParamterList
|
||||||
|
|
||||||
|
var rng: RandomNumberGenerator = RandomNumberGenerator.new() #Get random values, usefull for random level generation huh
|
||||||
|
var currentMission: Mission
|
||||||
|
|
||||||
|
var doorSpawnPoints: Array[DoorPosition] #Where to put them doors
|
||||||
|
var doorBlockSpawnPoints: Array[DoorPosition] #Where to put them door blockers
|
||||||
|
|
||||||
|
var biomeExitPositions: Array[BiomeExit] #Points where you can leave a biome
|
||||||
|
var biomeExitChecker: RoomData = RoomData.new(preload("res://Maps/MapGenerator/BiomeExitChecker.png").get_image(),"") #Nonexisten Room used to check if a door is a valid Biome Exit
|
||||||
|
var connectPathPositions: PackedVector2Array #Where to place floor tiles of connecting paths
|
||||||
|
|
||||||
|
var astar: AStar2D = AStar2D.new()
|
||||||
|
|
||||||
|
func generate(usingSeed: int) -> void:
|
||||||
|
|
||||||
|
|
||||||
|
levelGenSeed = usingSeed
|
||||||
|
initRandom() # Set seed for level generation
|
||||||
|
initGrid() #Assign a new grid space object to each space of the 5x5x5m grid
|
||||||
|
##Center the world
|
||||||
|
position.x = -gridSizeX*2.5
|
||||||
|
position.z = -gridSizeZ*2.5
|
||||||
|
|
||||||
|
for x in gridSizeX:
|
||||||
|
for y in gridSizeY:
|
||||||
|
for z in gridSizeZ:
|
||||||
|
debugCubeAtPos(levelGrid[x][y][z].position*5)
|
||||||
|
|
||||||
|
|
||||||
|
func initRandom() -> void:
|
||||||
|
rng.set_seed(hash(levelGenSeed))
|
||||||
|
|
||||||
|
func initGrid() -> void:
|
||||||
|
for x in gridSizeX:
|
||||||
|
var newRow: Array
|
||||||
|
levelGrid.push_back(newRow)
|
||||||
|
for y in gridSizeY:
|
||||||
|
var newCol: Array
|
||||||
|
levelGrid[x].push_back(newCol)
|
||||||
|
for z in gridSizeZ:
|
||||||
|
var newCell := GridCell.new()
|
||||||
|
newCell.position = Vector3i(x,y,z)
|
||||||
|
levelGrid[x][y].push_back(newCell)
|
||||||
|
|
||||||
|
func debugCubeAtPos(pos: Vector3):
|
||||||
|
var debugCube: PackedScene = preload("res://Maps/Rooms/Generator/4Way/4WayRoomGenerator.tscn")
|
||||||
|
addObject(debugCube,self,pos+Vector3(2.5,0,2.5))
|
||||||
|
|
||||||
|
func addObject(AddedObject:PackedScene, Parent: Node3D, Position: Vector3, Rotation: Vector3= Vector3(0,0,0)) -> Node:
|
||||||
|
if !AddedObject:
|
||||||
|
print("tried to add object but packed scene is null")
|
||||||
|
return
|
||||||
|
var obj = AddedObject.instantiate()
|
||||||
|
Parent.add_child(obj)
|
||||||
|
obj.position = Position
|
||||||
|
obj.rotation = Rotation
|
||||||
|
return obj
|
||||||
|
|
||||||
|
## OLD LEVEL GEN CODE
|
||||||
|
|
||||||
|
#func generate(usingSeed: int) -> void:
|
||||||
|
|
||||||
|
#levelGenSeed = usingSeed
|
||||||
|
#
|
||||||
|
#initRandom() # Set seed for level generation
|
||||||
|
#initGrid() #Assign a new grid space object to each space of the 1x1m grid
|
||||||
|
#
|
||||||
|
##Center the world
|
||||||
|
#position.x = -gridSize/2
|
||||||
|
#position.z = -gridSize/2
|
||||||
|
#
|
||||||
|
#currentMission = RescueMission.new() #Have something choose the mission type in this part later
|
||||||
|
#
|
||||||
|
##Biomes
|
||||||
|
#generateBufferBiome(bufferSize)
|
||||||
|
#var doorList: Array[DoorPosition] #Seccond Array contains door positions
|
||||||
|
#for bPrio in currentMission.biomes.size():
|
||||||
|
#doorList = placeBiomes(currentMission.biomes[bPrio])
|
||||||
|
#spreadBiomes()
|
||||||
|
#
|
||||||
|
##Rooms into Biomes
|
||||||
|
#placeRooms(doorList)
|
||||||
|
#
|
||||||
|
##Doors
|
||||||
|
##chooseBiomeExits()
|
||||||
|
#doorsAtBiomeExits()
|
||||||
|
#findValidDoors()
|
||||||
|
#spawnDoors()
|
||||||
|
#
|
||||||
|
##Generate Astar setup for finding Paths between Biomes and Rooms
|
||||||
|
#generateAstarPoints()
|
||||||
|
#connectAstarPoints()
|
||||||
|
#weightAstarPoints()
|
||||||
|
#
|
||||||
|
##Connect Biomes
|
||||||
|
#connectPathPositions = generateConnectionPath()
|
||||||
|
#generateFloorPositions()
|
||||||
|
#placeFloorPositionTiles()
|
||||||
|
#placeWallsAlongTiles()
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#shipLogic.onLevelGenFinished()
|
||||||
|
#shipLogic.main.mapScreen.generateMap(levelGrid)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
##Misc Utility
|
||||||
|
#func abandonSeed() -> void:
|
||||||
|
#print("SEED IS NOT VALID")
|
||||||
|
#
|
||||||
|
#func initRandom() -> void:
|
||||||
|
#rng.set_seed(hash(levelGenSeed))
|
||||||
|
#
|
||||||
|
#func initGrid() -> void:
|
||||||
|
#for x in gridSizeX:
|
||||||
|
#var newRow: Array
|
||||||
|
#levelGrid.push_back(newRow)
|
||||||
|
#for y in gridSizeY:
|
||||||
|
#var newCol: Array
|
||||||
|
#levelGrid[x].push_back(newCol)
|
||||||
|
#for z in gridSizeZ:
|
||||||
|
#var newCell := GridCell.new()
|
||||||
|
#newCell.position = Vector3i(x,y,z)
|
||||||
|
#levelGrid[x].push_back(newCell)
|
||||||
|
#
|
||||||
|
#func addGridCells(cell1: GridCell,cell2: GridCell) -> GridCell:
|
||||||
|
#var returnCell: GridCell = GridCell.new()
|
||||||
|
#returnCell.spaceTaken = cell1.spaceTaken or cell2.spaceTaken
|
||||||
|
#returnCell.door = cell1.door or cell2.door
|
||||||
|
#if cell1.door and !cell2.door:
|
||||||
|
#returnCell.doorOrientation = cell1.doorOrientation
|
||||||
|
#else:
|
||||||
|
#returnCell.doorOrientation = cell2.doorOrientation
|
||||||
|
#returnCell.position = cell1.position
|
||||||
|
#returnCell.biome = cell1.biome
|
||||||
|
#returnCell.biomeConnection = cell1.biomeConnection
|
||||||
|
#return returnCell
|
||||||
|
#
|
||||||
|
#func shuffleArray(array: Array) -> Array:
|
||||||
|
#for i in array.size()-1:
|
||||||
|
##Get Array indexes
|
||||||
|
#var iA: int = array.size()-1-i
|
||||||
|
#var iB: int = rng.randi_range(0,array.size()-2-i)
|
||||||
|
#
|
||||||
|
##Get two elements from the array
|
||||||
|
#var a = array[iA]
|
||||||
|
#var b = array[iB]
|
||||||
|
#
|
||||||
|
##Swap both elements
|
||||||
|
#array[iB] = a
|
||||||
|
#array[iA] = b
|
||||||
|
#
|
||||||
|
#return array
|
||||||
|
#
|
||||||
|
#func addArrays2D(array1: Array[Array], array2: Array[Array], arr2pos: Vector2i = Vector2i(0,0)) -> void:
|
||||||
|
#if array1.size() <= (arr2pos.x) + array2.size(): return
|
||||||
|
#if array1[arr2pos.y].size() <= (arr2pos.y) + array2[0].size(): return
|
||||||
|
#for x in array2.size():
|
||||||
|
#for y in array2[x].size():
|
||||||
|
#array1[x+arr2pos.x][y+arr2pos.y] = addGridCells(array1[x+arr2pos.x][y+arr2pos.y],array2[x][y])
|
||||||
|
#
|
||||||
|
#func checkOverlapArrays2D(array1: Array[Array], array2: Array[Array], arr2pos: Vector2i = Vector2i(0,0)) -> bool:
|
||||||
|
#if array1.size() <= arr2pos.x + array2.size() or arr2pos.x < 0: return true
|
||||||
|
#if array1[arr2pos.y].size() <= arr2pos.y + array2[0].size() or arr2pos.y < 0: return true
|
||||||
|
#for x in array2.size():
|
||||||
|
#for y in array2[x].size():
|
||||||
|
#if array1[x+arr2pos.x][y+arr2pos.y].spaceTaken and array2[x][y].spaceTaken: return true
|
||||||
|
#return false
|
||||||
|
#
|
||||||
|
#func checkBiomeOverlap(biome: String, pos: Vector2i, length: int, height: int) -> bool:
|
||||||
|
#if levelGrid.size() <= pos.x + length or pos.x < 0: return true
|
||||||
|
#if levelGrid[pos.y].size() <= pos.y + height or pos.y < 0: return true
|
||||||
|
#for x in length:
|
||||||
|
#for y in height:
|
||||||
|
#if levelGrid[x+pos.x][y+pos.y].biome: return true
|
||||||
|
#return false
|
||||||
|
#
|
||||||
|
#func rotateArray2D(array: Array[Array], numberOfRotationsBy90Degrees: int) -> void:
|
||||||
|
#var size: int = array.size()
|
||||||
|
#var layerCount: int = size/2
|
||||||
|
#
|
||||||
|
#for x in numberOfRotationsBy90Degrees%4:
|
||||||
|
#for layer in layerCount:
|
||||||
|
#var first: int = layer
|
||||||
|
#var last: int = size - first - 1
|
||||||
|
#
|
||||||
|
#for element in range(first, last):
|
||||||
|
#var offset = element - first
|
||||||
|
#
|
||||||
|
#var top = array[first][element]
|
||||||
|
#var right = array[element][last]
|
||||||
|
#var bot = array[last][last-offset]
|
||||||
|
#var left = array[last-offset][first]
|
||||||
|
#
|
||||||
|
#array[element][last] = top
|
||||||
|
#array[last][last-offset] = right
|
||||||
|
#array[last-offset][first] = bot
|
||||||
|
#array[first][element] = left
|
||||||
|
#
|
||||||
|
#func getDoorPosition(cell: GridCell, GridCellPosition: Vector2i) -> DoorPosition:
|
||||||
|
#if !cell.door:
|
||||||
|
#print("Tried to get door at cell that isnt a door")
|
||||||
|
#return null
|
||||||
|
#var returnDoorPosition := DoorPosition.new()
|
||||||
|
#returnDoorPosition.pos = GridCellPosition
|
||||||
|
#returnDoorPosition.orientation = cell.doorOrientation
|
||||||
|
#return returnDoorPosition
|
||||||
|
#
|
||||||
|
#func addObject(AddedObject:PackedScene, Parent: Node3D, Position: Vector3, Rotation: Vector3= Vector3(0,0,0)) -> Node:
|
||||||
|
#if !AddedObject:
|
||||||
|
#print("tried to add object but packed scene is null")
|
||||||
|
#return
|
||||||
|
#var obj = AddedObject.instantiate()
|
||||||
|
#Parent.add_child(obj)
|
||||||
|
#obj.position = Position
|
||||||
|
#obj.rotation = Rotation
|
||||||
|
#return obj
|
||||||
|
#
|
||||||
|
#func changeBiomeArea2D(biome: String,pos:Vector2i,length: int,height: int):
|
||||||
|
#for x in length:
|
||||||
|
#for y in height:
|
||||||
|
#levelGrid[pos.x+x][pos.y+y].biome = biome
|
||||||
|
#
|
||||||
|
##Spawning Rooms
|
||||||
|
#func rotateRoomData(roomData: RoomData, numberOfRotationsBy90Degrees: int) -> void:
|
||||||
|
#rotateArray2D(roomData.roomGrid,numberOfRotationsBy90Degrees)
|
||||||
|
#roomData.rotations = wrapi(roomData.rotations + numberOfRotationsBy90Degrees,0,4)
|
||||||
|
#for door in roomData.doorPositions:
|
||||||
|
#door.rotatePosRight(roomData.roomGrid.size(),numberOfRotationsBy90Degrees)
|
||||||
|
#roomData.roomGrid[door.pos.x][door.pos.y].doorOrientation = wrapi(door.orientation-2,0,4)
|
||||||
|
#
|
||||||
|
#func spawnRoom(roomDataInput: RoomData,pos: Vector2i,numberOfRotationsBy90Degrees: int = 0, centered: bool = false) -> Array[DoorPosition]: #Pos corresponds to the upper left corner of the room immage
|
||||||
|
#var roomData: RoomData = roomDataInput.duplicateRoom()
|
||||||
|
#var roomScene: PackedScene = roomDataInput.roomScene
|
||||||
|
#rotateRoomData(roomData,numberOfRotationsBy90Degrees)
|
||||||
|
#var roomGrid := roomData.roomGrid
|
||||||
|
#var doorPositions: Array[DoorPosition] = roomData.doorPositions
|
||||||
|
#if centered:
|
||||||
|
#pos = Vector2i(pos.x-(roomGrid.size()/2),pos.y-(roomGrid[0].size()/2))
|
||||||
|
#
|
||||||
|
#addArrays2D(levelGrid,roomGrid,pos)
|
||||||
|
#
|
||||||
|
##Make Room
|
||||||
|
#var room: BasicRoom = addObject(roomScene,self,Vector3(pos.x+(roomGrid.size()/2),0,pos.y+(roomGrid[0].size()/2)),Vector3(0,(roomData.rotations%4)*PI/2,0))
|
||||||
|
#room.biomeName = levelGrid[pos.x][pos.y].biome
|
||||||
|
#shipLogic.addRoomToRoomList(room)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#for door in doorPositions:
|
||||||
|
#door.pos = pos + door.pos
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#return doorPositions
|
||||||
|
#
|
||||||
|
#func getDoorFromRoom(roomData: RoomData,index: int) -> DoorPosition:
|
||||||
|
#return roomData.doorPositions[index % roomData.doorPositions.size()]
|
||||||
|
#
|
||||||
|
#func putRoomAtDoor(roomData: RoomData, door: DoorPosition,spawnDoorIndex: int) -> Array: ##Return array contains roomData, spawn Pos in that order
|
||||||
|
##Init Values:
|
||||||
|
#var spawnDoor: DoorPosition = getDoorFromRoom(roomData,spawnDoorIndex) #Which door from the spawned room connects to the exiting room
|
||||||
|
#var doorOrientationDifference : int = wrapi(spawnDoor.orientation - door.orientation,0,4) #Difference in orinet. between spawned and existing room
|
||||||
|
#var numberOfRoomRotations: int = 0 #How many rotations are needed to make spawned rooms spawn door face the existing door
|
||||||
|
#var spawnPos: Vector2i
|
||||||
|
#var doorOffset: Vector2i #Offset by 1 space so the doors are next to eachother and not inside eachoter
|
||||||
|
#
|
||||||
|
##Find number of rotations and then rotate the room
|
||||||
|
#if !doorOrientationDifference == 2:
|
||||||
|
#if doorOrientationDifference == 1:
|
||||||
|
#numberOfRoomRotations = 3
|
||||||
|
#if doorOrientationDifference == 0:
|
||||||
|
#numberOfRoomRotations = 2
|
||||||
|
#if doorOrientationDifference == 3:
|
||||||
|
#numberOfRoomRotations = 1
|
||||||
|
#rotateRoomData(roomData,numberOfRoomRotations)
|
||||||
|
#
|
||||||
|
##Get new values for spawnDoor and set door offset
|
||||||
|
#spawnDoor = getDoorFromRoom(roomData,spawnDoorIndex)
|
||||||
|
#match spawnDoor.orientation:
|
||||||
|
#0: doorOffset = Vector2i(0,-1)
|
||||||
|
#1: doorOffset = Vector2i(1,0)
|
||||||
|
#2: doorOffset = Vector2i(0,1)
|
||||||
|
#3: doorOffset = Vector2i(-1,0)
|
||||||
|
#
|
||||||
|
##Set spawn pos and return values
|
||||||
|
#spawnPos = door.pos - spawnDoor.pos + doorOffset
|
||||||
|
#var returnArray: Array = [roomData,spawnPos]
|
||||||
|
#return returnArray
|
||||||
|
#
|
||||||
|
#func spawnRoomAtDoor(roomDataInput: Array[RoomData], door: DoorPosition, biome: String) -> Array[DoorPosition]:
|
||||||
|
#var returnArray: Array[DoorPosition]
|
||||||
|
#var roomData: RoomData = null
|
||||||
|
#var spawnDoorIndex: int = -1
|
||||||
|
##Choose the room to use
|
||||||
|
#var rooms: Array[RoomData] = roomDataInput.duplicate()
|
||||||
|
#
|
||||||
|
#shuffleArray(rooms)
|
||||||
|
#for r in floor(rooms.size()/2):
|
||||||
|
##Randomise door checking order
|
||||||
|
#var doorIndices: Array[int]
|
||||||
|
#for x in rooms[r].doorPositions.size():
|
||||||
|
#doorIndices.push_back(x)
|
||||||
|
#shuffleArray(doorIndices)
|
||||||
|
#
|
||||||
|
##Check if doorIndex fits and assign roomData and spawnDoorIndex if it does
|
||||||
|
#for doorIndex in doorIndices:
|
||||||
|
#if checkIfRoomFits(rooms[r],door,doorIndex, biome):
|
||||||
|
#roomData = rooms[r].duplicateRoom()
|
||||||
|
#spawnDoorIndex = doorIndex
|
||||||
|
#break
|
||||||
|
#
|
||||||
|
##Check if a room has been found
|
||||||
|
#if !roomData or spawnDoorIndex == -1:
|
||||||
|
#var checkPosition = door.pos
|
||||||
|
#match door.orientation:
|
||||||
|
#0: checkPosition += Vector2i(-1,-2)
|
||||||
|
#1: checkPosition += Vector2i(0,-1)
|
||||||
|
#2: checkPosition += Vector2i(-1,0)
|
||||||
|
#3: checkPosition += Vector2i(-2,-1)
|
||||||
|
#if !checkOverlapArrays2D(levelGrid,biomeExitChecker.roomGrid,checkPosition):
|
||||||
|
#biomeExitPositions.push_back(BiomeExit.new(door.pos,door.orientation,biome))
|
||||||
|
#return returnArray
|
||||||
|
#
|
||||||
|
##Get Spawn Info and spawn room
|
||||||
|
#var spawnInfo: Array = putRoomAtDoor(roomData,door,spawnDoorIndex)
|
||||||
|
#spawnRoom(spawnInfo[0],spawnInfo[1])
|
||||||
|
#returnArray = spawnInfo[0].doorPositions
|
||||||
|
#for x in returnArray.size():
|
||||||
|
#returnArray[x].pos = spawnInfo[1] + returnArray[x].pos
|
||||||
|
#return returnArray
|
||||||
|
#
|
||||||
|
#func checkIfBiomeFits(length: int, height: int, pos: Vector2i, biome: String) -> bool:
|
||||||
|
#if levelGrid.size() <= pos.x + length or pos.x < 0: return true
|
||||||
|
#if levelGrid[pos.y].size() <= pos.y + height or pos.y < 0: return true
|
||||||
|
#for x in length:
|
||||||
|
#for y in height:
|
||||||
|
#if levelGrid[x+pos.x][y+pos.y].biome != biome:
|
||||||
|
#return false
|
||||||
|
#return true
|
||||||
|
#
|
||||||
|
#func checkIfRoomFits(roomDataInput: RoomData,door: DoorPosition,spawnDoorIndex: int, biome: String) -> bool:
|
||||||
|
#var roomData: RoomData = roomDataInput.duplicateRoom()
|
||||||
|
#var spawnInfo: Array = putRoomAtDoor(roomData,door,spawnDoorIndex)
|
||||||
|
#
|
||||||
|
#if !checkOverlapArrays2D(levelGrid,spawnInfo[0].roomGrid,spawnInfo[1]) and checkIfBiomeFits(spawnInfo[0].roomGrid.size(),spawnInfo[0].roomGrid[0].size(),spawnInfo[1],biome):
|
||||||
|
#return true
|
||||||
|
#else:
|
||||||
|
#return false
|
||||||
|
#
|
||||||
|
#func isOutOfArray2DBounds(sizeX: int, sizeY: int, pos: Vector2i) -> bool:
|
||||||
|
#if pos.x >= sizeX or pos.x < 0 or pos.y >= sizeY or pos.y < 0:
|
||||||
|
#return true
|
||||||
|
#else:
|
||||||
|
#return false
|
||||||
|
#
|
||||||
|
#func isValidDoor(pos:Vector2i) -> bool: # Checks if the door connects to another door using its orientation,
|
||||||
|
##if this function finds a valid door, it removes the door status from the other door to avoid duplicated doors
|
||||||
|
#match levelGrid[pos.x][pos.y].doorOrientation:
|
||||||
|
#0:
|
||||||
|
#if isOutOfArray2DBounds(levelGrid.size(),levelGrid[0].size(),Vector2i(pos.x,pos.y-1)): return false
|
||||||
|
#if !levelGrid[pos.x][pos.y-1].door: return false
|
||||||
|
#else: levelGrid[pos.x][pos.y-1].door = false
|
||||||
|
#1:
|
||||||
|
#if isOutOfArray2DBounds(levelGrid.size(),levelGrid[0].size(),Vector2i(pos.x+1,pos.y)): return false
|
||||||
|
#if !levelGrid[pos.x+1][pos.y].door: return false
|
||||||
|
#else: levelGrid[pos.x+1][pos.y].door = false
|
||||||
|
#2:
|
||||||
|
#if isOutOfArray2DBounds(levelGrid.size(),levelGrid[0].size(),Vector2i(pos.x,pos.y+1)): return false
|
||||||
|
#if !levelGrid[pos.x][pos.y+1].door: return false
|
||||||
|
#else: levelGrid[pos.x][pos.y+1].door = false
|
||||||
|
#3:
|
||||||
|
#if isOutOfArray2DBounds(levelGrid.size(),levelGrid[0].size(),Vector2i(pos.x-1,pos.y)): return false
|
||||||
|
#if !levelGrid[pos.x-1][pos.y].door: return false
|
||||||
|
#else: levelGrid[pos.x-1][pos.y].door = false
|
||||||
|
#return true
|
||||||
|
#
|
||||||
|
#func findValidDoors() -> void:
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if levelGrid[x][y].door:
|
||||||
|
#var newDoorObject := DoorPosition.new()
|
||||||
|
#newDoorObject.pos = Vector2i(x,y)
|
||||||
|
#newDoorObject.orientation = levelGrid[x][y].doorOrientation
|
||||||
|
#if isValidDoor(Vector2i(x,y)):
|
||||||
|
#doorSpawnPoints.push_back(newDoorObject)
|
||||||
|
#else:
|
||||||
|
#doorBlockSpawnPoints.push_back(newDoorObject)
|
||||||
|
#
|
||||||
|
#func spawnDoors() -> void:
|
||||||
|
#for doorSpawn in doorSpawnPoints:
|
||||||
|
#addObject(doorOBJ,self,Vector3(doorSpawn.pos.x+0.5,0,doorSpawn.pos.y+0.5),Vector3(0,doorSpawn.orientation*-PI/2,0))
|
||||||
|
##debugCubeAtPos(doorSpawn.pos)
|
||||||
|
#for doorBlockSpawn in doorBlockSpawnPoints:
|
||||||
|
#addObject(doorBlock,self,Vector3(doorBlockSpawn.pos.x+0.5,0,doorBlockSpawn.pos.y+0.5),Vector3(0,doorBlockSpawn.orientation*-PI/2,0))
|
||||||
|
#
|
||||||
|
#func placeRooms(doorList: Array[DoorPosition]) -> void:
|
||||||
|
#var nextDoors: Array[DoorPosition] = []
|
||||||
|
#
|
||||||
|
##YES I KNOW A DO WHILE LOOP IS BETTER HERE BUT GODOT DOESNT HAVE IT
|
||||||
|
#for door in doorList:
|
||||||
|
#var doorBiome: Biome = getBiome(levelGrid[door.pos.x][door.pos.y].biome)
|
||||||
|
#nextDoors += spawnRoomAtDoor(doorBiome.roomList.rooms,door,doorBiome.name)
|
||||||
|
#doorList = nextDoors
|
||||||
|
#nextDoors = []
|
||||||
|
#
|
||||||
|
#while !doorList.is_empty():
|
||||||
|
#for door in doorList:
|
||||||
|
#var doorBiome: Biome = getBiome(levelGrid[door.pos.x][door.pos.y].biome)
|
||||||
|
#nextDoors += spawnRoomAtDoor(doorBiome.roomList.rooms,door,doorBiome.name)
|
||||||
|
#doorList = nextDoors
|
||||||
|
#nextDoors = []
|
||||||
|
#
|
||||||
|
##Generating Biomes
|
||||||
|
#func generateBufferBiome(bufferWidth: int) -> void:
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if (x < bufferWidth) or (y < bufferWidth) or (x > levelGrid.size() - bufferWidth) or (y > levelGrid.size() - bufferWidth):
|
||||||
|
#levelGrid[x][y].biome = "buffer"
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#func getBiome(biomeName: String) -> Biome:
|
||||||
|
#for prio in currentMission.biomes.size():
|
||||||
|
#for biome in currentMission.biomes[prio]:
|
||||||
|
#if biome.name == biomeName:
|
||||||
|
#return biome
|
||||||
|
#return Biome.new("empty",RoomList.new(),RoomData.new(),0,0)
|
||||||
|
#
|
||||||
|
#func generateBiomePos(biome: String,starterRoomSize: Vector2i) -> Vector2i:
|
||||||
|
#var genPos: Vector2i
|
||||||
|
#var possiblePos: Array[Vector2i]
|
||||||
|
#
|
||||||
|
##Find all possible Pos without a biome
|
||||||
|
#for x in levelGrid.size() - starterRoomSize.x - 1:
|
||||||
|
#for y in levelGrid[x].size() - starterRoomSize.y - 1:
|
||||||
|
#if !levelGrid[x][y].biome:
|
||||||
|
#possiblePos.push_back(levelGrid[x][y].position)
|
||||||
|
#
|
||||||
|
##Go through all pos untill one works
|
||||||
|
#genPos = possiblePos[rng.randi_range(0,possiblePos.size()-1)]
|
||||||
|
#while checkBiomeOverlap(biome,genPos,starterRoomSize.x,starterRoomSize.y):
|
||||||
|
#possiblePos.erase(genPos)
|
||||||
|
#if possiblePos.size() == 0:
|
||||||
|
#abandonSeed()
|
||||||
|
#break
|
||||||
|
#genPos = possiblePos[rng.randi_range(0,possiblePos.size()-1)]
|
||||||
|
#
|
||||||
|
#return genPos
|
||||||
|
#
|
||||||
|
#func placeBiomes(biomes: Array[Biome]) -> Array[DoorPosition]:
|
||||||
|
#var returnDoorLists: Array[DoorPosition] = []
|
||||||
|
#
|
||||||
|
#for biome in biomes:
|
||||||
|
#var starterRoomSize: Vector2i = Vector2i(biome.starterRoom.roomGrid.size(),biome.starterRoom.roomGrid[0].size())
|
||||||
|
#var generatePos: Vector2i = generateBiomePos(biome.name,starterRoomSize)
|
||||||
|
#changeBiomeArea2D(biome.name,generatePos,starterRoomSize.x,starterRoomSize.y)
|
||||||
|
#
|
||||||
|
##Spawn Starter room and add doors to list
|
||||||
|
#var doorList: Array[DoorPosition]
|
||||||
|
#doorList = spawnRoom(biome.starterRoom,generatePos,rng.randi_range(0,3))
|
||||||
|
#returnDoorLists += doorList
|
||||||
|
#
|
||||||
|
##If first Biome, set Starting Position
|
||||||
|
#if shipLogic.playerStartPos == Vector3(0,0,0):
|
||||||
|
#shipLogic.playerStartPos = Vector3(generatePos.x + biome.starterRoom.roomGrid.size()/2,0,generatePos.y + biome.starterRoom.roomGrid[0].size()/2) + self.position
|
||||||
|
#
|
||||||
|
#return returnDoorLists
|
||||||
|
#
|
||||||
|
#func fillCell(cellBiome: String,pos: Vector2i) -> GridCell:
|
||||||
|
#if isOutOfArray2DBounds(levelGrid.size(),levelGrid[0].size(),pos): return
|
||||||
|
#if !levelGrid[pos.x][pos.y].biome:
|
||||||
|
#levelGrid[pos.x][pos.y].biome = cellBiome
|
||||||
|
#return levelGrid[pos.x][pos.y]
|
||||||
|
#return
|
||||||
|
#
|
||||||
|
#func spreadCell(cell: GridCell,pos: Vector2i) -> Array[GridCell]:
|
||||||
|
#var returnCells: Array[GridCell] = []
|
||||||
|
#returnCells.push_back(fillCell(cell.biome,pos + Vector2i(0,-1)))
|
||||||
|
#returnCells.push_back(fillCell(cell.biome,pos + Vector2i(1,0)))
|
||||||
|
#returnCells.push_back(fillCell(cell.biome,pos + Vector2i(0,1)))
|
||||||
|
#returnCells.push_back(fillCell(cell.biome,pos + Vector2i(-1,0)))
|
||||||
|
#while returnCells.has(null):
|
||||||
|
#returnCells.erase(null)
|
||||||
|
#return returnCells
|
||||||
|
#
|
||||||
|
#func allCellsHaveBiome() -> bool:
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for cell in levelGrid[x]:
|
||||||
|
#if !cell.biome: return false
|
||||||
|
#return true
|
||||||
|
#
|
||||||
|
#func spreadBiomes() -> void:
|
||||||
|
##Get all current biome grid cells -> Put them in starterCells
|
||||||
|
#var startCells: Array[GridCell] = []
|
||||||
|
#var startProbabilities: PackedFloat32Array = []
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if levelGrid[x][y].biome:
|
||||||
|
#var cell: GridCell = levelGrid[x][y]
|
||||||
|
#startCells.push_back(cell)
|
||||||
|
#startProbabilities.push_back(getBiome(cell.biome).spread)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
##Spread them by one -> put the new ones in a new array
|
||||||
|
#while !(startCells.is_empty() or startProbabilities.is_empty()):
|
||||||
|
#var newCells: Array[GridCell] = []
|
||||||
|
#var newProbabilities: PackedFloat32Array = []
|
||||||
|
#var randomCellIndex: int = rng.rand_weighted(startProbabilities)
|
||||||
|
#
|
||||||
|
#if randomCellIndex == -1:
|
||||||
|
#randomCellIndex = startProbabilities.size()-1
|
||||||
|
#
|
||||||
|
#var cell: GridCell = startCells[randomCellIndex]
|
||||||
|
#
|
||||||
|
#newCells += spreadCell(cell,cell.position)
|
||||||
|
#for newCell in newCells:
|
||||||
|
#newProbabilities.push_back(getBiome(newCell.biome).spread)
|
||||||
|
#
|
||||||
|
##New cells now contains all that were newly assigned a biome and the ones that didnt spread
|
||||||
|
#startCells.remove_at(randomCellIndex)
|
||||||
|
#startProbabilities.remove_at(randomCellIndex)
|
||||||
|
#
|
||||||
|
#startCells += newCells
|
||||||
|
#startProbabilities += newProbabilities
|
||||||
|
#
|
||||||
|
##Astar
|
||||||
|
#func generateAstarPoints(findAllSpaceTakenCells: bool = false) -> void:
|
||||||
|
#var currentID: int = 0
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if (levelGrid[x][y].spaceTaken == findAllSpaceTakenCells) and !(x == 0 or x == gridSize-1 or y == 0 or y == gridSize-1):
|
||||||
|
#astar.add_point(currentID,Vector2i(x,y))
|
||||||
|
#currentID += 1
|
||||||
|
#
|
||||||
|
#func connectAstarPoints() -> void:
|
||||||
|
#for point in astar.get_point_ids():
|
||||||
|
#var possibleNeighbors: Array[int] = [point+1,point-1,point-gridSize,point+gridSize]
|
||||||
|
#
|
||||||
|
#for posNeigh in possibleNeighbors:
|
||||||
|
#if astar.has_point(posNeigh):
|
||||||
|
#astar.connect_points(point,posNeigh,true)
|
||||||
|
#
|
||||||
|
#func weightAstarPoints() -> void:
|
||||||
|
#for point in astar.get_point_ids():
|
||||||
|
#if astar.get_point_connections(point).size() != 4:
|
||||||
|
#astar.set_point_weight_scale(point,10)
|
||||||
|
#
|
||||||
|
#func posToID(pos: Vector2i) -> int:
|
||||||
|
#return gridSize*pos.x + pos.y
|
||||||
|
#
|
||||||
|
##Generating Biome Connections
|
||||||
|
#func chooseBiomeExits() -> void:
|
||||||
|
#var existingBiomes: Array[String] = []
|
||||||
|
#var currentBiomeExits: Array[BiomeExit] = []
|
||||||
|
#var choosenBiomeExits: Array[BiomeExit] = []
|
||||||
|
## Find What Biomes are Present
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if !existingBiomes.has(levelGrid[x][y].biome) and levelGrid[x][y].biome != "buffer":
|
||||||
|
#existingBiomes.push_back(levelGrid[x][y].biome)
|
||||||
|
#
|
||||||
|
##For each biome choose a number of exit
|
||||||
|
#for i in existingBiomes.size():
|
||||||
|
##Look through all exits for exits belonging to this biome
|
||||||
|
#for exit in biomeExitPositions:
|
||||||
|
#if exit.biome == existingBiomes[i]:
|
||||||
|
#currentBiomeExits.push_back(exit)
|
||||||
|
#biomeExitPositions.erase(exit)
|
||||||
|
#
|
||||||
|
##For each other biome, choose an exit
|
||||||
|
#
|
||||||
|
#for n in existingBiomes.size()-1:
|
||||||
|
#if currentBiomeExits:
|
||||||
|
## Randomly determine an exit
|
||||||
|
#var exit: BiomeExit = currentBiomeExits[rng.randi_range(0,currentBiomeExits.size()-1)]
|
||||||
|
#
|
||||||
|
##Test if exit was already choosen
|
||||||
|
#if !choosenBiomeExits.has(exit):
|
||||||
|
#choosenBiomeExits.push_back(exit)
|
||||||
|
#
|
||||||
|
#currentBiomeExits.clear()
|
||||||
|
#
|
||||||
|
##Get rid of all other exits
|
||||||
|
#biomeExitPositions = choosenBiomeExits
|
||||||
|
#
|
||||||
|
#func doorsAtBiomeExits() -> void:
|
||||||
|
#for exit in biomeExitPositions:
|
||||||
|
#levelGrid[exit.pos.x][exit.pos.y].door = false
|
||||||
|
#
|
||||||
|
#func generateConnectionPath() -> PackedVector2Array:
|
||||||
|
#var returnArray: PackedVector2Array = []
|
||||||
|
#
|
||||||
|
##Look through all exits and find the closest other exit
|
||||||
|
#for exit in biomeExitPositions:
|
||||||
|
#var newPath: PackedVector2Array = []
|
||||||
|
#var closestPointPath: PackedVector2Array = []
|
||||||
|
#for otherExit in biomeExitPositions:
|
||||||
|
#newPath = astar.get_point_path(posToID(exit.pos),posToID(otherExit.pos))
|
||||||
|
#if exit.biome != otherExit.biome and newPath.size() < closestPointPath.size() or closestPointPath.size() == 0:
|
||||||
|
#closestPointPath = newPath
|
||||||
|
#
|
||||||
|
##Connect the exits
|
||||||
|
#if closestPointPath.size() == 0:
|
||||||
|
#levelGrid[exit.pos.x][exit.pos.y].door = true
|
||||||
|
#else:
|
||||||
|
#returnArray += closestPointPath
|
||||||
|
#
|
||||||
|
#return returnArray
|
||||||
|
#
|
||||||
|
#func addFloorPos(gridCell: GridCell) -> void:
|
||||||
|
#if !gridCell.biomeConnection and !gridCell.spaceTaken:
|
||||||
|
#connectPathPositions.push_back(gridCell.position)
|
||||||
|
#gridCell.biomeConnection = true
|
||||||
|
#gridCell.spaceTaken = true
|
||||||
|
#
|
||||||
|
#func generateFloorPositions(spread: int = 2) -> void:
|
||||||
|
#for x in spread:
|
||||||
|
#for y in connectPathPositions.size():
|
||||||
|
#var fPos: Vector2i = connectPathPositions[y]
|
||||||
|
#levelGrid[fPos.x][fPos.y].spaceTaken = true
|
||||||
|
#levelGrid[fPos.x][fPos.y].biomeConnection = true
|
||||||
|
#addFloorPos(levelGrid[clampi(fPos.x+1,0,gridSize-1)][fPos.y])
|
||||||
|
#addFloorPos(levelGrid[fPos.x][clampi(fPos.y+1,0,gridSize-1)])
|
||||||
|
#addFloorPos(levelGrid[clampi(fPos.x-1,0,gridSize-1)][fPos.y])
|
||||||
|
#addFloorPos(levelGrid[fPos.x][clampi(fPos.y-1,0,gridSize-1)])
|
||||||
|
#
|
||||||
|
#func placeFloorPositionTiles() -> void:
|
||||||
|
#for tilePos in connectPathPositions:
|
||||||
|
#addObject(tile,self,Vector3(tilePos.x+0.5,0,tilePos.y+0.5))
|
||||||
|
#
|
||||||
|
#if rng.randf_range(0,1) > 0.9:
|
||||||
|
#shipLogic.hallwayLights.push_back(addObject(lamp,self,Vector3(tilePos.x+0.5,2.5,tilePos.y+0.5)))
|
||||||
|
#
|
||||||
|
#func spawnWallSegment(pos: Vector2i,rot: int) -> void:
|
||||||
|
#addObject(tileWall,self,Vector3(pos.x+0.5,0,pos.y+0.5),Vector3(0,rot*PI/2,0))
|
||||||
|
#
|
||||||
|
#func spawnCornerSegment(pos: Vector2i,rot: int) -> void:
|
||||||
|
#addObject(tileCorner,self,Vector3(pos.x+0.5,0,pos.y+0.5),Vector3(0,rot*PI/2,0))
|
||||||
|
#
|
||||||
|
#func placeWallsAlongTiles() -> void:
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if !levelGrid[x][y].biomeConnection: continue
|
||||||
|
##Walls
|
||||||
|
#if x+1 != levelGrid.size():
|
||||||
|
#if !levelGrid[x+1][y].spaceTaken: spawnWallSegment(Vector2i(x,y),3)
|
||||||
|
#else: spawnWallSegment(Vector2i(x,y),3)
|
||||||
|
#if x != 0:
|
||||||
|
#if !levelGrid[x-1][y].spaceTaken: spawnWallSegment(Vector2i(x,y),1)
|
||||||
|
#else: spawnWallSegment(Vector2i(x,y),1)
|
||||||
|
#if y+1 != levelGrid.size():
|
||||||
|
#if !levelGrid[x][y+1].spaceTaken: spawnWallSegment(Vector2i(x,y),2)
|
||||||
|
#else: spawnWallSegment(Vector2i(x,y),2)
|
||||||
|
#if y != 0:
|
||||||
|
#if !levelGrid[x][y-1].spaceTaken: spawnWallSegment(Vector2i(x,y),0)
|
||||||
|
#else: spawnWallSegment(Vector2i(x,y),0)
|
||||||
|
##Corners
|
||||||
|
#if x+1 != levelGrid.size() and y+1 != levelGrid.size():
|
||||||
|
#if !levelGrid[x+1][y+1].spaceTaken: spawnCornerSegment(Vector2i(x,y),3)
|
||||||
|
#else: spawnCornerSegment(Vector2i(x,y),3)
|
||||||
|
#if x != 0 and y != 0:
|
||||||
|
#if !levelGrid[x-1][y-1].spaceTaken: spawnCornerSegment(Vector2i(x,y),1)
|
||||||
|
#else: spawnCornerSegment(Vector2i(x,y),1)
|
||||||
|
#if x+1 != levelGrid.size() and y != 0:
|
||||||
|
#if !levelGrid[x+1][y-1].spaceTaken: spawnCornerSegment(Vector2i(x,y),0)
|
||||||
|
#else: spawnCornerSegment(Vector2i(x,y),0)
|
||||||
|
#if y+1 != levelGrid.size() and x != 0:
|
||||||
|
#if !levelGrid[x-1][y+1].spaceTaken: spawnCornerSegment(Vector2i(x,y),2)
|
||||||
|
#else: spawnCornerSegment(Vector2i(x,y),2)
|
||||||
|
#
|
||||||
|
##Debug Functions
|
||||||
|
#func printLevelGrid() -> void:
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if levelGrid[x][y].biomeConnection:
|
||||||
|
#debugCubeAtPos(Vector2(x,y))
|
||||||
|
#
|
||||||
|
#func printBiomeGrid() -> void:
|
||||||
|
#for x in levelGrid.size():
|
||||||
|
#for y in levelGrid[x].size():
|
||||||
|
#if levelGrid[x][y].biome == "test":
|
||||||
|
#debugCubeAtPos(Vector2(x,y))
|
||||||
|
#
|
||||||
|
#func debugCubeAtPos(pos: Vector2):
|
||||||
|
#var debugCube: PackedScene = preload("res://test/debugCube.tscn")
|
||||||
|
#addObject(debugCube,self,Vector3(pos.x+0.5,0,pos.y+0.5))
|
||||||
|
#
|
||||||
|
#func showAstarPoints() -> void:
|
||||||
|
#for point in astar.get_point_ids():
|
||||||
|
#var point_pos: Vector2i = astar.get_point_position(point)
|
||||||
|
#debugCubeAtPos(point_pos)
|
||||||
1
Maps/MapGenerator/levelGenerator.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cq0sxwn7k47n6
|
||||||
56
Maps/MapGenerator/roomImageLoader.gd
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
extends Object
|
||||||
|
class_name RoomImageLoader
|
||||||
|
|
||||||
|
signal finishedLoading
|
||||||
|
signal finishedGettingDoors
|
||||||
|
|
||||||
|
func loadRoomData(image: Image) -> Array[Array]:
|
||||||
|
var imageSize: Vector2i = image.get_size()
|
||||||
|
var returnArray: Array[Array]
|
||||||
|
|
||||||
|
for x in imageSize.x:
|
||||||
|
var yArray: Array[GridCell]
|
||||||
|
returnArray.push_back(yArray)
|
||||||
|
for y in imageSize.y:
|
||||||
|
var gridCell: GridCell = GridCell.new()
|
||||||
|
var pixel: Color = image.get_pixel(x,y)
|
||||||
|
gridCell.spaceTaken = isColorTakingSpace(pixel)
|
||||||
|
if pixel == Color(1,0,0,1):
|
||||||
|
gridCell.door = true
|
||||||
|
gridCell.doorOrientation = getDoorOrientation(image,Vector2i(x,y))
|
||||||
|
|
||||||
|
yArray.push_back(gridCell)
|
||||||
|
|
||||||
|
finishedLoading.emit()
|
||||||
|
return returnArray
|
||||||
|
|
||||||
|
func isColorTakingSpace(pixel: Color) -> bool:
|
||||||
|
var returnBool: bool = true
|
||||||
|
if pixel == Color(1,1,1,1) or pixel == Color(1,0,0,1):
|
||||||
|
returnBool = false
|
||||||
|
return returnBool
|
||||||
|
|
||||||
|
func getDoors(grid: Array[Array]) -> Array[DoorPosition]:
|
||||||
|
var returnArray: Array[DoorPosition]
|
||||||
|
for x in grid.size():
|
||||||
|
for y in grid[x].size():
|
||||||
|
if grid[x][y].door:
|
||||||
|
var newDoorPos := DoorPosition.new()
|
||||||
|
newDoorPos.pos = Vector2i(x,y)
|
||||||
|
newDoorPos.orientation = grid[x][y].doorOrientation
|
||||||
|
returnArray.push_back(newDoorPos)
|
||||||
|
finishedGettingDoors.emit()
|
||||||
|
return returnArray
|
||||||
|
|
||||||
|
func getDoorOrientation(image: Image,pos: Vector2i) -> int:
|
||||||
|
var imageHeight: int = image.get_height()
|
||||||
|
var imageWidth: int = image.get_width()
|
||||||
|
if !(pos.y == imageHeight-1):
|
||||||
|
if image.get_pixelv(pos + Vector2i(0,1)) == Color(0,0,1,1): return GridCell.doorOrientations.north
|
||||||
|
if !(pos.x == 0):
|
||||||
|
if image.get_pixelv(pos + Vector2i(-1,0)) == Color(0,0,1,1): return GridCell.doorOrientations.east
|
||||||
|
if !(pos.y == 0):
|
||||||
|
if image.get_pixelv(pos + Vector2i(0,-1)) == Color(0,0,1,1): return GridCell.doorOrientations.south
|
||||||
|
if !(pos.x == imageWidth-1):
|
||||||
|
if image.get_pixelv(pos + Vector2i(1,0)) == Color(0,0,1,1): return GridCell.doorOrientations.west
|
||||||
|
return 0
|
||||||
1
Maps/MapGenerator/roomImageLoader.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://saart6lt7yni
|
||||||
BIN
Maps/Rooms/Generator/4Way/4WayRoomData.png
Normal file
|
After Width: | Height: | Size: 395 B |
40
Maps/Rooms/Generator/4Way/4WayRoomData.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://i6j1bdb80b7v"
|
||||||
|
path="res://.godot/imported/4WayRoomData.png-29bb5326712100be35965c6bdd1dd7c5.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generator/4Way/4WayRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/4WayRoomData.png-29bb5326712100be35965c6bdd1dd7c5.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
60
Maps/Rooms/Generator/4Way/4WayRoomGenerator.tscn
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://du8m31hacmm4b"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://c1ujdlmpc3mk0" path="res://Maps/Rooms/Generator/GeneratorRoom.gd" id="1_l5b8m"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="2_dbor7"]
|
||||||
|
[ext_resource type="Script" uid="uid://deea7d20s1612" path="res://Maps/MapGenerator/itemSpawner.gd" id="3_jsqvi"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://yg472lgqdca7" path="res://Maps/Spaceship/Objects/Grabable/PowerCell.tscn" id="4_da5v7"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fo7uf"]
|
||||||
|
albedo_color = Color(0.44458076, 0.6842774, 0.6841292, 1)
|
||||||
|
albedo_texture = ExtResource("2_dbor7")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="4WayRoom" type="Node3D" node_paths=PackedStringArray("powerCellSpawners", "Lights")]
|
||||||
|
script = ExtResource("1_l5b8m")
|
||||||
|
powerCellSpawners = [NodePath("PowerCellSpawner")]
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://c1ujdlmpc3mk0"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, -0.5)
|
||||||
|
material_override = SubResource("StandardMaterial3D_fo7uf")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||||
|
size = Vector3(5, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1195679, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(4.5, 3.2391357, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 1, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 1, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 1, -2.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 1, 2.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.791, -0.5)
|
||||||
|
|
||||||
|
[node name="PowerCellSpawner" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, -0.5)
|
||||||
|
script = ExtResource("3_jsqvi")
|
||||||
|
spawnedItem = ExtResource("4_da5v7")
|
||||||
|
metadata/_custom_type_script = "uid://deea7d20s1612"
|
||||||
BIN
Maps/Rooms/Generator/Corner/CornerRoomData.png
Normal file
|
After Width: | Height: | Size: 388 B |
40
Maps/Rooms/Generator/Corner/CornerRoomData.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bfihu18hya1lh"
|
||||||
|
path="res://.godot/imported/CornerRoomData.png-9a5d661b0a47a71197f23d50176b5b87.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generator/Corner/CornerRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/CornerRoomData.png-9a5d661b0a47a71197f23d50176b5b87.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
63
Maps/Rooms/Generator/Corner/CornerRoomGenerator.tscn
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://bwmimpqqaylrg"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://c1ujdlmpc3mk0" path="res://Maps/Rooms/Generator/GeneratorRoom.gd" id="1_jmb7e"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="2_ra1as"]
|
||||||
|
[ext_resource type="Script" uid="uid://deea7d20s1612" path="res://Maps/MapGenerator/itemSpawner.gd" id="3_do85j"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://md1qkedi16r6" path="res://Minigames/Initiators/MinigameFuseBox.tscn" id="4_0t1py"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ll6w0"]
|
||||||
|
albedo_color = Color(0.44313726, 0.68235296, 0.68235296, 1)
|
||||||
|
albedo_texture = ExtResource("2_ra1as")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="CornerRoom" type="Node3D" node_paths=PackedStringArray("wireSpawners", "Lights")]
|
||||||
|
script = ExtResource("1_jmb7e")
|
||||||
|
wireSpawners = [NodePath("MinigameSpawner")]
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://c1ujdlmpc3mk0"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
material_override = SubResource("StandardMaterial3D_ll6w0")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -1.5)
|
||||||
|
size = Vector3(6, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -1.5, 2, 0)
|
||||||
|
size = Vector3(6, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(5.5, 5, 4.5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -1.5, 2, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(5.5, 5, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 1, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -1.5, 1, 3)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, -2.4995685, 2.136, -2.5004315)
|
||||||
|
size = Vector3(3.7810059, 5.273, 0.2)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.118073, 0)
|
||||||
|
|
||||||
|
[node name="MinigameSpawner" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, -2.4361145, 0.006626487, -2.2363324)
|
||||||
|
script = ExtResource("3_do85j")
|
||||||
|
spawnedItem = ExtResource("4_0t1py")
|
||||||
|
metadata/_custom_type_script = "uid://deea7d20s1612"
|
||||||
5
Maps/Rooms/Generator/GeneratorRoom.gd
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
extends BasicRoom
|
||||||
|
class_name GeneratorRoom
|
||||||
|
|
||||||
|
@export var powerCellSpawners: Array[ItemSpawner]
|
||||||
|
@export var wireSpawners: Array[ItemSpawner]
|
||||||
1
Maps/Rooms/Generator/GeneratorRoom.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://c1ujdlmpc3mk0
|
||||||
50
Maps/Rooms/Generator/Hallway/HallwayGenerator.tscn
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://d3tpo3ggwi4k"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://c1ujdlmpc3mk0" path="res://Maps/Rooms/Generator/GeneratorRoom.gd" id="1_ggmcw"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="2_a3ito"]
|
||||||
|
[ext_resource type="Script" uid="uid://deea7d20s1612" path="res://Maps/MapGenerator/itemSpawner.gd" id="3_13m3c"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://yg472lgqdca7" path="res://Maps/Spaceship/Objects/Grabable/PowerCell.tscn" id="4_lguqx"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u6y0v"]
|
||||||
|
albedo_color = Color(0.44313726, 0.68235296, 0.68235296, 1)
|
||||||
|
albedo_texture = ExtResource("2_a3ito")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="Hallway" type="Node3D" node_paths=PackedStringArray("powerCellSpawners", "Lights")]
|
||||||
|
script = ExtResource("1_ggmcw")
|
||||||
|
powerCellSpawners = [NodePath("PowerCellSpawner")]
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://c1ujdlmpc3mk0"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
material_override = SubResource("StandardMaterial3D_u6y0v")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -0.5)
|
||||||
|
size = Vector3(8, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, -0.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(7.5, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 1, -0.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 1, -0.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.6033916, 0)
|
||||||
|
|
||||||
|
[node name="PowerCellSpawner" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.39445496, 0.477354, 1.002344)
|
||||||
|
script = ExtResource("3_13m3c")
|
||||||
|
spawnedItem = ExtResource("4_lguqx")
|
||||||
|
metadata/_custom_type_script = "uid://deea7d20s1612"
|
||||||
BIN
Maps/Rooms/Generator/Hallway/HallwayRoomData.png
Normal file
|
After Width: | Height: | Size: 377 B |
40
Maps/Rooms/Generator/Hallway/HallwayRoomData.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bjqf67vl8w16t"
|
||||||
|
path="res://.godot/imported/HallwayRoomData.png-040ded7cb30c3392da85865a9df35d01.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generator/Hallway/HallwayRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/HallwayRoomData.png-040ded7cb30c3392da85865a9df35d01.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
BIN
Maps/Rooms/Generator/MainGenerator/Generator.png
Normal file
|
After Width: | Height: | Size: 422 B |
40
Maps/Rooms/Generator/MainGenerator/Generator.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dph4coqom3ctm"
|
||||||
|
path="res://.godot/imported/Generator.png-ce0e4bf957d09ea1da1e0b1a5e0d89a9.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generator/MainGenerator/Generator.png"
|
||||||
|
dest_files=["res://.godot/imported/Generator.png-ce0e4bf957d09ea1da1e0b1a5e0d89a9.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
436
Maps/Rooms/Generator/MainGenerator/Generator.tscn
Normal file
99
Maps/Rooms/Generator/MainGenerator/generator.gd
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
extends BasicRoom
|
||||||
|
class_name Generator
|
||||||
|
|
||||||
|
@export var wireSpawners: Array[ItemSpawner]
|
||||||
|
@export var cellSpawners: Array[ItemSpawner]
|
||||||
|
|
||||||
|
var unfixedWires: Array[MinigameInitiator]
|
||||||
|
|
||||||
|
var rng: RandomNumberGenerator = RandomNumberGenerator.new()
|
||||||
|
|
||||||
|
@onready var SocketL: Area3D = $SocketL
|
||||||
|
@onready var SocketR: Area3D = $SocketR
|
||||||
|
|
||||||
|
@onready var SocketLPivot: Node3D = $SocketL/CellPivot
|
||||||
|
@onready var SocketRPivot: Node3D = $SocketR/CellPivot
|
||||||
|
|
||||||
|
var SocketLPowerCell: GrabableObject
|
||||||
|
var SocketRPowerCell: GrabableObject
|
||||||
|
|
||||||
|
func Ready() -> void:
|
||||||
|
SpaceshipLogicRef = get_node("/root/Main/Maps/SpaceshipTest")
|
||||||
|
rng.set_seed(SpaceshipLogicRef.levelGenSeed)
|
||||||
|
generateMinigames()
|
||||||
|
generatePowerCells()
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
checkTasks()
|
||||||
|
|
||||||
|
if SocketLPowerCell:
|
||||||
|
if SocketLPowerCell.isGrabbed:
|
||||||
|
SocketLPowerCell = null
|
||||||
|
if SocketRPowerCell:
|
||||||
|
if SocketRPowerCell.isGrabbed:
|
||||||
|
SocketRPowerCell = null
|
||||||
|
|
||||||
|
grabCell(SocketL,SocketLPowerCell,SocketLPivot)
|
||||||
|
grabCell(SocketR,SocketRPowerCell,SocketRPivot)
|
||||||
|
|
||||||
|
if !SpaceshipLogicRef: return
|
||||||
|
|
||||||
|
#if SocketLPowerCell and SocketRPowerCell and SpaceshipLogicRef.taskDict[0].completed:
|
||||||
|
#SpaceshipLogicRef.power = false
|
||||||
|
#SpaceshipLogicRef.updateLights()
|
||||||
|
#else:
|
||||||
|
#SpaceshipLogicRef.power = true
|
||||||
|
#SpaceshipLogicRef.updateLights()
|
||||||
|
|
||||||
|
func generateMinigames() -> void:
|
||||||
|
var totalMinigames: int = wireSpawners.size()
|
||||||
|
var choosenMinigames: int = randi_range(2,clamp(6,2,totalMinigames))
|
||||||
|
|
||||||
|
for n in (totalMinigames - choosenMinigames):
|
||||||
|
wireSpawners.pop_at(randi_range(0,wireSpawners.size()-1))
|
||||||
|
|
||||||
|
for itemSpawner in wireSpawners:
|
||||||
|
unfixedWires.push_back(itemSpawner.spawnItem())
|
||||||
|
|
||||||
|
|
||||||
|
func generatePowerCells() -> void:
|
||||||
|
var totalCells: int = cellSpawners.size()
|
||||||
|
var choosenCells: int = randi_range(2,clamp(2 + totalCells /7,2,totalCells))
|
||||||
|
|
||||||
|
for n in (totalCells - choosenCells):
|
||||||
|
cellSpawners.pop_at(randi_range(0,cellSpawners.size()-1))
|
||||||
|
|
||||||
|
for itemSpawner in cellSpawners:
|
||||||
|
itemSpawner.spawnItem()
|
||||||
|
|
||||||
|
func grabCell(Socket: Area3D, SocketCell: GrabableObject, SocketPivot: Node3D):
|
||||||
|
if Socket.has_overlapping_areas() and !SocketCell:
|
||||||
|
var potentialCell = getPowerCells(Socket)
|
||||||
|
if potentialCell: potentialCell = potentialCell.obj
|
||||||
|
else: return
|
||||||
|
if potentialCell.freeze == true: return
|
||||||
|
if !potentialCell.isGrabbed:
|
||||||
|
SocketCell = potentialCell
|
||||||
|
if Socket == SocketL: SocketLPowerCell = potentialCell
|
||||||
|
elif Socket == SocketR: SocketRPowerCell = potentialCell
|
||||||
|
SocketCell.freeze = true
|
||||||
|
SocketCell.global_position = SocketPivot.global_position
|
||||||
|
SocketCell.global_rotation = SocketPivot.global_rotation
|
||||||
|
|
||||||
|
func getPowerCells(Area: Area3D) -> GrabBox:
|
||||||
|
var overlappingAreas: Array[Area3D] = Area.get_overlapping_areas()
|
||||||
|
for a in overlappingAreas:
|
||||||
|
if typeof(a == GrabBox):
|
||||||
|
if a.type == "PowerCell":
|
||||||
|
return a
|
||||||
|
return null
|
||||||
|
|
||||||
|
func checkTasks() -> void:
|
||||||
|
var allWiresFixed: bool = true
|
||||||
|
for wire in unfixedWires:
|
||||||
|
if !wire.minigameCompleted:
|
||||||
|
allWiresFixed = false
|
||||||
|
break
|
||||||
|
|
||||||
|
if SocketLPowerCell and SocketRPowerCell and allWiresFixed:
|
||||||
|
SpaceshipLogicRef.solveTask(0)
|
||||||
1
Maps/Rooms/Generator/MainGenerator/generator.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://6loaamrfhwdc
|
||||||
99
Maps/Rooms/Generator/THallway/THallwayGenerator.tscn
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
[gd_scene load_steps=7 format=3 uid="uid://lr0okqosrbup"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://c1ujdlmpc3mk0" path="res://Maps/Rooms/Generator/GeneratorRoom.gd" id="1_cknr3"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="2_3en8h"]
|
||||||
|
[ext_resource type="Script" uid="uid://deea7d20s1612" path="res://Maps/MapGenerator/itemSpawner.gd" id="3_lmxy4"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://yg472lgqdca7" path="res://Maps/Spaceship/Objects/Grabable/PowerCell.tscn" id="4_pdgyu"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://md1qkedi16r6" path="res://Minigames/Initiators/MinigameFuseBox.tscn" id="5_0hl30"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_b7a2o"]
|
||||||
|
albedo_color = Color(0.44313726, 0.68235296, 0.68235296, 1)
|
||||||
|
albedo_texture = ExtResource("2_3en8h")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="THallway" type="Node3D" node_paths=PackedStringArray("powerCellSpawners", "wireSpawners", "Lights")]
|
||||||
|
script = ExtResource("1_cknr3")
|
||||||
|
powerCellSpawners = [NodePath("PowerCellSpawner")]
|
||||||
|
wireSpawners = [NodePath("MinigameSpawner"), NodePath("MinigameSpawner2")]
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://c1ujdlmpc3mk0"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
material_override = SubResource("StandardMaterial3D_b7a2o")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="Middle" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2, -1.5)
|
||||||
|
size = Vector3(5, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, -1.5)
|
||||||
|
size = Vector3(2, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 2, -1.5)
|
||||||
|
size = Vector3(2, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.5, 2, 2)
|
||||||
|
size = Vector3(2, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle5" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(4.5, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Middle6" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.031144, 1.5, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3.5, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Middle7" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.9354858, 1.5, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3.6290283, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Middle8" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.5, 1.5, 1.5012207)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(2.4975586, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1, 3)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3, 3, 0.5)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 1, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3, 3, 0.5)
|
||||||
|
|
||||||
|
[node name="Door3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -5, 1, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3, 3, 0.5)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.21, -1.5)
|
||||||
|
|
||||||
|
[node name="PowerCellSpawner" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4644805, 0.47735423, 0.38929313)
|
||||||
|
script = ExtResource("3_lmxy4")
|
||||||
|
identifier = "PowerCell"
|
||||||
|
spawnedItem = ExtResource("4_pdgyu")
|
||||||
|
metadata/_custom_type_script = "uid://deea7d20s1612"
|
||||||
|
|
||||||
|
[node name="MinigameSpawner" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.657419, 1.1920929e-07, -3.6182885)
|
||||||
|
script = ExtResource("3_lmxy4")
|
||||||
|
identifier = "Minigame"
|
||||||
|
spawnedItem = ExtResource("5_0hl30")
|
||||||
|
metadata/_custom_type_script = "uid://deea7d20s1612"
|
||||||
|
|
||||||
|
[node name="MinigameSpawner2" type="Node3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.504615, 1.1920929e-07, -3.6182885)
|
||||||
|
script = ExtResource("3_lmxy4")
|
||||||
|
identifier = "Minigame"
|
||||||
|
spawnedItem = ExtResource("5_0hl30")
|
||||||
|
metadata/_custom_type_script = "uid://deea7d20s1612"
|
||||||
BIN
Maps/Rooms/Generator/THallway/THallwayRoomData.png
Normal file
|
After Width: | Height: | Size: 396 B |
40
Maps/Rooms/Generator/THallway/THallwayRoomData.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://2ymcnsihkijs"
|
||||||
|
path="res://.godot/imported/THallwayRoomData.png-74cea3fe45c38d1d28bfe7abfbf03f94.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generator/THallway/THallwayRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/THallwayRoomData.png-74cea3fe45c38d1d28bfe7abfbf03f94.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
51
Maps/Rooms/Generic Connectors/4Way/4WayRoom.tscn
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://djvrkf3ma61fu"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="1_bpbam"]
|
||||||
|
[ext_resource type="Script" uid="uid://lmn08s8c5lfo" path="res://Maps/Rooms/RoomScripts/BasicRoom.gd" id="1_fo7uf"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fo7uf"]
|
||||||
|
albedo_color = Color(0.7176471, 0.7176471, 0.7176471, 1)
|
||||||
|
albedo_texture = ExtResource("1_bpbam")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="4WayRoom" type="Node3D" node_paths=PackedStringArray("Lights")]
|
||||||
|
script = ExtResource("1_fo7uf")
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://lmn08s8c5lfo"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, -0.5)
|
||||||
|
material_override = SubResource("StandardMaterial3D_fo7uf")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||||
|
size = Vector3(5, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1195679, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(4.5, 3.2391357, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 1, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 1, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 1, -2.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 1, 2.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.791, -0.5)
|
||||||
BIN
Maps/Rooms/Generic Connectors/4Way/4WayRoomData.png
Normal file
|
After Width: | Height: | Size: 395 B |
40
Maps/Rooms/Generic Connectors/4Way/4WayRoomData.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://sidx5xyv55wr"
|
||||||
|
path="res://.godot/imported/4WayRoomData.png-31c927c3a34104f6d5731e68d59ab82e.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generic Connectors/4Way/4WayRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/4WayRoomData.png-31c927c3a34104f6d5731e68d59ab82e.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
54
Maps/Rooms/Generic Connectors/Corner/CornerRoom.tscn
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://cv48w5y11hgfx"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://lmn08s8c5lfo" path="res://Maps/Rooms/RoomScripts/BasicRoom.gd" id="1_ll6w0"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="1_qxrvj"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ll6w0"]
|
||||||
|
albedo_color = Color(0.7176471, 0.7176471, 0.7176471, 1)
|
||||||
|
albedo_texture = ExtResource("1_qxrvj")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="CornerRoom" type="Node3D" node_paths=PackedStringArray("Lights")]
|
||||||
|
script = ExtResource("1_ll6w0")
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://lmn08s8c5lfo"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
material_override = SubResource("StandardMaterial3D_ll6w0")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -1.5)
|
||||||
|
size = Vector3(6, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -1.5, 2, 0)
|
||||||
|
size = Vector3(6, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(5.5, 5, 4.5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -1.5, 2, 0)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(5.5, 5, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 1, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -1.5, 1, 3)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, -2.4995685, 2.136, -2.5004315)
|
||||||
|
size = Vector3(3.7810059, 5.273, 0.2)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.118073, 0)
|
||||||
BIN
Maps/Rooms/Generic Connectors/Corner/CornerRoomData.png
Normal file
|
After Width: | Height: | Size: 388 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c5w3heoxsjq4n"
|
||||||
|
path="res://.godot/imported/CornerRoomData.png-ea953f2c9550375ab2bc2b9296d1268d.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generic Connectors/Corner/CornerRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/CornerRoomData.png-ea953f2c9550375ab2bc2b9296d1268d.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
41
Maps/Rooms/Generic Connectors/Hallway/Hallway.tscn
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://bi320yo04o4hk"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="1_74hrc"]
|
||||||
|
[ext_resource type="Script" uid="uid://lmn08s8c5lfo" path="res://Maps/Rooms/RoomScripts/BasicRoom.gd" id="1_u6y0v"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u6y0v"]
|
||||||
|
albedo_color = Color(0.7176471, 0.7176471, 0.7176471, 1)
|
||||||
|
albedo_texture = ExtResource("1_74hrc")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="Hallway" type="Node3D" node_paths=PackedStringArray("Lights")]
|
||||||
|
script = ExtResource("1_u6y0v")
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://lmn08s8c5lfo"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
material_override = SubResource("StandardMaterial3D_u6y0v")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -0.5)
|
||||||
|
size = Vector3(8, 6, 5)
|
||||||
|
|
||||||
|
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, -0.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(7.5, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 1, -0.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 1, -0.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(1, 3, 3)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.6033916, 0)
|
||||||
BIN
Maps/Rooms/Generic Connectors/Hallway/HallwayRoomData.png
Normal file
|
After Width: | Height: | Size: 377 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cd8ffur7roccs"
|
||||||
|
path="res://.godot/imported/HallwayRoomData.png-c7018fac44e76d2dfeb8107401f7bccc.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generic Connectors/Hallway/HallwayRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/HallwayRoomData.png-c7018fac44e76d2dfeb8107401f7bccc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
73
Maps/Rooms/Generic Connectors/THallway/THallway.tscn
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://dgawoqpbufmp6"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://lmn08s8c5lfo" path="res://Maps/Rooms/RoomScripts/BasicRoom.gd" id="1_b7a2o"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://icwcdyvrtcwe" path="res://test/TestTex1.png" id="1_nxio2"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_b7a2o"]
|
||||||
|
albedo_color = Color(0.7176471, 0.7176471, 0.7176471, 1)
|
||||||
|
albedo_texture = ExtResource("1_nxio2")
|
||||||
|
metallic = 0.7
|
||||||
|
|
||||||
|
[node name="THallway" type="Node3D" node_paths=PackedStringArray("Lights")]
|
||||||
|
script = ExtResource("1_b7a2o")
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://lmn08s8c5lfo"
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
material_override = SubResource("StandardMaterial3D_b7a2o")
|
||||||
|
use_collision = true
|
||||||
|
|
||||||
|
[node name="Middle" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2, -1.5)
|
||||||
|
size = Vector3(5, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, -1.5)
|
||||||
|
size = Vector3(2, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 2, -1.5)
|
||||||
|
size = Vector3(2, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle4" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.5, 2, 2)
|
||||||
|
size = Vector3(2, 6, 5)
|
||||||
|
|
||||||
|
[node name="Middle5" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(4.5, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Middle6" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.031144, 1.5, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3.5, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Middle7" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.9354858, 1.5, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3.6290283, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Middle8" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.5, 1.5, 1.5012207)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(2.4975586, 4, 4.5)
|
||||||
|
|
||||||
|
[node name="Door" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1, 3)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3, 3, 0.5)
|
||||||
|
|
||||||
|
[node name="Door2" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 1, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3, 3, 0.5)
|
||||||
|
|
||||||
|
[node name="Door3" type="CSGBox3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -5, 1, -1.5)
|
||||||
|
operation = 2
|
||||||
|
size = Vector3(3, 3, 0.5)
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.21, -1.5)
|
||||||
BIN
Maps/Rooms/Generic Connectors/THallway/THallwayRoomData.png
Normal file
|
After Width: | Height: | Size: 396 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b7bpona2op82b"
|
||||||
|
path="res://.godot/imported/THallwayRoomData.png-0e4645eaba254d51a19ae30b45b14ea1.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Generic Connectors/THallway/THallwayRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/THallwayRoomData.png-0e4645eaba254d51a19ae30b45b14ea1.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
12
Maps/Rooms/RoomScripts/BasicRoom.gd
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
extends Node3D
|
||||||
|
class_name BasicRoom
|
||||||
|
|
||||||
|
var biomeName: String = "nothing"
|
||||||
|
|
||||||
|
var SpaceshipLogicRef: ShipLogic = null
|
||||||
|
@export var Lights: Array[Light3D]
|
||||||
|
|
||||||
|
|
||||||
|
func showLights(LightStatus: bool):
|
||||||
|
for light in Lights:
|
||||||
|
if light: light.visible = LightStatus
|
||||||
1
Maps/Rooms/RoomScripts/BasicRoom.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://lmn08s8c5lfo
|
||||||
12
Maps/Rooms/RoomScripts/start_test.gd
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
extends BasicRoom
|
||||||
|
|
||||||
|
|
||||||
|
@onready var fuseBox: MinigameInitiator = $MinigameFuseBox
|
||||||
|
var shipLogic: ShipLogic
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
shipLogic = get_node("/root/Main/Maps/SpaceshipTest")
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
if fuseBox.minigameCompleted:
|
||||||
|
shipLogic.solveTask(0)
|
||||||
1
Maps/Rooms/RoomScripts/start_test.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://gtfetd6m53v4
|
||||||
11
Maps/Rooms/RoomScripts/test_4_way.gd
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
extends BasicRoom
|
||||||
|
|
||||||
|
@onready var fuseBox: MinigameInitiator = $MinigameFuseBox
|
||||||
|
var shipLogic: ShipLogic
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
shipLogic = get_node("/root/Main/Maps/SpaceshipTest")
|
||||||
|
|
||||||
|
#func _process(_delta: float) -> void:
|
||||||
|
#if fuseBox.minigameCompleted:
|
||||||
|
#shipLogic.solveTask(1)
|
||||||
1
Maps/Rooms/RoomScripts/test_4_way.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://275mm2e32a20
|
||||||
BIN
Maps/Rooms/Starter/Hanger/HangerRoomData.png
Normal file
|
After Width: | Height: | Size: 399 B |
40
Maps/Rooms/Starter/Hanger/HangerRoomData.png.import
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://2ekco7xpg1bj"
|
||||||
|
path="res://.godot/imported/HangerRoomData.png-20cd3ad88c21fbd347e0d1e93ef65e4c.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Maps/Rooms/Starter/Hanger/HangerRoomData.png"
|
||||||
|
dest_files=["res://.godot/imported/HangerRoomData.png-20cd3ad88c21fbd347e0d1e93ef65e4c.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
64
Maps/Spaceship/Corridors/CorridorDeadEnd.tscn
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
[gd_scene load_steps=7 format=4 uid="uid://7p668ibmmx21"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cww7fnikeau22" path="res://Maps/Spaceship/RoomScripts/corridor_dead_end.gd" id="1_1beyu"]
|
||||||
|
[ext_resource type="Script" uid="uid://b7ma88dd5c5tb" path="res://Maps/Spaceship/Objects/flicker_omni_light_3d.gd" id="2_nbfqo"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_obqup"]
|
||||||
|
|
||||||
|
[sub_resource type="ArrayMesh" id="ArrayMesh_g7bps"]
|
||||||
|
_surfaces = [{
|
||||||
|
"aabb": AABB(-3.5, 0, -7, 7, 7, 14),
|
||||||
|
"format": 34359742465,
|
||||||
|
"index_count": 204,
|
||||||
|
"index_data": PackedByteArray("AAABAAIAAAADAAEABAACAAEABQAAAAIABQADAAAABgACAAQABQACAAcABgAHAAIABAABAAgACAAGAAQACAABAAkAAwAJAAEACAAKAAYACAAJAAoABgALAAcACgALAAYADAAHAAsADAAFAAcADQALAAoACwANAAwACQAOAAoADQAKAA4ADwAOAAkADgAPAA0AAwAQAAkADwAJABAAAwAPABAAEQADAAUAAwARAA8ABQAMABEADwASAA0ADQATAAwADQASABMADAAUABEADAATABQAEQAVAA8AEQAUABUADwAVABIAEwAWABQAFgAVABQAEgAXABMAFgATABcAFQAYABIAGAAVABkAFwASABoAGgASABgAFgAXABsAFQAcABkAFgAcABUAGAAZAB0AHQAaABgAHAAdABkAFwAaAB4AHgAbABcAHwAaAB0AHwAeABoAHwAgAB4AHwAdACEAIAAfACEAHAAhAB0AHgAgACIAHgAiABsAIAAhACIAFgAbACIAIwAhABwAHAAWACMAIwAiACEAFgAiACMA"),
|
||||||
|
"primitive": 3,
|
||||||
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
|
"vertex_count": 36,
|
||||||
|
"vertex_data": PackedByteArray("AABgwAAAAAAAAODAAABgQJqZyUAAAODAAABgwJqZyUAAAODAAABgQAAAAAAAAODAMzMzwAAA4ECamcnAAABgwAAAAAAAAOBAMzMzwAAA4EAAAOBAAABgwJqZyUAAAOBAMzMzQAAA4ECamcnAAABgQJqZyUAAAOBAMzMzQAAA4EAAAOBAVlJAwCsp0EAAAOBAAQDAvwAAoEAAAOBAAQDAPwAAoEAAAOBAVlJAQCsp0EAAAOBAAQDAPwAAAAAAAOBAAABgQAAAAAAAAOBAAQDAvwAAAAAAAOBAAQDAPwAAoEBmZt5AAQDAvwAAoEBmZt5AAQDAv78tNz3SSN9AAQDAP78tNz3SSN9ACSdewJJ77DyEE99AVlJAwCsp0EBmZt5AVlJAQCsp0EBmZt5ACSdeQJJ77DyEE99Azz8yQDTa3kDY/d5AZ7RdwOgfyUDY/d5ACSdeQJB77DyEE9/AZ7RdQOgfyUDY/d5Azz8ywDTa3kDY/d5ASD0yQCWN3kCkHsnASD0ywCWN3kCkHsnA8epdQEz5yEB59d7A8epdwEz5yEB59d7ACSdewJB77DyEE9/A")
|
||||||
|
}]
|
||||||
|
blend_shape_mode = 0
|
||||||
|
|
||||||
|
[sub_resource type="ArrayMesh" id="ArrayMesh_1beyu"]
|
||||||
|
resource_name = "CorridorDeadEnd_Cube_001"
|
||||||
|
_surfaces = [{
|
||||||
|
"aabb": AABB(-3.5, 0, -7, 7, 7, 14),
|
||||||
|
"attribute_data": PackedByteArray("AADAPgAAQD+ZmRk/AAAAP5mZGT8AAEA/AADAPgAAAD8AAMA+AAAAP5mZGT8AAIA+mZkZPwAAAD8AAMA+AACAPgAAwD4AAAAA27YNPyBJkj1JkuQ+IEmSPZmZGT8AAAAAenkbP8DQkDzMzBw/wMxMPNu2DT9w2zY+AAAgP2hmZj4AACA/wMzMPHp5Gz/o5W0+SpLkPmzbNj6ZmRk/AACAPszMHD80M3M+AADAPgAAgD4AAMA+AAAAAAAAwD4AAAA/AADAPgAAQD9JkuQ+IEmSPUqS5D5s2zY+AADAPgAAgD4AAMA+AACAP5mZGT8AAEA/mZkZPwAAgD8AAMA+AABAPwAAID8AAIA/mZkZPwAAQD8AACA/MzNDP5mZGT8AAIA/AAAgP5qZOT+ZmRk/AAAAPwAAID9mZgY/mZkZPwAAQD9lZiY/nJn5PpmZGT8AAIA+ZmYmPwAAgD6ZmRk/AAAAP2VmJj+cmfk+mZlZPwIAgD6amVk/mJn5PmZmJj8AAIA+AADAPgAAQD+ZmRk/AAAAPwAAwD4AAAA/mZkZPwAAQD8AAMA+AAAAP5mZGT8AAIA+AADAPgAAgD6ZmRk/AAAAP9u2DT8gSZI9AADAPgAAAABJkuQ+IEmSPXp5Gz/A0JA8mZkZPwAAAAAAAMA+AAAAPwAAwD4AAAAAAADAPgAAQD9KkuQ+bNs2PgAAwD4AAIA+SZLkPiBJkj0AAMA+AACAP5mZGT8AAEA/AADAPgAAQD+ZmRk/AACAP9u2DT9w2zY+enkbP8DQkDzbtg0/IEmSPQAAID9oZmY+enkbP+jlbT4AACA/wMzMPEqS5D5s2zY+enkbP+jlbT7btg0/cNs2PgAAwD4AAIA+mZkZPwAAgD7MzBw/wMxMPJmZGT8AAAAAenkbP8DQkDyZmRk/AACAPszMHD80M3M+enkbP+jlbT4AACA/AACAP5mZGT8AAEA/mZkZPwAAgD8AACA/MzNDPwAAID+amTk/mZkZPwAAAD+ZmRk/AABAPwAAID9mZgY/ZWYmP5yZ+T6ZmRk/AACAPpmZGT8AAAA/ZmYmPwAAgD5lZiY/nJn5PpmZWT8CAIA+ZmYmPwAAgD6amVk/mJn5PkmS5D4gSZI9SpLkPmzbNj5KkuQ+bNs2PkmS5D4gSZI927YNPyBJkj1JkuQ+IEmSPUmS5D4gSZI927YNPyBJkj1KkuQ+bNs2Ptu2DT9w2zY+27YNP3DbNj5KkuQ+bNs2Ptu2DT9w2zY+27YNPyBJkj3btg0/IEmSPdu2DT9w2zY+"),
|
||||||
|
"format": 34359742487,
|
||||||
|
"index_count": 204,
|
||||||
|
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACQAIAAsACQALAAwADQAMAAsADAAOAAkADgAMAA8ADwAMABAADgAPABEAEQASAA4AEgARABMAEwARABQAEgATABUAFgAXABgAGQAXABYAFwAZABoAFwAaABsAHAAdAB4AHAAfAB0AIAAhACIAIAAjACEAJAAlACYAJAAnACUAKAApACoAKAArACkALAAtAC4ALAAvAC0AMAAxADIAMAAzADEANAA1ADYANAA3ADUAOAA5ADoAOQA4ADsAOQA7ADwAPQA+AD8APgA9AEAAQAA9AEEAPgBAAEIAQwBEAEUAQwBGAEQARwBIAEkASABHAEoASgBHAEsASABKAEwATQBOAE8ATgBNAFAATgBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWABbAFkAXABdAF4AXABfAF0AYABhAGIAYABjAGEAZABlAGYAZABnAGUAaABpAGoAaABrAGkAbABtAG4AbABvAG0AcABxAHIAcABzAHEAdAB1AHYAdAB3AHUA"),
|
||||||
|
"material": SubResource("StandardMaterial3D_obqup"),
|
||||||
|
"primitive": 3,
|
||||||
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
|
"vertex_count": 120,
|
||||||
|
"vertex_data": PackedByteArray("AABgwAAAAAAAAODAAABgQJqZyUAAAODAAABgwJqZyUAAAODAAABgQAAAAAAAAODAAABgQAAAAAAAAODAAABgQJqZyUAAAOBAAABgQJqZyUAAAODAAABgQAAAAAAAAOBAAABgwAAAAAAAAOBAAQDAvwAAoEAAAOBAAQDAvwAAAAAAAOBAAABgwJqZyUAAAOBAVlJAwCsp0EAAAOBAMzMzwAAA4EAAAOBAAQDAPwAAoEAAAOBAMzMzQAAA4EAAAOBAMzMzwAAA4EAAAOBAVlJAQCsp0EAAAOBAAQDAPwAAAAAAAOBAAABgQJqZyUAAAOBAMzMzQAAA4EAAAOBAAABgQAAAAAAAAOBAAABgwAAAAAAAAOBAAABgQAAAAAAAAODAAABgwAAAAAAAAODAAQDAvwAAAAAAAOBAAQDAPwAAAAAAAOBAAABgQAAAAAAAAOBAAABgwAAAAAAAAOBAAABgwJqZyUAAAODAAABgwJqZyUAAAOBAAABgwAAAAAAAAODAMzMzwAAA4EAAAOBAAABgwJqZyUAAAODAMzMzwAAA4ECamcnAAABgwJqZyUAAAOBAMzMzwAAA4ECamcnAAABgQJqZyUAAAODAMzMzQAAA4ECamcnAAABgwJqZyUAAAODAMzMzQAAA4ECamcnAAABgQJqZyUAAAOBAMzMzQAAA4EAAAOBAAABgQJqZyUAAAODAMzMzQAAA4ECamcnAMzMzwAAA4EAAAOBAMzMzwAAA4ECamcnAMzMzQAAA4EAAAOBACSdewJB77DyEE9/A8epdQEz5yEB59d7ACSdeQJB77DyEE9/A8epdwEz5yEB59d7ACSdeQJB77DyEE9/AZ7RdQOgfyUDY/d5ACSdeQJJ77DyEE99A8epdQEz5yEB59d7AAQDAvwAAoEBmZt5ACSdewJJ77DyEE99AAQDAv78tNz3SSN9AVlJAwCsp0EBmZt5AZ7RdwOgfyUDY/d5ACSdeQJB77DyEE9/ACSdewJJ77DyEE99ACSdewJB77DyEE9/AAQDAP78tNz3SSN9ACSdeQJJ77DyEE99AAQDAv78tNz3SSN9ACSdewJJ77DyEE99A8epdwEz5yEB59d7ACSdewJB77DyEE9/AZ7RdwOgfyUDY/d5AAQDAPwAAoEBmZt5AVlJAwCsp0EBmZt5AAQDAvwAAoEBmZt5Azz8yQDTa3kDY/d5AVlJAQCsp0EBmZt5Azz8ywDTa3kDY/d5AAQDAP78tNz3SSN9AVlJAQCsp0EBmZt5AAQDAPwAAoEBmZt5ACSdeQJJ77DyEE99AZ7RdQOgfyUDY/d5Azz8ywDTa3kDY/d5AZ7RdwOgfyUDY/d5AVlJAwCsp0EBmZt5AZ7RdQOgfyUDY/d5Azz8yQDTa3kDY/d5AVlJAQCsp0EBmZt5Azz8ywDTa3kDY/d5A8epdwEz5yEB59d7AZ7RdwOgfyUDY/d5ASD0ywCWN3kCkHsnASD0ywCWN3kCkHsnA8epdQEz5yEB59d7A8epdwEz5yEB59d7ASD0yQCWN3kCkHsnASD0yQCWN3kCkHsnAZ7RdQOgfyUDY/d5A8epdQEz5yEB59d7Azz8yQDTa3kDY/d5ASD0yQCWN3kCkHsnAzz8ywDTa3kDY/d5Azz8yQDTa3kDY/d5ASD0ywCWN3kCkHsnAAQDAvwAAAAAAAOBAAQDAP78tNz3SSN9AAQDAPwAAAAAAAOBAAQDAv78tNz3SSN9AAQDAvwAAoEAAAOBAAQDAv78tNz3SSN9AAQDAvwAAAAAAAOBAAQDAvwAAoEBmZt5AAQDAPwAAAAAAAOBAAQDAPwAAoEBmZt5AAQDAPwAAoEAAAOBAAQDAP78tNz3SSN9AAQDAPwAAoEAAAOBAAQDAvwAAoEBmZt5AAQDAvwAAoEAAAOBAAQDAPwAAoEBmZt5A//////9//////////3//////////f/////////9///////9//3///////3//f///////f/9///////9//3////9//3//f////3//f/9//v//f/9//3////9//3+ziqX6/3//f2mWyfT/f/9/f7E+5/9//3//f/7//3//f/9//v//f/9//3/+//9//3+Vacn0/3//f/9/////f/9/S3Wl+v9//39/Tj7n/3//f/9/////fwAAqqr/v/9/AACqqv+//38AAP///7//fwAAqqr/v/9/AACqqv+//38AAAAAVRUAAP9//3///wAA/3//f///AAD/f/9///8AAP9//3////8//7//v//f/z//v/+//9//P/+//7//3/8//7//v//f/7////9//9//v////3//3/+/////f//f/7////9//9//v/+//z//3/+//7//P//f/7//v/8//9//v/+//z//3/9///8AAP+//3///wAA/7//f///AAD/v/9///8AAP+//3/rfwCACgD/f+t//n8KAP9/63/sfxMA/3/rfxKAEwAdAN5/4n8TAB0A3n/dfw4AHQDef9R/DgAdAN5/4n8YAHsAnwATfzgAewCfAGt/DAB7AJ8Ae4AAAHsAnwBafxQAewCfAJ+AEQAZgP//oKr3PxmA//+Aqvc/GYD//////78ZgP//kqr3PxmA//8RADGVGYD//5kX/T/h/95/IYAOAOH/3n8cgBMA4f/efxyAGADh/95/KoAOAJD+//8lfyIBkP7//zKCzQGQ/v///3+3AJD+//9lfoEBkP7//zp9FQKQ/v//P4TQAoP/nwDYgC4Ag/+fAIB/AQCD/58Ag38AAIP/nwDhgDMAg/+fAF9/EQCQCG736LJkGpAIbvfosmQakAhu9+iyZBpu9273Fk1kGm73bvcWTWQabvdu9xZNZBrIv9A/OsAVIMi/0D/ZwMUfyL/QPzLAGSDIv9A/5cC/H/9/nD8gf2kg/3+cP+qAbCD/f5w/935zIP9/nD9IgYMgNkDQPyc/xh82QNA/xD8VIDZA0D8iP8MfNkDQP8w/GSD/fxYAAAD/P/9/FgAAAP8//38WAAAA/z//fxYAAAD/P/9/qqr///8//3+qqv///z//f6qq////P/9/qqr///8/////f////7////9/////v////3////+/////f////78AAP9/////vwAA/3////+/AAD/f////78AAP9/////v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+/")
|
||||||
|
}]
|
||||||
|
blend_shape_mode = 0
|
||||||
|
shadow_mesh = SubResource("ArrayMesh_g7bps")
|
||||||
|
|
||||||
|
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_pjmyq"]
|
||||||
|
data = PackedVector3Array(-3.5, 0, -7, 3.5, 6.3, -7, -3.5, 6.3, -7, -3.5, 0, -7, 3.5, 0, -7, 3.5, 6.3, -7, 3.5, 0, -7, 3.5, 6.3, 7, 3.5, 6.3, -7, 3.5, 0, -7, 3.5, 0, 7, 3.5, 6.3, 7, -3.5, 0, 7, -1.5, 5, 7, -1.5, 0, 7, -1.5, 5, 7, -3.5, 0, 7, -3.5, 6.3, 7, -1.5, 5, 7, -3.5, 6.3, 7, -3.005, 6.505, 7, -2.8, 7, 7, -3.005, 6.505, 7, -3.5, 6.3, 7, -3.005, 6.505, 7, 1.5, 5, 7, -1.5, 5, 7, 1.5, 5, 7, -3.005, 6.505, 7, 2.8, 7, 7, 2.8, 7, 7, -3.005, 6.505, 7, -2.8, 7, 7, 1.5, 5, 7, 2.8, 7, 7, 3.005, 6.505, 7, 3.005, 6.505, 7, 1.5, 0, 7, 1.5, 5, 7, 1.5, 0, 7, 3.005, 6.505, 7, 3.5, 6.3, 7, 3.5, 6.3, 7, 3.005, 6.505, 7, 2.8, 7, 7, 1.5, 0, 7, 3.5, 6.3, 7, 3.5, 0, 7, -3.5, 0, 7, 3.5, 0, -7, -3.5, 0, -7, -1.5, 0, 7, 3.5, 0, -7, -3.5, 0, 7, 3.5, 0, -7, -1.5, 0, 7, 1.5, 0, 7, 3.5, 0, -7, 1.5, 0, 7, 3.5, 0, 7, -3.5, 0, 7, -3.5, 6.3, -7, -3.5, 6.3, 7, -3.5, 0, 7, -3.5, 0, -7, -3.5, 6.3, -7, -2.8, 7, 7, -3.5, 6.3, -7, -2.8, 7, -6.3, -2.8, 7, 7, -3.5, 6.3, 7, -3.5, 6.3, -7, -2.8, 7, -6.3, 3.5, 6.3, -7, 2.8, 7, -6.3, -2.8, 7, -6.3, -3.5, 6.3, -7, 3.5, 6.3, -7, 2.8, 7, -6.3, 3.5, 6.3, 7, 2.8, 7, 7, 2.8, 7, -6.3, 3.5, 6.3, -7, 3.5, 6.3, 7, 2.8, 7, -6.3, -2.8, 7, 7, -2.8, 7, -6.3, 2.8, 7, -6.3, 2.8, 7, 7, -2.8, 7, 7, -3.4711, 0.0289, -6.9711, 3.4675, 6.2804, -6.9675, 3.4711, 0.0289, -6.9711, -3.4711, 0.0289, -6.9711, -3.4675, 6.2804, -6.9675, 3.4675, 6.2804, -6.9675, 3.4711, 0.0289, -6.9711, 3.4641, 6.2851, 6.9685, 3.4711, 0.0289, 6.9711, 3.4711, 0.0289, -6.9711, 3.4675, 6.2804, -6.9675, 3.4641, 6.2851, 6.9685, -1.5, 5, 6.95, -3.4711, 0.0289, 6.9711, -1.5, 0.0447, 6.9776, -3.4711, 0.0289, 6.9711, -1.5, 5, 6.95, -3.005, 6.505, 6.95, -3.4711, 0.0289, 6.9711, -3.005, 6.505, 6.95, -3.4641, 6.2851, 6.9685, 3.4711, 0.0289, -6.9711, -3.4711, 0.0289, 6.9711, -3.4711, 0.0289, -6.9711, -3.4711, 0.0289, 6.9711, 3.4711, 0.0289, -6.9711, 1.5, 0.0447, 6.9776, 1.5, 0.0447, 6.9776, 3.4711, 0.0289, -6.9711, 3.4711, 0.0289, 6.9711, -3.4711, 0.0289, 6.9711, 1.5, 0.0447, 6.9776, -1.5, 0.0447, 6.9776, -3.4711, 0.0289, 6.9711, -3.4675, 6.2804, -6.9675, -3.4711, 0.0289, -6.9711, -3.4711, 0.0289, 6.9711, -3.4641, 6.2851, 6.9685, -3.4675, 6.2804, -6.9675, 1.5, 5, 6.95, -3.005, 6.505, 6.95, -1.5, 5, 6.95, -3.005, 6.505, 6.95, 1.5, 5, 6.95, 2.7851, 6.9641, 6.9685, 2.7851, 6.9641, 6.9685, 1.5, 5, 6.95, 3.005, 6.505, 6.95, -3.005, 6.505, 6.95, 2.7851, 6.9641, 6.9685, -2.7851, 6.9641, 6.9685, 1.5, 0.0447, 6.9776, 3.005, 6.505, 6.95, 1.5, 5, 6.95, 3.005, 6.505, 6.95, 1.5, 0.0447, 6.9776, 3.4711, 0.0289, 6.9711, 3.005, 6.505, 6.95, 3.4711, 0.0289, 6.9711, 3.4641, 6.2851, 6.9685, -2.7851, 6.9641, 6.9685, -3.4641, 6.2851, 6.9685, -3.005, 6.505, 6.95, 3.4641, 6.2851, 6.9685, 2.7851, 6.9641, 6.9685, 3.005, 6.505, 6.95, -2.7851, 6.9641, 6.9685, -3.4675, 6.2804, -6.9675, -3.4641, 6.2851, 6.9685, -2.7851, 6.9641, 6.9685, -2.785, 6.9547, -6.285, -3.4675, 6.2804, -6.9675, -2.785, 6.9547, -6.285, 3.4675, 6.2804, -6.9675, -3.4675, 6.2804, -6.9675, -2.785, 6.9547, -6.285, 2.785, 6.9547, -6.285, 3.4675, 6.2804, -6.9675, 2.785, 6.9547, -6.285, 3.4641, 6.2851, 6.9685, 3.4675, 6.2804, -6.9675, 2.785, 6.9547, -6.285, 2.7851, 6.9641, 6.9685, 3.4641, 6.2851, 6.9685, 2.785, 6.9547, -6.285, -2.7851, 6.9641, 6.9685, 2.7851, 6.9641, 6.9685, 2.785, 6.9547, -6.285, -2.785, 6.9547, -6.285, -2.7851, 6.9641, 6.9685, -1.5, 0, 7, 1.5, 0.0447, 6.9776, 1.5, 0, 7, -1.5, 0, 7, -1.5, 0.0447, 6.9776, 1.5, 0.0447, 6.9776, -1.5, 5, 7, -1.5, 0.0447, 6.9776, -1.5, 0, 7, -1.5, 5, 7, -1.5, 5, 6.95, -1.5, 0.0447, 6.9776, 1.5, 0, 7, 1.5, 5, 6.95, 1.5, 5, 7, 1.5, 0, 7, 1.5, 0.0447, 6.9776, 1.5, 5, 6.95, 1.5, 5, 7, -1.5, 5, 6.95, -1.5, 5, 7, 1.5, 5, 7, 1.5, 5, 6.95, -1.5, 5, 6.95)
|
||||||
|
|
||||||
|
[node name="CorridorDeadEnd" type="Node3D" node_paths=PackedStringArray("Lights")]
|
||||||
|
script = ExtResource("1_1beyu")
|
||||||
|
Lights = [NodePath("OmniLight3D")]
|
||||||
|
metadata/_custom_type_script = "uid://lmn08s8c5lfo"
|
||||||
|
|
||||||
|
[node name="Cube" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 3.5, 0, 0)
|
||||||
|
mesh = SubResource("ArrayMesh_1beyu")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
metadata/extras = {
|
||||||
|
"poliigon_props": {}
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="Cube"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube/StaticBody3D"]
|
||||||
|
shape = SubResource("ConcavePolygonShape3D_pjmyq")
|
||||||
|
debug_fill = false
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.1751, 5.51291, 0)
|
||||||
|
omni_range = 10.0
|
||||||
|
script = ExtResource("2_nbfqo")
|
||||||
|
metadata/_custom_type_script = "uid://b7ma88dd5c5tb"
|
||||||
64
Maps/Spaceship/Corridors/CorridorFourWay.tscn
Normal file
65
Maps/Spaceship/Corridors/CorridorLTurn.tscn
Normal file
63
Maps/Spaceship/Corridors/CorridorLong.tscn
Normal file
63
Maps/Spaceship/Corridors/CorridorShort.tscn
Normal file
65
Maps/Spaceship/Corridors/CorridorTTurn.tscn
Normal file
129
Maps/Spaceship/Corridors/corridor_dead_end_breakable.tscn
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
extends Node3D
|
||||||
|
class_name BasicMinigame
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://clqxlalxpuvb0
|
||||||
789
Maps/Spaceship/Minigames/Basic Minigames/PanelMinigame.tscn
Normal file
6
Maps/Spaceship/Minigames/RandomMinigameSpawner.tscn
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://cm2rioo553yur"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dnjusl5hyybly" path="res://random_minigame_spawner.gd" id="1_fmdp7"]
|
||||||
|
|
||||||
|
[node name="RandomMinigameSpawner" type="Node"]
|
||||||
|
script = ExtResource("1_fmdp7")
|
||||||
150
Maps/Spaceship/Misc/BasicDoor.tscn
Normal file
20
Maps/Spaceship/Misc/basic_door.gd
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
extends Node3D
|
||||||
|
#class_name BasicDoor
|
||||||
|
|
||||||
|
var open: bool = false
|
||||||
|
@onready var doorSlide1: MeshInstance3D = $DoorFrame/DoorSlide
|
||||||
|
@onready var doorSlide2: MeshInstance3D = $DoorFrame/DoorSlide_001
|
||||||
|
|
||||||
|
const doorClosedPos: Vector3 = Vector3(0.057,1.703,0)
|
||||||
|
const doorOpenPos: Vector3 = Vector3(1.4,1.703,0)
|
||||||
|
|
||||||
|
func _on_area_3d_body_entered(_body: Node3D) -> void:
|
||||||
|
open = true
|
||||||
|
doorSlide1.position = doorOpenPos
|
||||||
|
doorSlide2.position = doorOpenPos * Vector3(-1,1,1)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_area_3d_body_exited(_body: Node3D) -> void:
|
||||||
|
open = false
|
||||||
|
doorSlide1.position = doorClosedPos
|
||||||
|
doorSlide2.position = doorClosedPos * Vector3(-1,1,1)
|
||||||
1
Maps/Spaceship/Misc/basic_door.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dacge6grun0em
|
||||||
77
Maps/Spaceship/Objects/ControllLever.tscn
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
[gd_scene load_steps=8 format=4 uid="uid://c52lwhaynro5j"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://ymaax1x5fos3" path="res://script/interactBox.gd" id="1_6mmea"]
|
||||||
|
[ext_resource type="Script" uid="uid://cjiiw7cybj24b" path="res://script/ButtonLogicImpulse.gd" id="2_k0gfg"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_opyex"]
|
||||||
|
size = Vector3(0.536865, 1.14282, 0.68985)
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xirvw"]
|
||||||
|
|
||||||
|
[sub_resource type="ArrayMesh" id="ArrayMesh_lel7i"]
|
||||||
|
_surfaces = [{
|
||||||
|
"aabb": AABB(-0.187632, -0.315404, -0.206013, 0.370945, 0.461035, 0.430153),
|
||||||
|
"format": 34359742465,
|
||||||
|
"index_count": 552,
|
||||||
|
"index_data": PackedByteArray("AAABAAIAAgABADEAAgAxAAMAAAAFAAEABgAFAAAAAwAxADIAAwAyAAQAMwAxAAEAMQAzABAAAQAJADMABgAHAAUACAAHAAYANAABAAUAAQA0AAkABQAdADQANQAJADQAHQA1ADQAFwAzAAkAMwAXABAAFwAJADYACQAZADYACQA1ABkANwAXADYAGQA3ADYAFgAQABcANwAWABcAFgA4ABAAGQA5ADcAOgA4ABYAEAA4ABUAOgAVADgAEAAVADsAMQAQADsAOwAyADEAGAAWADcAGAA6ABYANwA8ABgANwA5ADwAPQA6ABgAGAA8AD4AGAA+AD0APQATADoAEwAVADoAPwATAD0APwA9AD4AEwBAABUAOwAVAEAAPwASABMAEgBAABMAOwBAABEAEgARAEAAMgA7ABEAEgBBABEAMgARAEEAQgASAD8AEgBCAEEAQQANADIADQBBAEIABAAyAA0ABAANAAwADAANAAoADAAKAAsADQBCAA4ADgAKAA0AQgBDAA4ACwAKAEQACwBEAAgACgAOAEUAQwBFAA4ACABEAAcARgBEAAoACgBFAEYARABGACcAKQBGAEUARgApACcAKQBFAEcARQAqAEcARQBDACoASAApAEcAKgBIAEcAKAAnACkASAAoACkAKAAmACcARAAnAA8ADwAHAEQAJwAmAEkAJwBJAA8ASgAmACgASgBJACYASwAoAEgASwBKACgABwAPACMADwBJACQADwAkACMAJQBJAEoAJQAkAEkATABKAEsATAAlAEoABwAjACEAIQAFAAcAJAAiACMAIgAhACMAJAAlACIABQAhAB0AIgAdACEAJQBNACIAHQAiAE0AJQBMAE0ATgAdAE0ATQBMAE8ASwBPAEwATQBPAE4AHQBOADUASwBQAE8ASABQAEsASABRAFAAKgBRAEgALwBPAFAAIABOAE8AIABPAC8ATgAgABsATgAbADUALQBQAFEALwBQAC0AKgAsAFEALQBRACwAUgAvAC0AKgBTACwAMAAvAFIAMAAgAC8AUgAtAFQAVAAtACwAMABSAFQAQwBTACoAIAAwAFUAIABVABsAVAAsAC4AUwAuACwAMABUAFYAVgBUAC4AUwBXAC4AVgAuAFcAKwBXAFMAQwArAFMAVgBXAFgAKwBYAFcAMABWAFkAVgBYAFkAMABZAFUAFAArAEMAQgAUAEMAFABCAD8APwA+ABQAFAAeACsAHgAUAD4AHgBYACsAWQBYAFoAHgBaAFgAHgA+ABwAWgAeABwAHAA+ADwAWgAcAFsAHAA8AFwAWwAcAFwAXAA8ADkAWgBbAF0AWwBcAF0AWQBaAF4AWgBdAF4AVQBZAF4AXAA5ABoAXQBcABoAGQAaADkAXgBdAB8AXQAaAB8AVQBeAF8AXgAfAF8AGwBVAF8AGQBgABoAYAAfABoAYABfAB8AGwBfAGAANQBgABkANQAbAGAA"),
|
||||||
|
"lods": [0.047312, PackedByteArray("AAABAAIAAgABAAMAAwABAAQAAAAFAAEABgAFAAAABgAHAAUACAAHAAYACQABAAUACAAKAAcACwAKAAgADAAKAAsADAANAAoABAANAAwADgAKAA0ADQAEAA4ADwAHAAoAEAAEAAEAAQAJABAABAAQABEAEgAEABEAEgAOAAQAEgARABMAEAATABEADgASABQAFAASABMAEAAVABMAFgAVABAAEwAVABYAFgAQABcAFwAQAAkAEwAWABgACQAZABcAGgAWABcAGAAWABoAGQAaABcAGgATABgACQAbABkAGQAbABoAHAATABoAHQAbAAkAHgATABwAHgAUABMAHwAcABoAGwAfABoAHgAcAB8ABQAdAAkAHQAgABsAIAAfABsABQAhAB0AIQAFAAcAIgAdACEAHQAiACAABwAjACEAIgAhACMABwAPACMAJAAiACMADwAkACMAJQAgACIAJAAlACIADwAmACQAJQAkACYAJwAmAA8ACgAnAA8ACgAOACcAKAAmACcAJQAmACgAKQAnAA4AKAAnACkADgAqACkAKgAoACkADgArACoADgAUACsAKgAsACgAKAAsACUAKgArACwAFAAeACsALQAlACwAKwAuACwALgAtACwAKwAeAC4ALwAlAC0ALwAtAC4AIAAlAC8AMAAuAB4AMAAvAC4AMAAgAC8AMAAeAB8AIAAwAB8A")],
|
||||||
|
"primitive": 3,
|
||||||
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
|
"vertex_count": 97,
|
||||||
|
"vertex_data": PackedByteArray("XLY7PkQngr5SXX29KBv/PcSpV776xcy9rmwVPrrAhr6/g9u9bAG6PdrVkb5kiOa9GP5NPbTonL4eSJm9RNclPt12Tr7I4V+9FnA5Pje7hr6wR027/JAjPsKeV754OIU75e4PPhHOkb4TrA09caGKPTA0Z7wAnGW9qUeDPVz3gb5THhU92wWvPTLjnL6SRe88++REPad8ob7HDoS8KtHaPNGQhr5mLxK8WPMzvV+mjb2EvXM8fCErPX5nKr3sAos9ZLIYPah8v7ySCKG9ckIyvQiBdb0EJVK9AAb2vYDmV7zAJ069SCwavoB+WLzQuw++8HccvqCiMj0AbRK9IFdlvYCRcDyQbBW+gKFyPMBhfD3g/0i+YE05PeCHfD0gnNm9cPGkvSBVQT3gMjO+ANX6PGCmAT5gP8i9QMudvOD7FD4QPj2+oLwePfgNFT4AlFe82A89vgC3kD3Q+QO+LtyzPWDPZrxIsWU7kOYdvgDKkD3AHx+9IC4XvUCnFD4QFRy+EN2HPaAWFT5AM4w9LCfSPbaQFL2w4b48EKTNPeDMfD3AXmk9V2aePVAYv7zacyM9MNrWPQB/LT0weAQ+ePsFPkDzfD2wiRY+QEeKvIDwULzgpC4+gIJiu9xOdb38r4k94GsNvQA5VrzAzU8+oAiFvQDTVrygN+c9gF/MvQDlMj3g/Pc9MKcBvkDbkD3AKy89IH2MvaD/kD3Qj1s+AMpmPOCf3T2Q7T4+oGZwvZCvuD2wEj0+wC/GPSAgFT6QSyI+IE4xPVjAFD7gxK09OUOOPQbUbb6fyte9ZAPtPN78gb5Yioq9ZyCKPcC8FL0WYaW9yj6fPdABZ7wWQde84PppPaiuAT4Al568AG08PQC+tT2A3dK9AAk3PDCotT0Q9VK+AKegO+ABLT3ggiq+AAKKu3ibAT4Apk2+MAKLvYBCxjzQXSy+CF0CvLKlKr2CW6K9sHLEvVA5rj3Q4y2++GEwvgDNujugcBO+mCJAviB3Mj2QIQ6+ULcMvgApvDtAqSe9kGHvvYDkUrwwVgC+BCJSvUhquL0ERia9IC5dvaysjb36MHS82FMBvuDDMj2Axi49mB/0PXTEbb6eJys9prgKvRGgjb3W6jY9+CiEvERUuL2A9oE9QN6svQA8vjvAXu09gBFLvQCZvzvQNWA+YEg0PYCFcjyQjhk+wEBFPYBkxzywKzM+gJMsPWDuQT2gc0A+MA4JPvD0tT1gsSA+4MbKPTDftT3Aq1w9oEWrPfi2AT4A6HE9IJvyPdjBAT5wACY+ACLbPPCFrj2gwkU+AAqFvaAQMz3ghGU+sDiBPYjGFD4A5hI+wM/KvZDskD2Au/49AFQQO1Ae8T1Q/Cc+AIZWPOC2FD4A9JK7gAgpvIAW8T2QDgI+8MSgvTCjuD0gDwE+QJvevVCQuD2AVBY9gMpDvQD/8D0A9oM8yDgOvnB9uD3Ak1e9iIEivhBxuD3A0OO9YMnQvWBX3T0AnCC+EE3IvdDf8D3A/ga+cKmuvaDn8D0gIsK9QBaMvHitFD5AI8C9gP02PHAFFT5AGMK9")
|
||||||
|
}]
|
||||||
|
blend_shape_mode = 0
|
||||||
|
|
||||||
|
[sub_resource type="ArrayMesh" id="ArrayMesh_xqp54"]
|
||||||
|
resource_name = "Controll_Cube_007"
|
||||||
|
_surfaces = [{
|
||||||
|
"aabb": AABB(-0.187632, -0.315404, -0.206013, 0.370945, 0.461035, 0.430153),
|
||||||
|
"attribute_data": PackedByteArray("LBMUP0CXwzwdERQ/ABy8PB0RFD8AHLw8HREUPwAcvDz5ZBE/IEe8PNW4Dj9Acrw8LBMUP2CXwzw6FRQ/YBLLPDoVFD+AEss8/hEUP+BOvzw7KxM/oCq8PDsrEz+gKrw8f5MPP2BkvDx4uQ4/gPzDPHi5Dj+A/MM8iv4TP0AdvDw+7xM/IB68PD3vEz9AHrw8HBEUP0AcvDwsExQ/YJfDPFkUFD+A38c8PCsTP4AqvDy02g4/YHC8PNS4Dj9gcrw8ORUUP4ASyzw6FRQ/gBLLPDkVFD9gEss8GjoTPwAlyzwaOhM/ACXLPEnzEz9AFcs8SPMTP2AVyzzdLhM/ACbLPKpnET+ATMs83i4TP+AlyzxI8xM/YBXLPHagDz8gc8s8qmcRP4BMyzx4uQ4/YPzDPAzcDj/Ag8s8SfMTP0AVyzxI8xM/YBXLPA3cDj+gg8s8eKAPP+Byyzx2oA8/AHPLPA3cDj+gg8s8GroOP8CGyzy3zA4/IIXLPKpnET+ATMs8OhUUP2ASyzwaug4/oIbLPHi5Dj+A/MM8eLkOP4D8wzwaug4/gIbLPAzcDj/Ag8s8eLkOP2D8wzzVuA4/QHK8PH+TDz9gZLw81bgOP0ByvDy12g4/AHC8PLTaDj9gcLw8tdoOPwBwvDz5ZBE/IEe8PD7vEz8gHrw8+mQRPwBHvDw97xM/QB68PLXaDj8AcLw8tNoOP2BwvDwdERQ/ABy8PCwTFD9Al8M8OhUUP4ASyzw6FRQ/gBLLPCwTFD9Al8M8HREUP+AbvDwsExQ/IJfDPBo6Ez8AJcs83S4TPwAmyzw5FRQ/oBLLPDoVFD9gEss8OhUUP0ASyzw5FRQ/YBLLPB4RFD/gG7w8HhEUP+AbvDweERQ/wBu8PBwRFD8gHLw8OysTP6AqvDyrZxE/YEzLPBq6Dj/Ahss8qmcRP4BMyzz6ZBE/QEe8PB0RFD/gG7w8+WQRPyBHvDzUuA4/QHK8PPlkET8gR7w81bgOPyByvDzVuA4/QHK8PNS4Dj9Acrw81bgOPyByvDwbuQ4/oKu/PH+TDz9gZLw8t54PP8BjvDzVuA4/QHK8PNS4Dj+Acrw81bgOPyByvDzUuA4/YHK8PHe5Dj+g/MM8GroOP8CGyzwaug4/oIbLPBq6Dj+ghss8GroOP8CGyzwaug4/oIbLPNS5Dj+ATcg8GroOP8CGyzwaug4/4IbLPHagDz8Ac8s8eKAPP+ByyzwsExQ/YJfDPDorEz/AKrw8HhEUP+AbvDw97xM/QB68PA0tEz+AqMM8ORUUP4ASyzz5ZBE/IEe8PPlkET9AR7w8+WQRP0BHvDy2ng8/wGO8PLeeDz8AZLw8UmYRP+DJwzzeLhM/ACbLPKpnET+ATMs8mJ8PP0DrwzyqZxE/YEzLPAzcDj/Ag8s8qmcRP4BMyzwaug4/wIbLPHigDz/gcss8q2cRP4BMyzwaug4/oIbLPKtnET9ATMs8OhUUP2ASyzw6FRQ/QBLLPKlnET+ATMs8GroOP6CGyzyrZxE/QEzLPA3cDj+gg8s8qmcRP2BMyzx2oA8/AHPLPEnzEz9AFcs8qmcRP4BMyzw+7xM/IB68PB4RFD/AG7w8+WQRPyBHvDzUuA4/gHK8PNW4Dj8gcrw8+WQRP0BHvDweERQ/4Bu8PPlkET9AR7w8+WQRPyBHvDw7KxM/oCq8PDsrEz+gKrw8+WQRPyBHvDy3ng8/wGO8PA=="),
|
||||||
|
"format": 34359742487,
|
||||||
|
"index_count": 552,
|
||||||
|
"index_data": PackedByteArray("AAABAEMAAAAGAAEABwAGAEQABwBFAAYARgAGAEUABgBGABQARwABAAYABgAUAEcAAQBHAAkAAQAJAEgAFABJAEcASQAJAEcAGgAUAEYAGgBGAEoASwAaAEoASwAdABoAHQBMABoAFAAaAEwAHQBNAEwATABNAE4ATwAUAEwATABOAE8AFABPAEkAGABPAE4AGABOAB4ATwAYABMATwATAEkASQATAFAASQBQABIAEgBQABEAEgARAFEACQBJABIAEgBRAFIACQASAFMAEgBSAFMADwAJAFMAUgAPAFMADwBIAAkAUgAQAA8ASAAPAAoAEAAKAA8AEABUAAoALwAIADAALwBVAAgACAAcABkACAAgABwAIAAIAFUAVQArACAAVQBWACsAVgBVAC0AMQAtAFUAMQBVAFcAAgBYAAQAAgADAFgAWQBYAAMAWABZAAsAWAALAFoAWgBbAFgAXABYAFsAXABbAAUAWwBaAAwAWwAMAF0AXgANAA4AXgBfAA0AYAANAF8ADQBgAGEANwBhAGAANwBgAGIANwBiAGMANwBjADoAZAA3ADoAYQA3AGQAZAA6AGUAZABlAGYAOQBhAGQAZABmADkAZwA5AGYAZwBmADsAOQBnADYAOQA2AGgAYQA5AGgAaAA2AGkAYQBoADMADQBhADMAaABpADQANABpADUANAA1AGoANABqAGsAMwBsAA0AMgANAGwAMgBsAG0AbAAzAG4AaABuADMAbgBoADQAbABuAG8ANABrAHAAbgA0AHAAawAuAHAALgBuAHAALgBvAG4AawAsAC4AbwAuAHEALABxAC4ALAByAHEAcwB0AHUAdQB0ABUAdQAVAHYAcwB3AHQAeAB3AHMAeQAVAHQAdwB5AHQAegB2ABUAeQB6ABUAegB7AHYAfAB7AHoAfAAWAHsAfQB8AHoAfQAWAHwAfQB6AHkAfQAXABYAdwB+AHkAfgB9AHkAeAAhAHcAIQB+AHcAIQB4ACIAIQAiAH8AfwAiAIAAFwB9AIEAfgCBAH0AFwCBACUAfwCAAIIAIQB/AIIAggCAAIMAIQCEAH4AIQCCAIQAhACBAH4AggCDACMAhACCACMAhQAjAIMAhACGAIEAhAAjAIYAhQCGACMAJQCBAIYAJQCGAIUAhwApAIgAhwCJACkAigCJAIcAigAnAIkAhwCLAIoAiACMAIcAhwCMAIsAKACLAIwAiACNAIwAKACMACQAJACMAI0AJACNACYAjgAqAI8AjgCQACoAkQAqAJAAkgCQAI4AkQCQAJMAkgAfAJAAkwCQAB8AkwAfABsAPwCUAJUAPwCWAJQAlwCWAD8AlwBBAJYAPwCYAJcAlQCZAD8APwCZAJgAQgCYAJkAlQCaAJkAQgCZAJsAmwCZAJoAmwCaAEAAnACdAD4AnAA9AJ0AngCdAD0APAA9AJwAngA9AJ8APACgAD0AnwA9AKAAnwCgADgA"),
|
||||||
|
"lods": [0.047312, PackedByteArray("AAABAAIAAgADAAQABAADAAUAAAAGAAEABwAGAAAABwAIAAYACQABAAYAAQAJAAoACwAFAAMABQALAAwABQANAA4ADwAKAAkAEAAKAA8AEQAQAA8ACQASAA8AEgARAA8ACQATABIAEgATABEAFAATAAkABgAUAAkAEwAVABEAFQAWABEAFwAWABUAGAAVABMAFAAYABMABgAZABQAGQAGAAgAGgAUABkAFAAaABgAGgAZABsACAAcABkAHQAYABoAGAAdAB4AHwAdABoAHwAaABsACAAgABwAIAAfABsAGAAhABUAIQAYACIAIQAXABUAIQAiACMAIQAjABcAIgAkACMAJQAXACMAJQAjACYAIwAkACYAJAAnACYAKAAnACQAKQAmACcAJwAqACkAJwAfACoAIAAqAB8AKwAqACAALAAqACsALQArACAAIAAIAC0ALAArAC4ALwAIADAALwAtAAgAMQAtAC8AMgAtADEAMgANAC0ALQAzACsAMwAtAA0ALgArADMADQAFADMANAAsAC4AMwA0AC4ANAA1ACwANAA2ADUAMwA2ADQANwAzAAUANwAFADgAMwA5ADYAMwA3ADkAOQAXADYANwA4ADoAOQA3ADoAFwA5ADoAFwA6ADsACwA8ADgACwA9ADwAPAA9AD4APgA9AAsAPwA+AEAAQQA+AD8AQABBAD8AQgBBAEAA")],
|
||||||
|
"material": SubResource("StandardMaterial3D_xirvw"),
|
||||||
|
"primitive": 3,
|
||||||
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
|
"vertex_count": 161,
|
||||||
|
"vertex_data": PackedByteArray("XLY7PkQngr5SXX29KBv/PcSpV776xcy9rmwVPrrAhr6/g9u9KBv/PcSpV776xcy9bAG6PdrVkb5kiOa9GP5NPbTonL4eSJm9RNclPt12Tr7I4V+9FnA5Pje7hr6wR027/JAjPsKeV754OIU7caGKPTA0Z7wAnGW9ZLIYPah8v7ySCKG9ZLIYPah8v7ySCKG9ckIyvQiBdb0EJVK9KtHaPNGQhr5mLxK8++REPad8ob7HDoS8YE05PeCHfD0gnNm9gKFyPMBhfD3g/0i+QMudvOD7FD4QPj2+ANX6PGCmAT5gP8i9oLwePfgNFT4AlFe8LtyzPWDPZrxIsWU7IC4XvUCnFD4QFRy+2A89vgC3kD3Q+QO+kOYdvgDKkD3AHx+9EN2HPaAWFT5AM4w9LCfSPbaQFL2w4b48EKTNPeDMfD3AXmk9V2aePVAYv7zacyM9V2aePVAYv7zacyM9ePsFPkDzfD2wiRY+wC/GPSAgFT6QSyI+MNrWPQB/LT0weAQ+fCErPX5nKr3sAos9IE4xPVjAFD7gxK09wC/GPSAgFT6QSyI+oGZwvZCvuD2wEj0+AMpmPOCf3T2Q7T4+MKcBvkDbkD3AKy89IH2MvaD/kD3Qj1s+ePsFPkDzfD2wiRY+wC/GPSAgFT6QSyI+4GsNvQA5VrzAzU8+QEeKvIDwULzgpC4+gIJiu9xOdb38r4k94GsNvQA5VrzAzU8+qUeDPVz3gb5THhU9oAiFvQDTVrygN+c95e4PPhHOkb4TrA09FnA5Pje7hr6wR0272wWvPTLjnL6SRe88++REPad8ob7HDoS8WPMzvV+mjb2EvXM8gF/MvQDlMj3g/Pc9IH2MvaD/kD3Qj1s+MKcBvkDbkD3AKy89AAb2vYDmV7zAJ069ckIyvQiBdb0EJVK98HccvqCiMj0AbRK9SCwavoB+WLzQuw++2A89vgC3kD3Q+QO+SCwavoB+WLzQuw++IFdlvYCRcDyQbBW+gKFyPMBhfD3g/0i+cPGkvSBVQT3gMjO+QMudvOD7FD4QPj2+SCwavoB+WLzQuw++2A89vgC3kD3Q+QO+rmwVPrrAhr6/g9u9XLY7PkQngr5SXX29/JAjPsKeV754OIU7LCfSPbaQFL2w4b48yj6fPdABZ7wWQde8ZyCKPcC8FL0WYaW94PppPaiuAT4Al568V2aePVAYv7zacyM9MNrWPQB/LT0weAQ+4MbKPTDftT3Aq1w9MA4JPvD0tT1gsSA+IJvyPdjBAT5wACY+oEWrPfi2AT4A6HE9gP02PHAFFT5AGMK9AAKKu3ibAT4Apk2+AAk3PDCotT0Q9VK+AG08PQC+tT2A3dK9AKegO+ABLT3ggiq+mB/0PXTEbb6eJys9+CiEvERUuL2A9oE95e4PPhHOkb4TrA09OUOOPQbUbb6fyte9ZyCKPcC8FL0WYaW9CF0CvLKlKr2CW6K9ZAPtPN78gb5Yioq9bAG6PdrVkb5kiOa9BCJSvUhquL0ERia9GP5NPbTonL4eSJm9ZAPtPN78gb5Yioq9BCJSvUhquL0ERia9IC5dvaysjb36MHS8ckIyvQiBdb0EJVK9kGHvvYDkUrwwVgC+ULcMvgApvDtAqSe9+GEwvgDNujugcBO+mCJAviB3Mj2QIQ6+kOYdvgDKkD3AHx+92FMBvuDDMj2Axi49wM/KvZDskD2Au/49AAqFvaAQMz3ghGU+gBFLvQCZvzvQNWA+qUeDPVz3gb5THhU92wWvPTLjnL6SRe88prgKvRGgjb3W6jY9+CiEvERUuL2A9oE9QN6svQA8vjvAXu09gIJiu9xOdb38r4k9QEeKvIDwULzgpC4+oLwePfgNFT4AlFe8QBaMvHitFD5AI8C9gP02PHAFFT5AGMK9QMudvOD7FD4QPj2+AIZWPOC2FD4A9JK7EN2HPaAWFT5AM4w9cKmuvaDn8D0gIsK9EE3IvdDf8D3A/ga+YMnQvWBX3T0AnCC+iIEivhBxuD3A0OO9yDgOvnB9uD3Ak1e9gMpDvQD/8D0A9oM8sDiBPYjGFD4A5hI+AMpmPOCf3T2Q7T4+QJvevVCQuD2AVBY9AFQQO1Ae8T1Q/Cc+IH2MvaD/kD3Qj1s+gAgpvIAW8T2QDgI+wM/KvZDskD2Au/498MSgvTCjuD0gDwE+gJMsPWDuQT2gc0A+gBFLvQCZvzvQNWA+wEBFPYBkxzywKzM+MA4JPvD0tT1gsSA+IJvyPdjBAT5wACY+ACLbPPCFrj2gwkU+AAqFvaAQMz3ghGU+wEBFPYBkxzywKzM+4GsNvQA5VrzAzU8+YEg0PYCFcjyQjhk+gIJiu9xOdb38r4k9ePsFPkDzfD2wiRY+fCErPX5nKr3sAos9gKFyPMBhfD3g/0i+AAk3PDCotT0Q9VK+MAKLvYBCxjzQXSy++GEwvgDNujugcBO+mCJAviB3Mj2QIQ6+sHLEvVA5rj3Q4y2+AAKKu3ibAT4Apk2+YMnQvWBX3T0AnCC+MAKLvYBCxjzQXSy+AKegO+ABLT3ggiq+ZLIYPah8v7ySCKG9CF0CvLKlKr2CW6K9kGHvvYDkUrwwVgC+SOQNzAqt2JC/42bHmawIkJ/v7PuFXpDpuvDO/W2oi3Gf7+z7hV6Q6YkMMDQMrSZvMuAcuGKsmZDg1buhCq3YkJezgYu2p2uP5e+FuA2Y+Ixv9AVAW7TJRNfxsv8vX1rqQQy3MVOyh23sOBtf0F0k6bwh4FX///+/4fTER02m6yxF9jtVnKBXRMfGHMsXuUFWJNZSvtcvJRXHxhzLk8jAmgbtM6CMpWGHH14c5OwNrXETSeTJTxH6dO5JrrfVAhxvx8Ycy7yzj64Ds4CK////PzvyuGhdrNQD1KlpSQqSeCcDs4CKu6cvj9/1Y1uxAeDxx8Ycy8sNAxSqp0dA99xvgHGg2X4+qJOOvmvu5ILYF8hRdEDcEaCvtyJce8NLCf8Ss42MnyxGnRLuSa63g8U+5LWNjJ/RTUoMuKIvZPaqO4KzjYyfoT8IGLiiL2S0ZL0hFaQlPgjeuIG6gKFvrq46kcNSQEBFC66LVH6Ib5RephbxWx9D3hDtbS+0iIw/reOQL7SIjGRebRbte59vdl50Fg1MSWQKrSZvXT7VVzO2umvZL1tpe3EL6kEhxH4/iuYVQSHEfqyF3nYbRrA2yiUS6Zq7AQUwIZznWjLBaWmeg2DUTvs9RJ/NQkEhxH4Smu7L4rlcErWWE1E8vVwOkJcMVOK5XBL9q3VLuxB1FqFT2ezQG0bdS2N/3Y0fsw3fPlbn0BtG3XR9i+tI5A3M////v+DVu6EKrdiQn9tupIeskpDC57uaS6i/df7nR7IaZk4RSu2lwFNnMg8P2rG82LR/kgftxnBhhWwkt97MUJEJYYr079Sr4YIaG63rhq+DnRZWsdS1wMKoQ1DP1mrABZ4mPcfGHMtWqvlIsdS1wG8uLRat64avHW/lEQ3wv6zCd8oRYuKmQP///79koG9/n16eFrqAoW+urjqR7Xufby6t7ZCkAPgf36z7btfxsv8vX1rqOwGdH8muCm5lDO0yPK6ubokMMDRsXprpQQy3MdCyam28IeBVC60mb4ElWlpFXpjoWC9VT/tTuuSEOLxOXVG14nM/fDPWMiLj4FgnJfQXpuT4QhRRz64gqbZAsVT8rI+nhy+saw+f/bVBIcR+y5HsXSM0gWXwodpvQSHEfuGSXCaHL6xr3Z+IwLZAsVQbCbGMEUjFYrCt4m4NTElkCq0mbxZLb1WrVzHh0E3bWf///z+oQ1ZRFjc2GWphNEV1z2KNW2aILxvkC4eFfhH+vP5pzr5r7uTVxEPFhX4R/ofbd8ANXCPovBFDc75r7uRZ7bHVhX4R/lPxosBMXvHSRADZD+tSkdgdl3zIiUW02TEd+37GTmHM3ZdAxn1TecTMoEjATF7x0h7gP91RbrbZZKCquaNtHMZ1IPUMfVN5xFTS8d9PZj7MNaJYuHlbxL6LDaoSTF7x0jAA7g/uSa63nbWW1H1TecSIt/DMraFscMyz3IyEoUFy////P7iiL2T2qjuChKFBck+zhI2vl6WO7qeclXWWu5AzUkgUsZekjgBddQ1JpnY6bx+RhkmmdjpJllsvvaXRQAEnkIKRoAdET9JQgUmmdjp2Ha+BPKW+RmwvGIKNH7MNj5y0ZaUOsBdrVYvsjR+zDd8+VuelDrAXMqn7ab4Net4lcbTtkg9R3jdoQee+DXrejWFH5NAbRt1LY3/d4rlcEv2rdUsrvikRSKyRTVbFKA////+/psBFCv///7+AupkNMpcvUw==")
|
||||||
|
}]
|
||||||
|
blend_shape_mode = 0
|
||||||
|
shadow_mesh = SubResource("ArrayMesh_lel7i")
|
||||||
|
|
||||||
|
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_6mmea"]
|
||||||
|
properties/0/path = NodePath(".:rotation")
|
||||||
|
properties/0/spawn = true
|
||||||
|
properties/0/replication_mode = 1
|
||||||
|
|
||||||
|
[node name="LeverPivot" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="ButtonLogicImpulseLever" type="Timer" parent="." node_paths=PackedStringArray("interactBox")]
|
||||||
|
script = ExtResource("2_k0gfg")
|
||||||
|
interactBox = NodePath("../InteractBoxLever")
|
||||||
|
metadata/_custom_type_script = "uid://cjiiw7cybj24b"
|
||||||
|
|
||||||
|
[node name="InteractBoxLever" type="Area3D" parent="." node_paths=PackedStringArray("object")]
|
||||||
|
transform = Transform3D(0.951594, 0, -0.307357, 0, 1, 0, 0.307357, 0, 0.951595, -0.0501665, 0.260706, -0.0239434)
|
||||||
|
monitoring = false
|
||||||
|
script = ExtResource("1_6mmea")
|
||||||
|
object = NodePath("../ButtonLogicImpulseLever")
|
||||||
|
type = "minigame"
|
||||||
|
metadata/_custom_type_script = "uid://ymaax1x5fos3"
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractBoxLever"]
|
||||||
|
transform = Transform3D(0.954915, 0, 0.296857, 0, 1, 0, -0.296857, 0, 0.954917, 0.0749265, 0.0714111, 0.00196848)
|
||||||
|
shape = SubResource("BoxShape3D_opyex")
|
||||||
|
debug_color = Color(0.685703, 0.292897, 1, 0.42)
|
||||||
|
|
||||||
|
[node name="Lever" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(0.951594, 0, -0.307357, 0, 1, 0, 0.307357, 0, 0.951595, -0.0501665, 0.260706, -0.0239434)
|
||||||
|
mesh = SubResource("ArrayMesh_xqp54")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
metadata/extras = {
|
||||||
|
"poliigon_props": {}
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||||
|
replication_config = SubResource("SceneReplicationConfig_6mmea")
|
||||||
9
Maps/Spaceship/Objects/FlickerOmniLightNoise.tres
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="NoiseTexture2D" load_steps=2 format=3 uid="uid://bw51s1b3tsawp"]
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_qcrta"]
|
||||||
|
noise_type = 5
|
||||||
|
seed = 69
|
||||||
|
frequency = 0.1
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
noise = SubResource("FastNoiseLite_qcrta")
|
||||||