Compare commits

...

2 Commits

Author SHA1 Message Date
Spencer Killen c984f0f21e
revamp shader 2023-01-03 17:48:25 -07:00
dukegoobler ba1409217c gameover screen and end screen edit 2023-01-03 17:08:43 -07:00
14 changed files with 424 additions and 85 deletions

View File

@ -27,12 +27,6 @@
"type": 0,
"value": "0"
},
{
"id": "1672728461-648",
"name": "flashlight_seconds",
"type": 0,
"value": "0.0"
},
{
"id": "1672730872-648",
"name": "have seen elevator",
@ -62,6 +56,12 @@
"name": "joined meat",
"type": 0,
"value": "false"
},
{
"id": "1672728461-648",
"name": "flashlight_seconds",
"type": 0,
"value": "0.0"
}
]
}

View File

@ -152,41 +152,35 @@
"character": "",
"event_id": "dialogic_001",
"portrait": "",
"text": "You have fallen"
"text": "Unable to stand on broken legs, you slowly begin to sink"
},
{
"character": "",
"event_id": "dialogic_001",
"portrait": "",
"text": "Unable to stand on broken legs, you slowly begin to sink. Your screams for help are left unanswered until the meat smothers you in its warm embrace"
"text": "Your screams for help are left unanswered as the meat smothers you in its warm embrace"
},
{
"audio": "play",
"audio_bus": "Master",
"event_id": "dialogic_030",
"event_name": "AudioEvent",
"file": "res://assets/audio/neural_scanner_sfx.wav",
"file": "res://assets/audio/button_press.ogg",
"volume": 0
},
{
"character": "",
"event_id": "dialogic_001",
"portrait": "",
"text": " (Your neural scanner blinks for the last time) "
"text": "(SHUTTING DOWN. PLEASE AWAIT RECOVERY)\n\n[pause=2]"
},
{
"character": "",
"event_id": "dialogic_001",
"portrait": "",
"text": "SHUTTING DOWN. PLEASE AWAIT RECOVERY"
},
{
"emit_signal": "",
"event_id": "dialogic_040"
"change_scene": "res://screens/EndScreen_Planet.tscn",
"event_id": "dialogic_041"
},
{
"event_id": "dialogic_022",
"transition_duration": 0
"transition_duration": 2
}
],
"metadata": {

View File

@ -0,0 +1,22 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://effects/dithering/screen_space_shader.tres" type="Shader" id=1]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 1 )
shader_param/seed = 81.0
shader_param/power = 0.0022
shader_param/speed = 0.1
shader_param/param = 13.0
shader_param/scale = 2.0
shader_param/grid = 4
shader_param/anim_period = 1.65
shader_param/amount = 0.06
shader_param/factor = 200.0
[node name="CanvasLayer" type="CanvasLayer"]
[node name="ColorRect" type="ColorRect" parent="."]
material = SubResource( 1 )
anchor_right = 1.0
anchor_bottom = 1.0

View File

@ -0,0 +1,204 @@
[gd_resource type="Shader" format=2]
[resource]
code = "shader_type canvas_item;
// Color space code from
// HSV: https://godotshaders.com/shader/hsv-adjustment/
// LAB/XYZ: https://gist.github.com/msbarry/cd98f928542f5152111a
// Note: don't use the XYZ space, but sources use it to convert to LAB
uniform float seed = 81.0;
uniform float power : hint_range( 0.0, 1.0 ) = 0.0022;
uniform float speed = 0.1;
uniform float param : hint_range(0.0, 255.0, 1.0);
vec3 rgb2hsv(vec3 c) {
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
float d = q.x - min(q.w, q.y);
float e = 1.0e-10;
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}
vec3 hsv2rgb(vec3 c) {
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}
vec3 rgb2xyz(vec3 c) {
float R = ((c.r > 0.04045) ? pow((( c.r + 0.055 ) / 1.055), 2.4) : (c.r / 12.92)) * 100.0;
float G = ((c.g > 0.04045) ? pow((( c.g + 0.055 ) / 1.055), 2.4) : (c.g / 12.92)) * 100.0;
float B = ((c.b > 0.04045) ? pow((( c.b + 0.055 ) / 1.055), 2.4) : (c.b / 12.92)) * 100.0;
float X = R * 0.4124 + G * 0.3576 + B * 0.1805;
float Y = R * 0.2126 + G * 0.7152 + B * 0.0722;
float Z = R * 0.0193 + G * 0.1192 + B * 0.9505;
return vec3(X, Y, Z);
}
vec3 xyz2rgb(vec3 c) {
float X = c.x / 100.0;
float Y = c.y / 100.0;
float Z = c.z / 100.0;
float R = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
float G = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
float B = X * 0.0557 + Y * -0.2040 + Z * 1.0570;
R = ((R > 0.0031308) ? (1.055 * ( pow( R, 1./2.4 ) ) - 0.055) : (12.92 * R));
G = ((G > 0.0031308) ? (1.055 * ( pow( G, 1./2.4 ) ) - 0.055) : (12.92 * G));
B = ((B > 0.0031308) ? (1.055 * ( pow( B, 1./2.4 ) ) - 0.055) : (12.92 * B));
return vec3(R, G, B);
}
vec3 xyz2lab(vec3 c) {
float X = c.x / 95.047;
float Y = c.y / 100.0;
float Z = c.z / 108.883;
X = ((X > 0.008856) ? (pow( X, 1./3.)) : (( 7.787 * X ) + ( 16./116.)));
Y = ((Y > 0.008856) ? (pow( Y, 1./3.)) : (( 7.787 * Y ) + ( 16./116.)));
Z = ((Z > 0.008856) ? (pow( Z, 1./3.)) : (( 7.787 * Z ) + ( 16./116.)));
float L = ( 116. * Y ) - 16.;
float a = 500. * ( X - Y );
float b = 200. * ( Y - Z );
return vec3(L, a, b);
}
vec3 lab2xyz(vec3 c) {
float L = c.x;
float a = c.y;
float b = c.z;
float Y = ( L + 16. ) / 116.;
float X = a / 500. + Y;
float Z = Y - b / 200.;
Y = ((pow(Y,3.) > 0.008856) ? (pow(Y,3.)) : ((Y - 16. / 116.) / 7.787));
X = ((pow(X,3.) > 0.008856) ? (pow(X,3.)) : ((X - 16. / 116.) / 7.787));
Z = ((pow(Z,3.) > 0.008856) ? (pow(Z,3.)) : ((Z - 16. / 116.) / 7.787));
float ref_X = 95.047;
float ref_Y = 100.0;
float ref_Z = 108.883;
return vec3(ref_X * X, ref_Y * Y, ref_Z * Z);
}
vec3 band_colors(vec3 rgb)
{
return round(rgb * param) / param;
}
vec3 band_colors_preserve_hue_lum(vec3 rgb)
{
vec3 hsv = rgb2hsv(rgb);
hsv.r = round(hsv.r * param) / param;
vec3 lab = xyz2lab(rgb2xyz(rgb));
lab.r = round(lab.r * (param / 100.0)) / (param / 100.0);
// Into HSV
vec2 sv = rgb2hsv(xyz2rgb(lab2xyz(lab))).gb;
hsv.gb = sv;
return hsv2rgb(hsv);
}
uniform float scale = 2.0;
uniform int grid = 5;
vec3 band_dither(vec3 rgb, vec2 uv)
{
uv *= (1.0 / scale);
int x = int(mod(uv.x, float(grid))) + 1;
int y = int(mod(uv.y, float(grid))) + 1;
vec3 hsv = rgb2hsv(rgb);
int g = int(round(mix(float(grid), float(2), fract(hsv.r * param))));
if (x % g == 0 && y % g == 0) {
hsv.r = ceil(hsv.r * param) / param;
} else {
hsv.r = floor(hsv.r * param) / param;
}
vec3 lab = xyz2lab(rgb2xyz(rgb));
if (x % g == 0 && y % g == 0) {
lab.r = ceil(lab.r * (param / 100.0)) / (param / 100.0);
} else {
lab.r = floor(lab.r * (param / 100.0)) / (param / 100.0);
}
// Into HSV
vec2 sv = rgb2hsv(xyz2rgb(lab2xyz(lab))).gb;
hsv.gb = sv;
return hsv2rgb(hsv);
}
uniform float anim_period : hint_range(0.1, 5, 0.01);
vec2 random( vec2 pos )
{
return fract(
sin(
vec2(
dot(pos, vec2(12.9898,78.233))
, dot(pos, vec2(-148.998,-65.233))
)
) * 43758.5453
);
}
uniform float amount = 0.060;
uniform float factor = 200.0;
void fragment()
{
vec2 uv = SCREEN_UV + ( random( UV + vec2( seed - TIME * speed, TIME * speed ) ) - vec2( 0.5, 0.5 ) ) * power;
COLOR = textureLod( SCREEN_TEXTURE, uv, 0.0 );
vec2 buv = UV;
//buv.r = buv.r % 25.0
buv.r = round(buv.r * factor) / factor;
buv.g = round(buv.g * factor) / factor;
float a = fract(sin(dot(buv, vec2(12.9898, 78.233) * TIME)) * 438.5453) * 1.9;
a = a * amount;
COLOR.rgb = band_colors_preserve_hue_lum(COLOR.rgb);
//vec3 banded_nostalgia = band_colors(rgb);
COLOR.r -= a;
COLOR.g -= a;
COLOR.b -= a;
//float weight = mod(TIME, anim_period) / anim_period;
//float double_weight = mod(TIME, anim_period*2.0) / (anim_period*2.0);
//weight = double_weight > 0.5 ? (1.-weight) : weight;
//vec3 mixed = mix(banded_nostalgia, banded_preserved, weight);
//COLOR.rgb = mixed;
}
"

View File

@ -0,0 +1,56 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
[sub_resource type="Shader" id=1]
code = "/*
砂嵐エフェクト by あるる(きのもと 結衣)
Screen Noise Effect Shader by Yui Kinomoto @arlez80
MIT License
*/
shader_type canvas_item;
uniform float seed = 81.0;
uniform float power : hint_range( 0.0, 1.0 ) = 0.0022;
uniform float speed = 0.1;
vec2 random( vec2 pos )
{
return fract(
sin(
vec2(
dot(pos, vec2(12.9898,78.233))
, dot(pos, vec2(-148.998,-65.233))
)
) * 43758.5453
);
}
uniform float amount = 0.060;
void fragment( )
{
vec2 uv = SCREEN_UV + ( random( UV + vec2( seed - TIME * speed, TIME * speed ) ) - vec2( 0.5, 0.5 ) ) * power;
COLOR = textureLod( SCREEN_TEXTURE, uv, 0.0 );
vec2 buv = UV;
//buv.r = buv.r % 25.0
float factor = 200.0;
buv.r = round(buv.r * factor) / factor;
buv.g = round(buv.g * factor) / factor;
float a = fract(sin(dot(buv, vec2(12.9898, 78.233) * TIME)) * 438.5453) * 1.9;
a = a * amount;
COLOR.r -= a;
COLOR.g -= a;
COLOR.b -= a;
}"
[resource]
shader = SubResource( 1 )
shader_param/seed = 81.0
shader_param/power = 0.0022
shader_param/speed = 0.1
shader_param/amount = 0.06

View File

@ -1,59 +1,19 @@
[gd_scene load_steps=3 format=2]
[gd_scene load_steps=4 format=2]
[sub_resource type="Shader" id=1]
code = "/*
砂嵐エフェクト by あるる(きのもと 結衣)
Screen Noise Effect Shader by Yui Kinomoto @arlez80
[ext_resource path="res://effects/dithering/screen_space_shader.tres" type="Shader" id=1]
[ext_resource path="res://effects/grainy_shader.tres" type="Material" id=2]
MIT License
*/
shader_type canvas_item;
uniform float seed = 81.0;
uniform float power : hint_range( 0.0, 1.0 ) = 0.0022;
uniform float speed = 0.1;
vec2 random( vec2 pos )
{
return fract(
sin(
vec2(
dot(pos, vec2(12.9898,78.233))
, dot(pos, vec2(-148.998,-65.233))
)
) * 43758.5453
);
}
uniform float amount = 0.060;
void fragment( )
{
vec2 uv = SCREEN_UV + ( random( UV + vec2( seed - TIME * speed, TIME * speed ) ) - vec2( 0.5, 0.5 ) ) * power;
COLOR = textureLod( SCREEN_TEXTURE, uv, 0.0 );
vec2 buv = UV;
//buv.r = buv.r % 25.0
float factor = 200.0;
buv.r = round(buv.r * factor) / factor;
buv.g = round(buv.g * factor) / factor;
float a = fract(sin(dot(buv, vec2(12.9898, 78.233) * TIME)) * 438.5453) * 1.9;
a = a * amount;
COLOR.r -= a;
COLOR.g -= a;
COLOR.b -= a;
}"
[sub_resource type="ShaderMaterial" id=2]
shader = SubResource( 1 )
[sub_resource type="ShaderMaterial" id=3]
shader = ExtResource( 1 )
shader_param/seed = 81.0
shader_param/power = 0.0022
shader_param/speed = 0.1
shader_param/param = 23.0
shader_param/scale = 2.0
shader_param/grid = 4
shader_param/anim_period = 0.1
shader_param/amount = 0.06
shader_param/factor = 200.0
[node name="shader" type="Spatial"]
@ -61,7 +21,13 @@ shader_param/amount = 0.06
layer = 100
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
material = SubResource( 2 )
visible = false
material = ExtResource( 2 )
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
[node name="ColorRect2" type="ColorRect" parent="CanvasLayer"]
material = SubResource( 3 )
anchor_right = 1.0
anchor_bottom = 1.0

View File

@ -4,6 +4,5 @@ extends MeshInstance
var has_played_animation = false
func _on_Area_body_entered(body: Node):
if body.name == "OnFootPhysics" and not has_played_animation:
has_played_animation = true
if body.get_name() == "camerabody":
get_active_material(0).set_shader_param("start_time", Time.get_ticks_msec() / 1000.0)

View File

@ -114,7 +114,7 @@ shader_param/normal_map = ExtResource( 2 )
extents = Vector3( 1.72965, 1.52498, 0.0716956 )
[sub_resource type="BoxShape" id=4]
extents = Vector3( 1, 1, 1.66041 )
extents = Vector3( 0.415364, 0.271899, 0.607307 )
[node name="WallStruggler" type="MeshInstance"]
transform = Transform( 0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0 )
@ -132,7 +132,7 @@ shape = SubResource( 3 )
[node name="Area" type="Area" parent="."]
[node name="CollisionShape" type="CollisionShape" parent="Area"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1.52395, 0, 0, 1.72382 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1.52395, 0, -0.135652, 1.12392 )
shape = SubResource( 4 )
[connection signal="body_entered" from="Area" to="." method="_on_Area_body_entered"]

View File

@ -15,11 +15,8 @@ func _on_Credits_pressed():
var dialog = Dialogic.start("credits")
add_child(dialog)
func _on_Controls_pressed():
var dialog = Dialogic.start("controls")
add_child(dialog)
func _on_QuitButton_pressed():
get_tree().change_scene("res://screens/TitleScreen_Planet.tscn")
get_tree().quit()
func _on_MenuButton_pressed():
get_tree().change_scene("res://screens/TitleScreen_Planet.tscn")

View File

@ -127,7 +127,7 @@ margin_bottom = 80.0
size_flags_vertical = 3
text = "Play Again"
[node name="QuitButton" type="Button" parent="EndMenu/ButtonContainer"]
[node name="MenuButton" type="Button" parent="EndMenu/ButtonContainer"]
margin_top = 90.0
margin_right = 300.0
margin_bottom = 170.0
@ -141,12 +141,12 @@ margin_bottom = 260.0
size_flags_vertical = 3
text = "Credits"
[node name="Controls" type="Button" parent="EndMenu/ButtonContainer"]
[node name="QuitButton" type="Button" parent="EndMenu/ButtonContainer"]
margin_top = 270.0
margin_right = 300.0
margin_bottom = 350.0
size_flags_vertical = 3
text = "Controls"
text = "Quit"
[node name="BlackoutScreen" type="CanvasLayer" parent="EndMenu"]
layer = 2
@ -168,6 +168,6 @@ stream = ExtResource( 7 )
[node name="grainy_shader" parent="EndMenu" instance=ExtResource( 2 )]
[connection signal="pressed" from="EndMenu/ButtonContainer/PlayButton" to="EndMenu" method="_on_PlayButton_pressed"]
[connection signal="pressed" from="EndMenu/ButtonContainer/QuitButton" to="EndMenu" method="_on_QuitButton_pressed"]
[connection signal="pressed" from="EndMenu/ButtonContainer/MenuButton" to="EndMenu" method="_on_MenuButton_pressed"]
[connection signal="pressed" from="EndMenu/ButtonContainer/Credits" to="EndMenu" method="_on_Credits_pressed"]
[connection signal="pressed" from="EndMenu/ButtonContainer/Controls" to="EndMenu" method="_on_Controls_pressed"]
[connection signal="pressed" from="EndMenu/ButtonContainer/QuitButton" to="EndMenu" method="_on_QuitButton_pressed"]

View File

@ -0,0 +1,15 @@
extends Spatial
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
# Called when the node enters the scene tree for the first time.
func _ready():
$blackscreen.visible = false
var dialog = Dialogic.start("end")
add_child(dialog)
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass

View File

@ -0,0 +1,82 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://effects/grainy_shader.tscn" type="PackedScene" id=1]
[ext_resource path="res://effects/WorldEnvironment.tscn" type="PackedScene" id=2]
[ext_resource path="res://screens/end_wall_struggler.gd" type="Script" id=3]
[ext_resource path="res://effects/npc/wall_struggler/containing_tube.tscn" type="PackedScene" id=4]
[ext_resource path="res://effects/npc/wall_struggler/WallStruggler.tscn" type="PackedScene" id=5]
[sub_resource type="BoxShape" id=2]
[sub_resource type="Animation" id=1]
resource_name = "struggler_camera"
length = 10.0
tracks/0/type = "transform"
tracks/0/path = NodePath("Camera")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = PoolRealArray( 0.1, 1, 0, -0.239693, 4.30081, 0, 0, 0, 1, 1, 1, 1, 8.4, 1, 0, -0.377647, 1.43717, 0.0871558, 0, 0, 0.996195, 1, 1, 1 )
tracks/1/type = "value"
tracks/1/path = NodePath("blackscreen:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0.2, 9.1 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 1,
"values": [ false, true ]
}
[node name="end_wall_struggler" type="Spatial"]
script = ExtResource( 3 )
[node name="blackscreen" type="ColorRect" parent="."]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
color = Color( 0, 0, 0, 1 )
[node name="WallStruggler" parent="." instance=ExtResource( 5 )]
transform = Transform( 0.749922, 0, 0, 0, 0.749922, 0, 0, 0, 0.749922, 0, 0, 0 )
[node name="containing_tube" parent="." instance=ExtResource( 4 )]
transform = Transform( 0.9, 0, 0, 0, 0.75, 0, 0, 0, 1, 0, 0, 0 )
[node name="WorldEnvironment" parent="." instance=ExtResource( 2 )]
[node name="shader" parent="." instance=ExtResource( 1 )]
[node name="Camera" type="Camera" parent="."]
transform = Transform( 1, 0, 0, 0, 0.999998, -0.00210281, 0, 0.00210281, 0.999998, 0, -0.240553, 4.28295 )
fov = 50.0
[node name="SpotLight" type="SpotLight" parent="Camera"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00221238, 0.144251, -0.293633 )
light_color = Color( 0.745098, 0.345098, 0.235294, 1 )
light_energy = 0.25
shadow_enabled = true
spot_range = 10.0
spot_angle = 30.0
[node name="camerabody" type="StaticBody" parent="Camera"]
[node name="CollisionShape" type="CollisionShape" parent="Camera/camerabody"]
transform = Transform( 0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0 )
shape = SubResource( 2 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "struggler_camera"
anims/struggler_camera = SubResource( 1 )
[node name="OmniLight" type="OmniLight" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00532484, 2.38419e-07, 3.59843 )
light_color = Color( 0, 0.615686, 0.713726, 1 )
light_energy = 2.0
light_negative = true
light_specular = 0.0
shadow_enabled = true

View File

@ -26,6 +26,7 @@ shape = SubResource( 2 )
[node name="Player" parent="." instance=ExtResource( 1 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.750395, 5.35377 )
can_glide = true
[node name="clark" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -13.7138, 0, -1.96286 )

View File

@ -20,3 +20,6 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.249605, 3.63602 )
[node name="WorldEnvironment" parent="." instance=ExtResource( 5 )]
[node name="shader" parent="." instance=ExtResource( 4 )]
[node name="Camera" type="Camera" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2.58877 )