Skip to content

Commit 9eba42f

Browse files
committed
Add Screen Shake feature
1 parent fed4736 commit 9eba42f

17 files changed

+755
-0
lines changed
Lines changed: 76 additions & 0 deletions
Loading
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
[remap]
2+
3+
importer="texture"
4+
type="CompressedTexture2D"
5+
uid="uid://bw5d6gq4xj4fc"
6+
path="res://.godot/imported/clear_shake.svg-7755f0aa1227e0b25e8ad6fa6ac6cbe5.ctex"
7+
metadata={
8+
"has_editor_variant": true,
9+
"vram_texture": false
10+
}
11+
12+
[deps]
13+
14+
source_file="res://addons/dialogic/Modules/Clear/clear_shake.svg"
15+
dest_files=["res://.godot/imported/clear_shake.svg-7755f0aa1227e0b25e8ad6fa6ac6cbe5.ctex"]
16+
17+
[params]
18+
19+
compress/mode=0
20+
compress/high_quality=false
21+
compress/lossy_quality=0.7
22+
compress/hdr_compression=1
23+
compress/normal_map=0
24+
compress/channel_pack=0
25+
mipmaps/generate=false
26+
mipmaps/limit=-1
27+
roughness/mode=0
28+
roughness/src_normal=""
29+
process/fix_alpha_border=true
30+
process/premult_alpha=false
31+
process/normal_map_invert_y=false
32+
process/hdr_as_srgb=false
33+
process/hdr_clamp_exposure=false
34+
process/size_limit=0
35+
detect_3d/compress_to=1
36+
svg/scale=1.0
37+
editor/scale_with_editor_scale=true
38+
editor/convert_colors_with_editor_theme=true

addons/dialogic/Modules/Clear/event_clear.gd

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var clear_textbox := true
1212
var clear_portraits := true
1313
var clear_style := true
1414
var clear_music := true
15+
var clear_screen_shake := true
1516
var clear_portrait_positions := true
1617
var clear_background := true
1718

@@ -49,6 +50,11 @@ func _execute() -> void:
4950
dialogic.Audio.update_music('', 0.0, "", final_time, channel_id)
5051
if step_by_step: await dialogic.get_tree().create_timer(final_time).timeout
5152

53+
if clear_screen_shake and dialogic.has_subsystem('ScreenShake'):
54+
dialogic.ScreenShake.update_shake_x(0.0, 0.0, final_time)
55+
dialogic.ScreenShake.update_shake_y(0.0, 0.0, final_time)
56+
if step_by_step: await dialogic.get_tree().create_timer(final_time).timeout
57+
5258
if clear_style and dialogic.has_subsystem('Styles'):
5359
dialogic.Styles.change_style()
5460

@@ -88,6 +94,7 @@ func get_shortcode_parameters() -> Dictionary:
8894
"text" : {"property": "clear_textbox", "default": true},
8995
"portraits" : {"property": "clear_portraits", "default": true},
9096
"music" : {"property": "clear_music", "default": true},
97+
"shake" : {"property": "clear_screen_shake", "default": true},
9198
"background": {"property": "clear_background", "default": true},
9299
"positions" : {"property": "clear_portrait_positions", "default": true},
93100
"style" : {"property": "clear_style", "default": true},
@@ -110,5 +117,6 @@ func build_event_editor() -> void:
110117
add_body_edit('clear_portraits', ValueType.BOOL_BUTTON, {'icon':load("res://addons/dialogic/Modules/Clear/clear_characters.svg"), 'tooltip':'Clear Portraits'})
111118
add_body_edit('clear_background', ValueType.BOOL_BUTTON, {'icon':load("res://addons/dialogic/Modules/Clear/clear_background.svg"), 'tooltip':'Clear Background'})
112119
add_body_edit('clear_music', ValueType.BOOL_BUTTON, {'icon':load("res://addons/dialogic/Modules/Clear/clear_music.svg"), 'tooltip':'Clear Music'})
120+
add_body_edit('clear_screen_shake', ValueType.BOOL_BUTTON, {'icon':load("res://addons/dialogic/Modules/Clear/clear_shake.svg"), 'tooltip':'Clear Screen Shake'})
113121
add_body_edit('clear_style', ValueType.BOOL_BUTTON, {'icon':load("res://addons/dialogic/Modules/Clear/clear_style.svg"), 'tooltip':'Clear Style'})
114122
add_body_edit('clear_portrait_positions', ValueType.BOOL_BUTTON, {'icon':load("res://addons/dialogic/Modules/Clear/clear_positions.svg"), 'tooltip':'Clear Portrait Positions'})
Lines changed: 58 additions & 0 deletions
Loading
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
[remap]
2+
3+
importer="texture"
4+
type="CompressedTexture2D"
5+
uid="uid://dp28d3waw6sh8"
6+
path="res://.godot/imported/icon.svg-c4786c180265dc13234ef8ceb5240800.ctex"
7+
metadata={
8+
"has_editor_variant": true,
9+
"vram_texture": false
10+
}
11+
12+
[deps]
13+
14+
source_file="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_ScreenShake/icon.svg"
15+
dest_files=["res://.godot/imported/icon.svg-c4786c180265dc13234ef8ceb5240800.ctex"]
16+
17+
[params]
18+
19+
compress/mode=0
20+
compress/high_quality=false
21+
compress/lossy_quality=0.7
22+
compress/hdr_compression=1
23+
compress/normal_map=0
24+
compress/channel_pack=0
25+
mipmaps/generate=false
26+
mipmaps/limit=-1
27+
roughness/mode=0
28+
roughness/src_normal=""
29+
process/fix_alpha_border=true
30+
process/premult_alpha=false
31+
process/normal_map_invert_y=false
32+
process/hdr_as_srgb=false
33+
process/hdr_clamp_exposure=false
34+
process/size_limit=0
35+
detect_3d/compress_to=1
36+
svg/scale=1.0
37+
editor/scale_with_editor_scale=true
38+
editor/convert_colors_with_editor_theme=true
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[style]
2+
type = "Layer"
3+
name = "Screen Shake Layer"
4+
author = "SaliaNifo"
5+
description = "A layer for applying screen shake to the layers below it."
6+
scene = "screen_shake_layer.tscn"
7+
icon = "icon.svg"
Loading
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[remap]
2+
3+
importer="texture"
4+
type="CompressedTexture2D"
5+
uid="uid://cwhucf14pvkfs"
6+
path="res://.godot/imported/preview.png-f4b273872c0dd56a22386a20ccb82f99.ctex"
7+
metadata={
8+
"vram_texture": false
9+
}
10+
11+
[deps]
12+
13+
source_file="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_ScreenShake/preview.png"
14+
dest_files=["res://.godot/imported/preview.png-f4b273872c0dd56a22386a20ccb82f99.ctex"]
15+
16+
[params]
17+
18+
compress/mode=0
19+
compress/high_quality=false
20+
compress/lossy_quality=0.7
21+
compress/hdr_compression=1
22+
compress/normal_map=0
23+
compress/channel_pack=0
24+
mipmaps/generate=false
25+
mipmaps/limit=-1
26+
roughness/mode=0
27+
roughness/src_normal=""
28+
process/fix_alpha_border=true
29+
process/premult_alpha=false
30+
process/normal_map_invert_y=false
31+
process/hdr_as_srgb=false
32+
process/hdr_clamp_exposure=false
33+
process/size_limit=0
34+
detect_3d/compress_to=1
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@tool
2+
extends DialogicLayoutLayer
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
shader_type canvas_item;
2+
3+
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, repeat_disable, filter_nearest;
4+
5+
uniform float amplitude_x : hint_range(0.0, 1.0) = 0.0;
6+
uniform float frequency_x = 0.0;
7+
uniform float phase_x = 0.0;
8+
uniform float time_x = 0.0;
9+
10+
uniform float amplitude_y : hint_range(0.0, 1.0) = 0.0;
11+
uniform float frequency_y = 0.0;
12+
uniform float phase_y = 0.0;
13+
uniform float time_y = 0.0;
14+
15+
uniform vec3 clear_color : source_color = vec3(0.0, 0.0, 0.0);
16+
17+
void fragment() {
18+
vec2 uv = SCREEN_UV;
19+
20+
float angular_frequency_x = 2.0 * PI * frequency_x;
21+
float displacement_x = amplitude_x * sin(angular_frequency_x * (time_x + phase_x));
22+
23+
float angular_frequency_y = 2.0 * PI * frequency_y;
24+
float displacement_y = amplitude_y * sin(angular_frequency_y * (time_y + phase_y));
25+
26+
uv.x += displacement_x / 1.0;
27+
uv.y += displacement_y / 1.0;
28+
29+
if (uv.x > 1.0 || uv.y > 1.0 || uv.x < 0.0 || uv.y < 0.0) {
30+
COLOR.rgb = clear_color;
31+
COLOR.a = 1.0;
32+
} else {
33+
COLOR = texture(SCREEN_TEXTURE, uv);
34+
}
35+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
[gd_scene load_steps=5 format=3 uid="uid://cdvx2jejg8xln"]
2+
3+
[ext_resource type="Script" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_ScreenShake/screen_shake_layer.gd" id="1_l682i"]
4+
[ext_resource type="Shader" path="res://addons/dialogic/Modules/DefaultLayoutParts/Layer_ScreenShake/screen_shake_layer.gdshader" id="2_7h78g"]
5+
[ext_resource type="Script" path="res://addons/dialogic/Modules/ScreenShake/node_screen_shaker.gd" id="3_uqmkn"]
6+
7+
[sub_resource type="ShaderMaterial" id="ShaderMaterial_4u8q6"]
8+
shader = ExtResource("2_7h78g")
9+
shader_parameter/amplitude_x = 0.0
10+
shader_parameter/frequency_x = 0.0
11+
shader_parameter/phase_x = 0.0
12+
shader_parameter/time_x = 0.0
13+
shader_parameter/amplitude_y = 0.0
14+
shader_parameter/frequency_y = 0.0
15+
shader_parameter/phase_y = 0.0
16+
shader_parameter/time_y = 0.0
17+
shader_parameter/clear_color = Color(0, 0, 0, 1)
18+
19+
[node name="ScreenShakeLayer" type="Control"]
20+
layout_direction = 2
21+
layout_mode = 3
22+
anchors_preset = 15
23+
anchor_right = 1.0
24+
anchor_bottom = 1.0
25+
grow_horizontal = 2
26+
grow_vertical = 2
27+
script = ExtResource("1_l682i")
28+
29+
[node name="BackBufferCopy" type="BackBufferCopy" parent="."]
30+
copy_mode = 2
31+
32+
[node name="DialogicNode_ScreenShaker" type="ColorRect" parent="."]
33+
material = SubResource("ShaderMaterial_4u8q6")
34+
layout_mode = 1
35+
anchors_preset = 15
36+
anchor_right = 1.0
37+
anchor_bottom = 1.0
38+
grow_horizontal = 2
39+
grow_vertical = 2
40+
script = ExtResource("3_uqmkn")

0 commit comments

Comments
 (0)