Skip to content

Commit 99d4ff5

Browse files
Merge pull request #274 from Daniel-Cortez/gimmicks
Misc. improvements for gimmicks
2 parents fe2a187 + 6a42b2f commit 99d4ff5

9 files changed

Lines changed: 244 additions & 114 deletions

File tree

Audio/SFX/Gimmicks/Shutter.wav

37.7 KB
Binary file not shown.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[remap]
2+
3+
importer="wav"
4+
type="AudioStreamWAV"
5+
uid="uid://idw7ykg4p5x"
6+
path="res://.godot/imported/Shutter.wav-acc76eacec48b46d029a3e9bbcfeac37.sample"
7+
8+
[deps]
9+
10+
source_file="res://Audio/SFX/Gimmicks/Shutter.wav"
11+
dest_files=["res://.godot/imported/Shutter.wav-acc76eacec48b46d029a3e9bbcfeac37.sample"]
12+
13+
[params]
14+
15+
force/8_bit=false
16+
force/mono=false
17+
force/max_rate=false
18+
force/max_rate_hz=44100
19+
edit/trim=false
20+
edit/normalize=false
21+
edit/loop_mode=0
22+
edit/loop_begin=0
23+
edit/loop_end=-1
24+
compress/mode=0

Entities/Gimmicks/Shutter.tscn

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
[gd_scene load_steps=4 format=3 uid="uid://blwewyk2fnrew"]
1+
[gd_scene load_steps=6 format=3 uid="uid://blwewyk2fnrew"]
22

33
[ext_resource type="Texture2D" uid="uid://cggbnk4jjwqa1" path="res://Graphics/Obstacles/Walls/shutter.png" id="1"]
44
[ext_resource type="Script" path="res://Scripts/Gimmicks/Shutter.gd" id="2"]
5+
[ext_resource type="AudioStream" uid="uid://idw7ykg4p5x" path="res://Audio/SFX/Gimmicks/Shutter.wav" id="3_dylc3"]
56

67
[sub_resource type="RectangleShape2D" id="1"]
78
resource_local_to_scene = true
8-
size = Vector2(8, 32)
9+
size = Vector2(16, 64)
10+
11+
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jaxra"]
12+
size = Vector2(112, 64)
913

1014
[node name="Shutter" type="CharacterBody2D"]
1115
collision_layer = 8207
@@ -18,33 +22,34 @@ texture = ExtResource("1")
1822
[node name="Mask" type="CollisionShape2D" parent="."]
1923
shape = SubResource("1")
2024

21-
[node name="OpenShutter" type="Area2D" parent="."]
22-
position = Vector2(-80, 0)
25+
[node name="ShutterSound" type="AudioStreamPlayer2D" parent="."]
26+
stream = ExtResource("3_dylc3")
27+
volume_db = 4.0
28+
max_distance = 1000.0
29+
30+
[node name="OpenArea" type="Area2D" parent="."]
31+
position = Vector2(-64, 0)
2332
collision_layer = 0
2433
collision_mask = 4096
2534

26-
[node name="Mask" type="CollisionShape2D" parent="OpenShutter"]
35+
[node name="Mask" type="CollisionShape2D" parent="OpenArea"]
2736
modulate = Color(0, 0.298039, 1, 1)
28-
shape = SubResource("1")
37+
shape = SubResource("RectangleShape2D_jaxra")
2938

30-
[node name="CloseShutter" type="Area2D" parent="."]
39+
[node name="CloseArea" type="Area2D" parent="."]
3140
position = Vector2(-128, 0)
3241
collision_layer = 0
3342
collision_mask = 4096
3443

35-
[node name="Mask" type="CollisionShape2D" parent="CloseShutter"]
44+
[node name="Mask" type="CollisionShape2D" parent="CloseArea"]
3645
modulate = Color(1, 0, 0, 1)
3746
shape = SubResource("1")
3847

39-
[node name="CloseShutter2" type="Area2D" parent="."]
40-
position = Vector2(48, 0)
48+
[node name="CloseArea2" type="Area2D" parent="."]
49+
position = Vector2(16, 0)
4150
collision_layer = 0
4251
collision_mask = 4096
4352

44-
[node name="Mask" type="CollisionShape2D" parent="CloseShutter2"]
53+
[node name="Mask" type="CollisionShape2D" parent="CloseArea2"]
4554
modulate = Color(1, 0, 0, 1)
4655
shape = SubResource("1")
47-
48-
[connection signal="body_entered" from="OpenShutter" to="." method="_on_OpenShutter_body_entered"]
49-
[connection signal="body_entered" from="CloseShutter" to="." method="_on_CloseShutter_body_entered"]
50-
[connection signal="body_entered" from="CloseShutter2" to="." method="_on_CloseShutter_body_entered"]

Entities/Gimmicks/giant_fan.tscn

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
[gd_scene load_steps=10 format=3 uid="uid://bbnywgk4cq5cq"]
1+
[gd_scene load_steps=11 format=3 uid="uid://bbnywgk4cq5cq"]
22

33
[ext_resource type="Script" path="res://Scripts/Objects/GiantFan.gd" id="1_k2y5a"]
44
[ext_resource type="Texture2D" uid="uid://b8j0jkbmfrt2u" path="res://Graphics/Gimmicks/large_turbine.png" id="2_3e6h0"]
55
[ext_resource type="AudioStream" uid="uid://bvb5adxlfhcxl" path="res://Audio/SFX/Gimmicks/BigFan.wav" id="3_s1t6n"]
6+
[ext_resource type="AudioStream" uid="uid://idw7ykg4p5x" path="res://Audio/SFX/Gimmicks/Shutter.wav" id="4_55ikm"]
67

78
[sub_resource type="AtlasTexture" id="AtlasTexture_kmscp"]
89
atlas = ExtResource("2_3e6h0")
@@ -59,3 +60,8 @@ frame_progress = 0.199508
5960
stream = ExtResource("3_s1t6n")
6061
volume_db = 4.0
6162
max_distance = 1000.0
63+
64+
[node name="Shutter" type="AudioStreamPlayer2D" parent="."]
65+
stream = ExtResource("4_55ikm")
66+
volume_db = 4.0
67+
max_distance = 1000.0

Scene/Zones/BaseZone.tscn

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ size = Vector2(64, 8)
131131
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2ojop"]
132132
size = Vector2(256, 16)
133133

134-
[sub_resource type="Shader" id="Shader_65v5f"]
134+
[sub_resource type="Shader" id="Shader_t3rst"]
135135
resource_local_to_scene = true
136136
code = "shader_type canvas_item;
137137
uniform float amount : hint_range(1,255,1);
@@ -169,7 +169,7 @@ void fragment(){
169169

170170
[sub_resource type="ShaderMaterial" id="ShaderMaterial_nnlca"]
171171
resource_local_to_scene = true
172-
shader = SubResource("Shader_65v5f")
172+
shader = SubResource("Shader_t3rst")
173173
shader_parameter/amount = 4.0
174174
shader_parameter/palRows = 16.0
175175
shader_parameter/row = 9.0
@@ -999,8 +999,12 @@ position = Vector2(5712, 1848)
999999
position = Vector2(-160, -56)
10001000
side = 2
10011001

1002-
[node name="Shutter3" parent="Entity/Switch" instance=ExtResource("36_0g2sp")]
1003-
position = Vector2(3704, 72)
1002+
[node name="Shutter3" parent="Entity" instance=ExtResource("36_0g2sp")]
1003+
position = Vector2(9416, 1920)
1004+
1005+
[node name="Shutter4" parent="Entity" instance=ExtResource("36_0g2sp")]
1006+
position = Vector2(7192, 1888)
1007+
open = true
10041008

10051009
[node name="ConveyorBelt" parent="Entity" instance=ExtResource("39_8a2xw")]
10061010
position = Vector2(4864, 880)
@@ -1042,6 +1046,7 @@ position = Vector2(4608, 1342)
10421046
[node name="WindCurrent" parent="Entity" instance=ExtResource("44_6t7a0")]
10431047
position = Vector2(6352, 1888)
10441048
scale = Vector2(47, 12)
1049+
activated = false
10451050

10461051
[node name="GiantFan" parent="Entity" instance=ExtResource("45_r8otc")]
10471052
z_index = -1
@@ -1898,8 +1903,10 @@ position = Vector2(8027, 1264)
18981903
[connection signal="body_entered" from="Platforms/WidePlatform" to="Platforms/WidePlatform" method="_on_body_entered"]
18991904
[connection signal="body_exited" from="Platforms/WidePlatform" to="Platforms/WidePlatform" method="_on_body_exited"]
19001905
[connection signal="pressed" from="Entity/Switch" to="Entity/Switch/Shutter2" method="force_open"]
1906+
[connection signal="all_players_exited" from="Entity/WindCurrent" to="Entity/WindCurrent" method="deactivate"]
19011907
[connection signal="all_players_exited" from="Entity/WindCurrent" to="Entity/GiantFan" method="deactivate"]
19021908
[connection signal="player_entered" from="Entity/WindCurrent" to="Entity/GiantFan" method="activate"]
1909+
[connection signal="deployed" from="Entity/GiantFan" to="Entity/WindCurrent" method="activate"]
19031910

19041911
[editable path="Platforms/Platform"]
19051912
[editable path="Platforms/Platform13"]

Scripts/Gimmicks/Shutter.gd

Lines changed: 83 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,96 @@
11
@tool
22
extends CharacterBody2D
33

4+
const OPEN_AREA_DEFAULT_WIDTH: float = 120.0
45

5-
@export var texture = preload("res://Graphics/Obstacles/Walls/shutter.png")
6-
@export_enum("left","right","switch")var side = 0
7-
var open = false
6+
@export var texture: Texture2D = preload("res://Graphics/Obstacles/Walls/shutter.png"):
7+
set(value):
8+
texture = value
9+
if is_node_ready():
10+
$Shutter.texture = texture
11+
_update_areas()
812

9-
func _ready():
10-
if !Engine.is_editor_hint():
11-
# set areas
12-
$Mask.shape.size = Vector2(texture.get_width(),texture.get_height())
13-
$OpenShutter/Mask.shape = $Mask.shape
14-
$CloseShutter/Mask.shape = $Mask.shape
15-
$CloseShutter2/Mask.shape = $Mask.shape
16-
17-
$Shutter.texture = texture
18-
$OpenShutter.position.x = abs($OpenShutter.position.x)*(-1+(min(1,side)*2))
19-
$CloseShutter.position.x = abs($CloseShutter.position.x)*(-1+(min(1,side)*2))
20-
$CloseShutter2.position.x = abs($CloseShutter2.position.x)*(1-(min(1,side)*2))
21-
22-
# disable areas if side is switch
23-
if side == 2:
24-
$OpenShutter.queue_free()
25-
$CloseShutter.queue_free()
26-
$CloseShutter2.queue_free()
27-
13+
enum SIDE { LEFT, RIGHT, SWITCH }
14+
@export var side: SIDE = SIDE.LEFT:
15+
set(value):
16+
side = value
17+
if is_node_ready():
18+
_update_areas()
2819

29-
func _process(delta):
30-
if !Engine.is_editor_hint():
31-
# move shutter
32-
$Shutter.position = $Shutter.position.move_toward(Vector2(0,-texture.get_height()*int(open)),delta*512)
33-
# disable mask if opened
34-
$Mask.disabled = open
35-
else:
36-
$Mask.shape.size = Vector2(texture.get_width(),texture.get_height())
37-
$OpenShutter/Mask.shape = $Mask.shape
38-
$CloseShutter/Mask.shape = $Mask.shape
39-
$CloseShutter2/Mask.shape = $Mask.shape
40-
20+
@export var open: bool = false:
21+
set(value):
22+
open = value
23+
currently_open = value
24+
var currently_open: bool = open:
25+
set(value):
26+
var prev_value: bool = currently_open
27+
currently_open = value
28+
if is_node_ready():
29+
if Engine.is_editor_hint():
30+
# open/close the door
31+
$Shutter.position.y = -texture.get_height() if value else 0
32+
elif value != prev_value:
33+
$ShutterSound.play()
34+
_update_areas()
35+
36+
func _update_areas() -> void:
37+
if Engine.is_editor_hint():
4138
# hide masks if side is set to switch
42-
$OpenShutter/Mask.visible = int(side < 2)
43-
$CloseShutter/Mask.visible = int(side < 2)
44-
$CloseShutter2/Mask.visible = int(side < 2)
45-
46-
$Shutter.texture = texture
47-
$OpenShutter.position.x = abs($OpenShutter.position.x)*(-1+(min(1,side)*2))
48-
$CloseShutter.position.x = abs($CloseShutter.position.x)*(-1+(min(1,side)*2))
49-
$CloseShutter2.position.x = abs($CloseShutter2.position.x)*(1-(min(1,side)*2))
39+
# (also, hide CloseArea if the door is initially open)
40+
var not_switch: bool = (side != SIDE.SWITCH)
41+
$OpenArea/Mask.visible = not_switch
42+
$CloseArea/Mask.visible = not_switch and not open
43+
$CloseArea2/Mask.visible = not_switch
44+
$Mask.visible = not currently_open
45+
else:
46+
# disable the mask if the door is open
47+
$Mask.disabled = currently_open
48+
# disable detection areas if side is switch
49+
# (also, disable CloseArea if the door is initially open)
50+
var switch: bool = (side == SIDE.SWITCH)
51+
$OpenArea/Mask.disabled = switch
52+
$CloseArea/Mask.disabled = switch or open
53+
$CloseArea2/Mask.disabled = switch
54+
if side != SIDE.SWITCH:
55+
# sanity checks
56+
assert($Mask.shape is RectangleShape2D)
57+
assert($OpenArea/Mask.shape is RectangleShape2D)
58+
# set areas
59+
var door_shape: RectangleShape2D = $Mask.shape as RectangleShape2D
60+
door_shape.size = texture.get_size()
61+
$CloseArea/Mask.shape = door_shape
62+
$CloseArea2/Mask.shape = door_shape
63+
var side_sign: float = -1 if side == SIDE.LEFT else 1
64+
var door_width: float = door_shape.size.x
65+
var open_area_width: float = OPEN_AREA_DEFAULT_WIDTH - door_width / 2.0 + (door_width if currently_open else 0.0)
66+
$OpenArea/Mask.shape.size = Vector2(open_area_width, door_shape.size.y)
67+
var open_area_pos_x = (open_area_width + door_width) / 2.0 - (door_width if currently_open else 0.0)
68+
$OpenArea.position.x = open_area_pos_x * side_sign
69+
var close_area_offset: float = (open_area_width + door_width) / 2.0
70+
$CloseArea.position.x = (open_area_pos_x + close_area_offset) * side_sign
71+
$CloseArea2.position.x = (open_area_pos_x - close_area_offset - (0.0 if currently_open else door_width)) * side_sign
5072

51-
# open on body touch (and player 1)
52-
func _on_OpenShutter_body_entered(body):
53-
if body.playerControl == 1:
54-
open = true
73+
func _ready() -> void:
74+
$Shutter.texture = texture
75+
$Shutter.position.y = -texture.get_height() if currently_open else 0
76+
_update_areas()
5577

78+
func _process(delta) -> void:
79+
if not Engine.is_editor_hint():
80+
# move shutter
81+
$Shutter.position = $Shutter.position.move_toward(Vector2(0.0, -texture.get_height() if currently_open else 0), delta * 512.0)
82+
# disable mask if opened
83+
$Mask.disabled = currently_open
5684

57-
# close on body leave (and player 1)
58-
func _on_CloseShutter_body_entered(body):
59-
if body.playerControl == 1:
60-
open = false
85+
func _physics_process(_delta: float) -> void:
86+
if $OpenArea.has_overlapping_bodies():
87+
currently_open = true
88+
elif $CloseArea.has_overlapping_bodies() or $CloseArea2.has_overlapping_bodies():
89+
currently_open = false
6190

6291
# force open and force close is used for switches
63-
func force_open():
64-
open = true
92+
func force_open() -> void:
93+
currently_open = true
6594

66-
func force_close():
67-
open = false
95+
func force_close() -> void:
96+
currently_open = false

Scripts/Gimmicks/SpeedBooster.gd

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@
22
extends Area2D
33

44

5-
@export_enum("left", "right") var boostDirection = 0
6-
var dirMemory = boostDirection
5+
enum DIRECTION { LEFT, RIGHT }
6+
@export var boostDirection: DIRECTION = DIRECTION.LEFT:
7+
set(value):
8+
boostDirection = value
9+
$Booster.flip_h = (boostDirection == DIRECTION.RIGHT)
10+
711
@export var speed = 16
812

913
func _ready():
1014
# set direction
11-
$Booster.flip_h = bool(boostDirection)
12-
13-
func _process(_delta):
14-
if Engine.is_editor_hint():
15-
if (boostDirection != dirMemory):
16-
$Booster.flip_h = bool(boostDirection)
17-
dirMemory = boostDirection
15+
$Booster.flip_h = (boostDirection == DIRECTION.RIGHT)
1816

1917
func _on_SpeedBooster_body_entered(body: PlayerChar):
2018
# DO THE BOOST, WHOOOOOSH!!!!!!!

0 commit comments

Comments
 (0)