Compare commits
5 Commits
bed068eafc
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d931a3b46 | |||
| d128501f7c | |||
| 984567cf96 | |||
| 52fe2f58d4 | |||
| 1ae69f8552 |
@@ -19,5 +19,7 @@ class_name PawnBaseData extends Resource
|
||||
var model
|
||||
@export var portrait : Texture2D
|
||||
@export var nameplate : Texture2D
|
||||
@export var name_audio : AudioStream
|
||||
@export var pawn_body : PackedScene
|
||||
|
||||
@export var starting_hacks : Array[HackSet] = [null, null, null]
|
||||
|
||||
@@ -1,30 +1,32 @@
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://yosnkcj4ci4v"]
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://yosnkcj4ci4v"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://3dj2p3xerc45" path="res://visuals/images/temp_portraits/tg-abdoll-relin.jpg" id="1_4g7al"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_4g7al"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_8dqhi"]
|
||||
[ext_resource type="AudioStream" uid="uid://dhlg3pk3tbirp" path="res://external/sample audio/a.wav" id="1_mtelv"]
|
||||
[ext_resource type="PackedScene" uid="uid://c3s6gqy0s5kus" path="res://templates/pawns/a.tscn" id="2_mtelv"]
|
||||
[ext_resource type="Texture2D" uid="uid://13pdg1vs81as" path="res://external/test portraits/a.png" id="3_qt3l7"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="4_3x7pt"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="5_lwcbw"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_4g7al"]
|
||||
script = ExtResource("2_4g7al")
|
||||
script = ExtResource("5_lwcbw")
|
||||
type = 1
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_8dqhi"]
|
||||
script = ExtResource("2_4g7al")
|
||||
script = ExtResource("5_lwcbw")
|
||||
type = 5
|
||||
qty = 6
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_32lt6"]
|
||||
script = ExtResource("2_4g7al")
|
||||
script = ExtResource("5_lwcbw")
|
||||
type = 2
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_8dqhi")
|
||||
name = "Abdoll Relin"
|
||||
script = ExtResource("4_3x7pt")
|
||||
name = "A"
|
||||
move_speed = 3.0
|
||||
life = 75
|
||||
max_life = 75
|
||||
@@ -35,6 +37,8 @@ range_damage = 12
|
||||
range_time = 1.0
|
||||
melee_time = 1.25
|
||||
reload_time = 1.75
|
||||
portrait = ExtResource("1_4g7al")
|
||||
starting_hacks = Array[ExtResource("2_4g7al")]([SubResource("Resource_4g7al"), SubResource("Resource_8dqhi"), SubResource("Resource_32lt6")])
|
||||
portrait = ExtResource("3_qt3l7")
|
||||
name_audio = ExtResource("1_mtelv")
|
||||
pawn_body = ExtResource("2_mtelv")
|
||||
starting_hacks = Array[ExtResource("5_lwcbw")]([SubResource("Resource_4g7al"), SubResource("Resource_8dqhi"), SubResource("Resource_32lt6")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
@@ -1,29 +1,31 @@
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://df4gqi1us2dwu"]
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://df4gqi1us2dwu"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://2qoouiv1cf0i" path="res://visuals/images/temp_portraits/tg-john-bishous.jpg" id="1_sb8f5"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_sb8f5"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_tu5w7"]
|
||||
[ext_resource type="AudioStream" uid="uid://7dsv6kcptvar" path="res://external/sample audio/b.wav" id="1_vp6uu"]
|
||||
[ext_resource type="PackedScene" uid="uid://bum67b50tn8ye" path="res://templates/pawns/b.tscn" id="2_vp6uu"]
|
||||
[ext_resource type="Texture2D" uid="uid://ca6iihdssrh14" path="res://external/test portraits/b.png" id="3_qojdv"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="4_0gp76"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="5_ic2r4"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_sb8f5"]
|
||||
script = ExtResource("2_sb8f5")
|
||||
script = ExtResource("5_ic2r4")
|
||||
type = 4
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_tu5w7"]
|
||||
script = ExtResource("2_sb8f5")
|
||||
script = ExtResource("5_ic2r4")
|
||||
qty = 6
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_idp5c"]
|
||||
script = ExtResource("2_sb8f5")
|
||||
script = ExtResource("5_ic2r4")
|
||||
type = 2
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_tu5w7")
|
||||
name = "John Bishous"
|
||||
script = ExtResource("4_0gp76")
|
||||
name = "B"
|
||||
move_speed = 2.5
|
||||
life = 125
|
||||
max_life = 125
|
||||
@@ -34,6 +36,8 @@ range_damage = 20
|
||||
range_time = 0.75
|
||||
melee_time = 1.0
|
||||
reload_time = 1.75
|
||||
portrait = ExtResource("1_sb8f5")
|
||||
starting_hacks = Array[ExtResource("2_sb8f5")]([SubResource("Resource_sb8f5"), SubResource("Resource_tu5w7"), SubResource("Resource_idp5c")])
|
||||
portrait = ExtResource("3_qojdv")
|
||||
name_audio = ExtResource("1_vp6uu")
|
||||
pawn_body = ExtResource("2_vp6uu")
|
||||
starting_hacks = Array[ExtResource("5_ic2r4")]([SubResource("Resource_sb8f5"), SubResource("Resource_tu5w7"), SubResource("Resource_idp5c")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
@@ -1,30 +1,32 @@
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://dnty6gi4s2vdl"]
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://dnty6gi4s2vdl"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://db0n6kjwucthf" path="res://visuals/images/temp_portraits/tg-lou-riche.jpg" id="1_onotk"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_7kyxn"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_onotk"]
|
||||
[ext_resource type="AudioStream" uid="uid://dr3jq3tnvtwu" path="res://external/sample audio/c.wav" id="1_ag1od"]
|
||||
[ext_resource type="PackedScene" uid="uid://c6hojd4o764oc" path="res://templates/pawns/c.tscn" id="2_ag1od"]
|
||||
[ext_resource type="Texture2D" uid="uid://dm7fo7tt00p1" path="res://external/test portraits/c.png" id="3_1yr5w"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="4_nmvyh"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="5_2i1hp"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_onotk"]
|
||||
script = ExtResource("2_onotk")
|
||||
script = ExtResource("5_2i1hp")
|
||||
type = 1
|
||||
qty = 5
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_7kyxn"]
|
||||
script = ExtResource("2_onotk")
|
||||
script = ExtResource("5_2i1hp")
|
||||
type = 2
|
||||
qty = 1
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_6f6nq"]
|
||||
script = ExtResource("2_onotk")
|
||||
script = ExtResource("5_2i1hp")
|
||||
type = 3
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_7kyxn")
|
||||
name = "Lou Riche"
|
||||
script = ExtResource("4_nmvyh")
|
||||
name = "C"
|
||||
move_speed = 3.0
|
||||
life = 100
|
||||
ammo = 6
|
||||
@@ -33,6 +35,8 @@ melee_damage = 12
|
||||
range_damage = 4
|
||||
range_time = 0.4
|
||||
melee_time = 1.25
|
||||
portrait = ExtResource("1_onotk")
|
||||
starting_hacks = Array[ExtResource("2_onotk")]([SubResource("Resource_onotk"), SubResource("Resource_7kyxn"), SubResource("Resource_6f6nq")])
|
||||
portrait = ExtResource("3_1yr5w")
|
||||
name_audio = ExtResource("1_ag1od")
|
||||
pawn_body = ExtResource("2_ag1od")
|
||||
starting_hacks = Array[ExtResource("5_2i1hp")]([SubResource("Resource_onotk"), SubResource("Resource_7kyxn"), SubResource("Resource_6f6nq")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
@@ -1,33 +1,34 @@
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://bpb2nok3rqm1g"]
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://bpb2nok3rqm1g"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ci86bksme5114" path="res://visuals/images/temp_portraits/tg-tenrou-ugetsu.jpg" id="1_fm4bf"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_0fl5x"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="3_fm4bf"]
|
||||
[ext_resource type="AudioStream" uid="uid://dsikjobcle18a" path="res://external/sample audio/d.wav" id="1_l2iwo"]
|
||||
[ext_resource type="PackedScene" uid="uid://bqg51qfb0cj8y" path="res://templates/pawns/d.tscn" id="2_l2iwo"]
|
||||
[ext_resource type="Texture2D" uid="uid://b2ovogspuupqa" path="res://external/test portraits/d.png" id="3_b6a3y"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="4_8vcih"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="5_v5xcc"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_0fl5x"]
|
||||
script = ExtResource("3_fm4bf")
|
||||
script = ExtResource("5_v5xcc")
|
||||
type = 1
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_vnwdb"]
|
||||
script = ExtResource("3_fm4bf")
|
||||
script = ExtResource("5_v5xcc")
|
||||
type = 5
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_4mj1t"]
|
||||
script = ExtResource("3_fm4bf")
|
||||
script = ExtResource("5_v5xcc")
|
||||
type = 3
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_0fl5x")
|
||||
name = "Tenrou Ugetsu"
|
||||
script = ExtResource("4_8vcih")
|
||||
name = "D"
|
||||
move_speed = 3.5
|
||||
life = 100
|
||||
max_life = null
|
||||
ammo = 7
|
||||
max_ammo = 7
|
||||
melee_damage = 15
|
||||
@@ -35,6 +36,8 @@ range_damage = 3
|
||||
range_time = 0.3
|
||||
melee_time = 1.25
|
||||
reload_time = 0.6
|
||||
portrait = ExtResource("1_fm4bf")
|
||||
starting_hacks = Array[ExtResource("3_fm4bf")]([SubResource("Resource_0fl5x"), SubResource("Resource_vnwdb"), SubResource("Resource_4mj1t")])
|
||||
portrait = ExtResource("3_b6a3y")
|
||||
name_audio = ExtResource("1_l2iwo")
|
||||
pawn_body = ExtResource("2_l2iwo")
|
||||
starting_hacks = Array[ExtResource("5_v5xcc")]([SubResource("Resource_0fl5x"), SubResource("Resource_vnwdb"), SubResource("Resource_4mj1t")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
@@ -1,30 +1,32 @@
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://casciqabe0wgo"]
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://casciqabe0wgo"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bsug1ur2gifkh" path="res://visuals/images/temp_portraits/tg-tico.jpg" id="1_o3qj5"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_cxp03"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_o3qj5"]
|
||||
[ext_resource type="AudioStream" uid="uid://dornjmfg37bv0" path="res://external/sample audio/e.wav" id="1_hlw2y"]
|
||||
[ext_resource type="PackedScene" uid="uid://bb6a6wu2kc3fr" path="res://templates/pawns/e.tscn" id="2_hlw2y"]
|
||||
[ext_resource type="Texture2D" uid="uid://b2rynijk10l8a" path="res://external/test portraits/e.png" id="3_1j2en"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="4_jmlxg"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="5_f1khw"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_o3qj5"]
|
||||
script = ExtResource("2_o3qj5")
|
||||
script = ExtResource("5_f1khw")
|
||||
type = 4
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_cxp03"]
|
||||
script = ExtResource("2_o3qj5")
|
||||
script = ExtResource("5_f1khw")
|
||||
type = 5
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_o75pd"]
|
||||
script = ExtResource("2_o3qj5")
|
||||
script = ExtResource("5_f1khw")
|
||||
type = 3
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_cxp03")
|
||||
name = "Tico"
|
||||
script = ExtResource("4_jmlxg")
|
||||
name = "E"
|
||||
move_speed = 3.0
|
||||
life = 75
|
||||
max_life = 75
|
||||
@@ -35,6 +37,8 @@ range_damage = 10
|
||||
range_time = 1.0
|
||||
melee_time = 1.25
|
||||
reload_time = 2.0
|
||||
portrait = ExtResource("1_o3qj5")
|
||||
starting_hacks = Array[ExtResource("2_o3qj5")]([SubResource("Resource_o3qj5"), SubResource("Resource_cxp03"), SubResource("Resource_o75pd")])
|
||||
portrait = ExtResource("3_1j2en")
|
||||
name_audio = ExtResource("1_hlw2y")
|
||||
pawn_body = ExtResource("2_hlw2y")
|
||||
starting_hacks = Array[ExtResource("5_f1khw")]([SubResource("Resource_o3qj5"), SubResource("Resource_cxp03"), SubResource("Resource_o75pd")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
@@ -1,29 +1,31 @@
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://6s8tqfssrt5i"]
|
||||
[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://6s8tqfssrt5i"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bp6wc55s2t4si" path="res://visuals/images/temp_portraits/tg-van-raily.jpg" id="1_crpmc"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_crpmc"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_nf0ju"]
|
||||
[ext_resource type="AudioStream" uid="uid://bqu2otr8b1oj6" path="res://external/sample audio/f.wav" id="1_2oi4n"]
|
||||
[ext_resource type="PackedScene" uid="uid://cwrxbjgwbiv81" path="res://templates/pawns/f.tscn" id="2_2oi4n"]
|
||||
[ext_resource type="Texture2D" uid="uid://c265jqwykqc2s" path="res://external/test portraits/f.png" id="3_ttwdt"]
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="4_mlun8"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="5_2hgkw"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_crpmc"]
|
||||
script = ExtResource("2_crpmc")
|
||||
script = ExtResource("5_2hgkw")
|
||||
type = 4
|
||||
qty = 1
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_nf0ju"]
|
||||
script = ExtResource("2_crpmc")
|
||||
script = ExtResource("5_2hgkw")
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_2pr8m"]
|
||||
script = ExtResource("2_crpmc")
|
||||
script = ExtResource("5_2hgkw")
|
||||
type = 1
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_nf0ju")
|
||||
name = "Van Raily"
|
||||
script = ExtResource("4_mlun8")
|
||||
name = "F"
|
||||
move_speed = 3.0
|
||||
life = 100
|
||||
ammo = 5
|
||||
@@ -31,6 +33,8 @@ melee_damage = 10
|
||||
range_damage = 5
|
||||
range_time = 0.5
|
||||
melee_time = 1.0
|
||||
portrait = ExtResource("1_crpmc")
|
||||
starting_hacks = Array[ExtResource("2_crpmc")]([SubResource("Resource_crpmc"), SubResource("Resource_nf0ju"), SubResource("Resource_2pr8m")])
|
||||
portrait = ExtResource("3_ttwdt")
|
||||
name_audio = ExtResource("1_2oi4n")
|
||||
pawn_body = ExtResource("2_2oi4n")
|
||||
starting_hacks = Array[ExtResource("5_2hgkw")]([SubResource("Resource_crpmc"), SubResource("Resource_nf0ju"), SubResource("Resource_2pr8m")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
27
default_bus_layout.tres
Normal file
@@ -0,0 +1,27 @@
|
||||
[gd_resource type="AudioBusLayout" format=3 uid="uid://ck35ska6sr17h"]
|
||||
|
||||
[resource]
|
||||
bus/1/name = &"Voice"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = 4.4334908
|
||||
bus/1/send = &"Master"
|
||||
bus/2/name = &"Music"
|
||||
bus/2/solo = false
|
||||
bus/2/mute = false
|
||||
bus/2/bypass_fx = false
|
||||
bus/2/volume_db = -8.793672
|
||||
bus/2/send = &"Master"
|
||||
bus/3/name = &"SFX"
|
||||
bus/3/solo = false
|
||||
bus/3/mute = false
|
||||
bus/3/bypass_fx = false
|
||||
bus/3/volume_db = 0.0
|
||||
bus/3/send = &"Master"
|
||||
bus/4/name = &"UI"
|
||||
bus/4/solo = false
|
||||
bus/4/mute = false
|
||||
bus/4/bypass_fx = false
|
||||
bus/4/volume_db = 0.0
|
||||
bus/4/send = &"Master"
|
||||
@@ -1,18 +1,18 @@
|
||||
[gd_scene load_steps=59 format=3 uid="uid://bflg720h1w3d3"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://tb7n6ybv43ch" path="res://assets/BinbunVFX/shared/script/vfx_controller.gd" id="1_so17j"]
|
||||
[ext_resource type="Shader" uid="uid://b6ke6r1fjb8s3" path="res://assets/BinbunVFX/impact_explosions/src/shader/explosion_core.gdshader" id="2_d2rk6"]
|
||||
[ext_resource type="Material" uid="uid://dnw08mtonx63d" path="res://assets/BinbunVFX/impact_explosions/src/material/explosion/explosion_smoke.tres" id="2_plj08"]
|
||||
[ext_resource type="Shader" uid="uid://d28ltkmbbdcjb" path="res://assets/BinbunVFX/impact_explosions/src/shader/sparks.gdshader" id="3_msnhc"]
|
||||
[ext_resource type="Shader" uid="uid://bf8eiigjam2fr" path="res://assets/BinbunVFX/impact_explosions/src/shader/explostion_ring.gdshader" id="5_d2rk6"]
|
||||
[ext_resource type="Texture2D" uid="uid://85fb3gemkbhp" path="res://assets/BinbunVFX/shared/texture/cracks_01.png" id="5_otofc"]
|
||||
[ext_resource type="Texture2D" uid="uid://bbxo5nkvy537a" path="res://assets/BinbunVFX/shared/texture/cracks_emission_01.png" id="6_d2rk6"]
|
||||
[ext_resource type="Shader" uid="uid://ccd4kg68n7uox" path="res://assets/BinbunVFX/impact_explosions/src/shader/basic_billboard.gdshader" id="8_y01pw"]
|
||||
[ext_resource type="Script" uid="uid://bdk8hhttligw" path="res://assets/BinbunVFX/shared/script/vfx_light.gd" id="9_85p3d"]
|
||||
[ext_resource type="Script" uid="uid://tb7n6ybv43ch" path="res://experimental/BinbunVFX/shared/script/vfx_controller.gd" id="1_so17j"]
|
||||
[ext_resource type="Shader" uid="uid://b6ke6r1fjb8s3" path="res://experimental/BinbunVFX/impact_explosions/src/shader/explosion_core.gdshader" id="2_d2rk6"]
|
||||
[ext_resource type="Material" uid="uid://dnw08mtonx63d" path="res://experimental/BinbunVFX/impact_explosions/src/material/explosion/explosion_smoke.tres" id="2_plj08"]
|
||||
[ext_resource type="Shader" uid="uid://d28ltkmbbdcjb" path="res://experimental/BinbunVFX/impact_explosions/src/shader/sparks.gdshader" id="3_msnhc"]
|
||||
[ext_resource type="Shader" uid="uid://bf8eiigjam2fr" path="res://experimental/BinbunVFX/impact_explosions/src/shader/explostion_ring.gdshader" id="5_d2rk6"]
|
||||
[ext_resource type="Texture2D" uid="uid://85fb3gemkbhp" path="res://experimental/BinbunVFX/shared/texture/cracks_01.png" id="5_otofc"]
|
||||
[ext_resource type="Texture2D" uid="uid://bbxo5nkvy537a" path="res://experimental/BinbunVFX/shared/texture/cracks_emission_01.png" id="6_d2rk6"]
|
||||
[ext_resource type="Shader" uid="uid://ccd4kg68n7uox" path="res://experimental/BinbunVFX/impact_explosions/src/shader/basic_billboard.gdshader" id="8_y01pw"]
|
||||
[ext_resource type="Script" uid="uid://bdk8hhttligw" path="res://experimental/BinbunVFX/shared/script/vfx_light.gd" id="9_85p3d"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_y01pw"]
|
||||
[sub_resource type="Gradient" id="Gradient_iyrbe"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_85p3d"]
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_dga0b"]
|
||||
noise_type = 2
|
||||
frequency = 0.02
|
||||
fractal_octaves = 1
|
||||
@@ -22,9 +22,9 @@ domain_warp_amplitude = 5.0
|
||||
domain_warp_fractal_octaves = 1
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_csir3"]
|
||||
noise = SubResource("FastNoiseLite_dga0b")
|
||||
color_ramp = SubResource("Gradient_iyrbe")
|
||||
seamless = true
|
||||
color_ramp = SubResource("Gradient_y01pw")
|
||||
noise = SubResource("FastNoiseLite_85p3d")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_e6ocy"]
|
||||
resource_local_to_scene = true
|
||||
@@ -139,8 +139,8 @@ noise_type = 2
|
||||
fractal_octaves = 3
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_7t2vj"]
|
||||
seamless = true
|
||||
noise = SubResource("FastNoiseLite_d2rk6")
|
||||
seamless = true
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_d2rk6"]
|
||||
offsets = PackedFloat32Array(0.868159, 0.980099, 1)
|
||||
@@ -215,10 +215,10 @@ frequency = 0.02
|
||||
fractal_octaves = 2
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_cwquj"]
|
||||
invert = true
|
||||
seamless = true
|
||||
seamless_blend_skirt = 1.0
|
||||
noise = SubResource("FastNoiseLite_y01pw")
|
||||
seamless = true
|
||||
invert = true
|
||||
seamless_blend_skirt = 1.0
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_85p3d"]
|
||||
render_priority = 0
|
||||
@@ -476,6 +476,7 @@ _data = {
|
||||
}
|
||||
|
||||
[node name="VFXExplosion_01" type="Node3D"]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
script = ExtResource("1_so17j")
|
||||
primary_color = Color(1, 0.662745, 0.0666667, 1)
|
||||
secondary_color = Color(0.984314, 0.192157, 0, 1)
|
||||
@@ -492,6 +493,7 @@ mesh = SubResource("SphereMesh_awqfb")
|
||||
[node name="Smoke" type="GPUParticles3D" parent="."]
|
||||
layers = 540672
|
||||
material_override = ExtResource("2_plj08")
|
||||
emitting = false
|
||||
amount = 16
|
||||
lifetime = 0.8
|
||||
one_shot = true
|
||||
@@ -502,6 +504,7 @@ draw_pass_1 = SubResource("SphereMesh_plj08")
|
||||
[node name="Sparks" type="GPUParticles3D" parent="."]
|
||||
layers = 540672
|
||||
material_override = SubResource("ShaderMaterial_msnhc")
|
||||
emitting = false
|
||||
amount = 16
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
|
||||
@@ -357,6 +357,7 @@ _data = {
|
||||
}
|
||||
|
||||
[node name="VFXExplosion_04" type="Node3D"]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
script = ExtResource("1_gkc2v")
|
||||
primary_color = Color(1, 0.529412, 0, 1)
|
||||
secondary_color = Color(1, 0.337255, 0, 1)
|
||||
|
||||
BIN
external/contain-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
40
external/contain-icon.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cg4fu3fa248cm"
|
||||
path="res://.godot/imported/contain-icon.png-a3e48c385316cd8572a89a3e09b9d50c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/contain-icon.png"
|
||||
dest_files=["res://.godot/imported/contain-icon.png-a3e48c385316cd8572a89a3e09b9d50c.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
external/destroy-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
41
external/destroy-icon.png.import
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://u12dmhohea1g"
|
||||
path.s3tc="res://.godot/imported/destroy-icon.png-9ceefbafae80256ab845a59897063ca8.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/destroy-icon.png"
|
||||
dest_files=["res://.godot/imported/destroy-icon.png-9ceefbafae80256ab845a59897063ca8.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
BIN
external/infect-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
40
external/infect-icon.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bbls00lwa4y5n"
|
||||
path="res://.godot/imported/infect-icon.png-8db1aa042afba559f74a0df4c022ad79.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/infect-icon.png"
|
||||
dest_files=["res://.godot/imported/infect-icon.png-8db1aa042afba559f74a0df4c022ad79.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
external/progress_fill.png
vendored
Normal file
|
After Width: | Height: | Size: 135 B |
40
external/progress_fill.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://g7k311jjr73e"
|
||||
path="res://.godot/imported/progress_fill.png-0edd49454969b595fd5cd4e41197d4b2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/progress_fill.png"
|
||||
dest_files=["res://.godot/imported/progress_fill.png-0edd49454969b595fd5cd4e41197d4b2.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
external/progress_over.png
vendored
Normal file
|
After Width: | Height: | Size: 158 B |
40
external/progress_over.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cp188cfq4qeas"
|
||||
path="res://.godot/imported/progress_over.png-123d5e181e53b8525430d778ea9358ff.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/progress_over.png"
|
||||
dest_files=["res://.godot/imported/progress_over.png-123d5e181e53b8525430d778ea9358ff.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
external/purge-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
40
external/purge-icon.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://pdtmy6qryxb2"
|
||||
path="res://.godot/imported/purge-icon.png-19a8010519a7938e0198b676b1cc9c83.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/purge-icon.png"
|
||||
dest_files=["res://.godot/imported/purge-icon.png-19a8010519a7938e0198b676b1cc9c83.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
external/redirect-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
40
external/redirect-icon.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://duwob32i2ccsk"
|
||||
path="res://.godot/imported/redirect-icon.png-fe9a5e1b9c27a2ed13e5cd77575b5b34.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/redirect-icon.png"
|
||||
dest_files=["res://.godot/imported/redirect-icon.png-fe9a5e1b9c27a2ed13e5cd77575b5b34.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
external/sample audio/a.wav
vendored
Normal file
24
external/sample audio/a.wav.import
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dhlg3pk3tbirp"
|
||||
path="res://.godot/imported/a.wav-512eaf7f1be1e1dbb02db32d769d1e7c.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/sample audio/a.wav"
|
||||
dest_files=["res://.godot/imported/a.wav-512eaf7f1be1e1dbb02db32d769d1e7c.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
external/sample audio/b.wav
vendored
Normal file
24
external/sample audio/b.wav.import
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://7dsv6kcptvar"
|
||||
path="res://.godot/imported/b.wav-c59cd0574c9eda65844ca10622a04f6a.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/sample audio/b.wav"
|
||||
dest_files=["res://.godot/imported/b.wav-c59cd0574c9eda65844ca10622a04f6a.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
external/sample audio/c.wav
vendored
Normal file
24
external/sample audio/c.wav.import
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dr3jq3tnvtwu"
|
||||
path="res://.godot/imported/c.wav-95e1dea73d2cd00bc271f8a5505d51d0.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/sample audio/c.wav"
|
||||
dest_files=["res://.godot/imported/c.wav-95e1dea73d2cd00bc271f8a5505d51d0.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
external/sample audio/d.wav
vendored
Normal file
24
external/sample audio/d.wav.import
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dsikjobcle18a"
|
||||
path="res://.godot/imported/d.wav-85e5f5f34f2501a9d76f76f4be908185.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/sample audio/d.wav"
|
||||
dest_files=["res://.godot/imported/d.wav-85e5f5f34f2501a9d76f76f4be908185.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
external/sample audio/e.wav
vendored
Normal file
24
external/sample audio/e.wav.import
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dornjmfg37bv0"
|
||||
path="res://.godot/imported/e.wav-33e3ff5e179b6933a12f0965dbee05eb.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/sample audio/e.wav"
|
||||
dest_files=["res://.godot/imported/e.wav-33e3ff5e179b6933a12f0965dbee05eb.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
external/sample audio/f.wav
vendored
Normal file
24
external/sample audio/f.wav.import
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bqu2otr8b1oj6"
|
||||
path="res://.godot/imported/f.wav-e8b08693b137a9f5e83ffd51a7709a8e.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/sample audio/f.wav"
|
||||
dest_files=["res://.godot/imported/f.wav-e8b08693b137a9f5e83ffd51a7709a8e.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
external/test portraits/a.png
vendored
Normal file
|
After Width: | Height: | Size: 154 KiB |
40
external/test portraits/a.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://13pdg1vs81as"
|
||||
path="res://.godot/imported/a.png-ebbbc7f6f20fea8e38d2eb9b9f504ae6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/test portraits/a.png"
|
||||
dest_files=["res://.godot/imported/a.png-ebbbc7f6f20fea8e38d2eb9b9f504ae6.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
external/test portraits/b.png
vendored
Normal file
|
After Width: | Height: | Size: 107 KiB |
40
external/test portraits/b.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ca6iihdssrh14"
|
||||
path="res://.godot/imported/b.png-c4aed0756051058e2c54ebf8a9768024.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/test portraits/b.png"
|
||||
dest_files=["res://.godot/imported/b.png-c4aed0756051058e2c54ebf8a9768024.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
external/test portraits/c.png
vendored
Normal file
|
After Width: | Height: | Size: 149 KiB |
40
external/test portraits/c.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dm7fo7tt00p1"
|
||||
path="res://.godot/imported/c.png-959ec224d08023f8cd903e843fd686a9.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/test portraits/c.png"
|
||||
dest_files=["res://.godot/imported/c.png-959ec224d08023f8cd903e843fd686a9.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
external/test portraits/d.png
vendored
Normal file
|
After Width: | Height: | Size: 171 KiB |
40
external/test portraits/d.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2ovogspuupqa"
|
||||
path="res://.godot/imported/d.png-eab85833b41c1be7a701598ea9d65289.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/test portraits/d.png"
|
||||
dest_files=["res://.godot/imported/d.png-eab85833b41c1be7a701598ea9d65289.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
external/test portraits/e.png
vendored
Normal file
|
After Width: | Height: | Size: 144 KiB |
40
external/test portraits/e.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2rynijk10l8a"
|
||||
path="res://.godot/imported/e.png-2e8cf58eaf7604a4ffa5b244bcce0759.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/test portraits/e.png"
|
||||
dest_files=["res://.godot/imported/e.png-2e8cf58eaf7604a4ffa5b244bcce0759.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
external/test portraits/f.png
vendored
Normal file
|
After Width: | Height: | Size: 148 KiB |
40
external/test portraits/f.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c265jqwykqc2s"
|
||||
path="res://.godot/imported/f.png-781e05d9cb8315bdfb553bff384fdaac.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/test portraits/f.png"
|
||||
dest_files=["res://.godot/imported/f.png-781e05d9cb8315bdfb553bff384fdaac.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
external/title.clip
vendored
BIN
external/trap markers.clip
vendored
BIN
external/trigger-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
40
external/trigger-icon.png.import
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://xomk6sb0cnfy"
|
||||
path="res://.godot/imported/trigger-icon.png-28f3bc3b679f225965e92f3adaf23e10.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://external/trigger-icon.png"
|
||||
dest_files=["res://.godot/imported/trigger-icon.png-28f3bc3b679f225965e92f3adaf23e10.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
|
||||
1
models/datablock.gltf
Normal file
@@ -0,0 +1 @@
|
||||
{"asset":{"version":"2.0","generator":"Blockbench 5.0.7 glTF exporter"},"scenes":[{"nodes":[0],"name":"blockbench_export"}],"scene":0,"nodes":[{"rotation":[0.3535533905932738,0.3535533905932738,0.14644660940672624,0.8535533905932737],"name":"mesh","mesh":0}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":288,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":576,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":768,"byteLength":72,"target":34963}],"buffers":[{"byteLength":840,"uri":"data:application/octet-stream;base64,AAAAPwAAgD8AAAA/AAAAPwAAAAAAAAA/AAAAPwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAA/AAAAvwAAAAAAAAC/AAAAPwAAgD8AAAA/AAAAPwAAgD8AAAC/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAPwAAAAAAAAA/AAAAvwAAAAAAAAA/AAAAPwAAAAAAAAC/AAAAvwAAAAAAAAC/AAAAPwAAgD8AAAA/AAAAvwAAgD8AAAA/AAAAPwAAAAAAAAA/AAAAvwAAAAAAAAA/AAAAPwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAIA/AgAAAAEAAgABAAMABgAEAAUABgAFAAcACgAIAAkACgAJAAsADgAMAA0ADgANAA8AEgAQABEAEgARABMAFgAUABUAFgAVABcA"}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[0.5,1,0.5],"min":[-0.5,0,-0.5],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"max":[1,1],"min":[0,0],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0,"source":0,"name":"texture"}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"images":[{"mimeType":"image/png","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAgUlEQVR4AeyWsQ0AIQwDI8ZgDuZgWOZgDtb4lwu7/eYTGiOdIqXA5irac/m0uHxUYO8doPcemSAD8N0qwEX1VIE5Z4DsAsgAzFEBLqqnC9iADdiADdiADdiADdiADcjAWitA9rccGYA5KsBF9VSBMUaAc05kggzAh6oAF3/Pr/teAAAA//+XbCPxAAAABklEQVQDAKj338Fk9RQnAAAAAElFTkSuQmCC"}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]}]}
|
||||
42
models/datablock.gltf.import
Normal file
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://d187i1jot4wmy"
|
||||
path="res://.godot/imported/datablock.gltf-bd1206a04074a56813fd4c73675028f6.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/datablock.gltf"
|
||||
dest_files=["res://.godot/imported/datablock.gltf-bd1206a04074a56813fd4c73675028f6.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
models/datablock_0.png
Normal file
|
After Width: | Height: | Size: 204 B |
44
models/datablock_0.png.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b7s2n7xcvntpl"
|
||||
path.s3tc="res://.godot/imported/datablock_0.png-be2ea7c3074a4bce475d2e7d6a4e74f6.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "78f80e90042787b6f29cb279213d54f5"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/datablock_0.png"
|
||||
dest_files=["res://.godot/imported/datablock_0.png-be2ea7c3074a4bce475d2e7d6a4e74f6.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
@@ -7,6 +7,11 @@ resource_name = "texture_0"
|
||||
transparency = 4
|
||||
cull_mode = 2
|
||||
shading_mode = 0
|
||||
diffuse_mode = 3
|
||||
specular_mode = 2
|
||||
disable_ambient_light = true
|
||||
disable_fog = true
|
||||
disable_specular_occlusion = true
|
||||
albedo_texture = ExtResource("1_anj20")
|
||||
texture_filter = 0
|
||||
texture_repeat = false
|
||||
|
||||
@@ -1,73 +1,11 @@
|
||||
[gd_scene load_steps=13 format=3 uid="uid://ck4x56txf676a"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://ck4x56txf676a"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://grs3nyom325o" path="res://scripts/character_select.gd" id="1_bow2h"]
|
||||
[ext_resource type="PackedScene" uid="uid://46rpw0rrd51m" path="res://templates/pawn_display.tscn" id="2_5wdeo"]
|
||||
[ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="2_uxcyu"]
|
||||
[ext_resource type="AudioStream" uid="uid://vcatohtmt8bk" path="res://audio/old-music/16 - Character Select.mp3" id="3_bow2h"]
|
||||
[ext_resource type="AudioStream" uid="uid://cwmfd8ov3lj1h" path="res://audio/sounds/menu select.wav" id="7_bqp8h"]
|
||||
[ext_resource type="AudioStream" uid="uid://doelc8yt5snc2" path="res://audio/sounds/Keypad A.wav" id="8_5cdo8"]
|
||||
|
||||
[sub_resource type="Shader" id="Shader_fa52j"]
|
||||
code = "shader_type canvas_item;
|
||||
|
||||
uniform sampler2D main_texture;
|
||||
uniform float granularity : hint_range(5, 30) = 15.0;
|
||||
uniform float opacity_limit;
|
||||
|
||||
float random (vec2 uv) {
|
||||
return fract(sin(dot(uv.xy,
|
||||
vec2(12.9898,78.233))) * 43758.5453123);
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
// Called for every vertex the material is visible on.
|
||||
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// Called for every pixel the material is visible on.
|
||||
vec2 uv = UV;
|
||||
float g = ( pow(granularity, 2));
|
||||
uv = round((uv * g)) / g;
|
||||
uv.y = TIME * uv.y + TIME * .05;
|
||||
uv.x = 10.0 * TIME * uv.x + TIME * 1.0;
|
||||
float val = random(uv);
|
||||
float op = random(-uv) / val;
|
||||
float alpha = 1.0;
|
||||
if(op < opacity_limit){
|
||||
alpha = 0.0;
|
||||
}
|
||||
vec4 color = vec4(val, val, val, alpha * COLOR.a);
|
||||
COLOR = color;
|
||||
}
|
||||
|
||||
//void light() {
|
||||
// // Called for every pixel for every light affecting the CanvasItem.
|
||||
// // Uncomment to replace the default light processing function with this one.
|
||||
//}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_5wdeo"]
|
||||
shader = SubResource("Shader_fa52j")
|
||||
shader_parameter/granularity = 10.0000002375
|
||||
shader_parameter/opacity_limit = 0.86
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_ak2if"]
|
||||
offsets = PackedFloat32Array(0)
|
||||
colors = PackedColorArray(0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_fa52j"]
|
||||
gradient = SubResource("Gradient_ak2if")
|
||||
width = 1
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_w1hxv"]
|
||||
offsets = PackedFloat32Array(1)
|
||||
colors = PackedColorArray(1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_bqp8h"]
|
||||
gradient = SubResource("Gradient_w1hxv")
|
||||
width = 1
|
||||
|
||||
[node name="Control" type="Control" groups=["scenes"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
@@ -90,416 +28,109 @@ anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Control" type="Control" parent="Panel"]
|
||||
[node name="PawnDisplays" type="Control" parent="Panel"]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 0
|
||||
offset_left = 94.0
|
||||
offset_top = 98.0
|
||||
offset_right = 134.0
|
||||
offset_bottom = 138.0
|
||||
|
||||
[node name="P1PawnDisplay" parent="Panel/Control" instance=ExtResource("2_5wdeo")]
|
||||
unique_name_in_owner = true
|
||||
[node name="PawnDisplay" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
layout_mode = 0
|
||||
offset_left = 0.0
|
||||
offset_top = 0.0
|
||||
offset_right = 700.0
|
||||
offset_bottom = 700.0
|
||||
offset_left = -29.0
|
||||
offset_top = -65.0
|
||||
offset_right = 471.0
|
||||
offset_bottom = 435.0
|
||||
|
||||
[node name="P2PawnDisplay" parent="Panel/Control" instance=ExtResource("2_5wdeo")]
|
||||
unique_name_in_owner = true
|
||||
[node name="PawnDisplay2" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
layout_mode = 0
|
||||
offset_left = 1032.0
|
||||
offset_top = 0.0
|
||||
offset_right = 1732.0
|
||||
offset_bottom = 700.0
|
||||
offset_left = 1258.0
|
||||
offset_top = -65.0
|
||||
offset_right = 1758.0
|
||||
offset_bottom = 435.0
|
||||
|
||||
[node name="PawnName" parent="Panel/Control/P2PawnDisplay/Control" index="0"]
|
||||
modulate = Color(0.78848296, 0, 0.22455063, 1)
|
||||
[node name="PawnDisplay3" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
layout_mode = 0
|
||||
offset_left = 36.0
|
||||
offset_top = 451.0
|
||||
offset_right = 536.0
|
||||
offset_bottom = 951.0
|
||||
|
||||
[node name="Panel2" type="Panel" parent="."]
|
||||
[node name="PawnDisplay4" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
layout_mode = 0
|
||||
offset_left = 1192.0
|
||||
offset_top = 456.0
|
||||
offset_right = 1692.0
|
||||
offset_bottom = 956.0
|
||||
|
||||
[node name="Panel2" type="Control" parent="."]
|
||||
custom_minimum_size = Vector2(0, 250)
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
anchors_preset = 0
|
||||
offset_left = 727.0
|
||||
offset_top = 98.0
|
||||
offset_right = 877.0
|
||||
offset_bottom = 348.0
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="Panel2"]
|
||||
[node name="PawnPickPortraits" type="GridContainer" parent="Panel2"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -512.5
|
||||
offset_top = -75.0
|
||||
offset_right = 512.5
|
||||
offset_bottom = 75.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/separation = 25
|
||||
alignment = 1
|
||||
|
||||
[node name="Panel" type="Panel" parent="Panel2/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 150)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Portrait" type="TextureRect" parent="Panel2/HBoxContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_uxcyu")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="Panel2/HBoxContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Static" type="TextureRect" parent="Panel2/HBoxContainer/Panel/Control"]
|
||||
material = SubResource("ShaderMaterial_5wdeo")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_fa52j")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Green Tint" type="TextureRect" parent="Panel2/HBoxContainer/Panel/Control"]
|
||||
modulate = Color(0, 0.6039216, 0, 0.42745098)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_bqp8h")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Panel2" type="Panel" parent="Panel2/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 150)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Portrait" type="TextureRect" parent="Panel2/HBoxContainer/Panel2"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_uxcyu")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="Panel2/HBoxContainer/Panel2"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Static" type="TextureRect" parent="Panel2/HBoxContainer/Panel2/Control"]
|
||||
material = SubResource("ShaderMaterial_5wdeo")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_fa52j")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Green Tint" type="TextureRect" parent="Panel2/HBoxContainer/Panel2/Control"]
|
||||
modulate = Color(0, 0.6039216, 0, 0.42745098)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_bqp8h")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel2"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Panel3" type="Panel" parent="Panel2/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 150)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Portrait" type="TextureRect" parent="Panel2/HBoxContainer/Panel3"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_uxcyu")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="Panel2/HBoxContainer/Panel3"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Static" type="TextureRect" parent="Panel2/HBoxContainer/Panel3/Control"]
|
||||
material = SubResource("ShaderMaterial_5wdeo")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_fa52j")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Green Tint" type="TextureRect" parent="Panel2/HBoxContainer/Panel3/Control"]
|
||||
modulate = Color(0, 0.6039216, 0, 0.42745098)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_bqp8h")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel3"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Panel4" type="Panel" parent="Panel2/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 150)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Portrait" type="TextureRect" parent="Panel2/HBoxContainer/Panel4"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_uxcyu")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="Panel2/HBoxContainer/Panel4"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Static" type="TextureRect" parent="Panel2/HBoxContainer/Panel4/Control"]
|
||||
material = SubResource("ShaderMaterial_5wdeo")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_fa52j")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Green Tint" type="TextureRect" parent="Panel2/HBoxContainer/Panel4/Control"]
|
||||
modulate = Color(0, 0.6039216, 0, 0.42745098)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_bqp8h")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel4"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Panel5" type="Panel" parent="Panel2/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 150)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Portrait" type="TextureRect" parent="Panel2/HBoxContainer/Panel5"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_uxcyu")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="Panel2/HBoxContainer/Panel5"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Static" type="TextureRect" parent="Panel2/HBoxContainer/Panel5/Control"]
|
||||
material = SubResource("ShaderMaterial_5wdeo")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_fa52j")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Green Tint" type="TextureRect" parent="Panel2/HBoxContainer/Panel5/Control"]
|
||||
modulate = Color(0, 0.6039216, 0, 0.42745098)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_bqp8h")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel5"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Panel6" type="Panel" parent="Panel2/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 150)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Portrait" type="TextureRect" parent="Panel2/HBoxContainer/Panel6"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("2_uxcyu")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Control" type="Control" parent="Panel2/HBoxContainer/Panel6"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Static" type="TextureRect" parent="Panel2/HBoxContainer/Panel6/Control"]
|
||||
material = SubResource("ShaderMaterial_5wdeo")
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_fa52j")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Green Tint" type="TextureRect" parent="Panel2/HBoxContainer/Panel6/Control"]
|
||||
modulate = Color(0, 0.6039216, 0, 0.42745098)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("GradientTexture1D_bqp8h")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel6"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -75.0
|
||||
offset_top = -114.0
|
||||
offset_right = 383.0
|
||||
offset_bottom = 806.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
columns = 3
|
||||
|
||||
[node name="SelectorStart" type="Control" parent="Panel2"]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 0
|
||||
offset_left = 438.0
|
||||
offset_top = 40.0
|
||||
offset_right = 478.0
|
||||
offset_bottom = 80.0
|
||||
offset_left = -9.0
|
||||
offset_right = 31.0
|
||||
offset_bottom = 40.0
|
||||
|
||||
[node name="Panel3" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 75.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="Label" type="Label" parent="Panel3"]
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -75.5
|
||||
offset_top = -23.0
|
||||
offset_right = 75.5
|
||||
offset_left = -188.5
|
||||
offset_top = -1060.0
|
||||
offset_right = 188.5
|
||||
offset_bottom = -1005.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_font_sizes/font_size = 40
|
||||
text = "CHARACTER SELECT"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||
[node name="Music" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("3_bow2h")
|
||||
volume_db = -5.0
|
||||
autoplay = true
|
||||
bus = &"Music"
|
||||
|
||||
[node name="SelectSound" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("7_bqp8h")
|
||||
|
||||
[node name="Announcer" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
volume_db = 12.381
|
||||
bus = &"Voice"
|
||||
|
||||
[node name="SwitchSound" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("8_5cdo8")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="spawned" from="SelectorSpawner" to="." method="_on_selector_spawner_spawned"]
|
||||
[connection signal="child_entered_tree" from="Panel2/SelectorStart" to="." method="_on_selector_start_child_entered_tree"]
|
||||
|
||||
[editable path="Panel/Control/P1PawnDisplay"]
|
||||
[editable path="Panel/Control/P2PawnDisplay"]
|
||||
|
||||
139
scenes/character_select.tscn91042323948.tmp
Normal file
@@ -0,0 +1,139 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://ck4x56txf676a"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://grs3nyom325o" path="res://scripts/character_select.gd" id="1_bow2h"]
|
||||
[ext_resource type="PackedScene" uid="uid://46rpw0rrd51m" path="res://templates/pawn_display.tscn" id="2_5wdeo"]
|
||||
[ext_resource type="AudioStream" uid="uid://vcatohtmt8bk" path="res://audio/old-music/16 - Character Select.mp3" id="3_bow2h"]
|
||||
[ext_resource type="AudioStream" uid="uid://cwmfd8ov3lj1h" path="res://audio/sounds/menu select.wav" id="7_bqp8h"]
|
||||
[ext_resource type="AudioStream" uid="uid://doelc8yt5snc2" path="res://audio/sounds/Keypad A.wav" id="8_5cdo8"]
|
||||
|
||||
[node name="Control" type="Control" groups=["scenes"]]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_bow2h")
|
||||
|
||||
[node name="SelectorSpawner" type="MultiplayerSpawner" parent="."]
|
||||
unique_name_in_owner = true
|
||||
_spawnable_scenes = PackedStringArray("uid://bvypswoe6diaq")
|
||||
spawn_path = NodePath("../Panel2/SelectorStart")
|
||||
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="PawnDisplays" type="Control" parent="Panel"]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 0
|
||||
offset_left = 94.0
|
||||
offset_top = 98.0
|
||||
offset_right = 134.0
|
||||
offset_bottom = 138.0
|
||||
|
||||
[node name="PawnDisplay" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
layout_mode = 0
|
||||
offset_left = -29.0
|
||||
offset_top = -65.0
|
||||
offset_right = 471.0
|
||||
offset_bottom = 435.0
|
||||
|
||||
[node name="PawnDisplay2" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
layout_mode = 0
|
||||
offset_left = 1258.0
|
||||
offset_top = -65.0
|
||||
offset_right = 1758.0
|
||||
offset_bottom = 435.0
|
||||
|
||||
[node name="PawnDisplay3" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 36.0
|
||||
offset_top = 451.0
|
||||
offset_right = 536.0
|
||||
offset_bottom = 951.0
|
||||
|
||||
[node name="PawnDisplay4" parent="Panel/PawnDisplays" instance=ExtResource("2_5wdeo")]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 1192.0
|
||||
offset_top = 456.0
|
||||
offset_right = 1692.0
|
||||
offset_bottom = 956.0
|
||||
|
||||
[node name="Panel2" type="Control" parent="."]
|
||||
custom_minimum_size = Vector2(0, 250)
|
||||
anchors_preset = 0
|
||||
offset_left = 727.0
|
||||
offset_top = 98.0
|
||||
offset_right = 877.0
|
||||
offset_bottom = 348.0
|
||||
|
||||
[node name="PawnPickPortraits" type="GridContainer" parent="Panel2"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -75.0
|
||||
offset_top = -114.0
|
||||
offset_right = 383.0
|
||||
offset_bottom = 806.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
columns = 3
|
||||
|
||||
[node name="SelectorStart" type="Control" parent="Panel2"]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 0
|
||||
offset_left = 438.0
|
||||
offset_top = 40.0
|
||||
offset_right = 478.0
|
||||
offset_bottom = 80.0
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -188.5
|
||||
offset_top = -1060.0
|
||||
offset_right = 188.5
|
||||
offset_bottom = -1005.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_font_sizes/font_size = 40
|
||||
text = "CHARACTER SELECT"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Music" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("3_bow2h")
|
||||
volume_db = -5.0
|
||||
autoplay = true
|
||||
bus = &"Music"
|
||||
|
||||
[node name="SelectSound" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("7_bqp8h")
|
||||
|
||||
[node name="Announcer" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
volume_db = 12.381
|
||||
bus = &"Voice"
|
||||
|
||||
[node name="SwitchSound" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("8_5cdo8")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="spawned" from="SelectorSpawner" to="." method="_on_selector_spawner_spawned"]
|
||||
[connection signal="child_entered_tree" from="Panel2/SelectorStart" to="." method="_on_selector_start_child_entered_tree"]
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=13 format=4 uid="uid://dewb10lmvj1yy"]
|
||||
[gd_scene load_steps=15 format=4 uid="uid://dewb10lmvj1yy"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d3t381vws7vns" path="res://scripts/level.gd" id="1_0a1dj"]
|
||||
[ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="2_uckv6"]
|
||||
@@ -8,10 +8,19 @@
|
||||
[ext_resource type="MeshLibrary" uid="uid://bp5402nbrw3hx" path="res://manufactory_minimap_mesh_library.tres" id="6_0a1dj"]
|
||||
[ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="7_cttrw"]
|
||||
[ext_resource type="AudioStream" uid="uid://cr0n18se6jnig" path="res://audio/music/Industrial Matts Fridge Intensity 2.wav" id="9_d3ajt"]
|
||||
[ext_resource type="Script" uid="uid://b5npi1ys4lnf4" path="res://scripts/multiplayer_level_setup.gd" id="9_owm7e"]
|
||||
[ext_resource type="PackedScene" uid="uid://dyvov4i48mqoi" path="res://templates/datablock_pickup.tscn" id="10_owm7e"]
|
||||
|
||||
[sub_resource type="Environment" id="Environment_x4b8f"]
|
||||
background_energy_multiplier = 0.29
|
||||
background_mode = 1
|
||||
ambient_light_color = Color(1, 1, 1, 1)
|
||||
reflected_light_source = 1
|
||||
tonemap_white = 16.0
|
||||
glow_enabled = true
|
||||
fog_mode = 1
|
||||
fog_light_color = Color(0.21401742, 0.23577034, 0.2696176, 1)
|
||||
fog_light_energy = 0.0
|
||||
fog_density = 1.0
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_d3ajt"]
|
||||
resource_name = "material_0"
|
||||
@@ -57,6 +66,7 @@ blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_tlwuy")
|
||||
|
||||
[node name="Manufactory Level" type="Node3D"]
|
||||
process_mode = 4
|
||||
script = ExtResource("1_0a1dj")
|
||||
difficulty = 5
|
||||
|
||||
@@ -407,4 +417,14 @@ stream = ExtResource("9_d3ajt")
|
||||
volume_db = -24.684
|
||||
autoplay = true
|
||||
|
||||
[node name="MultiplayerLevelSetup" type="Node" parent="."]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("9_owm7e")
|
||||
|
||||
[node name="Datablock Pickup" parent="." instance=ExtResource("10_owm7e")]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 0.9426415, -0.33380684, 0, 0.33380687, 0.94264144, 0.5, 1.790432, 0.5)
|
||||
|
||||
[connection signal="spawned" from="PawnSpawner" to="MultiplayerLevelSetup" method="_on_pawn_spawner_spawned"]
|
||||
[connection signal="spawned" from="CameraSpawner" to="MultiplayerLevelSetup" method="_on_camera_spawner_spawned"]
|
||||
|
||||
[editable path="CanvasLayer/HUD"]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
[ext_resource type="Script" uid="uid://dep7nr2nkdmga" path="res://scripts/multiplayer_setup.gd" id="1_lckj3"]
|
||||
|
||||
[node name="MultiplayerSetup" type="MultiplayerSpawner" groups=["level_spawner"]]
|
||||
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs", "uid://ck4x56txf676a", "uid://by6suwmds7xq2")
|
||||
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs", "uid://ck4x56txf676a", "uid://dewb10lmvj1yy")
|
||||
spawn_path = NodePath(".")
|
||||
script = ExtResource("1_lckj3")
|
||||
|
||||
|
||||
@@ -412,14 +412,17 @@ offset_bottom = 648.0
|
||||
stream = ExtResource("4_mykxm")
|
||||
volume_db = -18.606
|
||||
autoplay = true
|
||||
bus = &"Music"
|
||||
|
||||
[node name="SelectSound" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("6_3yumr")
|
||||
bus = &"UI"
|
||||
|
||||
[node name="SwitchSound" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("7_cs5ya")
|
||||
bus = &"UI"
|
||||
|
||||
[node name="TextureRect6" type="TextureRect" parent="."]
|
||||
layout_mode = 0
|
||||
|
||||
70
scenes/vrep_loading.tscn
Normal file
@@ -0,0 +1,70 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dq5mtoakhfxx4"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cp188cfq4qeas" path="res://external/progress_over.png" id="1_wa8kr"]
|
||||
[ext_resource type="Texture2D" uid="uid://g7k311jjr73e" path="res://external/progress_fill.png" id="2_0fdvr"]
|
||||
|
||||
[node name="Node2D" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="RichTextLabel" type="RichTextLabel" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 160.0
|
||||
offset_top = 413.0
|
||||
offset_right = 1765.0
|
||||
offset_bottom = 618.0
|
||||
theme_override_font_sizes/normal_font_size = 150
|
||||
bbcode_enabled = true
|
||||
text = "LOADING V-REP . . ."
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
|
||||
[node name="TextureProgressBar" type="TextureProgressBar" parent="."]
|
||||
texture_filter = 1
|
||||
layout_mode = 0
|
||||
offset_left = 133.0
|
||||
offset_top = 894.0
|
||||
offset_right = 1731.0
|
||||
offset_bottom = 987.0
|
||||
nine_patch_stretch = true
|
||||
stretch_margin_left = 10
|
||||
stretch_margin_top = 10
|
||||
stretch_margin_right = 10
|
||||
stretch_margin_bottom = 10
|
||||
texture_over = ExtResource("1_wa8kr")
|
||||
texture_progress = ExtResource("2_0fdvr")
|
||||
|
||||
[node name="RichTextLabel2" type="RichTextLabel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -309.0
|
||||
offset_top = -260.0
|
||||
offset_right = 309.0
|
||||
offset_bottom = -205.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_font_sizes/normal_font_size = 40
|
||||
bbcode_enabled = true
|
||||
text = "[center]Simulating Virtual Environment[/center]
|
||||
"
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
@@ -7,6 +7,16 @@ enum Modes{
|
||||
VS_MAN
|
||||
}
|
||||
|
||||
|
||||
var pawns : Dictionary = {
|
||||
"A" : load("res://data/pawns/a.tres"),
|
||||
"B" : load("res://data/pawns/b.tres"),
|
||||
"C" : load("res://data/pawns/c.tres"),
|
||||
"D" : load("res://data/pawns/d.tres"),
|
||||
"E" : load("res://data/pawns/e.tres"),
|
||||
"F" : load("res://data/pawns/f.tres")
|
||||
}
|
||||
|
||||
const blinder_template = preload("res://templates/blinder.tscn")
|
||||
const one_shot_template = preload("res://templates/one_shot.tscn")
|
||||
|
||||
@@ -15,13 +25,14 @@ const vs_com_level = preload("res://scenes/test_level.tscn")
|
||||
const vs_man_level = preload("res://scenes/manufactory.tscn")
|
||||
const pawn_select_scene = preload("res://scenes/character_select.tscn")
|
||||
|
||||
var cmd_args : Dictionary = {}
|
||||
var player : PawnController
|
||||
var hud : HUD
|
||||
var level : Level
|
||||
var mode : Modes = Modes.STORY
|
||||
var multiplayer_game : bool = false
|
||||
var num_players : int = 1
|
||||
var pawns_selected : Dictionary[int, PawnBaseData] = {}
|
||||
var pawns_selected : Dictionary[int, StringName] = {}
|
||||
var level_synced : Dictionary[int, bool] = {}
|
||||
var net_test : bool #TODO: Remove later
|
||||
|
||||
@@ -30,16 +41,21 @@ func _ready() -> void:
|
||||
for arg in OS.get_cmdline_args():
|
||||
if arg.begins_with("--"):
|
||||
var flag = arg.lstrip("--")
|
||||
if flag.contains("="):
|
||||
var key_val = flag.split("=")
|
||||
args[key_val[0]]=key_val[1]
|
||||
args[flag]=true
|
||||
if args.has("net_test"):
|
||||
net_test = true
|
||||
|
||||
if args.has("instance_id"):
|
||||
get_tree().root.title = "Net Gunner (Instance: %s)" % args.instance_id
|
||||
cmd_args = args
|
||||
|
||||
func setup_player(pc : PawnController) -> void:
|
||||
var is_local = false
|
||||
Game.level.pawns[pc.id] = pc
|
||||
if pc.id == Multiplayer.id:
|
||||
is_local = true
|
||||
level.pawns[pc.id] = pc
|
||||
if is_local:
|
||||
player = pc
|
||||
if hud:
|
||||
@@ -49,10 +65,11 @@ func is_multiplayer() -> bool:
|
||||
return multiplayer_game
|
||||
|
||||
|
||||
func start_level(pawns : Dictionary[int, PawnBaseData]) -> void:
|
||||
func start_level(pawn_dict : Dictionary[int, StringName]) -> void:
|
||||
pawns_selected = pawn_dict
|
||||
if !Multiplayer.is_host():
|
||||
return
|
||||
pawns_selected = pawns
|
||||
|
||||
for i in Multiplayer.players.values():
|
||||
level_synced[i] = false
|
||||
level_synced[1] = true
|
||||
@@ -117,13 +134,12 @@ func level_spawned(peer_id : int) -> void:
|
||||
level_synced[peer_id] = true
|
||||
check_level_ready()
|
||||
|
||||
|
||||
func check_level_ready() -> void:
|
||||
var ready : bool = true
|
||||
var level_ready : bool = true
|
||||
for id in level_synced:
|
||||
if level_synced[id] == false:
|
||||
ready = false
|
||||
if ready:
|
||||
level_ready = false
|
||||
if level_ready:
|
||||
level.setup()
|
||||
|
||||
func oneshot(stream : AudioStream) -> void:
|
||||
|
||||
@@ -34,11 +34,11 @@ func become_host() -> void:
|
||||
print("Hosting Room...")
|
||||
var room_id = await server_peer.room_connected
|
||||
print("Connected to room: ", server_peer.room_id)
|
||||
server_peer.get_rooms()
|
||||
#server_peer.get_rooms()
|
||||
print("GETTING ROOMS!")
|
||||
var rooms = await server_peer.rooms_received
|
||||
#var rooms = await server_peer.rooms_received
|
||||
print("GOT ROOMS!")
|
||||
print(rooms)
|
||||
#print(rooms)
|
||||
players[handle] = 1
|
||||
player_readiness[1] = false
|
||||
|
||||
@@ -81,26 +81,26 @@ func is_server() -> bool:
|
||||
func is_host() -> bool:
|
||||
return id == 1
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
if waiting:
|
||||
var ready : bool = true
|
||||
var group_ready : bool = true
|
||||
for pr in player_readiness.values():
|
||||
if !pr:
|
||||
ready = false
|
||||
group_ready = false
|
||||
break
|
||||
if ready:
|
||||
if group_ready:
|
||||
all_ready.emit()
|
||||
waiting = false
|
||||
for pr in player_readiness.keys():
|
||||
player_readiness[pr] = false
|
||||
|
||||
func _add_player_to_game(id : int) -> void:
|
||||
print("Player %s joined the game!" % id)
|
||||
func _add_player_to_game(pid : int) -> void:
|
||||
print("Player %s joined the game!" % pid)
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
get_handle_from_peer(id)
|
||||
get_handle_from_peer(pid)
|
||||
|
||||
func _remove_player_from_game(id : int) -> void:
|
||||
print("Player %s left the game!" % id)
|
||||
func _remove_player_from_game(pid : int) -> void:
|
||||
print("Player %s left the game!" % pid)
|
||||
|
||||
func get_handle_from_peer(peer_id) -> void:
|
||||
rpc_id(peer_id, "report_handle_to_peer", id)
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
extends Control
|
||||
class_name CharacterSelect extends Control
|
||||
|
||||
|
||||
const pawns : Array[PawnBaseData] = [
|
||||
preload("res://data/pawns/van_reily.tres"),
|
||||
preload("res://data/pawns/lou_riche.tres"),
|
||||
preload("res://data/pawns/tico.tres"),
|
||||
preload("res://data/pawns/john_bishous.tres"),
|
||||
preload("res://data/pawns/abdoll_relin.tres"),
|
||||
preload("res://data/pawns/tenrou_ugetsu.tres")
|
||||
]
|
||||
|
||||
const p_colors : Array[Color] = [
|
||||
Color.ROYAL_BLUE,
|
||||
@@ -16,31 +9,53 @@ const p_colors : Array[Color] = [
|
||||
|
||||
|
||||
const selector_template = preload("res://templates/pawn_selector.tscn")
|
||||
|
||||
@onready var pawn_displays : Array[PawnDisplay] = [
|
||||
%P1PawnDisplay,
|
||||
%P2PawnDisplay
|
||||
]
|
||||
const pawn_pick_portrait_template = preload("res://templates/pawn_pick_portrait.tscn")
|
||||
|
||||
var selector_wait : float = 0
|
||||
var selected : int = -1
|
||||
var selectors : Dictionary[int,PawnSelector] = {}
|
||||
var displays : Dictionary[int, PawnDisplay] = {}
|
||||
var portraits : Dictionary[Vector2i, PawnPickPortrait] = {}
|
||||
|
||||
var announce_tween : Tween = null
|
||||
@onready var announcer : AudioStreamPlayer = %Announcer
|
||||
@onready var selector_start : Control = %SelectorStart
|
||||
@onready var switch_sound : AudioStreamPlayer = %SwitchSound
|
||||
@onready var select_sound : AudioStreamPlayer = %SelectSound
|
||||
@onready var portrait_grid : GridContainer = %PawnPickPortraits
|
||||
@onready var pawn_displays : Control = %PawnDisplays
|
||||
|
||||
func _ready() -> void:
|
||||
var i : int = 0
|
||||
var idx : Vector2i = Vector2i.ZERO
|
||||
for pawn in Game.pawns.values():
|
||||
var pp : PawnPickPortrait = pawn_pick_portrait_template.instantiate()
|
||||
portrait_grid.add_child(pp)
|
||||
pp.setup(pawn, i)
|
||||
portraits[idx] = pp
|
||||
|
||||
i+=1
|
||||
idx.x += 1
|
||||
if idx.x >= portrait_grid.columns:
|
||||
idx.y += 1
|
||||
idx.x -= portrait_grid.columns
|
||||
|
||||
Multiplayer.waiting = true
|
||||
var plist
|
||||
if Game.is_multiplayer():
|
||||
plist = Multiplayer.players.values()
|
||||
for i in range(Game.num_players):
|
||||
displays[plist[i]] = pawn_displays[i]
|
||||
change_display(plist[i], 0)
|
||||
for id in range(Game.num_players):
|
||||
var display : PawnDisplay = pawn_displays.get_child(id)
|
||||
displays[plist[id]] = display
|
||||
display.visible = true
|
||||
portraits[Vector2i.ZERO].num_players += 1
|
||||
change_display(plist[id], 0)
|
||||
else:
|
||||
displays[1] = pawn_displays[0]
|
||||
displays[1] = pawn_displays.get_child(0)
|
||||
displays[1].visible = true
|
||||
change_display(1, 0)
|
||||
portraits[Vector2i.ZERO].num_players += 1
|
||||
|
||||
Multiplayer.all_ready.connect(add_selector, CONNECT_ONE_SHOT)
|
||||
Multiplayer.set_player_ready.rpc(Multiplayer.id)
|
||||
#Set up each pawn on bottom
|
||||
@@ -64,12 +79,12 @@ func _process(delta : float) -> void:
|
||||
if !selectors.has(Multiplayer.id):
|
||||
return
|
||||
var locked = true
|
||||
var pawns_selected : Dictionary[int, PawnBaseData] = {}
|
||||
var pawns_selected : Dictionary[int, StringName] = {}
|
||||
for selector : PawnSelector in selectors.values():
|
||||
if !selector.selected:
|
||||
locked = false
|
||||
else:
|
||||
pawns_selected[selector.player_id] = pawns[selector.selection]
|
||||
pawns_selected[selector.player_id] = portraits[selector.selection].pawn.name
|
||||
if locked:
|
||||
Game.start_level(pawns_selected)
|
||||
|
||||
@@ -85,26 +100,34 @@ func _process(delta : float) -> void:
|
||||
|
||||
input_vector = Input.get_vector("west","east","north","south")
|
||||
|
||||
var move_dir : Vector2 = Vector2.ZERO
|
||||
var move_dir : Vector2i = Vector2.ZERO
|
||||
|
||||
if input_vector.x < 0:
|
||||
move_dir.x -= 1
|
||||
|
||||
if input_vector.x > 0:
|
||||
move_dir.x += 1
|
||||
|
||||
if move_dir.x != 0:
|
||||
move_selector.rpc(selector.player_id, wrapi(selector.selection + sign(move_dir.x),0, len(pawns)))
|
||||
move_dir = Vector2i((input_vector + .499 * sign(input_vector)).round())
|
||||
if move_dir.length_squared() != 0:
|
||||
var selection : Vector2i = selector.selection + move_dir
|
||||
selection.x = wrapi(selection.x, 0, portrait_grid.columns)
|
||||
selection.y = wrapi(selection.y, 0, ceili(float(portrait_grid.get_child_count()) / portrait_grid.columns))
|
||||
move_selector.rpc(selector.player_id, selection)
|
||||
selector_wait = 0.25
|
||||
|
||||
@rpc("any_peer","call_local","reliable")
|
||||
func move_selector(peer_id : int, selection : int) -> void:
|
||||
func move_selector(peer_id : int, selection : Vector2i) -> void:
|
||||
var selector : PawnSelector = selectors[peer_id]
|
||||
selector.selection = selection
|
||||
change_display(peer_id, selector.selection)
|
||||
var v = Vector2(175 * selector.selection, 0)
|
||||
selector.position = Vector2(175 * selector.selection, 0)
|
||||
portraits[selector.selection].num_players -= 1
|
||||
selector.selection = selection
|
||||
portraits[selector.selection].num_players += 1
|
||||
change_display(peer_id, portraits[selector.selection].pawn_idx)
|
||||
var v = Vector2(154 * selector.selection.x, 154 * selector.selection.y)
|
||||
selector.position = v
|
||||
switch_sound.play()
|
||||
if announce_tween != null and announce_tween.is_running():
|
||||
announce_tween.stop()
|
||||
if announcer.playing:
|
||||
announcer.stop()
|
||||
announce_tween = create_tween()
|
||||
announce_tween.tween_interval(.25)
|
||||
announcer.stream = portraits[selection].pawn.name_audio
|
||||
announce_tween.tween_callback(announcer.play)
|
||||
|
||||
@rpc("any_peer","call_local","reliable")
|
||||
func lock_selector(peer_id : int) -> void:
|
||||
@@ -115,9 +138,10 @@ func lock_selector(peer_id : int) -> void:
|
||||
|
||||
func change_display(player : int, selection: int) -> void:
|
||||
var pd : PawnDisplay = displays[player]
|
||||
pd.set_pawn_name(pawns[selection].name)
|
||||
pd.set_portrait(pawns[selection].portrait)
|
||||
pd.set_hacks(pawns[selection].starting_hacks)
|
||||
var pawn : PawnBaseData = Game.pawns.values()[selection]
|
||||
pd.set_pawn_name(pawn.name)
|
||||
pd.set_portrait(pawn.portrait)
|
||||
pd.set_hacks(pawn.starting_hacks)
|
||||
|
||||
|
||||
func _on_selector_start_child_entered_tree(node: Node) -> void:
|
||||
|
||||
17
scripts/collectable.gd
Normal file
@@ -0,0 +1,17 @@
|
||||
class_name Pickup extends Area3D
|
||||
|
||||
|
||||
enum Type{
|
||||
DATABLOCK,
|
||||
INTEGRITY,
|
||||
SCAN,
|
||||
BASIC_HACK,
|
||||
ADVANCED_HACK
|
||||
}
|
||||
|
||||
@export var type : Type
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body is PawnController:
|
||||
body.pickup(type)
|
||||
queue_free()
|
||||
1
scripts/collectable.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://du3s0b1kotb6l
|
||||
@@ -10,7 +10,7 @@ func _on_melee_range_changed(melee : bool) -> void:
|
||||
range_attack_button.visible = !melee
|
||||
melee_attack_button.visible = melee
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
hack_button.set_pressed_no_signal(Input.is_action_pressed("install"))
|
||||
detect_button.set_pressed_no_signal(Input.is_action_pressed("detect"))
|
||||
switch_button.set_pressed_no_signal(Input.is_action_pressed("detonate"))
|
||||
|
||||
@@ -47,7 +47,7 @@ var decompiling : bool
|
||||
var failed : bool
|
||||
var difficulty : int = 1
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
timer_label.text = "%02f.3" % timer.time_left
|
||||
|
||||
func start_decompiling() -> void:
|
||||
@@ -109,5 +109,5 @@ func succeed() -> void:
|
||||
func _on_hack_failed() -> void:
|
||||
fail()
|
||||
|
||||
func _on_hack_removed(type : Hack.Type) -> void:
|
||||
func _on_hack_removed(_type : Hack.Type) -> void:
|
||||
Game.player.close_modal()
|
||||
|
||||
@@ -22,25 +22,25 @@ func _on_timeout() -> void:
|
||||
|
||||
func spread() -> void:
|
||||
var new_squares : Dictionary[Vector3i, bool] = {}
|
||||
for square in last_spread:
|
||||
for sq in last_spread:
|
||||
for i in range(-1, 2):
|
||||
for j in range(-1, 2):
|
||||
for k in range(-1, 2):
|
||||
var ts = square + Vector3i(i, j, k)
|
||||
new_squares[square + Vector3i(i, j, k)] = true
|
||||
#var ts = sq + Vector3i(i, j, k)
|
||||
new_squares[sq + Vector3i(i, j, k)] = true
|
||||
last_spread = []
|
||||
for square in new_squares.keys():
|
||||
if squares.has(square):
|
||||
for sq in new_squares.keys():
|
||||
if squares.has(sq):
|
||||
continue
|
||||
var floor_square = square + Vector3i(0,-1,0)
|
||||
var floor_square = sq + Vector3i(0,-1,0)
|
||||
if(Game.level.floor_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM
|
||||
and Game.level.ramp_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM):
|
||||
continue
|
||||
last_spread.append(square)
|
||||
squares[square] = true
|
||||
emit_gas(square)
|
||||
last_spread.append(sq)
|
||||
squares[sq] = true
|
||||
emit_gas(sq)
|
||||
|
||||
func emit_gas(square) -> void:
|
||||
func emit_gas(sq) -> void:
|
||||
var gas = gas_square_template.instantiate()
|
||||
gas.setup(hack_owner, damage)
|
||||
Game.level.add_vfx(gas, square)
|
||||
Game.level.add_vfx(gas, sq)
|
||||
|
||||
@@ -16,9 +16,9 @@ func _physics_process(delta: float) -> void:
|
||||
if time_remaining <= 0:
|
||||
queue_free()
|
||||
|
||||
func setup(owner, damage) -> void:
|
||||
self.hack_owner = hack_owner
|
||||
self.damage = damage
|
||||
func setup(h_owner, dam) -> void:
|
||||
hack_owner = h_owner
|
||||
damage = dam
|
||||
time_remaining = 2.0
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
|
||||
119
scripts/hack.gd
@@ -1,40 +1,40 @@
|
||||
class_name Hack extends Area3D
|
||||
|
||||
enum Type{
|
||||
BOMB,
|
||||
MINE,
|
||||
GAS,
|
||||
FORCE_PANEL,
|
||||
SWITCH,
|
||||
PITFALL
|
||||
DESTROY,
|
||||
PURGE,
|
||||
INFECT,
|
||||
REDIRECT,
|
||||
TRIGGER,
|
||||
CONTAIN
|
||||
}
|
||||
|
||||
const range_shapes : Dictionary = {
|
||||
Hack.Type.BOMB : Vector3(4.25,3,4.25),
|
||||
Hack.Type.GAS : Vector3(1,1,1),
|
||||
Hack.Type.PITFALL : Vector3(1,1,1),
|
||||
Hack.Type.FORCE_PANEL : Vector3(1,1,1),
|
||||
Hack.Type.SWITCH : Vector3(3,1,3),
|
||||
Hack.Type.MINE : Vector3(4.25,3,4.25),
|
||||
const range_radius : Dictionary = {
|
||||
Hack.Type.DESTROY : 2,
|
||||
Hack.Type.INFECT : .5,
|
||||
Hack.Type.CONTAIN : .5,
|
||||
Hack.Type.REDIRECT : .5,
|
||||
Hack.Type.TRIGGER : 1,
|
||||
Hack.Type.PURGE : 1.5,
|
||||
}
|
||||
const hack_icons : Dictionary = {
|
||||
Hack.Type.BOMB : preload("res://visuals/images/icons/t-bomb.png"),
|
||||
Hack.Type.GAS : preload("res://visuals/images/icons/t-gas.png"),
|
||||
Hack.Type.PITFALL : preload("res://visuals/images/icons/t-pitfall.png"),
|
||||
Hack.Type.FORCE_PANEL : preload("res://visuals/images/icons/t-force_panel.png"),
|
||||
Hack.Type.SWITCH : preload("res://visuals/images/icons/t-switch.png"),
|
||||
Hack.Type.MINE : preload("res://visuals/images/icons/t-mine.png"),
|
||||
Hack.Type.DESTROY : preload("res://external/destroy-icon.png"),
|
||||
Hack.Type.INFECT : preload("res://external/infect-icon.png"),
|
||||
Hack.Type.CONTAIN : preload("res://external/contain-icon.png"),
|
||||
Hack.Type.REDIRECT : preload("res://external/redirect-icon.png"),
|
||||
Hack.Type.TRIGGER : preload("res://external/trigger-icon.png"),
|
||||
Hack.Type.PURGE : preload("res://external/purge-icon.png"),
|
||||
}
|
||||
|
||||
const bomb_explosion_template = preload("res://templates/explosion.tscn")
|
||||
const mine_explosion_template = preload("res://templates/explosion.tscn")
|
||||
const pitfall_template = preload("res://templates/pitfall.tscn")
|
||||
const switch_explosion_template = preload("res://templates/explosion.tscn")
|
||||
const gas_emitter_template = preload("res://templates/gas_emitter.tscn")
|
||||
const destroy_explosion_template = preload("res://experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_01.tscn")
|
||||
const purge_explosion_template = preload("res://experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_03.tscn")
|
||||
const contain_template = preload("res://templates/pitfall.tscn")
|
||||
const trigger_explosion_template = preload("res://experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_04.tscn")
|
||||
const infect_emitter_template = preload("res://templates/gas_emitter.tscn")
|
||||
const force_activate_sound = preload("res://audio/sounds/TomWinandySFX_UI_ScifiTech_Start_06.wav")
|
||||
|
||||
@onready var range_area : Area3D = %RangeArea
|
||||
@onready var range_shape : BoxShape3D = %RangeShape.shape
|
||||
@onready var range_shape : SphereShape3D = %RangeShape.shape
|
||||
@onready var model : MeshInstance3D = %Model
|
||||
@onready var icon : Sprite3D = %Icon
|
||||
@onready var force_strip : Sprite3D = %ForceStrip
|
||||
@@ -69,13 +69,13 @@ func _enter_tree() -> void:
|
||||
func _exit_tree() -> void:
|
||||
Game.level.remove_map_marker(self)
|
||||
|
||||
func setup(type : Type, direction : Vector3, hack_owner : int) -> void:
|
||||
self.type = type
|
||||
self.hack_owner = hack_owner
|
||||
if type == Type.FORCE_PANEL:
|
||||
var r : float = atan2(direction.z, direction.x)
|
||||
func setup(new_type : Type, dir : Vector3, h_owner : int) -> void:
|
||||
type = new_type
|
||||
hack_owner = h_owner
|
||||
if type == Type.REDIRECT:
|
||||
var r : float = atan2(dir.z, dir.x)
|
||||
var cardinal : float = roundi(r * 2 / PI) * PI / 2
|
||||
self.direction = Vector3(cos(cardinal), 0, sin(cardinal))
|
||||
direction = Vector3(cos(cardinal), 0, sin(cardinal))
|
||||
|
||||
func remove() -> void:
|
||||
removed.emit(type)
|
||||
@@ -108,27 +108,26 @@ func _on_reveal_timeout() -> void:
|
||||
|
||||
func _ready() -> void:
|
||||
var owns_hack = hack_owner == Multiplayer.id
|
||||
print("Setup Hack " + name)
|
||||
material.set_shader_parameter("glow_color", Color.YELLOW if owns_hack else Color.RED)
|
||||
icon.texture = hack_icons[type]
|
||||
model.visible = owns_hack
|
||||
icon.visible = owns_hack
|
||||
range_shape.size = range_shapes[type]
|
||||
range_shape.radius = range_radius[type]
|
||||
match(type):
|
||||
Type.BOMB:
|
||||
Type.DESTROY:
|
||||
damage = 15
|
||||
Type.MINE:
|
||||
Type.PURGE:
|
||||
damage = 10
|
||||
Type.SWITCH:
|
||||
Type.TRIGGER:
|
||||
damage = 5
|
||||
Type.GAS:
|
||||
Type.INFECT:
|
||||
activation_timer.start()
|
||||
Type.FORCE_PANEL:
|
||||
Type.REDIRECT:
|
||||
var r : float = atan2(direction.z, -direction.x) + PI/2
|
||||
force_strip.rotate_y(r)
|
||||
force_strip.visible = owns_hack
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
just_revealed = false
|
||||
|
||||
func blast(body : PawnController) -> void:
|
||||
@@ -140,29 +139,29 @@ func activate() -> void:
|
||||
return
|
||||
var explode : bool = false
|
||||
match(type):
|
||||
Type.PITFALL:
|
||||
generate_pitfall(square)
|
||||
Type.CONTAIN:
|
||||
generate_contain(square)
|
||||
for body in get_overlapping_bodies():
|
||||
body.start_pitfall(square, 6.0)
|
||||
#Generate the circle here
|
||||
Type.FORCE_PANEL:
|
||||
Type.REDIRECT:
|
||||
Game.oneshot(force_activate_sound)
|
||||
for body in get_overlapping_bodies():
|
||||
body.fling(direction, 5.0)
|
||||
Type.MINE:
|
||||
var exp = mine_explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
Type.PURGE:
|
||||
var expl = purge_explosion_template.instantiate()
|
||||
Game.level.add_vfx(expl, square)
|
||||
explode = true
|
||||
Type.SWITCH:
|
||||
var exp = switch_explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
Type.TRIGGER:
|
||||
var expl = trigger_explosion_template.instantiate()
|
||||
Game.level.add_vfx(expl, square)
|
||||
explode = true
|
||||
Type.BOMB:
|
||||
var exp = bomb_explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
Type.DESTROY:
|
||||
var expl = destroy_explosion_template.instantiate()
|
||||
Game.level.add_vfx(expl, square)
|
||||
explode = true
|
||||
Type.GAS:
|
||||
var emitter = gas_emitter_template.instantiate()
|
||||
Type.INFECT:
|
||||
var emitter = infect_emitter_template.instantiate()
|
||||
emitter.hack_owner = hack_owner
|
||||
emitter.square = square
|
||||
emitter.damage = 4
|
||||
@@ -179,13 +178,13 @@ func activate() -> void:
|
||||
|
||||
func trigger_adjacent_bombs() -> void:
|
||||
for hack : Hack in range_area.get_overlapping_areas():
|
||||
if hack.type == Type.BOMB and hack != self:
|
||||
if hack.type == Type.DESTROY and hack != self:
|
||||
hack.delay_trigger()
|
||||
|
||||
func generate_pitfall(suqare : Vector3i) -> void:
|
||||
var pitfall = pitfall_template.instantiate()
|
||||
pitfall.duration = 6.0
|
||||
Game.level.add_vfx(pitfall, square)
|
||||
func generate_contain(sq : Vector3i) -> void:
|
||||
var contain = contain_template.instantiate()
|
||||
contain.duration = 6.0
|
||||
Game.level.add_vfx(contain, sq)
|
||||
|
||||
func blast_players() -> void:
|
||||
for body in range_area.get_overlapping_bodies():
|
||||
@@ -200,14 +199,14 @@ func delay_trigger() -> void:
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if type == Type.GAS or type == Type.BOMB:
|
||||
if type == Type.INFECT or type == Type.DESTROY:
|
||||
return
|
||||
|
||||
if body.id == hack_owner:
|
||||
return
|
||||
|
||||
if !decompiling or body.id != decompile_id:
|
||||
if !body.detecting:
|
||||
if !body.is_detecting():
|
||||
activate()
|
||||
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ func proximal_shake(distance : float) -> void:
|
||||
var d = global_position.distance_squared_to(Game.player.global_position)
|
||||
var d_sq = distance * distance
|
||||
if d <= d_sq:
|
||||
var str : float = (d_sq - d) / d_sq
|
||||
var l_val : float = lerp(0.0, 1.0, str)
|
||||
Input.start_joy_vibration(0, l_val,l_val,lerp(0.5, 1.0, str))
|
||||
var strength : float = (d_sq - d) / d_sq
|
||||
var l_val : float = lerp(0.0, 1.0, strength)
|
||||
Input.start_joy_vibration(0, l_val,l_val,lerp(0.5, 1.0, strength))
|
||||
Game.player.camera.add_trauma(l_val)
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
class_name HackIcon extends Control
|
||||
|
||||
const hack_icons : Dictionary = {
|
||||
Hack.Type.BOMB : preload("res://visuals/images/icons/bomb.png"),
|
||||
Hack.Type.GAS : preload("res://visuals/images/icons/gas.png"),
|
||||
Hack.Type.PITFALL : preload("res://visuals/images/icons/pitfall.png"),
|
||||
Hack.Type.FORCE_PANEL : preload("res://visuals/images/icons/force_panel.png"),
|
||||
Hack.Type.SWITCH : preload("res://visuals/images/icons/switch.png"),
|
||||
Hack.Type.MINE : preload("res://visuals/images/icons/mine.png"),
|
||||
Hack.Type.DESTROY : preload("res://external/destroy-icon.png"),
|
||||
Hack.Type.INFECT : preload("res://external/infect-icon.png"),
|
||||
Hack.Type.CONTAIN : preload("res://external/contain-icon.png"),
|
||||
Hack.Type.REDIRECT : preload("res://external/redirect-icon.png"),
|
||||
Hack.Type.TRIGGER : preload("res://external/trigger-icon.png"),
|
||||
Hack.Type.PURGE : preload("res://external/purge-icon.png"),
|
||||
}
|
||||
|
||||
@onready var icon_image : TextureRect = %Icon
|
||||
|
||||
@@ -8,11 +8,11 @@ func _ready() -> void:
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
pass
|
||||
|
||||
func _on_health_changed(current : int, max : int) -> void:
|
||||
max_value = max
|
||||
func _on_health_changed(current : int, max_amt : int) -> void:
|
||||
max_value = max_amt
|
||||
value = current
|
||||
|
||||
func _on_poison_status_changed(poisoned : bool) -> void:
|
||||
|
||||
@@ -25,6 +25,6 @@ func set_ammo(ammo : int) -> void:
|
||||
ammo_label.text = str(ammo)
|
||||
ammo_label.modulate = Color.DIM_GRAY if ammo == 0 else Color.WHITE
|
||||
|
||||
func _on_ammo_changed(current : int, max : int) -> void:
|
||||
func _on_ammo_changed(current : int, _max_amt : int) -> void:
|
||||
set_ammo(current)
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ const camera_offset = Vector3(0, 10, 5.25)
|
||||
@onready var cameras_node : Node3D = %Cameras
|
||||
@onready var map_markers_node : Node3D = %MapMarkers
|
||||
@onready var spawn_points : Array[Node] = $PawnSpawner.get_children()
|
||||
|
||||
@onready var multiplayer_level_setup : MultiplayerLevelSetup = %MultiplayerLevelSetup
|
||||
@export var difficulty : int = 1
|
||||
|
||||
|
||||
@@ -34,42 +34,81 @@ var cameras : Dictionary[int, PawnCamera] = {}
|
||||
var map_markers : Dictionary[Object, MapMarker] = {}
|
||||
|
||||
func _ready() -> void:
|
||||
process_mode=Node.PROCESS_MODE_DISABLED
|
||||
Game.level = self
|
||||
if Game.mode == Game.Modes.STORY:
|
||||
setup()
|
||||
add_level_hack.call_deferred(Hack.Type.MINE, Vector3.ZERO, Vector3i(-2,2,0))
|
||||
add_level_hack.call_deferred(Hack.Type.PURGE, Vector3.ZERO, Vector3i(-2,2,0))
|
||||
|
||||
func setup() -> void:
|
||||
if Multiplayer.is_host():
|
||||
spawn_players()
|
||||
|
||||
|
||||
@rpc("authority")
|
||||
func spawn_players() -> void:
|
||||
if Game.is_multiplayer():
|
||||
spawn_players_multiplayer()
|
||||
else:
|
||||
spawn_players_singleplayer()
|
||||
|
||||
func spawn_players_singleplayer() -> void:
|
||||
var pc : PawnController = pawn_controller.instantiate()
|
||||
pawns[1] = pc
|
||||
pawns_node.add_child(pc,true)
|
||||
var pos : Vector3
|
||||
if(spawn_points == null
|
||||
or len(spawn_points) <= 1):
|
||||
pos = Vector3(0,0,0)
|
||||
else:
|
||||
pos = spawn_points[0].global_position
|
||||
pc.global_position = pos
|
||||
pc.setup(1, Game.pawns_selected[1])
|
||||
add_pawn_camera(pc)
|
||||
cameras[1].register_pawn(1)
|
||||
process_mode=Node.PROCESS_MODE_INHERIT
|
||||
|
||||
func spawn_players_multiplayer() -> void:
|
||||
var count = 0
|
||||
|
||||
multiplayer_level_setup.set_players_unready(Multiplayer.players.values())
|
||||
multiplayer_level_setup.set_pawns_expected.rpc(Game.pawns_selected.size())
|
||||
|
||||
for key in Game.pawns_selected:
|
||||
var pc : PawnController = pawn_controller.instantiate()
|
||||
var pd = Game.pawns_selected[key]
|
||||
pawns[key] = pc
|
||||
pawns_node.add_child(pc,true)
|
||||
var hacks : Array = []
|
||||
for hack : HackSet in pd.starting_hacks:
|
||||
var dict = {
|
||||
"type":hack.type,
|
||||
"qty":hack.qty
|
||||
}
|
||||
hacks.append(dict)
|
||||
|
||||
var position : Vector3
|
||||
|
||||
await multiplayer_level_setup.all_players_ready
|
||||
|
||||
for key in pawns:
|
||||
var pc = pawns[key]
|
||||
var pos : Vector3
|
||||
if(spawn_points == null
|
||||
or len(spawn_points) <= count):
|
||||
if key == Multiplayer.id:
|
||||
position = Vector3(0,0,0)
|
||||
pos = Vector3(0,0,0)
|
||||
else:
|
||||
position = Vector3(3,0,0)
|
||||
pos = Vector3(3,0,0)
|
||||
else:
|
||||
position = spawn_points[count].global_position
|
||||
pc.setup.rpc(key,hacks,position)
|
||||
add_pawn_camera(pc)
|
||||
pos = spawn_points[count].global_position
|
||||
count += 1
|
||||
|
||||
pc.global_position = pos
|
||||
pc.setup.rpc(key, Game.pawns_selected[key])
|
||||
|
||||
multiplayer_level_setup.set_players_unready(Multiplayer.players.values())
|
||||
multiplayer_level_setup.set_cameras_expected.rpc(Game.pawns_selected.size())
|
||||
for pc in pawns.values():
|
||||
add_pawn_camera(pc)
|
||||
|
||||
await multiplayer_level_setup.all_players_ready
|
||||
setup_cameras()
|
||||
start_level.rpc()
|
||||
|
||||
@rpc("authority", "call_local")
|
||||
func start_level() -> void:
|
||||
process_mode=Node.PROCESS_MODE_INHERIT
|
||||
|
||||
|
||||
func is_square_detected(crd) -> bool:
|
||||
return marker_layer.get_cell_item(crd + Vector3i(0,-1,0)) != GridMap.INVALID_CELL_ITEM
|
||||
@@ -88,15 +127,21 @@ func detect_square(crd : Vector3i, mark : bool) -> bool:
|
||||
hack.reveal()
|
||||
return true
|
||||
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func add_pawn_camera(pawn : PawnController) -> void:
|
||||
if Multiplayer.is_host():
|
||||
var camera : PawnCamera = camera_template.instantiate()
|
||||
camera.position = pawn.global_position + camera_offset
|
||||
cameras_node.add_child(camera,true)
|
||||
camera.register_pawn.rpc(pawn.id)
|
||||
cameras[pawn.id] = camera
|
||||
|
||||
|
||||
|
||||
func setup_cameras() -> void:
|
||||
var camera_list = cameras_node.get_children()
|
||||
var idx = 0
|
||||
for pawn_id in pawns:
|
||||
camera_list[idx].register_pawn.rpc(pawn_id)
|
||||
cameras[pawn_id] = camera_list[idx]
|
||||
idx += 1
|
||||
|
||||
func add_hack(hack : Hack, crd : Vector3i) -> void:
|
||||
hack.square = crd
|
||||
@@ -153,7 +198,7 @@ func remove_map_marker(target) -> void:
|
||||
|
||||
func add_map_marker(target) -> void:
|
||||
var marker : MapMarker
|
||||
var height : float
|
||||
var height : float = 0
|
||||
if target is PawnController:
|
||||
marker = map_marker_templates.pawn.instantiate()
|
||||
height += 40
|
||||
|
||||
@@ -2,17 +2,17 @@ class_name MapMarker extends Node3D
|
||||
|
||||
var target : Node3D
|
||||
|
||||
func register_target(target : Node3D) -> void:
|
||||
self.target = target
|
||||
func register_target(new_target : Node3D) -> void:
|
||||
target = new_target
|
||||
reposition()
|
||||
|
||||
func reposition() -> void:
|
||||
var loc = target.position
|
||||
position = Vector3(loc.x, position.y, loc.z)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
if target:
|
||||
reposition()
|
||||
|
||||
func _on_hack_revealed(is_visible : bool) -> void:
|
||||
visible = is_visible
|
||||
func _on_hack_revealed(reveal : bool) -> void:
|
||||
visible = reveal
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
extends Level
|
||||
|
||||
#const pawn_controller_template = preload("res://templates/pawn_controller.tscn")
|
||||
#
|
||||
#@onready var player_spawner = %Spawner
|
||||
#func _ready() -> void:
|
||||
#print("LEVEL LOADING, ID: " + str(Multiplayer.id) + " with " + str(Multiplayer.players.size()) + " keys recognized")
|
||||
#Game.level = self
|
||||
#
|
||||
#func setup() -> void:
|
||||
#if Multiplayer.is_host():
|
||||
#spawn_players()
|
||||
#
|
||||
#func spawn_players() -> void:
|
||||
#for key in Game.pawns_selected:
|
||||
#var pc : PawnController = pawn_controller_template.instantiate()
|
||||
#var pd = Game.pawns_selected[key]
|
||||
#player_spawner.add_pawn(pc, key)
|
||||
#pc.setup(key,pd.starting_hacks)
|
||||
62
scripts/multiplayer_level_setup.gd
Normal file
@@ -0,0 +1,62 @@
|
||||
class_name MultiplayerLevelSetup extends Node
|
||||
|
||||
|
||||
var players_ready : Dictionary[int, bool] = {}
|
||||
var pawns_expected : int = 1
|
||||
var cameras_expected : int = 1
|
||||
|
||||
signal all_pawns_spawned()
|
||||
signal all_cameras_spawned()
|
||||
signal all_players_ready()
|
||||
|
||||
@rpc("authority", "reliable")
|
||||
func set_pawns_expected(num : int) -> void:
|
||||
all_pawns_spawned.connect(_on_all_pawns_spawned, CONNECT_ONE_SHOT)
|
||||
print("(Instance %s) Expecting %d Pawns" % [Game.cmd_args.instance_id, num])
|
||||
pawns_expected = num
|
||||
|
||||
func set_players_unready(list : Array) -> void:
|
||||
players_ready = {}
|
||||
for id in list:
|
||||
players_ready[id] = false
|
||||
players_ready[1] = true
|
||||
|
||||
func check_all_ready() -> bool:
|
||||
for id in players_ready:
|
||||
if !players_ready[id]:
|
||||
return false
|
||||
return true
|
||||
|
||||
func _on_all_pawns_spawned() -> void:
|
||||
player_ready.rpc_id(1,Multiplayer.id)
|
||||
|
||||
func _on_all_cameras_spawned() -> void:
|
||||
player_ready.rpc_id(1,Multiplayer.id)
|
||||
|
||||
@rpc("any_peer", "reliable")
|
||||
func player_ready(id : int) -> void:
|
||||
print("(Instance %s) Player %d notified ready" % [Game.cmd_args.instance_id, id])
|
||||
players_ready[id] = true
|
||||
if(check_all_ready()):
|
||||
print("(Instance %s) ALL PLAYERS READY!!" % [Game.cmd_args.instance_id])
|
||||
all_players_ready.emit()
|
||||
|
||||
@rpc("authority", "reliable")
|
||||
func set_cameras_expected(num : int) -> void:
|
||||
all_cameras_spawned.connect(_on_all_cameras_spawned, CONNECT_ONE_SHOT)
|
||||
cameras_expected = num
|
||||
|
||||
|
||||
func _on_pawn_spawner_spawned(node: Node) -> void:
|
||||
print("(Instance %s) Spawned %d Pawn" % [Game.cmd_args.instance_id, node.id])
|
||||
pawns_expected -= 1
|
||||
if pawns_expected == 0:
|
||||
print("(Instance %s) ALL PAWNS SPAWNED!" % [Game.cmd_args.instance_id])
|
||||
all_pawns_spawned.emit()
|
||||
|
||||
|
||||
|
||||
func _on_camera_spawner_spawned(_node: Node) -> void:
|
||||
cameras_expected -= 1
|
||||
if cameras_expected == 0:
|
||||
all_cameras_spawned.emit()
|
||||
1
scripts/multiplayer_level_setup.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b5npi1ys4lnf4
|
||||
@@ -70,7 +70,7 @@ func _on_joining_back_button_pressed() -> void:
|
||||
%Joining.visible = false
|
||||
%Menu.visible = true
|
||||
|
||||
func _on_client_added(peer_handle : String, peer_id : int) -> void:
|
||||
func _on_client_added(peer_handle : String, _peer_id : int) -> void:
|
||||
%ParticipantsText.text = "[color=FFFF00][b]*%s[/b][/color]\n[color=FFFFFF]*%s[/color]" % [handle, peer_handle]
|
||||
%StartButton.disabled = false
|
||||
|
||||
|
||||
18
scripts/multiplayer_test_level.gd
Normal file
@@ -0,0 +1,18 @@
|
||||
extends Node3D
|
||||
|
||||
func _enter_tree() -> void:
|
||||
|
||||
Game.pawns_selected[1] = Game.pawns.keys()[0]
|
||||
Multiplayer.client_added.connect(_on_client_added)
|
||||
|
||||
#SETUP HOST:
|
||||
if !Game.net_test:
|
||||
var handle = "Host - P1"
|
||||
Multiplayer.handle = handle
|
||||
#Validate entries
|
||||
Multiplayer.become_host()
|
||||
|
||||
|
||||
func _on_client_added(handle : String, id : int) -> void:
|
||||
pass
|
||||
|
||||
@@ -13,6 +13,9 @@ class_name PawnBody extends Node3D
|
||||
@onready var walk_sound : AudioStreamPlayer3D = $WalkSound
|
||||
@onready var footstep_timer : Timer = $FootstepTimer
|
||||
|
||||
signal shooting()
|
||||
signal reloading()
|
||||
|
||||
@rpc("call_local")
|
||||
func play_animation(anim_name : String) -> void:
|
||||
anim_player.play(anim_name)
|
||||
@@ -45,6 +48,21 @@ func _on_struggle_changed(value : float) -> void:
|
||||
else:
|
||||
struggle_bar.value = value
|
||||
|
||||
func set_animation_length(node_name : String, length : float) -> void:
|
||||
if length == 0:
|
||||
length = 0.01
|
||||
var blendtree : AnimationNodeBlendTree = anim_tree.tree_root.get_node(node_name)
|
||||
if !blendtree:
|
||||
return
|
||||
var anim_node : AnimationNodeAnimation = blendtree.get_node("Animation")
|
||||
if !anim_node:
|
||||
return
|
||||
var animation : Animation = anim_player.get_animation(anim_node.animation)
|
||||
if !animation:
|
||||
return
|
||||
var a_scale : float = animation.length / length
|
||||
anim_tree["parameters/%s/TimeScale/scale" % node_name] = a_scale
|
||||
|
||||
|
||||
func _on_footstep_timer_timeout() -> void:
|
||||
walk_sound.play()
|
||||
|
||||
@@ -4,6 +4,7 @@ class_name PawnCamera extends Camera3D
|
||||
var target
|
||||
var player_offset : Vector3
|
||||
|
||||
@export var player_id = 1
|
||||
@export var decay = 0.9 # How quickly the shaking stops [0, 1].
|
||||
@export var max_offset = Vector2(2, 1.5) # Maximum hor/ver shake in pixels.
|
||||
|
||||
@@ -44,7 +45,7 @@ func _process(delta: float) -> void:
|
||||
func shake():
|
||||
noise_y += .1
|
||||
var amount = pow(trauma, trauma_power)
|
||||
var n_val = noise.get_noise_2d(noise.seed*2, noise_y)
|
||||
#var n_val = noise.get_noise_2d(noise.seed*2, noise_y)
|
||||
h_offset = max_offset.x * amount * randf_range(-1, 1)
|
||||
v_offset = max_offset.y * amount * randf_range(-1, 1)
|
||||
print("%f %f" % [h_offset, v_offset])
|
||||
|
||||
@@ -2,6 +2,11 @@ class_name PawnController extends CharacterBody3D
|
||||
|
||||
enum State {
|
||||
NORMAL,
|
||||
DETECTING,
|
||||
INSTALLING,
|
||||
UNINSTALLING,
|
||||
MELEE_ATTACKING,
|
||||
RANGED_ATTACKING,
|
||||
KNOCKDOWN,
|
||||
KNOCKUP,
|
||||
FLUNG,
|
||||
@@ -15,9 +20,10 @@ const hack_template = preload("res://templates/hack.tscn")
|
||||
const uninstall_hack_modal = preload("res://templates/uninstall_hack_modal.tscn")
|
||||
const decompile_hack_modal = preload("res://templates/decompile_hack_modal.tscn")
|
||||
const range_sphere_template = preload("res://templates/range_sphere.tscn")
|
||||
@export var pawn_name : StringName
|
||||
@export var speed : float = 10
|
||||
|
||||
@onready var body : PawnBody = $PawnBody
|
||||
@onready var body : PawnBody
|
||||
@onready var input : PawnInput = $PawnInput
|
||||
@onready var data : PawnLevelData = $Data
|
||||
@onready var hack_sound : AudioStreamPlayer3D = $HackSound
|
||||
@@ -25,18 +31,15 @@ const range_sphere_template = preload("res://templates/range_sphere.tscn")
|
||||
@onready var detect_sound : AudioStreamPlayer3D = $DetectSound
|
||||
@onready var fling_sound : AudioStreamPlayer3D = $FlingSound
|
||||
@onready var crash_sound : AudioStreamPlayer3D = $CrashSound
|
||||
@onready var reload_sound : AudioStreamPlayer3D = $PawnBody/ReloadSound
|
||||
@onready var reload_sound : AudioStreamPlayer3D
|
||||
@onready var detect_icon : Sprite3D = $DetectIcon
|
||||
|
||||
var id : int = 1
|
||||
@export var id : int = 1
|
||||
|
||||
@export var state : State
|
||||
var button_actions : Dictionary[int, String]
|
||||
var current_square : Vector3i
|
||||
var facing : Vector3
|
||||
@export var detecting : bool = false
|
||||
var installing : bool = false
|
||||
var uninstalling : bool = false
|
||||
var range_sphere : RangeSphere
|
||||
var detect_squares : Dictionary[Vector3i, bool] = {}
|
||||
var detect_tween : Tween = null
|
||||
@@ -50,18 +53,19 @@ var poison_time_remaining : float = 0
|
||||
var poison_pulse_timer : float
|
||||
|
||||
var melee_range : float = 3.0
|
||||
var can_melee : bool = false
|
||||
var ranged_range : float = 6
|
||||
var attack_timer : float = 0
|
||||
var melee_recovery_time : float = .75
|
||||
var ranged_recovery_time : float = .2
|
||||
var ranged_recovery_time : float = 0.25
|
||||
var ranged_reload_time : float = 1
|
||||
var projectile_speed : float = 10.0
|
||||
var projectile_damage : int = 4
|
||||
var ammo = 5
|
||||
var max_ammo = 5
|
||||
var combat_target
|
||||
var meleeing : bool = false
|
||||
var shooting : bool = false
|
||||
var reloading : bool = false
|
||||
var take_shot : bool = false
|
||||
var flinch : float = 0
|
||||
|
||||
|
||||
@@ -95,6 +99,23 @@ func _exit_tree() -> void:
|
||||
#Game.level.evaluate_outcome()
|
||||
#Game.evaluate
|
||||
|
||||
func calculate_pawn_velocity(dir : Vector3) -> Vector3:
|
||||
var y = velocity.y
|
||||
var result = speed * dir
|
||||
if is_poisoned():
|
||||
result *= 0.5
|
||||
if is_crouching():
|
||||
result *= .33
|
||||
result.y = y
|
||||
return result
|
||||
|
||||
func play_footsteps(spd : float, loud : bool) -> void:
|
||||
if loud:
|
||||
body.play_footsteps(spd)
|
||||
|
||||
func stop_footsteps() -> void:
|
||||
body.stop_footsteps()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if attack_timer > 0:
|
||||
attack_timer -= delta
|
||||
@@ -137,40 +158,28 @@ func _physics_process(delta: float) -> void:
|
||||
knockdown(-fling_direction)
|
||||
hurt(10)
|
||||
moving = false
|
||||
State.NORMAL:
|
||||
State.NORMAL, State.DETECTING, State.INSTALLING:
|
||||
can_fall = true
|
||||
|
||||
if dir.length_squared() > 0:
|
||||
moving = true
|
||||
velocity = calculate_pawn_velocity(dir)
|
||||
facing = dir.normalized()
|
||||
body.look_at(body.global_position - dir)
|
||||
var y = velocity.y
|
||||
velocity = speed * dir
|
||||
if is_poisoned():
|
||||
velocity *= 0.5
|
||||
if detecting:
|
||||
velocity *= .33
|
||||
velocity.y = y
|
||||
if !detecting:
|
||||
body.play_footsteps(lerp(.78, .33, dir.length()))
|
||||
else:
|
||||
body.stop_footsteps()
|
||||
play_footsteps(lerp(.78, .33, dir.length()), true)
|
||||
else:
|
||||
body.stop_footsteps()
|
||||
body.set_animation_parameter("parameters/Motion/blend_position", dir.length())
|
||||
body.set_animation_parameter("parameters/Crouch/blend_position", dir.length())
|
||||
stop_footsteps()
|
||||
if body != null:
|
||||
body.set_animation_parameter("parameters/Motion/blend_position", dir.length())
|
||||
body.set_animation_parameter("parameters/Crouch/blend_position", dir.length())
|
||||
State.KNOCKUP:
|
||||
if is_on_floor():
|
||||
knockdown(facing)
|
||||
else:
|
||||
moving = true
|
||||
can_fall = true
|
||||
State.KNOCKDOWN,State.BOUND,State.DEAD:
|
||||
return
|
||||
|
||||
|
||||
if can_fall:
|
||||
var down = 0
|
||||
if !is_on_floor():
|
||||
velocity.y = velocity.y + get_gravity().y * delta
|
||||
moving = true
|
||||
@@ -178,9 +187,11 @@ func _physics_process(delta: float) -> void:
|
||||
if moving:
|
||||
move_and_slide()
|
||||
|
||||
if detecting:
|
||||
if is_detecting():
|
||||
update_detect_region.rpc(true)
|
||||
|
||||
|
||||
if range_sphere:
|
||||
update_range_sphere()
|
||||
#Deal with the rest of the buttons
|
||||
if !input_locked:
|
||||
if modal:
|
||||
@@ -193,67 +204,100 @@ func _physics_process(delta: float) -> void:
|
||||
for button in buttons:
|
||||
if input.is_action_just_pressed(button):
|
||||
modal.button_pressed(button)
|
||||
elif state == State.NORMAL:
|
||||
else:
|
||||
update_actions()
|
||||
|
||||
@rpc("call_local", "reliable")
|
||||
func setup_pawn_body(pd : PawnBaseData) -> void:
|
||||
set_pawn_body(pd.pawn_body.instantiate())
|
||||
|
||||
func set_pawn_body(pb : PawnBody) -> void:
|
||||
if body != null:
|
||||
body.queue_free()
|
||||
body = pb
|
||||
pb.reloading.connect(reload_ranged)
|
||||
pb.shooting.connect(fire_ranged)
|
||||
reload_sound = body.find_child("ReloadSound")
|
||||
add_child(body)
|
||||
body.set_animation_length("Ranged Fire", ranged_recovery_time)
|
||||
struggling.connect(body._on_struggle_changed)
|
||||
|
||||
|
||||
func attack() -> void:
|
||||
if attack_timer > 0:
|
||||
return
|
||||
if meleeing:
|
||||
body.play_animation.rpc("melee")
|
||||
if can_melee:
|
||||
state = State.MELEE_ATTACKING
|
||||
attack_timer = melee_recovery_time
|
||||
else:
|
||||
if ammo <= 0:
|
||||
reload_sound.play()
|
||||
ammo = max_ammo
|
||||
attack_timer = ranged_reload_time
|
||||
ammo_changed.emit(ammo, max_ammo)
|
||||
reloading = true
|
||||
return
|
||||
|
||||
ammo-=1
|
||||
ammo_changed.emit(ammo, max_ammo)
|
||||
attack_timer = ranged_recovery_time
|
||||
shooting == true
|
||||
state = State.RANGED_ATTACKING
|
||||
take_shot = true
|
||||
if combat_target != null:
|
||||
var v = body.global_position.direction_to(combat_target.global_position)
|
||||
v.y = 0
|
||||
body.look_at(body.global_position - v)
|
||||
|
||||
|
||||
|
||||
func reload_ranged() -> void:
|
||||
reloading = false
|
||||
reload_sound.play()
|
||||
ammo = max_ammo
|
||||
attack_timer = ranged_reload_time
|
||||
ammo_changed.emit(ammo, max_ammo)
|
||||
|
||||
func update_actions() -> void:
|
||||
if attack_timer <= 0 and shooting and !input.is_action_pressed("attack"):
|
||||
shooting = false
|
||||
|
||||
if state == State.DEAD:
|
||||
return
|
||||
|
||||
if attack_timer <= 0 and is_attacking():
|
||||
if !input.is_action_pressed("attack"):
|
||||
state = State.NORMAL
|
||||
elif is_shooting():
|
||||
if ammo <= 0:
|
||||
reloading = true
|
||||
else:
|
||||
take_shot = true
|
||||
|
||||
if input.is_action_just_pressed("left cycle hack"):
|
||||
cycle_active_hack(-1)
|
||||
if input.is_action_just_pressed("right cycle hack"):
|
||||
cycle_active_hack(1)
|
||||
if input.is_action_just_pressed("detonate"):
|
||||
detonate()
|
||||
elif !installing:
|
||||
if input.is_action_just_pressed("detect"):
|
||||
start_detecting()
|
||||
elif input.is_action_just_released("detect"):
|
||||
stop_detecting()
|
||||
if!detecting:
|
||||
if input.is_action_just_pressed("install"):
|
||||
installing = true
|
||||
if range_sphere != null:
|
||||
range_sphere.queue_free()
|
||||
range_sphere = range_sphere_template.instantiate()
|
||||
#Set the range sphere size based upon the current hack
|
||||
update_range_sphere()
|
||||
if input.is_action_just_released("install"):
|
||||
installing = false
|
||||
try_install_hack()
|
||||
match(state):
|
||||
State.NORMAL:
|
||||
if input.is_action_just_pressed("detonate"):
|
||||
detonate()
|
||||
if(input.is_action_just_pressed("detect")
|
||||
and input.is_action_pressed("detect")):
|
||||
start_detecting()
|
||||
return
|
||||
if(input.is_action_just_pressed("install")
|
||||
and input.is_action_pressed("install")):
|
||||
start_installing()
|
||||
return
|
||||
elif input.is_action_pressed("attack"):
|
||||
attack()
|
||||
elif input.is_action_just_released("install"):
|
||||
installing = false
|
||||
try_install_hack()
|
||||
State.DETECTING:
|
||||
if !input.is_action_pressed("detect"):
|
||||
stop_detecting()
|
||||
State.INSTALLING:
|
||||
if !input.is_action_pressed("install"):
|
||||
stop_installing()
|
||||
try_install_hack()
|
||||
|
||||
func update_range_sphere() -> void:
|
||||
pass
|
||||
var new_pos = (global_position - Vector3.ONE * .5).round() + Vector3(0.5, 0, 0.5)
|
||||
if range_sphere.global_position != new_pos:
|
||||
range_sphere.global_position = new_pos
|
||||
var type = data.hacks[data.active_hack].type
|
||||
if range_sphere.type != type:
|
||||
range_sphere.set_range(Hack.range_radius[data.hacks[data.active_hack].type])
|
||||
range_sphere.type = type
|
||||
|
||||
func update_struggle(delta : float) -> bool:
|
||||
if struggle_timer > 0:
|
||||
@@ -285,7 +329,11 @@ func update_poison(delta : float) -> void:
|
||||
func fire_ranged() -> void:
|
||||
var shot = body.projectile_template.instantiate()
|
||||
var tdir : Vector3 = Vector3.ZERO
|
||||
take_shot = false
|
||||
ammo-=1
|
||||
ammo_changed.emit(ammo, max_ammo)
|
||||
shot.speed = projectile_speed
|
||||
shot.id = id
|
||||
tdir = body.ranged_point.global_position.direction_to(combat_target.global_position) if combat_target else facing
|
||||
shot.direction = tdir
|
||||
shot.damage = projectile_damage
|
||||
@@ -330,10 +378,10 @@ func check_attack_target() -> void:
|
||||
ranged_closest = target
|
||||
ranged_d_sq = d_sq
|
||||
if melee_closest != null:
|
||||
meleeing = true
|
||||
can_melee = true
|
||||
combat_target = melee_closest
|
||||
else:
|
||||
meleeing = false
|
||||
can_melee = false
|
||||
if ranged_closest != null:
|
||||
combat_target = ranged_closest
|
||||
combat_target_changed.emit(melee_closest != null)
|
||||
@@ -351,12 +399,13 @@ func try_install_hack() -> void:
|
||||
|
||||
action_tween = create_tween()
|
||||
input_locked = true
|
||||
body.travel_animation("Install")
|
||||
#body.travel_animation("Install")
|
||||
action_tween.tween_interval(.2)
|
||||
action_tween.tween_callback(Callable(install_hack).bind(square, data.active_hack))
|
||||
action_tween.tween_interval(.25)
|
||||
action_tween.tween_callback(clear_action)
|
||||
|
||||
|
||||
|
||||
func install_hack(square : Vector3i, idx : int) -> void:
|
||||
var type : Hack.Type = data.hacks[idx].type
|
||||
var hack = hack_template.instantiate()
|
||||
@@ -384,21 +433,21 @@ func detect_alert() -> void:
|
||||
detect_tween.tween_callback(func(): detect_tween = null)
|
||||
|
||||
func close_modal() -> void:
|
||||
uninstalling = false
|
||||
state = State.NORMAL
|
||||
if modal != null:
|
||||
modal.queue_free()
|
||||
modal = null
|
||||
|
||||
func show_uninstall_hack_modal() -> void:
|
||||
stop_detecting()
|
||||
uninstalling = true
|
||||
state = State.UNINSTALLING
|
||||
modal = uninstall_hack_modal.instantiate()
|
||||
modal.square = current_square
|
||||
Game.level.add_child(modal)
|
||||
|
||||
func show_decompile_hack_modal() -> void:
|
||||
stop_detecting()
|
||||
uninstalling = true
|
||||
state = State.UNINSTALLING
|
||||
modal = decompile_hack_modal.instantiate()
|
||||
modal.difficulty = Game.level.difficulty
|
||||
modal.square = current_square
|
||||
@@ -412,8 +461,23 @@ func show_decompile_hack_modal() -> void:
|
||||
Game.level.add_child(modal)
|
||||
|
||||
func start_detecting() -> void:
|
||||
detecting = true
|
||||
update_detect_region.rpc(false)
|
||||
state = State.DETECTING
|
||||
update_detect_region(false)
|
||||
|
||||
func start_installing() -> void:
|
||||
state = State.INSTALLING
|
||||
if id == Multiplayer.id:
|
||||
if range_sphere != null:
|
||||
range_sphere.queue_free()
|
||||
range_sphere = range_sphere_template.instantiate()
|
||||
Game.level.add_child(range_sphere)
|
||||
#Set the range sphere size based upon the current hack
|
||||
update_range_sphere()
|
||||
|
||||
func stop_installing() -> void:
|
||||
state = State.NORMAL
|
||||
range_sphere.queue_free()
|
||||
range_sphere = null
|
||||
|
||||
@rpc("authority", "call_local")
|
||||
func update_detect_region(update : bool) -> void:
|
||||
@@ -438,13 +502,14 @@ func update_detect_region(update : bool) -> void:
|
||||
|
||||
var remove_list = []
|
||||
var hack_detected : bool = false
|
||||
var hack : Hack
|
||||
for sq in new_squares.keys():
|
||||
if update and detect_squares.has(sq):
|
||||
continue
|
||||
if !Game.level.detect_square(sq, true):
|
||||
remove_list.append(sq)
|
||||
else:
|
||||
var hack = Game.level.get_square_hack(sq + Vector3i(0,1,0))
|
||||
hack = Game.level.get_square_hack(sq + Vector3i(0,1,0))
|
||||
if hack and hack.is_just_revealed():
|
||||
hack_detected = true
|
||||
|
||||
@@ -456,7 +521,7 @@ func update_detect_region(update : bool) -> void:
|
||||
for key in remove_list:
|
||||
detect_squares.erase(key)
|
||||
|
||||
var hack : Hack = Game.level.get_square_hack(current_square)
|
||||
hack = Game.level.get_square_hack(current_square)
|
||||
if hack != null:
|
||||
if hack.hack_owner == Multiplayer.id:
|
||||
show_uninstall_hack_modal()
|
||||
@@ -465,7 +530,7 @@ func update_detect_region(update : bool) -> void:
|
||||
show_decompile_hack_modal()
|
||||
|
||||
func stop_detecting() -> void:
|
||||
detecting = false
|
||||
state = State.NORMAL
|
||||
clear_detect_region.rpc()
|
||||
|
||||
@rpc("authority", "call_local")
|
||||
@@ -477,15 +542,15 @@ func clear_detect_region() -> void:
|
||||
detect_squares = {}
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func setup(id : int, hacks : Array, pos : Vector3) -> void:
|
||||
self.id = id
|
||||
self.global_position = pos
|
||||
func setup(p_id : int, pawn : StringName) -> void:
|
||||
id = p_id
|
||||
var base_data : PawnBaseData = Game.pawns[pawn]
|
||||
var hacklist : Array[PawnLevelData.HackData] = []
|
||||
for hack in hacks:
|
||||
for hack in base_data.starting_hacks:
|
||||
hacklist.append(PawnLevelData.HackData.new(hack.type, hack.qty, hack.qty))
|
||||
$Data.hacks = hacklist
|
||||
input.set_multiplayer_authority(id)
|
||||
struggling.connect(body._on_struggle_changed)
|
||||
setup_pawn_body(base_data)
|
||||
Game.setup_player(self)
|
||||
|
||||
func uninstall_hack_at(square) -> void:
|
||||
@@ -525,9 +590,11 @@ func hurt(damage : int) -> void:
|
||||
health_changed.emit(data.life, data.max_life)
|
||||
if data.life == 0:
|
||||
die.rpc()
|
||||
@rpc("any_peer", "call_local")
|
||||
|
||||
@rpc("authority", "call_local")
|
||||
func die() -> void:
|
||||
state = State.DEAD
|
||||
body.travel_animation("Death")
|
||||
input_locked = true
|
||||
if id == Multiplayer.id:
|
||||
var death_tween = create_tween()
|
||||
@@ -539,28 +606,22 @@ func _on_hack_decompiled(type : Hack.Type) -> void:
|
||||
for i in range(len(data.hacks)):
|
||||
var d = data.hacks[i]
|
||||
if d.type == type:
|
||||
d.max -= 1
|
||||
d.max_quantity -= 1
|
||||
hack_quantity_changed.emit(i, d.quantity)
|
||||
break
|
||||
#hurt
|
||||
#blast
|
||||
#blast_players
|
||||
#activate
|
||||
#activate_hack
|
||||
#fail
|
||||
#on_hack_failed
|
||||
|
||||
func _on_hack_activated(type : Hack.Type) -> void:
|
||||
for i in range(len(data.hacks)):
|
||||
var d = data.hacks[i]
|
||||
if d.type == type:
|
||||
d.quantity = min(d.max, d.quantity+ 1)
|
||||
d.quantity = min(d.max_quantity, d.quantity+ 1)
|
||||
hack_quantity_changed.emit(i, d.quantity)
|
||||
break
|
||||
|
||||
func detonate() -> void:
|
||||
var switch_list = []
|
||||
for hack : Hack in Game.level.hacks.values():
|
||||
if hack.type == Hack.Type.SWITCH and hack.hack_owner == id:
|
||||
if hack.type == Hack.Type.TRIGGER and hack.hack_owner == id:
|
||||
switch_list.append(hack)
|
||||
detonate_sound.play()
|
||||
|
||||
@@ -584,10 +645,10 @@ func poison(damage : int, length : float) -> void:
|
||||
pshader.set_shader_parameter("strength", 0.5)
|
||||
poison_status_changed.emit(true)
|
||||
|
||||
func fling(direction : Vector3, speed : float) -> void:
|
||||
func fling(direction : Vector3, spd : float) -> void:
|
||||
state = State.FLUNG
|
||||
fling_direction = direction
|
||||
fling_speed = speed
|
||||
fling_speed = spd
|
||||
fling_sound.play()
|
||||
|
||||
func knockdown(direction : Vector3) -> void:
|
||||
@@ -602,14 +663,14 @@ func knockdown(direction : Vector3) -> void:
|
||||
knockdown_tween.tween_property(self, "input_locked", false, 0)
|
||||
knockdown_tween.tween_callback(Callable(body.look_at).bind(facing, Vector3(0,1,0)))
|
||||
|
||||
func knockup(velocity : Vector3) -> void:
|
||||
func knockup(vel : Vector3) -> void:
|
||||
if state != State.KNOCKUP:
|
||||
state = State.KNOCKUP
|
||||
input_locked = true
|
||||
if is_on_floor():
|
||||
self.velocity = Vector3.UP * .1
|
||||
velocity = Vector3.UP * .1
|
||||
move_and_slide()
|
||||
self.velocity = velocity
|
||||
velocity = vel
|
||||
|
||||
func knockback(direction : Vector3, impact : float) -> void:
|
||||
if state != State.NORMAL:
|
||||
@@ -633,14 +694,46 @@ func start_pitfall(square : Vector3, duration : float) -> void:
|
||||
tween.tween_property(self, "input_locked", false, 0)
|
||||
tween.tween_callback(pitfall.bind(duration))
|
||||
|
||||
func _on_melee_hit(body : Node3D) -> void:
|
||||
func _on_melee_hit(_body : Node3D) -> void:
|
||||
#TODO: WRITE THE MELEE DAMAGE CODE
|
||||
pass
|
||||
|
||||
|
||||
func is_attacking() -> bool:
|
||||
return state == State.RANGED_ATTACKING or state == State.MELEE_ATTACKING
|
||||
|
||||
func is_meleeing() -> bool:
|
||||
return state == State.MELEE_ATTACKING
|
||||
func is_shooting() -> bool:
|
||||
return state == State.RANGED_ATTACKING
|
||||
|
||||
func is_dead() -> bool:
|
||||
return state == State.DEAD
|
||||
|
||||
func is_detecting() -> bool:
|
||||
return detecting
|
||||
return state == State.DETECTING
|
||||
|
||||
func is_installing() -> bool:
|
||||
return state == State.INSTALLING
|
||||
|
||||
func is_uninstalling() -> bool:
|
||||
return state == State.UNINSTALLING
|
||||
|
||||
func is_crouching() -> bool:
|
||||
return detecting or installing or uninstalling
|
||||
var result : bool = false
|
||||
match(state):
|
||||
State.DETECTING: result = true
|
||||
State.INSTALLING: result = true
|
||||
State.UNINSTALLING: result = true
|
||||
return result
|
||||
|
||||
func add_random_hack(advanced : bool) -> void:
|
||||
#TODO: Add random hack spawning using RPCs
|
||||
pass
|
||||
|
||||
func pickup(type : Pickup.Type) -> void:
|
||||
if id != Multiplayer.id:
|
||||
return
|
||||
match(type):
|
||||
Pickup.Type.DATABLOCK: print("Datablock picked up!")
|
||||
Pickup.Type.BASIC_HACK: add_random_hack(false)
|
||||
|
||||
@@ -35,5 +35,5 @@ func tv_blur(amount : float) -> void:
|
||||
var blinder_mat : ShaderMaterial = portrait_blinder.material
|
||||
blinder_mat.set_shader_parameter("opacity_limit", amount)
|
||||
|
||||
func set_pawn_name(name : String) -> void:
|
||||
pawn_name.text = name
|
||||
func set_pawn_name(p_name : String) -> void:
|
||||
pawn_name.text = p_name
|
||||
|
||||
@@ -32,7 +32,7 @@ func _ready() -> void:
|
||||
"attack":false
|
||||
}
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if get_multiplayer_authority() != Multiplayer.id:
|
||||
return
|
||||
var d = Input.get_vector("west", "east", "north", "south")
|
||||
|
||||
@@ -3,12 +3,12 @@ class_name PawnLevelData extends Node
|
||||
class HackData:
|
||||
var type : Hack.Type
|
||||
var quantity : int
|
||||
var max : int
|
||||
var max_quantity : int
|
||||
|
||||
func _init(type : Hack.Type, quantity : int, max : int) -> void:
|
||||
self.type = type
|
||||
self.quantity = quantity
|
||||
self.max = max
|
||||
func _init(new_type : Hack.Type, amt : int, max_amt : int) -> void:
|
||||
type = new_type
|
||||
quantity = amt
|
||||
max_quantity = max_amt
|
||||
|
||||
var hacks : Array[HackData] = []
|
||||
var active_hack : int = 0
|
||||
|
||||
25
scripts/pawn_pick_portrait.gd
Normal file
@@ -0,0 +1,25 @@
|
||||
class_name PawnPickPortrait extends Panel
|
||||
|
||||
@onready var portrait : TextureRect = %Portrait
|
||||
@onready var cover : Control = %Cover
|
||||
var pawn : PawnBaseData
|
||||
var pawn_idx : int
|
||||
var _players : int = 0
|
||||
|
||||
var num_players : int :
|
||||
get:
|
||||
return _players
|
||||
set(value):
|
||||
_players = value
|
||||
if cover != null:
|
||||
cover.visible = (_players == 0)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
func setup(data : PawnBaseData, idx : int) -> void:
|
||||
pawn = data
|
||||
pawn_idx = idx
|
||||
if portrait != null:
|
||||
portrait.texture = data.portrait
|
||||
1
scripts/pawn_pick_portrait.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dqpoa5x8u3r3h
|
||||
@@ -2,7 +2,7 @@ class_name PawnSelector extends TextureRect
|
||||
|
||||
@onready var anim_player : AnimationPlayer = $AnimationPlayer
|
||||
@export var player_id : int
|
||||
@export var selection : int = 0
|
||||
@export var selection : Vector2i = Vector2.ZERO
|
||||
@export var selected : bool
|
||||
|
||||
func setup(id : int, color : Color) -> void:
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
class_name Projectile extends RigidBody3D
|
||||
class_name Projectile extends Area3D
|
||||
|
||||
var id : int = 0
|
||||
var direction : Vector3
|
||||
var speed : float
|
||||
var friend_safe : bool = true
|
||||
var damage
|
||||
var time_remaining : float
|
||||
func _ready() -> void:
|
||||
linear_velocity = speed * direction
|
||||
time_remaining = 2
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
global_position += speed * direction * delta
|
||||
time_remaining -= delta
|
||||
if time_remaining <= 0:
|
||||
queue_free()
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
queue_free()
|
||||
|
||||
|
||||
|
||||
func _on_hit_area_entered(body: Node3D) -> void:
|
||||
if body is PawnController:
|
||||
body.hurt(damage)
|
||||
if !friend_safe or id != body.id:
|
||||
body.hurt(damage)
|
||||
queue_free()
|
||||
else:
|
||||
queue_free()
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
class_name RangeSphere extends CSGSphere3D
|
||||
@tool
|
||||
class_name RangeSphere extends Node3D
|
||||
|
||||
var _radius : float = 1
|
||||
var type : Hack.Type = -1
|
||||
@onready var rim_sphere : CSGSphere3D = $RimSphere
|
||||
@onready var intersect_sphere : CSGSphere3D = $IntersectSphere
|
||||
|
||||
func set_range(range : int) -> void:
|
||||
radius = range
|
||||
@export_range(0.1, 10.0, 0.1) var radius : float :
|
||||
get:
|
||||
return _radius
|
||||
set(value):
|
||||
_radius = value
|
||||
if rim_sphere != null:
|
||||
rim_sphere.radius = _radius
|
||||
if intersect_sphere != null:
|
||||
intersect_sphere.radius = _radius
|
||||
|
||||
|
||||
func set_range(new_radius : float) -> void:
|
||||
radius = new_radius
|
||||
|
||||
@@ -3,6 +3,6 @@ extends Node3D
|
||||
@onready var level : Level = $Level
|
||||
|
||||
func _ready() -> void:
|
||||
Game.pawns_selected[1] = load("res://data/pawns/van_reily.tres")
|
||||
Game.pawns_selected[1] = "a"
|
||||
level.setup()
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ func _ready() -> void:
|
||||
glow_tween.tween_property(target, "modulate:a", .8, .5)
|
||||
glow_tween.tween_property(target, "modulate:a", 1, .5)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
if Input.is_action_just_pressed("ui_menu"):
|
||||
opened = !opened
|
||||
start.visible = !opened
|
||||
|
||||
@@ -11,27 +11,18 @@ emission_energy_multiplier = 2.69
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_7i3j4"]
|
||||
size = Vector3(0.15, 0.15, 0.15)
|
||||
|
||||
[node name="Bullet" type="RigidBody3D"]
|
||||
gravity_scale = 0.0
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 3
|
||||
[node name="Bullet" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_tc5n7")
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="."]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
radius = 0.05
|
||||
radial_segments = 4
|
||||
rings = 3
|
||||
radial_segments = 6
|
||||
material = SubResource("StandardMaterial3D_fnprb")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea"]
|
||||
shape = SubResource("BoxShape3D_7i3j4")
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="."]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("BoxShape3D_7i3j4")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||
@@ -42,5 +33,4 @@ light_volumetric_fog_energy = 0.0
|
||||
light_size = 0.2
|
||||
omni_range = 0.4
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
[connection signal="body_entered" from="HitArea" to="." method="_on_hit_area_entered"]
|
||||
[connection signal="body_entered" from="." to="." method="_on_hit_area_entered"]
|
||||
|
||||