generated from krampus/template-godot4
Death
All checks were successful
linting & formatting / build (push) Successful in 21s
itch.io publish action / build (linux64, x86_64) (push) Successful in 2m6s
itch.io publish action / build (osx, app) (push) Successful in 2m10s
itch.io publish action / build (win64, exe) (push) Successful in 2m31s
All checks were successful
linting & formatting / build (push) Successful in 21s
itch.io publish action / build (linux64, x86_64) (push) Successful in 2m6s
itch.io publish action / build (osx, app) (push) Successful in 2m10s
itch.io publish action / build (win64, exe) (push) Successful in 2m31s
This commit is contained in:
parent
127fb9be38
commit
5dba027b4c
@ -97,8 +97,8 @@ process_material = SubResource("ParticleProcessMaterial_vwgy4")
|
|||||||
draw_pass_1 = SubResource("QuadMesh_fgb4j")
|
draw_pass_1 = SubResource("QuadMesh_fgb4j")
|
||||||
|
|
||||||
[node name="Decal" type="Decal" parent="Muzzle"]
|
[node name="Decal" type="Decal" parent="Muzzle"]
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.47035e-08, -1, 0, 1, -4.47035e-08, 0, 0, -1)
|
transform = Transform3D(1, 0, 0, 0, -4.47035e-08, -1, 0, 1, -4.47035e-08, 0, 0, -1.5)
|
||||||
size = Vector3(0.2, 2, 0.2)
|
size = Vector3(0.2, 3, 0.2)
|
||||||
texture_albedo = ExtResource("2_qcl8j")
|
texture_albedo = ExtResource("2_qcl8j")
|
||||||
texture_emission = ExtResource("2_qcl8j")
|
texture_emission = ExtResource("2_qcl8j")
|
||||||
cull_mask = 1048573
|
cull_mask = 1048573
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
class_name Game extends Node
|
class_name Game extends Node
|
||||||
## Interface to the game as an application.
|
## Interface to the game as an application.
|
||||||
|
|
||||||
|
@export_category("Game Scenes")
|
||||||
|
@export var world_scene: PackedScene
|
||||||
|
|
||||||
## Handy typed singleton access.
|
## Handy typed singleton access.
|
||||||
static var manager: GameManagerType:
|
static var manager: GameManagerType:
|
||||||
get():
|
get():
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://qpq2cm1hgeha"]
|
[gd_scene load_steps=3 format=3 uid="uid://qpq2cm1hgeha"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dxl25lkyped4" path="res://src/game/game.gd" id="1_qnjlk"]
|
[ext_resource type="Script" uid="uid://dxl25lkyped4" path="res://src/game/game.gd" id="1_qnjlk"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://884jqafhtrv0" path="res://src/world/world.tscn" id="2_s6lek"]
|
||||||
|
|
||||||
[node name="Game" type="Node"]
|
[node name="Game" type="Node"]
|
||||||
script = ExtResource("1_qnjlk")
|
script = ExtResource("1_qnjlk")
|
||||||
|
world_scene = ExtResource("2_s6lek")
|
||||||
|
@ -18,6 +18,9 @@ signal alert_cleared
|
|||||||
## Emitted after the player's grunk vault reaches a new milestone.
|
## Emitted after the player's grunk vault reaches a new milestone.
|
||||||
signal milestone_reached(milestone: Milestone)
|
signal milestone_reached(milestone: Milestone)
|
||||||
|
|
||||||
|
## Emitted as soon as the player dies.
|
||||||
|
signal player_dead
|
||||||
|
|
||||||
const MAX_ALERT := 6
|
const MAX_ALERT := 6
|
||||||
|
|
||||||
## Maximum amount of grunk the player can carry in their tank.
|
## Maximum amount of grunk the player can carry in their tank.
|
||||||
@ -118,3 +121,9 @@ func next_milestone_amount() -> int:
|
|||||||
if grunk_vault < milestone_amt:
|
if grunk_vault < milestone_amt:
|
||||||
return milestone_amt
|
return milestone_amt
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
|
||||||
|
## Called by Player on death.
|
||||||
|
func on_player_death() -> void:
|
||||||
|
player_dead.emit()
|
||||||
|
# TODO reload from save?
|
||||||
|
@ -3,6 +3,7 @@ class_name Player extends CharacterBody3D
|
|||||||
#region Exported Properties
|
#region Exported Properties
|
||||||
|
|
||||||
@export_category("Status")
|
@export_category("Status")
|
||||||
|
@export var dead := false
|
||||||
@export var movement_enabled := true
|
@export var movement_enabled := true
|
||||||
@export var activity_enabled := true
|
@export var activity_enabled := true
|
||||||
@export var look_enabled := true
|
@export var look_enabled := true
|
||||||
@ -142,30 +143,34 @@ func toggle_crouch() -> void:
|
|||||||
|
|
||||||
## Get fuckign grabbed, idiot!
|
## Get fuckign grabbed, idiot!
|
||||||
## Begin grab death sequence animation.
|
## Begin grab death sequence animation.
|
||||||
func get_grabbed(look_target: Vector3) -> void:
|
func get_grabbed() -> void:
|
||||||
|
if dead: # No double-grabsies
|
||||||
|
return
|
||||||
|
|
||||||
movement_enabled = false
|
movement_enabled = false
|
||||||
activity_enabled = false
|
activity_enabled = false
|
||||||
look_enabled = false
|
look_enabled = false
|
||||||
|
dead = true
|
||||||
|
|
||||||
uncrouch()
|
uncrouch()
|
||||||
grab_animation.play("get_grabbed")
|
grab_animation.play("get_grabbed")
|
||||||
camera_pivot.reset_pitch(0.4)
|
camera_pivot.reset_pitch(0.4)
|
||||||
|
|
||||||
|
|
||||||
|
func _signal_death() -> void:
|
||||||
|
# Called from the death animation
|
||||||
|
Game.manager.on_player_death()
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region _physics_process
|
#region _physics_process
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
# REMOVEME
|
#REMOVEME
|
||||||
if Input.is_action_just_pressed("ui_page_down"):
|
if Input.is_action_just_pressed("ui_page_down"):
|
||||||
get_grabbed(Vector3.FORWARD)
|
get_grabbed()
|
||||||
if Input.is_action_just_pressed("ui_page_up"):
|
|
||||||
movement_enabled = true
|
|
||||||
activity_enabled = true
|
|
||||||
look_enabled = true
|
|
||||||
grab_animation.play("RESET")
|
|
||||||
|
|
||||||
# Will be null if no valid interactor is selected.
|
# Will be null if no valid interactor is selected.
|
||||||
var interactive: Interactive = interact_ray.get_collider() as Interactive
|
var interactive: Interactive = interact_ray.get_collider() as Interactive
|
||||||
|
@ -436,7 +436,7 @@ length = 0.001
|
|||||||
tracks/0/type = "bezier"
|
tracks/0/type = "bezier"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:x")
|
tracks/0/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:y")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
@ -447,7 +447,7 @@ tracks/0/keys = {
|
|||||||
tracks/1/type = "bezier"
|
tracks/1/type = "bezier"
|
||||||
tracks/1/imported = false
|
tracks/1/imported = false
|
||||||
tracks/1/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/1/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:y")
|
tracks/1/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:z")
|
||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
@ -458,7 +458,7 @@ tracks/1/keys = {
|
|||||||
tracks/2/type = "bezier"
|
tracks/2/type = "bezier"
|
||||||
tracks/2/imported = false
|
tracks/2/imported = false
|
||||||
tracks/2/enabled = true
|
tracks/2/enabled = true
|
||||||
tracks/2/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:z")
|
tracks/2/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:x")
|
||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
@ -469,7 +469,7 @@ tracks/2/keys = {
|
|||||||
tracks/3/type = "bezier"
|
tracks/3/type = "bezier"
|
||||||
tracks/3/imported = false
|
tracks/3/imported = false
|
||||||
tracks/3/enabled = true
|
tracks/3/enabled = true
|
||||||
tracks/3/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:x")
|
tracks/3/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:y")
|
||||||
tracks/3/interp = 1
|
tracks/3/interp = 1
|
||||||
tracks/3/loop_wrap = true
|
tracks/3/loop_wrap = true
|
||||||
tracks/3/keys = {
|
tracks/3/keys = {
|
||||||
@ -480,7 +480,7 @@ tracks/3/keys = {
|
|||||||
tracks/4/type = "bezier"
|
tracks/4/type = "bezier"
|
||||||
tracks/4/imported = false
|
tracks/4/imported = false
|
||||||
tracks/4/enabled = true
|
tracks/4/enabled = true
|
||||||
tracks/4/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:y")
|
tracks/4/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:z")
|
||||||
tracks/4/interp = 1
|
tracks/4/interp = 1
|
||||||
tracks/4/loop_wrap = true
|
tracks/4/loop_wrap = true
|
||||||
tracks/4/keys = {
|
tracks/4/keys = {
|
||||||
@ -491,7 +491,7 @@ tracks/4/keys = {
|
|||||||
tracks/5/type = "bezier"
|
tracks/5/type = "bezier"
|
||||||
tracks/5/imported = false
|
tracks/5/imported = false
|
||||||
tracks/5/enabled = true
|
tracks/5/enabled = true
|
||||||
tracks/5/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:z")
|
tracks/5/path = NodePath(".:camera_rumble")
|
||||||
tracks/5/interp = 1
|
tracks/5/interp = 1
|
||||||
tracks/5/loop_wrap = true
|
tracks/5/loop_wrap = true
|
||||||
tracks/5/keys = {
|
tracks/5/keys = {
|
||||||
@ -499,17 +499,6 @@ tracks/5/keys = {
|
|||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/6/type = "bezier"
|
|
||||||
tracks/6/imported = false
|
|
||||||
tracks/6/enabled = true
|
|
||||||
tracks/6/path = NodePath(".:camera_rumble")
|
|
||||||
tracks/6/interp = 1
|
|
||||||
tracks/6/loop_wrap = true
|
|
||||||
tracks/6/keys = {
|
|
||||||
"handle_modes": PackedInt32Array(0),
|
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
|
|
||||||
"times": PackedFloat32Array(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_p6grl"]
|
[sub_resource type="Animation" id="Animation_p6grl"]
|
||||||
resource_name = "get_grabbed"
|
resource_name = "get_grabbed"
|
||||||
@ -517,80 +506,83 @@ length = 6.0
|
|||||||
tracks/0/type = "bezier"
|
tracks/0/type = "bezier"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:x")
|
tracks/0/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:y")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"handle_modes": PackedInt32Array(0, 0),
|
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0),
|
|
||||||
"times": PackedFloat32Array(0, 0.5)
|
|
||||||
}
|
|
||||||
tracks/1/type = "bezier"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:y")
|
|
||||||
tracks/1/interp = 1
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"handle_modes": PackedInt32Array(0, 0, 0, 0),
|
"handle_modes": PackedInt32Array(0, 0, 0, 0),
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.2, 0.00167316, -1.385, -0.0999666, 0.665918, 0.0333333, 0.566197, -1.385, -0.0416667, 0.6662, 0.0083333, 0.113592, -1.385, -0.0876723, -0.0501441, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.25, 0, 0.2, 0.00167316, -1.385, -0.0999666, 0.665918, 0.0333333, 0.566197, -1.385, -0.0416667, 0.6662, 0.0083333, 0.113592, -1.385, -0.0876723, -0.0501441, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0, 0.333333, 0.566667, 0.8)
|
"times": PackedFloat32Array(0, 0.333333, 0.566667, 0.8)
|
||||||
}
|
}
|
||||||
tracks/2/type = "bezier"
|
tracks/1/type = "bezier"
|
||||||
tracks/2/imported = false
|
tracks/1/imported = false
|
||||||
tracks/2/enabled = true
|
tracks/1/enabled = true
|
||||||
tracks/2/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:z")
|
tracks/1/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:position:z")
|
||||||
tracks/2/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/1/keys = {
|
||||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.333333, -0.39514, -0.254137, -0.0666667, -0.000457972, 0.25, 0, -0.254137, -0.0666667, -0.000457972, 0.0601447, 0.231214, 0.304548, -0.563731, -0.0123209, 0.25, 0, 0.304548, -0.25, 0, 0.06, 0.231, 0.885, -0.563731, -0.0123209, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.25, 0, 0.333333, -0.39514, -0.254137, -0.0666667, -0.000457972, 0.25, 0, -0.254137, -0.0666667, -0.000457972, 0.0601447, 0.231214, 0.304548, -0.563731, -0.0123209, 0.25, 0, 0.304548, -0.25, 0, 0.06, 0.231, 0.885, -0.563731, -0.0123209, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0, 0.366667, 2.96667, 3.56667, 5.26667, 5.86667)
|
"times": PackedFloat32Array(0, 0.366667, 2.96667, 3.56667, 5.26667, 5.86667)
|
||||||
}
|
}
|
||||||
tracks/3/type = "bezier"
|
tracks/2/type = "bezier"
|
||||||
tracks/3/imported = false
|
tracks/2/imported = false
|
||||||
tracks/3/enabled = true
|
tracks/2/enabled = true
|
||||||
tracks/3/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:x")
|
tracks/2/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:x")
|
||||||
tracks/3/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/3/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/3/keys = {
|
tracks/2/keys = {
|
||||||
"handle_modes": PackedInt32Array(0, 0, 0, 0),
|
"handle_modes": PackedInt32Array(0, 0, 0, 0),
|
||||||
"points": PackedFloat32Array(0, -0.05, 0, 0.133333, 2.74114, 0, -0.1, 0.428854, 0.0666667, 0.168909, 0, -0.0666667, 0.178293, 0.0083333, 0.0844504, -1.20654e-08, -0.0876723, -0.0331565, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.05, 0, 0.133333, 2.74114, 0, -0.1, 0.428854, 0.0666667, 0.168909, 0, -0.0666667, 0.178293, 0.0083333, 0.0844504, -1.20654e-08, -0.0876723, -0.0331565, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0, 0.333333, 0.566667, 0.8)
|
"times": PackedFloat32Array(0, 0.333333, 0.566667, 0.8)
|
||||||
}
|
}
|
||||||
tracks/4/type = "bezier"
|
tracks/3/type = "bezier"
|
||||||
tracks/4/imported = false
|
tracks/3/imported = false
|
||||||
tracks/4/enabled = true
|
tracks/3/enabled = true
|
||||||
tracks/4/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:y")
|
tracks/3/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:y")
|
||||||
tracks/4/interp = 1
|
tracks/3/interp = 1
|
||||||
tracks/4/loop_wrap = true
|
tracks/3/loop_wrap = true
|
||||||
tracks/4/keys = {
|
tracks/3/keys = {
|
||||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.333333, -0.0229232, -1.0426, -0.933333, -0.279974, 0.25, 0, -1.043, -0.25, 0, 0.0333333, 0.158983, -0.878928, -0.25, 0, 0.25, 0, -0.878928, -0.25, 0, 0.033, 0.159, -0.758089, -0.25, 0, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.25, 0, 0.333333, -0.0229232, -1.0426, -0.933333, -0.279974, 0.25, 0, -1.043, -0.25, 0, 0.0333333, 0.158983, -0.878928, -0.25, 0, 0.25, 0, -0.878928, -0.25, 0, 0.033, 0.159, -0.758089, -0.25, 0, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0, 0.8, 2.96667, 3.56667, 5.26667, 5.86667)
|
"times": PackedFloat32Array(0, 0.8, 2.96667, 3.56667, 5.26667, 5.86667)
|
||||||
}
|
}
|
||||||
tracks/5/type = "bezier"
|
tracks/4/type = "bezier"
|
||||||
tracks/5/imported = false
|
tracks/4/imported = false
|
||||||
tracks/5/enabled = true
|
tracks/4/enabled = true
|
||||||
tracks/5/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:z")
|
tracks/4/path = NodePath("CameraPosition/CameraPivot/TransformedPosition:rotation:z")
|
||||||
tracks/5/interp = 1
|
tracks/4/interp = 1
|
||||||
tracks/5/loop_wrap = true
|
tracks/4/loop_wrap = true
|
||||||
tracks/5/keys = {
|
tracks/4/keys = {
|
||||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0, 0),
|
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0, 0),
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 1.5708, -0.0876722, 0.463211, 0.0344108, -0.0689299, 1.5708, -0.0322559, -0.00752902, 0.25, 0, 1.571, -0.25, 0, 0, 0.04, 1.68, -0.25, 0, 0.25, 0, 1.68, -0.25, 0, 0, 0.04, 1.71, -0.25, 0, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 1.5708, -0.0876722, 0.463211, 0.0344108, -0.0689299, 1.5708, -0.0322559, -0.00752902, 0.25, 0, 1.571, -0.25, 0, 0, 0.04, 1.68, -0.25, 0, 0.25, 0, 1.68, -0.25, 0, 0, 0.04, 1.71, -0.25, 0, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0, 0.566667, 0.733333, 2.96667, 3.66667, 5.26667, 5.96667)
|
"times": PackedFloat32Array(0, 0.566667, 0.733333, 2.96667, 3.66667, 5.26667, 5.96667)
|
||||||
}
|
}
|
||||||
tracks/6/type = "bezier"
|
tracks/5/type = "bezier"
|
||||||
tracks/6/imported = false
|
tracks/5/imported = false
|
||||||
tracks/6/enabled = true
|
tracks/5/enabled = true
|
||||||
tracks/6/path = NodePath(".:camera_rumble")
|
tracks/5/path = NodePath(".:camera_rumble")
|
||||||
tracks/6/interp = 1
|
tracks/5/interp = 1
|
||||||
tracks/6/loop_wrap = true
|
tracks/5/loop_wrap = true
|
||||||
tracks/6/keys = {
|
tracks/5/keys = {
|
||||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0, 0),
|
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0, 0),
|
||||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0, 0.161517, 0, -0.767, 0, 0.25, 0, 0, -0.25, 0, 0, 0.02, 0, -0.5, 0, 0.25, 0, 0, -0.25, 0, 0, 0.02, 0, -0.5, 0, 0.25, 0),
|
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0, 0.161517, 0, -0.767, 0, 0.25, 0, 0, -0.25, 0, 0, 0.02, 0, -0.5, 0, 0.25, 0, 0, -0.25, 0, 0, 0.02, 0, -0.5, 0, 0.25, 0),
|
||||||
"times": PackedFloat32Array(0, 0.3, 1, 2.96667, 3.66667, 5.26667, 5.96667)
|
"times": PackedFloat32Array(0, 0.3, 1, 2.96667, 3.66667, 5.26667, 5.96667)
|
||||||
}
|
}
|
||||||
|
tracks/6/type = "method"
|
||||||
|
tracks/6/imported = false
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath(".")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = {
|
||||||
|
"times": PackedFloat32Array(2.96667),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": [],
|
||||||
|
"method": &"_signal_death"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_e7e1q"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_e7e1q"]
|
||||||
_data = {
|
_data = {
|
||||||
|
66
src/shaders/canvas_grunk.gdshader
Normal file
66
src/shaders/canvas_grunk.gdshader
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/* Gunk shader adapted to a canvas item */
|
||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
group_uniforms gunk_material;
|
||||||
|
uniform vec3 color_1: source_color = vec3(0.0, 0.03, 0.1);
|
||||||
|
uniform vec3 color_2: source_color = vec3(0.0, 0.1, 0.3);
|
||||||
|
uniform vec3 emission_color: source_color = vec3(0.25, 0.88, 1.0);
|
||||||
|
|
||||||
|
uniform float pixellation = 128.0;
|
||||||
|
uniform float time_pixellation = 30.0;
|
||||||
|
|
||||||
|
uniform float emission_strength = 0.05;
|
||||||
|
|
||||||
|
// Used ONLY by the gunk, does not affect the gunk mask.
|
||||||
|
uniform vec2 uv_scale = vec2(1.0);
|
||||||
|
|
||||||
|
uniform float time_scale = 1.0;
|
||||||
|
|
||||||
|
uniform sampler3D gunk_noise;
|
||||||
|
uniform sampler3D gunk_normal_map;
|
||||||
|
|
||||||
|
group_uniforms mask;
|
||||||
|
uniform float mask_progress : hint_range(0.0, 1.0, 0.01) = 0.0;
|
||||||
|
uniform sampler2D mask_noise : hint_default_white;
|
||||||
|
|
||||||
|
float hardstep(float value) {
|
||||||
|
float x = clamp(value, 0.0, 1.0);
|
||||||
|
return 0.5 * tanh( (20.0 * x - 10.0) * inversesqrt(x - x * x) ) + 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec2 aspect_ratio = vec2(SCREEN_PIXEL_SIZE.y / SCREEN_PIXEL_SIZE.x, 1.0);
|
||||||
|
vec2 scaled_pixellation = pixellation * aspect_ratio;
|
||||||
|
vec2 local_uv = floor(UV * uv_scale * scaled_pixellation) / scaled_pixellation;
|
||||||
|
float local_time = floor(TIME * time_scale * time_pixellation) / time_pixellation;
|
||||||
|
|
||||||
|
// swirl
|
||||||
|
vec3 uvt = vec3(local_uv.x, local_uv.y, local_time);
|
||||||
|
uvt.x += sin(uvt.y * 1.54 * PI + uvt.z) * cos(uvt.y * 1.31 * PI + uvt.z) * 0.2;
|
||||||
|
uvt.y += cos(uvt.x * 1.74 * PI + uvt.z) * -sin(uvt.y * 1.64 * PI + uvt.z) * 0.2;
|
||||||
|
|
||||||
|
|
||||||
|
float value = texture(gunk_noise, uvt).r;
|
||||||
|
vec3 color = mix(color_1, color_2, value);
|
||||||
|
vec3 emission = (1.0 - value) * emission_color * emission_strength;
|
||||||
|
color += emission;
|
||||||
|
|
||||||
|
NORMAL_MAP = texture(gunk_normal_map, uvt).xyz;
|
||||||
|
|
||||||
|
// Radial mask effect
|
||||||
|
float radius = 1.3 * length(local_uv - 0.5);
|
||||||
|
float offset = radius + texture(mask_noise, local_uv).r - 0.5;
|
||||||
|
float mask = 1.0 - clamp(offset - 1.0 + 2.0 * mask_progress, 0.0, 1.0);
|
||||||
|
|
||||||
|
//COLOR = vec4(mask, mask, mask, 1.0);
|
||||||
|
|
||||||
|
// soften edges
|
||||||
|
NORMAL_MAP *= smoothstep(1.0, 0.0, mask);
|
||||||
|
|
||||||
|
// Harderish edge
|
||||||
|
float alpha = hardstep(1.0 - mask);
|
||||||
|
|
||||||
|
COLOR = vec4(color, alpha);
|
||||||
|
|
||||||
|
// COLOR = vec4(mask, mask, mask, 1.0);
|
||||||
|
}
|
1
src/shaders/canvas_grunk.gdshader.uid
Normal file
1
src/shaders/canvas_grunk.gdshader.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://dnytoirugot2e
|
@ -242,10 +242,10 @@ anchor_left = 0.5
|
|||||||
anchor_top = 0.5
|
anchor_top = 0.5
|
||||||
anchor_right = 0.5
|
anchor_right = 0.5
|
||||||
anchor_bottom = 0.5
|
anchor_bottom = 0.5
|
||||||
offset_left = -398.862
|
offset_left = -406.72
|
||||||
offset_top = -301.076
|
offset_top = -295.754
|
||||||
offset_right = -398.862
|
offset_right = -406.72
|
||||||
offset_bottom = -301.076
|
offset_bottom = -295.754
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("4_ud8na")
|
script = ExtResource("4_ud8na")
|
||||||
|
221
src/ui/menus/kill_screen/kill_screen.tscn
Normal file
221
src/ui/menus/kill_screen/kill_screen.tscn
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
[gd_scene load_steps=13 format=3 uid="uid://c0uitm5cg88h1"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" uid="uid://dnytoirugot2e" path="res://src/shaders/canvas_grunk.gdshader" id="1_28vyc"]
|
||||||
|
[ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="2_qsvii"]
|
||||||
|
[ext_resource type="Theme" uid="uid://b07fevr214mmr" path="res://src/ui/hud/hud_theme.tres" id="3_a6m17"]
|
||||||
|
[ext_resource type="Script" uid="uid://cjs2fen6jo0g0" path="res://src/ui/rumbler.gd" id="4_sv5d8"]
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_et0xc"]
|
||||||
|
width = 256
|
||||||
|
height = 256
|
||||||
|
seamless = true
|
||||||
|
seamless_blend_skirt = 0.5
|
||||||
|
noise = ExtResource("2_qsvii")
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_a6m17"]
|
||||||
|
width = 256
|
||||||
|
height = 256
|
||||||
|
seamless = true
|
||||||
|
seamless_blend_skirt = 0.5
|
||||||
|
noise = ExtResource("2_qsvii")
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_qsvii"]
|
||||||
|
frequency = 0.0006
|
||||||
|
fractal_type = 2
|
||||||
|
fractal_octaves = 4
|
||||||
|
fractal_gain = 0.667
|
||||||
|
domain_warp_type = 2
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_et0xc"]
|
||||||
|
width = 1024
|
||||||
|
height = 1024
|
||||||
|
noise = SubResource("FastNoiseLite_qsvii")
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qsvii"]
|
||||||
|
shader = ExtResource("1_28vyc")
|
||||||
|
shader_parameter/color_1 = Color(0, 0.03, 0.1, 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/pixellation = 50.0
|
||||||
|
shader_parameter/time_pixellation = 30.0
|
||||||
|
shader_parameter/emission_strength = 0.0
|
||||||
|
shader_parameter/uv_scale = Vector2(1, 1)
|
||||||
|
shader_parameter/time_scale = 0.2
|
||||||
|
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_et0xc")
|
||||||
|
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_a6m17")
|
||||||
|
shader_parameter/mask_progress = 0.0
|
||||||
|
shader_parameter/mask_noise = SubResource("NoiseTexture2D_et0xc")
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_qsvii"]
|
||||||
|
resource_name = "transition_in"
|
||||||
|
length = 14.0
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Grunk:material:shader_parameter/mask_progress")
|
||||||
|
tracks/0/interp = 2
|
||||||
|
tracks/0/loop_wrap = false
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 8),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 1.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Grunk/Rumbler:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 11.4667),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Blackout:visible")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 13.9667),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
tracks/3/type = "method"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath(".")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(14),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"values": [{
|
||||||
|
"args": [],
|
||||||
|
"method": &"queue_free"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_et0xc"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Grunk:material:shader_parameter/mask_progress")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Grunk/Rumbler:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("Blackout:visible")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a6m17"]
|
||||||
|
_data = {
|
||||||
|
&"RESET": SubResource("Animation_et0xc"),
|
||||||
|
&"transition_in": SubResource("Animation_qsvii")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="KillScreen" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Grunk" type="ColorRect" parent="."]
|
||||||
|
clip_children = 2
|
||||||
|
material = SubResource("ShaderMaterial_qsvii")
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
mouse_filter = 2
|
||||||
|
|
||||||
|
[node name="Rumbler" type="Control" parent="Grunk"]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = 3.04544
|
||||||
|
offset_top = -0.292352
|
||||||
|
offset_right = 3.04541
|
||||||
|
offset_bottom = -0.292358
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
mouse_filter = 2
|
||||||
|
script = ExtResource("4_sv5d8")
|
||||||
|
intensity = 6.0
|
||||||
|
metadata/_custom_type_script = "uid://cjs2fen6jo0g0"
|
||||||
|
|
||||||
|
[node name="DeathMessage" type="Label" parent="Grunk/Rumbler"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -2519.0
|
||||||
|
offset_top = -930.0
|
||||||
|
offset_right = 2519.0
|
||||||
|
offset_bottom = 734.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
scale = Vector2(0.3, 1)
|
||||||
|
pivot_offset = Vector2(2519, 930)
|
||||||
|
theme = ExtResource("3_a6m17")
|
||||||
|
theme_type_variation = &"AlertLabel"
|
||||||
|
theme_override_font_sizes/font_size = 1300
|
||||||
|
text = "GRUNK"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="Blackout" type="ColorRect" parent="."]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
mouse_filter = 2
|
||||||
|
color = Color(0, 0, 0, 1)
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
&"": SubResource("AnimationLibrary_a6m17")
|
||||||
|
}
|
||||||
|
autoplay = "transition_in"
|
@ -16,5 +16,7 @@ func tick(_actor: Node, blackboard: Blackboard) -> int:
|
|||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
print_debug("GET FUCKIGN GRABBED IDIOT!! ", target)
|
print_debug("GET FUCKIGN GRABBED IDIOT!! ", target)
|
||||||
|
if target is Player:
|
||||||
|
(target as Player).get_grabbed()
|
||||||
|
|
||||||
return SUCCESS
|
return SUCCESS
|
||||||
|
@ -10,6 +10,10 @@ class_name World extends Node
|
|||||||
|
|
||||||
@export var pause_scene: PackedScene
|
@export var pause_scene: PackedScene
|
||||||
|
|
||||||
|
@export var kill_screen_scene: PackedScene
|
||||||
|
|
||||||
|
var current_level: PackedScene
|
||||||
|
|
||||||
@onready var level_root: Node3D = %LevelRoot
|
@onready var level_root: Node3D = %LevelRoot
|
||||||
@onready var ui_root: Control = %UIRoot
|
@onready var ui_root: Control = %UIRoot
|
||||||
|
|
||||||
@ -18,6 +22,7 @@ static var instance: World
|
|||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
World.instance = self
|
World.instance = self
|
||||||
|
Game.manager.player_dead.connect(on_player_death)
|
||||||
load_level(initial_level)
|
load_level(initial_level)
|
||||||
|
|
||||||
|
|
||||||
@ -40,4 +45,17 @@ func unpause() -> void:
|
|||||||
func load_level(level: PackedScene) -> void:
|
func load_level(level: PackedScene) -> void:
|
||||||
for c: Node in level_root.get_children():
|
for c: Node in level_root.get_children():
|
||||||
c.queue_free()
|
c.queue_free()
|
||||||
|
current_level = level
|
||||||
level_root.add_child(level.instantiate())
|
level_root.add_child(level.instantiate())
|
||||||
|
|
||||||
|
|
||||||
|
func on_player_death() -> void:
|
||||||
|
var kill_screen: Control = kill_screen_scene.instantiate()
|
||||||
|
kill_screen.tree_exiting.connect(on_game_over)
|
||||||
|
ui_root.add_child(kill_screen)
|
||||||
|
|
||||||
|
|
||||||
|
func on_game_over() -> void:
|
||||||
|
# TODO: reload from last checkpoint
|
||||||
|
# in the mean time, just reload the level
|
||||||
|
load_level(current_level)
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
[gd_scene load_steps=7 format=3 uid="uid://884jqafhtrv0"]
|
[gd_scene load_steps=8 format=3 uid="uid://884jqafhtrv0"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cgqmhtemibxc5" path="res://src/world/world.gd" id="1_1k4gi"]
|
[ext_resource type="Script" uid="uid://cgqmhtemibxc5" path="res://src/world/world.gd" id="1_1k4gi"]
|
||||||
[ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="2_6fy3g"]
|
[ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="2_6fy3g"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ehf5sg3ahvbf" path="res://src/world/grunk_beast/grunk_beast.tscn" id="2_43c6p"]
|
[ext_resource type="PackedScene" uid="uid://ehf5sg3ahvbf" path="res://src/world/grunk_beast/grunk_beast.tscn" id="2_43c6p"]
|
||||||
[ext_resource type="Script" uid="uid://bsn026pxqwkbc" path="res://src/world/spook_manager/spook_manager.gd" id="2_bsf3i"]
|
[ext_resource type="Script" uid="uid://bsn026pxqwkbc" path="res://src/world/spook_manager/spook_manager.gd" id="2_bsf3i"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bov4ok76woyc" path="res://levels/ghost_ship/ghost_ship.tscn" id="2_jte2u"]
|
[ext_resource type="PackedScene" uid="uid://bov4ok76woyc" path="res://levels/ghost_ship/ghost_ship.tscn" id="2_jte2u"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c0uitm5cg88h1" path="res://src/ui/menus/kill_screen/kill_screen.tscn" id="6_l0av5"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_43c6p"]
|
[sub_resource type="Resource" id="Resource_43c6p"]
|
||||||
script = ExtResource("2_bsf3i")
|
script = ExtResource("2_bsf3i")
|
||||||
@ -16,6 +17,7 @@ script = ExtResource("1_1k4gi")
|
|||||||
spook_manager = SubResource("Resource_43c6p")
|
spook_manager = SubResource("Resource_43c6p")
|
||||||
initial_level = ExtResource("2_jte2u")
|
initial_level = ExtResource("2_jte2u")
|
||||||
pause_scene = ExtResource("2_6fy3g")
|
pause_scene = ExtResource("2_6fy3g")
|
||||||
|
kill_screen_scene = ExtResource("6_l0av5")
|
||||||
|
|
||||||
[node name="LevelRoot" type="Node3D" parent="."]
|
[node name="LevelRoot" type="Node3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user