Compare commits

..

5 Commits

Author SHA1 Message Date
ebac8651b6 More nodules
All checks were successful
itch.io publish action / build (osx, app) (push) Successful in 2m14s
itch.io publish action / build (win64, exe) (push) Successful in 2m19s
itch.io publish action / build (linux64, x86_64) (push) Successful in 2m2s
linting & formatting / build (push) Successful in 18s
2025-04-20 00:39:08 -06:00
9d8f1f1767 Splatter effect scales with source node scale 2025-04-20 00:23:41 -06:00
eba7d3d06b Intro listener puzzle in crew hab 2025-04-19 23:34:34 -06:00
e44bed8bff Heartbeat puzzle 1 in medbay 2025-04-19 22:55:11 -06:00
42ec80f098 Lighting tweaks 2025-04-19 20:53:51 -06:00
26 changed files with 1057 additions and 108 deletions

View File

@ -28,10 +28,19 @@ ssao_enabled = true
ssao_intensity = 2.5 ssao_intensity = 2.5
ssil_enabled = true ssil_enabled = true
ssil_radius = 0.4 ssil_radius = 0.4
ssil_intensity = 2.5
ssil_normal_rejection = 0.73
sdfgi_enabled = true sdfgi_enabled = true
sdfgi_cascades = 7 sdfgi_cascades = 7
glow_enabled = true glow_enabled = true
glow_levels/1 = 16.0
glow_levels/2 = 6.0
glow_levels/3 = 2.0
glow_levels/4 = 1.0
glow_levels/6 = 2.0
glow_levels/7 = 2.0
glow_strength = 0.7 glow_strength = 0.7
glow_bloom = 0.01
glow_blend_mode = 0 glow_blend_mode = 0
fog_light_color = Color(0, 0, 0, 1) fog_light_color = Color(0, 0, 0, 1)
fog_density = 0.2 fog_density = 0.2

File diff suppressed because one or more lines are too long

View File

@ -13,12 +13,6 @@ extends Node3D
@onready var prop_test_spawn_point: Marker3D = %PropTestSpawnPoint @onready var prop_test_spawn_point: Marker3D = %PropTestSpawnPoint
@onready var item_test_spawn_point: Marker3D = %ItemTestSpawnPoint @onready var item_test_spawn_point: Marker3D = %ItemTestSpawnPoint
static var nodule_scene: PackedScene = load("res://src/world/gunk_node/grunk_nodule.tscn")
static var alarm_scene: PackedScene = load("res://src/world/mechanics/alarm/gunk_alarm.tscn")
static var signal_test_scene: PackedScene = load("res://levels/mechanic_test/signal_test.tscn")
static var prop_test_scene: PackedScene = load("res://levels/mechanic_test/prop_test.tscn")
static var item_test_scene: PackedScene = load("res://levels/mechanic_test/item_test.tscn")
func reset() -> void: func reset() -> void:
print("Resetting level!") print("Resetting level!")
@ -26,6 +20,10 @@ func reset() -> void:
Callable(bulkhead, "close").call() Callable(bulkhead, "close").call()
Callable(open_switch, "enable").call() Callable(open_switch, "enable").call()
Callable(close_switch, "disable").call() Callable(close_switch, "disable").call()
var signal_test_scene: PackedScene = load("res://levels/mechanic_test/signal_test.tscn")
var prop_test_scene: PackedScene = load("res://levels/mechanic_test/prop_test.tscn")
var item_test_scene: PackedScene = load("res://levels/mechanic_test/item_test.tscn")
_do_spawn(signal_test_spawn_point, signal_test_scene) _do_spawn(signal_test_spawn_point, signal_test_scene)
_do_spawn(prop_test_spawn_point, prop_test_scene) _do_spawn(prop_test_spawn_point, prop_test_scene)
_do_spawn(item_test_spawn_point, item_test_scene) _do_spawn(item_test_spawn_point, item_test_scene)
@ -39,10 +37,12 @@ func _do_spawn(spawn_point: Node3D, scene: PackedScene) -> void:
func spawn_nodule() -> void: func spawn_nodule() -> void:
var nodule_scene: PackedScene = load("res://src/world/gunk_node/grunk_nodule.tscn")
_do_spawn(nodule_spawn_point, nodule_scene) _do_spawn(nodule_spawn_point, nodule_scene)
func spawn_alarm() -> void: func spawn_alarm() -> void:
var alarm_scene: PackedScene = load("res://src/world/mechanics/alarm/gunk_alarm.tscn")
_do_spawn(alarm_spawn_point, alarm_scene) _do_spawn(alarm_spawn_point, alarm_scene)

View File

@ -0,0 +1,34 @@
class_name GrunkSplatter extends GPUParticles3D
## Splatter effect with adjustable volume
const BASE_VOLUME := -12.0
const SCALE_FACTOR := 4.0
const SCENE := preload("res://src/effects/grunk_splatter/grunk_splatter.tscn")
@export var effect_scale := 1.0
@onready var splatter_sfx: AudioStreamPlayer3D = %SplatterSFX
@onready var sub_splatter: GPUParticles3D = %SubSplatter
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
splatter_sfx.volume_db = BASE_VOLUME + SCALE_FACTOR * log(effect_scale) / log(2)
scale = Vector3.ONE * effect_scale
# Scale particles themselves
_scale_particles(self)
_scale_particles(sub_splatter)
func _scale_particles(emitter: GPUParticles3D) -> void:
var mat := emitter.process_material as ParticleProcessMaterial
mat.scale_max = effect_scale
mat.scale_min = effect_scale
static func build(_effect_scale: float = 1.0) -> GrunkSplatter:
var instance: GrunkSplatter = SCENE.instantiate()
instance.effect_scale = _effect_scale
return instance

View File

@ -0,0 +1 @@
uid://di5b65ehsfatj

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=22 format=3 uid="uid://xlt78xc1tmkl"] [gd_scene load_steps=23 format=3 uid="uid://xlt78xc1tmkl"]
[ext_resource type="Texture2D" uid="uid://cgwgmxwjgwbwr" path="res://assets/particles/splatter_2.png" id="1_5xu2x"] [ext_resource type="Texture2D" uid="uid://cgwgmxwjgwbwr" path="res://assets/particles/splatter_2.png" id="1_5xu2x"]
[ext_resource type="Texture2D" uid="uid://bhoai6xv53tqm" path="res://assets/particles/splatter_1.png" id="2_bt63p"] [ext_resource type="Texture2D" uid="uid://bhoai6xv53tqm" path="res://assets/particles/splatter_1.png" id="2_bt63p"]
[ext_resource type="Script" uid="uid://di5b65ehsfatj" path="res://src/effects/grunk_splatter/grunk_splatter.gd" id="2_grvat"]
[ext_resource type="AudioStream" uid="uid://di0j2xhgfc78s" path="res://assets/sfx/grunk/splat1.wav" id="3_t00bd"] [ext_resource type="AudioStream" uid="uid://di0j2xhgfc78s" path="res://assets/sfx/grunk/splat1.wav" id="3_t00bd"]
[ext_resource type="AudioStream" uid="uid://d1w5gfmjj7tjk" path="res://assets/sfx/grunk/splat2.wav" id="4_2iem1"] [ext_resource type="AudioStream" uid="uid://d1w5gfmjj7tjk" path="res://assets/sfx/grunk/splat2.wav" id="4_2iem1"]
[ext_resource type="Script" uid="uid://c5o1d2shq2qig" path="res://src/world/game_sound/game_sound_emitter.gd" id="5_2iem1"] [ext_resource type="Script" uid="uid://c5o1d2shq2qig" path="res://src/world/game_sound/game_sound_emitter.gd" id="5_2iem1"]
@ -22,6 +23,7 @@ point_count = 2
curve = SubResource("Curve_y6klh") curve = SubResource("Curve_y6klh")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_5xu2x"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_5xu2x"]
resource_local_to_scene = true
lifetime_randomness = 0.57 lifetime_randomness = 0.57
emission_shape = 1 emission_shape = 1
emission_sphere_radius = 1.0 emission_sphere_radius = 1.0
@ -65,6 +67,7 @@ point_count = 2
curve = SubResource("Curve_t00bd") curve = SubResource("Curve_t00bd")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_2iem1"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_2iem1"]
resource_local_to_scene = true
lifetime_randomness = 0.55 lifetime_randomness = 0.55
emission_shape = 1 emission_shape = 1
emission_sphere_radius = 0.9 emission_sphere_radius = 0.9
@ -112,8 +115,10 @@ one_shot = true
explosiveness = 0.45 explosiveness = 0.45
process_material = SubResource("ParticleProcessMaterial_5xu2x") process_material = SubResource("ParticleProcessMaterial_5xu2x")
draw_pass_1 = SubResource("QuadMesh_y6klh") draw_pass_1 = SubResource("QuadMesh_y6klh")
script = ExtResource("2_grvat")
[node name="SubSplatter" type="GPUParticles3D" parent="."] [node name="SubSplatter" type="GPUParticles3D" parent="."]
unique_name_in_owner = true
sorting_offset = 9.0 sorting_offset = 9.0
emitting = false emitting = false
amount = 4 amount = 4
@ -131,8 +136,9 @@ one_shot = true
autostart = true autostart = true
[node name="SplatterSFX" type="AudioStreamPlayer3D" parent="."] [node name="SplatterSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true
stream = SubResource("AudioStreamRandomizer_6adkd") stream = SubResource("AudioStreamRandomizer_6adkd")
volume_db = -10.0 volume_db = -12.0
unit_size = 6.0 unit_size = 6.0
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"

View File

@ -151,3 +151,9 @@ func _on_milestone(milestone: Milestone) -> void:
func on_player_death() -> void: func on_player_death() -> void:
player_dead.emit() player_dead.emit()
# TODO reload from save? # TODO reload from save?
# REMOVEME
# workaround until saving & loading is implemented
grunk_tank_limit = BASE_TANK_LIMIT
grunk_tank = 0.0
grunk_vault = 0.0

View File

@ -622,7 +622,6 @@ unique_name_in_owner = true
visible = false visible = false
[node name="TransformedPosition" type="Node3D" parent="CameraPosition/CameraPivot"] [node name="TransformedPosition" type="Node3D" parent="CameraPosition/CameraPivot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
[node name="CamRumbler" type="Node3D" parent="CameraPosition/CameraPivot/TransformedPosition"] [node name="CamRumbler" type="Node3D" parent="CameraPosition/CameraPivot/TransformedPosition"]
unique_name_in_owner = true unique_name_in_owner = true
@ -647,6 +646,7 @@ omni_attenuation = 0.0
[node name="NearLight" type="OmniLight3D" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D"] [node name="NearLight" type="OmniLight3D" parent="CameraPosition/CameraPivot/TransformedPosition/CamRumbler/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.1) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.1)
light_energy = 0.2
light_specular = 0.01 light_specular = 0.01
light_cull_mask = 4294967293 light_cull_mask = 4294967293
omni_range = 2.0 omni_range = 2.0

View File

@ -45,7 +45,7 @@ shadow_mesh = SubResource("ArrayMesh_hx0vd")
data = PackedVector3Array(-1.5, 0, 0.225, -1.5, 3, -0.225, -1.5, 3, 0.225, -1.5, 0, 0.225, -1.5, 0, -0.225, -1.5, 3, -0.225, -1.3125, 0.375, -0.225, -1.5, 0, -0.225, -1.2188, 0.2812, -0.225, -1.5, 0, -0.225, -1.125, 0.1875, -0.225, -1.2188, 0.2812, -0.225, -1.5, 0, -0.225, 1.125, 0.1875, -0.225, -1.125, 0.1875, -0.225, -1.3125, 0.375, -0.225, -1.5, 3, -0.225, -1.5, 0, -0.225, 1.5, 0, -0.225, 1.125, 0.1875, -0.225, -1.5, 0, -0.225, -1.3125, 2.625, -0.225, -1.5, 3, -0.225, -1.3125, 0.375, -0.225, 1.5, 0, -0.225, 1.3125, 0.375, -0.225, 1.125, 0.1875, -0.225, -1.5, 3, -0.225, -1.3125, 2.625, -0.225, -1.125, 2.8125, -0.225, 1.3125, 0.375, -0.225, 1.5, 0, -0.225, 1.3125, 2.625, -0.225, -1.5, 3, -0.225, -1.125, 2.8125, -0.225, 1.5, 3, -0.225, 1.3125, 2.625, -0.225, 1.5, 0, -0.225, 1.5, 3, -0.225, 1.5, 3, -0.225, -1.125, 2.8125, -0.225, 1.125, 2.8125, -0.225, 1.3125, 2.625, -0.225, 1.5, 3, -0.225, 1.2187, 2.7187, -0.225, 1.5, 3, -0.225, 1.125, 2.8125, -0.225, 1.2187, 2.7187, -0.225, 1.5, 0, -0.225, 1.5, 3, 0.225, 1.5, 3, -0.225, 1.5, 0, -0.225, 1.5, 0, 0.225, 1.5, 3, 0.225, 1.3125, 0.375, 0.225, 1.5, 0, 0.225, 1.2187, 0.2812, 0.225, 1.5, 0, 0.225, 1.125, 0.1875, 0.225, 1.2187, 0.2812, 0.225, 1.5, 0, 0.225, -1.125, 0.1875, 0.225, 1.125, 0.1875, 0.225, 1.3125, 0.375, 0.225, 1.5, 3, 0.225, 1.5, 0, 0.225, -1.5, 0, 0.225, -1.125, 0.1875, 0.225, 1.5, 0, 0.225, 1.3125, 2.625, 0.225, 1.5, 3, 0.225, 1.3125, 0.375, 0.225, -1.5, 0, 0.225, -1.3125, 0.375, 0.225, -1.125, 0.1875, 0.225, 1.5, 3, 0.225, 1.3125, 2.625, 0.225, 1.125, 2.8125, 0.225, -1.3125, 0.375, 0.225, -1.5, 0, 0.225, -1.5, 3, 0.225, 1.5, 3, 0.225, 1.125, 2.8125, 0.225, -1.5, 3, 0.225, -1.3125, 0.375, 0.225, -1.5, 3, 0.225, -1.3125, 2.625, 0.225, -1.5, 3, 0.225, 1.125, 2.8125, 0.225, -1.125, 2.8125, 0.225, -1.3125, 2.625, 0.225, -1.5, 3, 0.225, -1.2188, 2.7187, 0.225, -1.5, 3, 0.225, -1.125, 2.8125, 0.225, -1.2188, 2.7187, 0.225, -1.5, 0, -0.225, 1.5, 0, 0.225, 1.5, 0, -0.225, -1.5, 0, -0.225, -1.5, 0, 0.225, 1.5, 0, 0.225, 1.5, 3, -0.225, -1.5, 3, 0.225, -1.5, 3, -0.225, 1.5, 3, -0.225, 1.5, 3, 0.225, -1.5, 3, 0.225, 1.3125, 2.625, 0.225, 1.3125, 0.375, -0.225, 1.3125, 2.625, -0.225, 1.3125, 2.625, 0.225, 1.3125, 0.375, 0.225, 1.3125, 0.375, -0.225, -1.125, 2.8125, -0.225, 1.125, 2.8125, 0.225, 1.125, 2.8125, -0.225, -1.125, 2.8125, -0.225, -1.125, 2.8125, 0.225, 1.125, 2.8125, 0.225, -1.3125, 0.375, 0.225, -1.3125, 2.625, -0.225, -1.3125, 0.375, -0.225, -1.3125, 0.375, 0.225, -1.3125, 2.625, 0.225, -1.3125, 2.625, -0.225, -1.3125, 0.375, 0.225, -1.125, 0.1875, -0.225, -1.125, 0.1875, 0.225, -1.125, 0.1875, -0.225, -1.3125, 0.375, 0.225, -1.2188, 0.2812, -0.225, -1.2188, 0.2812, -0.225, -1.3125, 0.375, 0.225, -1.3125, 0.375, -0.225, -1.3125, 2.625, 0.225, -1.125, 2.8125, -0.225, -1.3125, 2.625, -0.225, -1.125, 2.8125, -0.225, -1.3125, 2.625, 0.225, -1.2188, 2.7187, 0.225, -1.125, 2.8125, -0.225, -1.2188, 2.7187, 0.225, -1.125, 2.8125, 0.225, 1.2187, 0.2812, 0.225, 1.3125, 0.375, -0.225, 1.3125, 0.375, 0.225, 1.3125, 0.375, -0.225, 1.2187, 0.2812, 0.225, 1.125, 0.1875, 0.225, 1.3125, 0.375, -0.225, 1.125, 0.1875, 0.225, 1.125, 0.1875, -0.225, 1.125, 2.8125, 0.225, 1.2187, 2.7187, -0.225, 1.125, 2.8125, -0.225, 1.2187, 2.7187, -0.225, 1.125, 2.8125, 0.225, 1.3125, 2.625, 0.225, 1.2187, 2.7187, -0.225, 1.3125, 2.625, 0.225, 1.3125, 2.625, -0.225, 1.125, 0.1875, 0.225, -1.125, 0.1875, -0.225, 1.125, 0.1875, -0.225, 1.125, 0.1875, 0.225, -1.125, 0.1875, 0.225, -1.125, 0.1875, -0.225) data = PackedVector3Array(-1.5, 0, 0.225, -1.5, 3, -0.225, -1.5, 3, 0.225, -1.5, 0, 0.225, -1.5, 0, -0.225, -1.5, 3, -0.225, -1.3125, 0.375, -0.225, -1.5, 0, -0.225, -1.2188, 0.2812, -0.225, -1.5, 0, -0.225, -1.125, 0.1875, -0.225, -1.2188, 0.2812, -0.225, -1.5, 0, -0.225, 1.125, 0.1875, -0.225, -1.125, 0.1875, -0.225, -1.3125, 0.375, -0.225, -1.5, 3, -0.225, -1.5, 0, -0.225, 1.5, 0, -0.225, 1.125, 0.1875, -0.225, -1.5, 0, -0.225, -1.3125, 2.625, -0.225, -1.5, 3, -0.225, -1.3125, 0.375, -0.225, 1.5, 0, -0.225, 1.3125, 0.375, -0.225, 1.125, 0.1875, -0.225, -1.5, 3, -0.225, -1.3125, 2.625, -0.225, -1.125, 2.8125, -0.225, 1.3125, 0.375, -0.225, 1.5, 0, -0.225, 1.3125, 2.625, -0.225, -1.5, 3, -0.225, -1.125, 2.8125, -0.225, 1.5, 3, -0.225, 1.3125, 2.625, -0.225, 1.5, 0, -0.225, 1.5, 3, -0.225, 1.5, 3, -0.225, -1.125, 2.8125, -0.225, 1.125, 2.8125, -0.225, 1.3125, 2.625, -0.225, 1.5, 3, -0.225, 1.2187, 2.7187, -0.225, 1.5, 3, -0.225, 1.125, 2.8125, -0.225, 1.2187, 2.7187, -0.225, 1.5, 0, -0.225, 1.5, 3, 0.225, 1.5, 3, -0.225, 1.5, 0, -0.225, 1.5, 0, 0.225, 1.5, 3, 0.225, 1.3125, 0.375, 0.225, 1.5, 0, 0.225, 1.2187, 0.2812, 0.225, 1.5, 0, 0.225, 1.125, 0.1875, 0.225, 1.2187, 0.2812, 0.225, 1.5, 0, 0.225, -1.125, 0.1875, 0.225, 1.125, 0.1875, 0.225, 1.3125, 0.375, 0.225, 1.5, 3, 0.225, 1.5, 0, 0.225, -1.5, 0, 0.225, -1.125, 0.1875, 0.225, 1.5, 0, 0.225, 1.3125, 2.625, 0.225, 1.5, 3, 0.225, 1.3125, 0.375, 0.225, -1.5, 0, 0.225, -1.3125, 0.375, 0.225, -1.125, 0.1875, 0.225, 1.5, 3, 0.225, 1.3125, 2.625, 0.225, 1.125, 2.8125, 0.225, -1.3125, 0.375, 0.225, -1.5, 0, 0.225, -1.5, 3, 0.225, 1.5, 3, 0.225, 1.125, 2.8125, 0.225, -1.5, 3, 0.225, -1.3125, 0.375, 0.225, -1.5, 3, 0.225, -1.3125, 2.625, 0.225, -1.5, 3, 0.225, 1.125, 2.8125, 0.225, -1.125, 2.8125, 0.225, -1.3125, 2.625, 0.225, -1.5, 3, 0.225, -1.2188, 2.7187, 0.225, -1.5, 3, 0.225, -1.125, 2.8125, 0.225, -1.2188, 2.7187, 0.225, -1.5, 0, -0.225, 1.5, 0, 0.225, 1.5, 0, -0.225, -1.5, 0, -0.225, -1.5, 0, 0.225, 1.5, 0, 0.225, 1.5, 3, -0.225, -1.5, 3, 0.225, -1.5, 3, -0.225, 1.5, 3, -0.225, 1.5, 3, 0.225, -1.5, 3, 0.225, 1.3125, 2.625, 0.225, 1.3125, 0.375, -0.225, 1.3125, 2.625, -0.225, 1.3125, 2.625, 0.225, 1.3125, 0.375, 0.225, 1.3125, 0.375, -0.225, -1.125, 2.8125, -0.225, 1.125, 2.8125, 0.225, 1.125, 2.8125, -0.225, -1.125, 2.8125, -0.225, -1.125, 2.8125, 0.225, 1.125, 2.8125, 0.225, -1.3125, 0.375, 0.225, -1.3125, 2.625, -0.225, -1.3125, 0.375, -0.225, -1.3125, 0.375, 0.225, -1.3125, 2.625, 0.225, -1.3125, 2.625, -0.225, -1.3125, 0.375, 0.225, -1.125, 0.1875, -0.225, -1.125, 0.1875, 0.225, -1.125, 0.1875, -0.225, -1.3125, 0.375, 0.225, -1.2188, 0.2812, -0.225, -1.2188, 0.2812, -0.225, -1.3125, 0.375, 0.225, -1.3125, 0.375, -0.225, -1.3125, 2.625, 0.225, -1.125, 2.8125, -0.225, -1.3125, 2.625, -0.225, -1.125, 2.8125, -0.225, -1.3125, 2.625, 0.225, -1.2188, 2.7187, 0.225, -1.125, 2.8125, -0.225, -1.2188, 2.7187, 0.225, -1.125, 2.8125, 0.225, 1.2187, 0.2812, 0.225, 1.3125, 0.375, -0.225, 1.3125, 0.375, 0.225, 1.3125, 0.375, -0.225, 1.2187, 0.2812, 0.225, 1.125, 0.1875, 0.225, 1.3125, 0.375, -0.225, 1.125, 0.1875, 0.225, 1.125, 0.1875, -0.225, 1.125, 2.8125, 0.225, 1.2187, 2.7187, -0.225, 1.125, 2.8125, -0.225, 1.2187, 2.7187, -0.225, 1.125, 2.8125, 0.225, 1.3125, 2.625, 0.225, 1.2187, 2.7187, -0.225, 1.3125, 2.625, 0.225, 1.3125, 2.625, -0.225, 1.125, 0.1875, 0.225, -1.125, 0.1875, -0.225, 1.125, 0.1875, -0.225, 1.125, 0.1875, 0.225, -1.125, 0.1875, 0.225, -1.125, 0.1875, -0.225)
[sub_resource type="SphereShape3D" id="SphereShape3D_jo25b"] [sub_resource type="SphereShape3D" id="SphereShape3D_jo25b"]
radius = 4.0 radius = 3.0
[sub_resource type="ArrayMesh" id="ArrayMesh_4jho1"] [sub_resource type="ArrayMesh" id="ArrayMesh_4jho1"]
_surfaces = [{ _surfaces = [{

View File

@ -136,6 +136,7 @@ spot_angle = 98.0
spot_angle_attenuation = 1.55871 spot_angle_attenuation = 1.55871
[node name="MeshInstance3D" type="MeshInstance3D" parent="."] [node name="MeshInstance3D" type="MeshInstance3D" parent="."]
gi_mode = 2
mesh = SubResource("ArrayMesh_jdrpd") mesh = SubResource("ArrayMesh_jdrpd")
[node name="FluorescentFlicker" type="AnimationPlayer" parent="MeshInstance3D"] [node name="FluorescentFlicker" type="AnimationPlayer" parent="MeshInstance3D"]

View File

@ -5,6 +5,7 @@
[sub_resource type="SystemFont" id="SystemFont_twqjh"] [sub_resource type="SystemFont" id="SystemFont_twqjh"]
font_names = PackedStringArray("Monospace") font_names = PackedStringArray("Monospace")
subpixel_positioning = 0
[node name="TextTerminal" type="Node3D"] [node name="TextTerminal" type="Node3D"]
transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0) transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0)

View File

@ -233,10 +233,12 @@ shape = SubResource("ConcavePolygonShape3D_1xqlp")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.17, 0.24, 0.1) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.17, 0.24, 0.1)
[node name="DangerLight" type="MeshInstance3D" parent="Lights" index="0"] [node name="DangerLight" type="MeshInstance3D" parent="Lights" index="0"]
gi_mode = 2
mesh = SubResource("BoxMesh_g24yf") mesh = SubResource("BoxMesh_g24yf")
[node name="SuccessLight" type="MeshInstance3D" parent="Lights" index="1"] [node name="SuccessLight" type="MeshInstance3D" parent="Lights" index="1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.06, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.06, 0)
gi_mode = 2
mesh = SubResource("BoxMesh_a6hjm") mesh = SubResource("BoxMesh_a6hjm")
[node name="SuccessSFX" type="AudioStreamPlayer3D" parent="Lights/SuccessLight" index="0"] [node name="SuccessSFX" type="AudioStreamPlayer3D" parent="Lights/SuccessLight" index="0"]

View File

@ -218,7 +218,7 @@ metadata/_custom_type_script = "uid://om57w2acvgb7"
script = ExtResource("11_mbqcc") script = ExtResource("11_mbqcc")
mean_time = 4.0 mean_time = 4.0
st_dev_time = 0.6 st_dev_time = 0.6
wait_time = 3.52038 wait_time = 3.57092
metadata/_custom_type_script = "uid://beyk2xtbjrsg4" metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="RandomStalkingBehavior" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay"] [node name="RandomStalkingBehavior" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay"]
@ -264,7 +264,7 @@ metadata/_custom_type_script = "uid://cg016dbe7gs1x"
script = ExtResource("11_mbqcc") script = ExtResource("11_mbqcc")
mean_time = 5.0 mean_time = 5.0
st_dev_time = 1.0 st_dev_time = 1.0
wait_time = 5.84132 wait_time = 4.97651
metadata/_custom_type_script = "uid://beyk2xtbjrsg4" metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence/RandomDelay"] [node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence/RandomDelay"]

View File

@ -14,6 +14,7 @@ theta_acceleration = 8.0
surface_material_override/0 = ExtResource("3_htnl6") surface_material_override/0 = ExtResource("3_htnl6")
[node name="FaceNodule" parent="." index="1"] [node name="FaceNodule" parent="." index="1"]
gi_mode = 2
surface_material_override/0 = ExtResource("4_r4p65") surface_material_override/0 = ExtResource("4_r4p65")
[node name="Nodule_001" parent="." index="2"] [node name="Nodule_001" parent="." index="2"]

View File

@ -1,16 +1,31 @@
@tool
extends GunkNode extends GunkNode
const BASE_DURABILITY := 3.0
const BASE_VALUE := 2000.0
const MIN_CHITTER_INTERVAL := 4.0 const MIN_CHITTER_INTERVAL := 4.0
@export_category("Editor Tools")
@export var randomize_rotation: bool:
set(v):
if v:
rotation = Vector3(randf_range(0, TAU), randf_range(0, TAU), randf_range(0, TAU))
@export var apply_scale: float:
set(v):
if v > 0.001:
scale = Vector3(v, v, v)
durability = BASE_DURABILITY * v
value = BASE_VALUE * v
@export_category("Jitter")
@export var jitter_scale_factor := 0.05 @export var jitter_scale_factor := 0.05
@export var jitter_inflation_factor := 1.0 @export var jitter_inflation_factor := 1.0
@export_category("Chatter")
@export var chitter: bool = false @export var chitter: bool = false
@export var chitter_time_mean := 60.0 @export var chitter_time_mean := 60.0
@export var chitter_time_st_dev := 30.0 @export var chitter_time_st_dev := 30.0
@export var splatter_scene: PackedScene
@onready var mesh_instance: MeshInstance3D = %MeshInstance3D @onready var mesh_instance: MeshInstance3D = %MeshInstance3D
@onready var chitter_sfx: AudioStreamPlayer3D = %ChitterSFX @onready var chitter_sfx: AudioStreamPlayer3D = %ChitterSFX
@ -18,11 +33,17 @@ const MIN_CHITTER_INTERVAL := 4.0
func _ready() -> void: func _ready() -> void:
if Engine.is_editor_hint():
return
if chitter: if chitter:
start_chitter_timer() start_chitter_timer()
func _process(delta: float) -> void: func _process(delta: float) -> void:
if Engine.is_editor_hint():
return
super._process(delta) super._process(delta)
var shader: ShaderMaterial = mesh_instance.mesh.surface_get_material(0) var shader: ShaderMaterial = mesh_instance.mesh.surface_get_material(0)
var damage := pct_damage() var damage := pct_damage()
@ -30,13 +51,6 @@ func _process(delta: float) -> void:
shader.set_shader_parameter("vertex_inflation", pow(damage * jitter_inflation_factor, 3)) shader.set_shader_parameter("vertex_inflation", pow(damage * jitter_inflation_factor, 3))
func _destroy() -> void:
var splatter: GPUParticles3D = splatter_scene.instantiate()
add_sibling(splatter)
splatter.global_position = global_position
splatter.emitting = true
func start_chitter_timer() -> void: func start_chitter_timer() -> void:
var interval := maxf(MIN_CHITTER_INTERVAL, randfn(chitter_time_mean, chitter_time_st_dev)) var interval := maxf(MIN_CHITTER_INTERVAL, randfn(chitter_time_mean, chitter_time_st_dev))
chitter_timer.start(interval) chitter_timer.start(interval)

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=12 format=4 uid="uid://2yqi5u5eo025"] [gd_scene load_steps=11 format=4 uid="uid://2yqi5u5eo025"]
[ext_resource type="Script" uid="uid://07t7yhijru8f" path="res://src/world/gunk_node/grunk_nodule.gd" id="1_iyr82"] [ext_resource type="Script" uid="uid://07t7yhijru8f" path="res://src/world/gunk_node/grunk_nodule.gd" id="1_iyr82"]
[ext_resource type="PackedScene" uid="uid://xlt78xc1tmkl" path="res://src/effects/grunk_splatter.tscn" id="2_m8r0a"]
[ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_eu6j6"] [ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_eu6j6"]
[ext_resource type="AudioStream" uid="uid://bb560r2wvjfht" path="res://assets/sfx/grunk/greeble1.wav" id="4_7fplw"] [ext_resource type="AudioStream" uid="uid://bb560r2wvjfht" path="res://assets/sfx/grunk/greeble1.wav" id="4_7fplw"]
[ext_resource type="AudioStream" uid="uid://dunakapj3mb0h" path="res://assets/sfx/grunk/greeble2.wav" id="5_omayi"] [ext_resource type="AudioStream" uid="uid://dunakapj3mb0h" path="res://assets/sfx/grunk/greeble2.wav" id="5_omayi"]
@ -55,7 +54,6 @@ stream_3/stream = ExtResource("7_4kci5")
collision_layer = 36 collision_layer = 36
collision_mask = 0 collision_mask = 0
script = ExtResource("1_iyr82") script = ExtResource("1_iyr82")
splatter_scene = ExtResource("2_m8r0a")
durability = 3.0 durability = 3.0
metadata/_custom_type_script = "uid://bypgxi0gy56yk" metadata/_custom_type_script = "uid://bypgxi0gy56yk"

View File

@ -13,6 +13,9 @@ const JITTER_FADE_RATE := 0.8
## Value added to the player's grunk total on destruction. ## Value added to the player's grunk total on destruction.
@export var value := 1000.0 @export var value := 1000.0
## Scale factor applied to the size and volume of the splatter effect on destruction.
@export var splatter_scale := 1.0
var _sustained_damage := 0.0 var _sustained_damage := 0.0
var _hit_this_frame := false var _hit_this_frame := false
@ -55,6 +58,9 @@ func collect() -> void:
## Derived types should override `_destroy` as a lifecycle method. ## Derived types should override `_destroy` as a lifecycle method.
func destroy() -> void: func destroy() -> void:
Game.manager.collect_grunk(value) Game.manager.collect_grunk(value)
var splatter := GrunkSplatter.build(splatter_scale * scale.x)
add_sibling(splatter)
splatter.global_position = global_position
_destroy() _destroy()
destroyed.emit() destroyed.emit()
queue_free() queue_free()

View File

@ -1,16 +1,16 @@
[gd_scene load_steps=31 format=4 uid="uid://b8rv6dg4tgaeb"] [gd_scene load_steps=31 format=4 uid="uid://b8rv6dg4tgaeb"]
[ext_resource type="Script" uid="uid://bvua1l2hb3an6" path="res://levels/mechanic_test/mechanic_test.gd" id="1_bg05n"] [ext_resource type="Script" uid="uid://bvua1l2hb3an6" path="res://levels/mechanic_test/mechanic_test.gd" id="1_umjw2"]
[ext_resource type="PackedScene" uid="uid://bwe2jdmvinhqd" path="res://src/player/player.tscn" id="1_goufh"] [ext_resource type="PackedScene" uid="uid://bwe2jdmvinhqd" path="res://src/player/player.tscn" id="2_gut8u"]
[ext_resource type="PackedScene" uid="uid://b6eg8t04rkh0c" path="res://src/props/wall_switch/wall_switch.tscn" id="2_pka60"] [ext_resource type="PackedScene" uid="uid://b6eg8t04rkh0c" path="res://src/props/wall_switch/wall_switch.tscn" id="3_4okgx"]
[ext_resource type="PackedScene" uid="uid://c2omlx4ptrc01" path="res://src/world/gunk_body/gunk_body.tscn" id="4_2uiim"] [ext_resource type="PackedScene" uid="uid://c2omlx4ptrc01" path="res://src/world/gunk_body/gunk_body.tscn" id="4_7v7un"]
[ext_resource type="Shader" uid="uid://ckxc0ngd37rtk" path="res://src/shaders/gunk.gdshader" id="5_0j1ke"] [ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="5_llot1"]
[ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="5_x2vho"] [ext_resource type="Shader" uid="uid://ckxc0ngd37rtk" path="res://src/shaders/gunk.gdshader" id="6_6agnv"]
[ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="6_x2vho"] [ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="7_aqwgb"]
[ext_resource type="PackedScene" uid="uid://cubwniraol1qn" path="res://src/props/bulkhead/bulkhead.tscn" id="8_f342o"] [ext_resource type="PackedScene" uid="uid://cubwniraol1qn" path="res://src/props/bulkhead/bulkhead.tscn" id="8_ny31q"]
[ext_resource type="PackedScene" uid="uid://b5jubpjj3d277" path="res://levels/mechanic_test/signal_test.tscn" id="9_x2vho"] [ext_resource type="PackedScene" uid="uid://b5jubpjj3d277" path="res://levels/mechanic_test/signal_test.tscn" id="9_dub8r"]
[ext_resource type="PackedScene" uid="uid://cfqirm2o3uo4k" path="res://levels/mechanic_test/prop_test.tscn" id="10_f342o"] [ext_resource type="PackedScene" uid="uid://cfqirm2o3uo4k" path="res://levels/mechanic_test/prop_test.tscn" id="10_ovu60"]
[ext_resource type="PackedScene" uid="uid://dbabcsp38wmid" path="res://levels/mechanic_test/item_test.tscn" id="11_iyuyb"] [ext_resource type="PackedScene" uid="uid://dbabcsp38wmid" path="res://levels/mechanic_test/item_test.tscn" id="11_crh2u"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_goufh"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_goufh"]
@ -93,7 +93,7 @@ height = 256
depth = 32 depth = 32
seamless = true seamless = true
seamless_blend_skirt = 0.5 seamless_blend_skirt = 0.5
noise = ExtResource("6_x2vho") noise = ExtResource("7_aqwgb")
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_2pd8h"] [sub_resource type="NoiseTexture3D" id="NoiseTexture3D_2pd8h"]
width = 256 width = 256
@ -101,12 +101,12 @@ height = 256
depth = 32 depth = 32
seamless = true seamless = true
seamless_blend_skirt = 0.5 seamless_blend_skirt = 0.5
noise = ExtResource("6_x2vho") noise = ExtResource("7_aqwgb")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_iyuyb"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_umjw2"]
resource_local_to_scene = true resource_local_to_scene = true
render_priority = 0 render_priority = 0
shader = ExtResource("5_0j1ke") shader = ExtResource("6_6agnv")
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1) shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1) shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
shader_parameter/emission_color = Color(0.25, 0.88, 1, 1) shader_parameter/emission_color = Color(0.25, 0.88, 1, 1)
@ -131,9 +131,9 @@ shader_parameter/overlay_emission_scale = 1.0
data = PackedVector3Array(-1.5, 0, -6, -1.5, 0, 6, -1.5, 3, -6, -1.5, 3, -6, -1.5, 0, 6, -1.5, 3, 6, 1.5, 0, 6, 1.5, 0, -6, 1.5, 3, 6, 1.5, 3, 6, 1.5, 0, -6, 1.5, 3, -6, -1.5, 0, 6, -1.5, 0, -6, 1.5, 0, 6, 1.5, 0, 6, -1.5, 0, -6, 1.5, 0, -6, 1.5, 3, 6, 1.5, 3, -6, -1.5, 3, 6, -1.5, 3, 6, 1.5, 3, -6, -1.5, 3, -6) data = PackedVector3Array(-1.5, 0, -6, -1.5, 0, 6, -1.5, 3, -6, -1.5, 3, -6, -1.5, 0, 6, -1.5, 3, 6, 1.5, 0, 6, 1.5, 0, -6, 1.5, 3, 6, 1.5, 3, 6, 1.5, 0, -6, 1.5, 3, -6, -1.5, 0, 6, -1.5, 0, -6, 1.5, 0, 6, 1.5, 0, 6, -1.5, 0, -6, 1.5, 0, -6, 1.5, 3, 6, 1.5, 3, -6, -1.5, 3, 6, -1.5, 3, 6, 1.5, 3, -6, -1.5, 3, -6)
[node name="MechanicTest" type="Node3D"] [node name="MechanicTest" type="Node3D"]
script = ExtResource("1_bg05n") script = ExtResource("1_umjw2")
[node name="Player" parent="." instance=ExtResource("1_goufh")] [node name="Player" parent="." instance=ExtResource("2_gut8u")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.65, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.65, 0)
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
@ -160,7 +160,7 @@ mesh = SubResource("BoxMesh_goufh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="ResetPodium"] [node name="CollisionShape3D" type="CollisionShape3D" parent="ResetPodium"]
shape = SubResource("ConcavePolygonShape3D_bg05n") shape = SubResource("ConcavePolygonShape3D_bg05n")
[node name="ResetSwitch" parent="ResetPodium" instance=ExtResource("2_pka60")] [node name="ResetSwitch" parent="ResetPodium" instance=ExtResource("3_4okgx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35)
clean = true clean = true
@ -177,7 +177,7 @@ mesh = SubResource("BoxMesh_goufh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="NoduleSpawner"] [node name="CollisionShape3D" type="CollisionShape3D" parent="NoduleSpawner"]
shape = SubResource("ConcavePolygonShape3D_bg05n") shape = SubResource("ConcavePolygonShape3D_bg05n")
[node name="WallSwitch" parent="NoduleSpawner" instance=ExtResource("2_pka60")] [node name="WallSwitch" parent="NoduleSpawner" instance=ExtResource("3_4okgx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35)
clean = true clean = true
@ -199,7 +199,7 @@ mesh = SubResource("BoxMesh_goufh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="AlarmSpawner"] [node name="CollisionShape3D" type="CollisionShape3D" parent="AlarmSpawner"]
shape = SubResource("ConcavePolygonShape3D_bg05n") shape = SubResource("ConcavePolygonShape3D_bg05n")
[node name="WallSwitch" parent="AlarmSpawner" instance=ExtResource("2_pka60")] [node name="WallSwitch" parent="AlarmSpawner" instance=ExtResource("3_4okgx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35)
clean = true clean = true
@ -221,7 +221,7 @@ mesh = SubResource("BoxMesh_goufh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="AlarmTrigger"] [node name="CollisionShape3D" type="CollisionShape3D" parent="AlarmTrigger"]
shape = SubResource("ConcavePolygonShape3D_bg05n") shape = SubResource("ConcavePolygonShape3D_bg05n")
[node name="AlarmTriggerSwitch" parent="AlarmTrigger" instance=ExtResource("2_pka60")] [node name="AlarmTriggerSwitch" parent="AlarmTrigger" instance=ExtResource("3_4okgx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35)
clean = true clean = true
@ -234,15 +234,15 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0, -31)
mesh = SubResource("ArrayMesh_x2vho") mesh = SubResource("ArrayMesh_x2vho")
skeleton = NodePath("GunkHallBody") skeleton = NodePath("GunkHallBody")
[node name="GunkHallBody" parent="GunkHall" instance=ExtResource("4_2uiim")] [node name="GunkHallBody" parent="GunkHall" instance=ExtResource("4_7v7un")]
unique_name_in_owner = true unique_name_in_owner = true
initial_mask = ExtResource("5_x2vho") initial_mask = ExtResource("5_llot1")
source_gunk_material = SubResource("ShaderMaterial_iyuyb") source_gunk_material = SubResource("ShaderMaterial_umjw2")
[node name="CollisionShape3D" type="CollisionShape3D" parent="GunkHall/GunkHallBody"] [node name="CollisionShape3D" type="CollisionShape3D" parent="GunkHall/GunkHallBody"]
shape = SubResource("ConcavePolygonShape3D_qjnj2") shape = SubResource("ConcavePolygonShape3D_qjnj2")
[node name="Bulkhead" parent="." instance=ExtResource("8_f342o")] [node name="Bulkhead" parent="." instance=ExtResource("8_ny31q")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.5, 0, -2) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.5, 0, -2)
[node name="Podium" type="StaticBody3D" parent="Bulkhead"] [node name="Podium" type="StaticBody3D" parent="Bulkhead"]
@ -254,7 +254,7 @@ mesh = SubResource("BoxMesh_goufh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Bulkhead/Podium"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Bulkhead/Podium"]
shape = SubResource("ConcavePolygonShape3D_bg05n") shape = SubResource("ConcavePolygonShape3D_bg05n")
[node name="OpenSwitch" parent="Bulkhead/Podium" instance=ExtResource("2_pka60")] [node name="OpenSwitch" parent="Bulkhead/Podium" instance=ExtResource("3_4okgx")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35)
clean = true clean = true
@ -272,7 +272,7 @@ mesh = SubResource("BoxMesh_goufh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Bulkhead/Podium2"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Bulkhead/Podium2"]
shape = SubResource("ConcavePolygonShape3D_bg05n") shape = SubResource("ConcavePolygonShape3D_bg05n")
[node name="CloseSwitch" parent="Bulkhead/Podium2" instance=ExtResource("2_pka60")] [node name="CloseSwitch" parent="Bulkhead/Podium2" instance=ExtResource("3_4okgx")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0.35)
clean = true clean = true
@ -286,19 +286,19 @@ text = "Close"
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, -6) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, -6)
[node name="SignalTest" parent="SignalTestSpawnPoint" instance=ExtResource("9_x2vho")] [node name="SignalTest" parent="SignalTestSpawnPoint" instance=ExtResource("9_dub8r")]
[node name="PropTestSpawnPoint" type="Marker3D" parent="."] [node name="PropTestSpawnPoint" type="Marker3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 0, 4.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 0, 4.5)
[node name="PropTest" parent="PropTestSpawnPoint" instance=ExtResource("10_f342o")] [node name="PropTest" parent="PropTestSpawnPoint" instance=ExtResource("10_ovu60")]
[node name="ItemTestSpawnPoint" type="Marker3D" parent="."] [node name="ItemTestSpawnPoint" type="Marker3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13, 0, -2) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13, 0, -2)
[node name="ItemTest" parent="ItemTestSpawnPoint" instance=ExtResource("11_iyuyb")] [node name="ItemTest" parent="ItemTestSpawnPoint" instance=ExtResource("11_crh2u")]
[connection signal="activated" from="ResetPodium/ResetSwitch" to="." method="reset"] [connection signal="activated" from="ResetPodium/ResetSwitch" to="." method="reset"]
[connection signal="activated" from="NoduleSpawner/WallSwitch" to="." method="spawn_nodule"] [connection signal="activated" from="NoduleSpawner/WallSwitch" to="." method="spawn_nodule"]

View File

@ -43,34 +43,6 @@ _surfaces = [{
}] }]
blend_shape_mode = 0 blend_shape_mode = 0
[sub_resource type="Animation" id="Animation_6vdvf"]
resource_name = "trigger"
length = 6.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:mesh:surface_0/material:shader_parameter/emission_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.333333, 5.3, 6),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(0.25, 0.88, 1, 1), Color(1, 0.25, 0.2625, 1), Color(1, 0.25, 0.2625, 1), Color(0.25, 0.88, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:mesh:surface_0/material:shader_parameter/emission_strength")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.333333, 0.9, 3.96667, 5.3, 6),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0.02, 0.05, 10.0, 10.0, 0.05, 0.02]
}
[sub_resource type="Animation" id="Animation_g4yos"] [sub_resource type="Animation" id="Animation_g4yos"]
length = 0.001 length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
@ -98,6 +70,34 @@ tracks/1/keys = {
"values": [0.02] "values": [0.02]
} }
[sub_resource type="Animation" id="Animation_6vdvf"]
resource_name = "trigger"
length = 10.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:mesh:surface_0/material:shader_parameter/emission_color")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.333333, 9, 10),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(0.25, 0.88, 1, 1), Color(1, 0.25, 0.2625, 1), Color(1, 0.25, 0.2625, 1), Color(0.25, 0.88, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:mesh:surface_0/material:shader_parameter/emission_strength")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.333333, 0.9, 3.96667, 10),
"transitions": PackedFloat32Array(1, 1, 1, 0.618, 1),
"update": 0,
"values": [0.02, 0.05, 10.0, 10.0, 0.02]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vokcn"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_vokcn"]
_data = { _data = {
&"RESET": SubResource("Animation_g4yos"), &"RESET": SubResource("Animation_g4yos"),
@ -158,6 +158,7 @@ bones/27/rotation = Quaternion(0.388328, 2.1633e-07, -1.09183e-07, 0.921521)
bones/28/rotation = Quaternion(0.362943, -7.93195e-08, 1.03952e-07, 0.931811) bones/28/rotation = Quaternion(0.362943, -7.93195e-08, 1.03952e-07, 0.931811)
[node name="Bud" parent="FrameSkipper/AlarmMesh/Armature/Skeleton3D" index="0"] [node name="Bud" parent="FrameSkipper/AlarmMesh/Armature/Skeleton3D" index="0"]
gi_mode = 2
mesh = SubResource("ArrayMesh_c5y52") mesh = SubResource("ArrayMesh_c5y52")
[node name="AnimationPlayer" parent="FrameSkipper/AlarmMesh" index="1"] [node name="AnimationPlayer" parent="FrameSkipper/AlarmMesh" index="1"]
@ -189,6 +190,7 @@ unique_name_in_owner = true
stream = ExtResource("6_6vdvf") stream = ExtResource("6_6vdvf")
pitch_scale = 1.1 pitch_scale = 1.1
[connection signal="animation_finished" from="FrameSkipper/AlarmMesh/AnimationPlayer" to="." method="_on_animation_finished"]
[connection signal="timeout" from="PulseListenerTimer" to="." method="trigger"] [connection signal="timeout" from="PulseListenerTimer" to="." method="trigger"]
[editable path="FrameSkipper/AlarmMesh"] [editable path="FrameSkipper/AlarmMesh"]

View File

@ -1,3 +1,4 @@
@tool
extends GunkNode extends GunkNode
## Periodically emits a pulse. ## Periodically emits a pulse.
@ -7,15 +8,24 @@ signal pulsed
## Time in seconds between pulses. ## Time in seconds between pulses.
@export var interval := 3.0 @export var interval := 3.0
@export var quick_connect_to: SignalNode:
set = _editor_connect
@onready var pulse_timer: Timer = %PulseTimer @onready var pulse_timer: Timer = %PulseTimer
@onready var animation_player: AnimationPlayer = %AnimationPlayer @onready var animation_player: AnimationPlayer = %AnimationPlayer
func _ready() -> void: func _ready() -> void:
pulse_timer.start(interval) if not Engine.is_editor_hint():
pulse_timer.start(interval)
func pulse() -> void: func pulse() -> void:
# TODO animation # TODO animation
animation_player.play("pulse") animation_player.play("pulse")
pulsed.emit() pulsed.emit()
func _editor_connect(node: SignalNode) -> void:
self.pulsed.connect(node.pulse, CONNECT_PERSIST)
self.notify_property_list_changed()

View File

@ -7,8 +7,6 @@ signal triggered
@export var quick_connect_to: SignalNode: @export var quick_connect_to: SignalNode:
set = _editor_connect set = _editor_connect
@export var splatter_scene: PackedScene
# NOTE # NOTE
# trigger oscillation animation was generated using the formula # trigger oscillation animation was generated using the formula
# f(x) = e^(-0.25x) * cos(x * pi / 2 - pi/2) + 1 for x in {0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 20} # f(x) = e^(-0.25x) * cos(x * pi / 2 - pi/2) + 1 for x in {0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 20}
@ -27,10 +25,6 @@ func trigger() -> void:
cooldown_timer.start() cooldown_timer.start()
func _destroy() -> void:
add_sibling(splatter_scene.instantiate())
func _editor_connect(node: SignalNode) -> void: func _editor_connect(node: SignalNode) -> void:
triggered.connect(node.trigger, CONNECT_PERSIST) triggered.connect(node.trigger, CONNECT_PERSIST)
self.notify_property_list_changed() self.notify_property_list_changed()

View File

@ -1,12 +1,14 @@
[gd_scene load_steps=9 format=3 uid="uid://kctp5erogwcb"] [gd_scene load_steps=9 format=3 uid="uid://kctp5erogwcb"]
[ext_resource type="Script" uid="uid://bde7cglaqobkd" path="res://src/world/mechanics/listener/listener.gd" id="1_htscg"] [ext_resource type="Script" uid="uid://bde7cglaqobkd" path="res://src/world/mechanics/listener/listener.gd" id="1_htscg"]
[ext_resource type="PackedScene" uid="uid://xlt78xc1tmkl" path="res://src/effects/grunk_splatter.tscn" id="2_2ibh1"]
[ext_resource type="Script" uid="uid://cfsiyhhrcua6o" path="res://src/world/game_sound/game_sound_listener.gd" id="2_htscg"] [ext_resource type="Script" uid="uid://cfsiyhhrcua6o" path="res://src/world/game_sound/game_sound_listener.gd" id="2_htscg"]
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_2ibh1"] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_2ibh1"]
data = PackedVector3Array(0, 0.05, 0.25, 0.0957, 0.05, 0.231, 0, -0.05, 0.2, 0.0957, 0.05, 0.231, 0.0765, -0.05, 0.1848, 0, -0.05, 0.2, 0.0957, 0.05, 0.231, 0.1768, 0.05, 0.1768, 0.0765, -0.05, 0.1848, 0.1768, 0.05, 0.1768, 0.1414, -0.05, 0.1414, 0.0765, -0.05, 0.1848, 0.1768, 0.05, 0.1768, 0.231, 0.05, 0.0957, 0.1414, -0.05, 0.1414, 0.231, 0.05, 0.0957, 0.1848, -0.05, 0.0765, 0.1414, -0.05, 0.1414, 0.231, 0.05, 0.0957, 0.25, 0.05, 0, 0.1848, -0.05, 0.0765, 0.25, 0.05, 0, 0.2, -0.05, 0, 0.1848, -0.05, 0.0765, 0.25, 0.05, 0, 0.231, 0.05, -0.0957, 0.2, -0.05, 0, 0.231, 0.05, -0.0957, 0.1848, -0.05, -0.0765, 0.2, -0.05, 0, 0.231, 0.05, -0.0957, 0.1768, 0.05, -0.1768, 0.1848, -0.05, -0.0765, 0.1768, 0.05, -0.1768, 0.1414, -0.05, -0.1414, 0.1848, -0.05, -0.0765, 0.1768, 0.05, -0.1768, 0.0957, 0.05, -0.231, 0.1414, -0.05, -0.1414, 0.0957, 0.05, -0.231, 0.0765, -0.05, -0.1848, 0.1414, -0.05, -0.1414, 0.0957, 0.05, -0.231, 0, 0.05, -0.25, 0.0765, -0.05, -0.1848, 0, 0.05, -0.25, 0, -0.05, -0.2, 0.0765, -0.05, -0.1848, 0, 0.05, -0.25, -0.0957, 0.05, -0.231, 0, -0.05, -0.2, -0.0957, 0.05, -0.231, -0.0765, -0.05, -0.1848, 0, -0.05, -0.2, -0.0957, 0.05, -0.231, -0.1768, 0.05, -0.1768, -0.0765, -0.05, -0.1848, -0.1768, 0.05, -0.1768, -0.1414, -0.05, -0.1414, -0.0765, -0.05, -0.1848, -0.1768, 0.05, -0.1768, -0.231, 0.05, -0.0957, -0.1414, -0.05, -0.1414, -0.231, 0.05, -0.0957, -0.1848, -0.05, -0.0765, -0.1414, -0.05, -0.1414, -0.231, 0.05, -0.0957, -0.25, 0.05, 0, -0.1848, -0.05, -0.0765, -0.25, 0.05, 0, -0.2, -0.05, 0, -0.1848, -0.05, -0.0765, -0.25, 0.05, 0, -0.231, 0.05, 0.0957, -0.2, -0.05, 0, -0.231, 0.05, 0.0957, -0.1848, -0.05, 0.0765, -0.2, -0.05, 0, -0.231, 0.05, 0.0957, -0.1768, 0.05, 0.1768, -0.1848, -0.05, 0.0765, -0.1768, 0.05, 0.1768, -0.1414, -0.05, 0.1414, -0.1848, -0.05, 0.0765, -0.1768, 0.05, 0.1768, -0.0957, 0.05, 0.231, -0.1414, -0.05, 0.1414, -0.0957, 0.05, 0.231, -0.0765, -0.05, 0.1848, -0.1414, -0.05, 0.1414, -0.0957, 0.05, 0.231, 0, 0.05, 0.25, -0.0765, -0.05, 0.1848, 0, 0.05, 0.25, 0, -0.05, 0.2, -0.0765, -0.05, 0.1848, 0, 0.05, 0, 0.0957, 0.05, 0.231, 0, 0.05, 0.25, 0, 0.05, 0, 0.1768, 0.05, 0.1768, 0.0957, 0.05, 0.231, 0, 0.05, 0, 0.231, 0.05, 0.0957, 0.1768, 0.05, 0.1768, 0, 0.05, 0, 0.25, 0.05, 0, 0.231, 0.05, 0.0957, 0, 0.05, 0, 0.231, 0.05, -0.0957, 0.25, 0.05, 0, 0, 0.05, 0, 0.1768, 0.05, -0.1768, 0.231, 0.05, -0.0957, 0, 0.05, 0, 0.0957, 0.05, -0.231, 0.1768, 0.05, -0.1768, 0, 0.05, 0, 0, 0.05, -0.25, 0.0957, 0.05, -0.231, 0, 0.05, 0, -0.0957, 0.05, -0.231, 0, 0.05, -0.25, 0, 0.05, 0, -0.1768, 0.05, -0.1768, -0.0957, 0.05, -0.231, 0, 0.05, 0, -0.231, 0.05, -0.0957, -0.1768, 0.05, -0.1768, 0, 0.05, 0, -0.25, 0.05, 0, -0.231, 0.05, -0.0957, 0, 0.05, 0, -0.231, 0.05, 0.0957, -0.25, 0.05, 0, 0, 0.05, 0, -0.1768, 0.05, 0.1768, -0.231, 0.05, 0.0957, 0, 0.05, 0, -0.0957, 0.05, 0.231, -0.1768, 0.05, 0.1768, 0, 0.05, 0, 0, 0.05, 0.25, -0.0957, 0.05, 0.231, 0, -0.05, 0, 0, -0.05, 0.2, 0.0765, -0.05, 0.1848, 0, -0.05, 0, 0.0765, -0.05, 0.1848, 0.1414, -0.05, 0.1414, 0, -0.05, 0, 0.1414, -0.05, 0.1414, 0.1848, -0.05, 0.0765, 0, -0.05, 0, 0.1848, -0.05, 0.0765, 0.2, -0.05, 0, 0, -0.05, 0, 0.2, -0.05, 0, 0.1848, -0.05, -0.0765, 0, -0.05, 0, 0.1848, -0.05, -0.0765, 0.1414, -0.05, -0.1414, 0, -0.05, 0, 0.1414, -0.05, -0.1414, 0.0765, -0.05, -0.1848, 0, -0.05, 0, 0.0765, -0.05, -0.1848, 0, -0.05, -0.2, 0, -0.05, 0, 0, -0.05, -0.2, -0.0765, -0.05, -0.1848, 0, -0.05, 0, -0.0765, -0.05, -0.1848, -0.1414, -0.05, -0.1414, 0, -0.05, 0, -0.1414, -0.05, -0.1414, -0.1848, -0.05, -0.0765, 0, -0.05, 0, -0.1848, -0.05, -0.0765, -0.2, -0.05, 0, 0, -0.05, 0, -0.2, -0.05, 0, -0.1848, -0.05, 0.0765, 0, -0.05, 0, -0.1848, -0.05, 0.0765, -0.1414, -0.05, 0.1414, 0, -0.05, 0, -0.1414, -0.05, 0.1414, -0.0765, -0.05, 0.1848, 0, -0.05, 0, -0.0765, -0.05, 0.1848, 0, -0.05, 0.2) data = PackedVector3Array(0, 0.05, 0.25, 0.0957, 0.05, 0.231, 0, -0.05, 0.2, 0.0957, 0.05, 0.231, 0.0765, -0.05, 0.1848, 0, -0.05, 0.2, 0.0957, 0.05, 0.231, 0.1768, 0.05, 0.1768, 0.0765, -0.05, 0.1848, 0.1768, 0.05, 0.1768, 0.1414, -0.05, 0.1414, 0.0765, -0.05, 0.1848, 0.1768, 0.05, 0.1768, 0.231, 0.05, 0.0957, 0.1414, -0.05, 0.1414, 0.231, 0.05, 0.0957, 0.1848, -0.05, 0.0765, 0.1414, -0.05, 0.1414, 0.231, 0.05, 0.0957, 0.25, 0.05, 0, 0.1848, -0.05, 0.0765, 0.25, 0.05, 0, 0.2, -0.05, 0, 0.1848, -0.05, 0.0765, 0.25, 0.05, 0, 0.231, 0.05, -0.0957, 0.2, -0.05, 0, 0.231, 0.05, -0.0957, 0.1848, -0.05, -0.0765, 0.2, -0.05, 0, 0.231, 0.05, -0.0957, 0.1768, 0.05, -0.1768, 0.1848, -0.05, -0.0765, 0.1768, 0.05, -0.1768, 0.1414, -0.05, -0.1414, 0.1848, -0.05, -0.0765, 0.1768, 0.05, -0.1768, 0.0957, 0.05, -0.231, 0.1414, -0.05, -0.1414, 0.0957, 0.05, -0.231, 0.0765, -0.05, -0.1848, 0.1414, -0.05, -0.1414, 0.0957, 0.05, -0.231, 0, 0.05, -0.25, 0.0765, -0.05, -0.1848, 0, 0.05, -0.25, 0, -0.05, -0.2, 0.0765, -0.05, -0.1848, 0, 0.05, -0.25, -0.0957, 0.05, -0.231, 0, -0.05, -0.2, -0.0957, 0.05, -0.231, -0.0765, -0.05, -0.1848, 0, -0.05, -0.2, -0.0957, 0.05, -0.231, -0.1768, 0.05, -0.1768, -0.0765, -0.05, -0.1848, -0.1768, 0.05, -0.1768, -0.1414, -0.05, -0.1414, -0.0765, -0.05, -0.1848, -0.1768, 0.05, -0.1768, -0.231, 0.05, -0.0957, -0.1414, -0.05, -0.1414, -0.231, 0.05, -0.0957, -0.1848, -0.05, -0.0765, -0.1414, -0.05, -0.1414, -0.231, 0.05, -0.0957, -0.25, 0.05, 0, -0.1848, -0.05, -0.0765, -0.25, 0.05, 0, -0.2, -0.05, 0, -0.1848, -0.05, -0.0765, -0.25, 0.05, 0, -0.231, 0.05, 0.0957, -0.2, -0.05, 0, -0.231, 0.05, 0.0957, -0.1848, -0.05, 0.0765, -0.2, -0.05, 0, -0.231, 0.05, 0.0957, -0.1768, 0.05, 0.1768, -0.1848, -0.05, 0.0765, -0.1768, 0.05, 0.1768, -0.1414, -0.05, 0.1414, -0.1848, -0.05, 0.0765, -0.1768, 0.05, 0.1768, -0.0957, 0.05, 0.231, -0.1414, -0.05, 0.1414, -0.0957, 0.05, 0.231, -0.0765, -0.05, 0.1848, -0.1414, -0.05, 0.1414, -0.0957, 0.05, 0.231, 0, 0.05, 0.25, -0.0765, -0.05, 0.1848, 0, 0.05, 0.25, 0, -0.05, 0.2, -0.0765, -0.05, 0.1848, 0, 0.05, 0, 0.0957, 0.05, 0.231, 0, 0.05, 0.25, 0, 0.05, 0, 0.1768, 0.05, 0.1768, 0.0957, 0.05, 0.231, 0, 0.05, 0, 0.231, 0.05, 0.0957, 0.1768, 0.05, 0.1768, 0, 0.05, 0, 0.25, 0.05, 0, 0.231, 0.05, 0.0957, 0, 0.05, 0, 0.231, 0.05, -0.0957, 0.25, 0.05, 0, 0, 0.05, 0, 0.1768, 0.05, -0.1768, 0.231, 0.05, -0.0957, 0, 0.05, 0, 0.0957, 0.05, -0.231, 0.1768, 0.05, -0.1768, 0, 0.05, 0, 0, 0.05, -0.25, 0.0957, 0.05, -0.231, 0, 0.05, 0, -0.0957, 0.05, -0.231, 0, 0.05, -0.25, 0, 0.05, 0, -0.1768, 0.05, -0.1768, -0.0957, 0.05, -0.231, 0, 0.05, 0, -0.231, 0.05, -0.0957, -0.1768, 0.05, -0.1768, 0, 0.05, 0, -0.25, 0.05, 0, -0.231, 0.05, -0.0957, 0, 0.05, 0, -0.231, 0.05, 0.0957, -0.25, 0.05, 0, 0, 0.05, 0, -0.1768, 0.05, 0.1768, -0.231, 0.05, 0.0957, 0, 0.05, 0, -0.0957, 0.05, 0.231, -0.1768, 0.05, 0.1768, 0, 0.05, 0, 0, 0.05, 0.25, -0.0957, 0.05, 0.231, 0, -0.05, 0, 0, -0.05, 0.2, 0.0765, -0.05, 0.1848, 0, -0.05, 0, 0.0765, -0.05, 0.1848, 0.1414, -0.05, 0.1414, 0, -0.05, 0, 0.1414, -0.05, 0.1414, 0.1848, -0.05, 0.0765, 0, -0.05, 0, 0.1848, -0.05, 0.0765, 0.2, -0.05, 0, 0, -0.05, 0, 0.2, -0.05, 0, 0.1848, -0.05, -0.0765, 0, -0.05, 0, 0.1848, -0.05, -0.0765, 0.1414, -0.05, -0.1414, 0, -0.05, 0, 0.1414, -0.05, -0.1414, 0.0765, -0.05, -0.1848, 0, -0.05, 0, 0.0765, -0.05, -0.1848, 0, -0.05, -0.2, 0, -0.05, 0, 0, -0.05, -0.2, -0.0765, -0.05, -0.1848, 0, -0.05, 0, -0.0765, -0.05, -0.1848, -0.1414, -0.05, -0.1414, 0, -0.05, 0, -0.1414, -0.05, -0.1414, -0.1848, -0.05, -0.0765, 0, -0.05, 0, -0.1848, -0.05, -0.0765, -0.2, -0.05, 0, 0, -0.05, 0, -0.2, -0.05, 0, -0.1848, -0.05, 0.0765, 0, -0.05, 0, -0.1848, -0.05, 0.0765, -0.1414, -0.05, 0.1414, 0, -0.05, 0, -0.1414, -0.05, 0.1414, -0.0765, -0.05, 0.1848, 0, -0.05, 0, -0.0765, -0.05, 0.1848, 0, -0.05, 0.2)
[sub_resource type="SphereShape3D" id="SphereShape3D_2ibh1"]
radius = 1.0
[sub_resource type="CylinderMesh" id="CylinderMesh_ud3xk"] [sub_resource type="CylinderMesh" id="CylinderMesh_ud3xk"]
top_radius = 0.25 top_radius = 0.25
bottom_radius = 0.2 bottom_radius = 0.2
@ -55,7 +57,6 @@ _data = {
collision_layer = 36 collision_layer = 36
collision_mask = 0 collision_mask = 0
script = ExtResource("1_htscg") script = ExtResource("1_htscg")
splatter_scene = ExtResource("2_2ibh1")
durability = 3.0 durability = 3.0
value = 4000.0 value = 4000.0
metadata/_custom_type_script = "uid://bypgxi0gy56yk" metadata/_custom_type_script = "uid://bypgxi0gy56yk"
@ -71,9 +72,10 @@ script = ExtResource("2_htscg")
metadata/_custom_type_script = "uid://cfsiyhhrcua6o" metadata/_custom_type_script = "uid://cfsiyhhrcua6o"
[node name="CollisionShape3D" type="CollisionShape3D" parent="CollisionShape3D/GameSoundListener"] [node name="CollisionShape3D" type="CollisionShape3D" parent="CollisionShape3D/GameSoundListener"]
shape = SubResource("ConcavePolygonShape3D_2ibh1") shape = SubResource("SphereShape3D_2ibh1")
[node name="MeshInstance3D" type="MeshInstance3D" parent="CollisionShape3D"] [node name="MeshInstance3D" type="MeshInstance3D" parent="CollisionShape3D"]
gi_mode = 2
mesh = SubResource("CylinderMesh_ud3xk") mesh = SubResource("CylinderMesh_ud3xk")
skeleton = NodePath("../..") skeleton = NodePath("../..")

View File

@ -8,9 +8,11 @@ signal triggered
## Emitted when `pulse` is called, after a short delay. ## Emitted when `pulse` is called, after a short delay.
signal pulsed signal pulsed
@export_category("Editor Tools")
@export var quick_connect_to: SignalNode: @export var quick_connect_to: SignalNode:
set = _editor_connect set = _editor_connect
@export_category("Game Scenes")
@export var editor_arrow_scene: PackedScene @export var editor_arrow_scene: PackedScene
var _busy := false var _busy := false
@ -72,9 +74,10 @@ static func find_path(
func _editor_connect(node: SignalNode) -> void: func _editor_connect(node: SignalNode) -> void:
self.triggered.connect(node.trigger, CONNECT_PERSIST) if node:
self.pulsed.connect(node.trigger, CONNECT_PERSIST) self.triggered.connect(node.trigger, CONNECT_PERSIST)
self.notify_property_list_changed() self.pulsed.connect(node.pulse, CONNECT_PERSIST)
self.notify_property_list_changed()
func _process(delta: float) -> void: func _process(delta: float) -> void:

View File

@ -115,8 +115,10 @@ collision_mask = 0
script = ExtResource("1_rdv5j") script = ExtResource("1_rdv5j")
editor_arrow_scene = ExtResource("2_nfkbq") editor_arrow_scene = ExtResource("2_nfkbq")
value = 800.0 value = 800.0
splatter_scale = 0.2
[node name="MeshInstance3D" type="MeshInstance3D" parent="."] [node name="MeshInstance3D" type="MeshInstance3D" parent="."]
gi_mode = 2
mesh = SubResource("SphereMesh_hsruj") mesh = SubResource("SphereMesh_hsruj")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]

View File

@ -48,13 +48,14 @@ data = PackedVector3Array(0.7236, -0.4472, 0.5257, 0, -1, 0, -0.2764, -0.4472, 0
collision_layer = 36 collision_layer = 36
collision_mask = 0 collision_mask = 0
script = ExtResource("1_t1c4j") script = ExtResource("1_t1c4j")
durability = 3.0 durability = 0.5
value = 4000.0 value = 4000.0
metadata/_custom_type_script = "uid://bypgxi0gy56yk" metadata/_custom_type_script = "uid://bypgxi0gy56yk"
[node name="MeshInstance3D" type="MeshInstance3D" parent="."] [node name="MeshInstance3D" type="MeshInstance3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0) transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
gi_mode = 2
mesh = SubResource("ArrayMesh_ulsff") mesh = SubResource("ArrayMesh_ulsff")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]