Door Pose Fix for Custom Levels (#728)

Fixes an issue with the DoorPose animation and detection I added where if there was another End Castle behind you, you'd get sent back in the level. This is primarily an issue for Custom Levels, and is extremely noticeable when reloading resource packs. And in the video below, it also broke the Door Pose animation in the level.

This PR adds an extra check by using a collision shape to make sure the player is in the right area before applying the positional changes.
This commit is contained in:
KirbyKidJ 2025-11-22 08:34:57 -08:00 committed by GitHub
parent a681fed56d
commit 7457570014
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 30 additions and 4 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=20 format=4 uid="uid://bney0cc8cfm5s"]
[gd_scene load_steps=22 format=4 uid="uid://bney0cc8cfm5s"]
[ext_resource type="Script" uid="uid://qq26qw7ltflb" path="res://Scripts/Parts/EndCastle.gd" id="1_hwcne"]
[ext_resource type="Script" uid="uid://caq1qiwmy0mox" path="res://Scripts/Parts/BetterAnimatedSprite.gd" id="2_1kswc"]
@ -7,6 +7,7 @@
[ext_resource type="JSON" path="res://Assets/Sprites/Tilesets/CastleFlag.json" id="4_wqi45"]
[ext_resource type="PackedScene" uid="uid://bikdod5ra10ra" path="res://Scenes/Parts/LargeCastleVisual.tscn" id="6_w7qld"]
[ext_resource type="Script" uid="uid://73oviwf6bbys" path="res://Scripts/Classes/Components/TilesetTextureSetter.gd" id="8_akqko"]
[ext_resource type="Script" uid="uid://cnheej0sxmoxg" path="res://Scripts/Parts/PlayerDetection.gd" id="8_rgjtr"]
[ext_resource type="PackedScene" uid="uid://bem5ht17ukgcs" path="res://Scenes/Parts/LargeSPCastleVisual.tscn" id="10_kd4m5"]
[ext_resource type="Texture2D" uid="uid://dt0qtxu2l646n" path="res://Assets/Sprites/Tilesets/Terrain/Overworld.png" id="10_wqi45"]
[ext_resource type="Texture2D" uid="uid://dkcs5i8l1y4y6" path="res://Assets/Sprites/Tilesets/EndingFinalCastleSprite.png" id="11_wqi45"]
@ -51,6 +52,10 @@ _data = {
&"Raise": SubResource("Animation_1x3lf")
}
[sub_resource type="SegmentShape2D" id="SegmentShape2D_657we"]
a = Vector2(0, -16)
b = Vector2(0, 16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_wqi45"]
texture = ExtResource("10_wqi45")
texture_region_size = Vector2i(8, 8)
@ -123,6 +128,14 @@ position = Vector2(0, -40)
visible = false
position = Vector2(32, -40)
[node name="PlayerDetection" type="Area2D" parent="."]
script = ExtResource("8_rgjtr")
metadata/_custom_type_script = "uid://cnheej0sxmoxg"
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerDetection"]
position = Vector2(0, -16)
shape = SubResource("SegmentShape2D_657we")
[node name="OverlaySprite" type="Sprite2D" parent="."]
visible = false
z_index = 10

View file

@ -31,5 +31,5 @@ visible = false
[node name="SmallCastleVisual2" parent="." index="4"]
visible = true
[node name="Overlay" parent="." index="7"]
[node name="Overlay" parent="." index="8"]
visible = true

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=20 format=4 uid="uid://byqmn8yi7iuac"]
[gd_scene load_steps=22 format=4 uid="uid://byqmn8yi7iuac"]
[ext_resource type="Script" uid="uid://qq26qw7ltflb" path="res://Scripts/Parts/EndCastle.gd" id="1_4yifo"]
[ext_resource type="Script" uid="uid://caq1qiwmy0mox" path="res://Scripts/Parts/BetterAnimatedSprite.gd" id="2_l3xjf"]
@ -6,6 +6,7 @@
[ext_resource type="Script" uid="uid://bdq0373j5n5o0" path="res://Scripts/Parts/CameraRightLimit.gd" id="4_1x3lf"]
[ext_resource type="JSON" path="res://Assets/Sprites/Tilesets/CastleFlag.json" id="4_7xlhl"]
[ext_resource type="PackedScene" uid="uid://qn4g0qkjcuiy" path="res://Scenes/Parts/SmallCastleVisual.tscn" id="5_an8pi"]
[ext_resource type="Script" uid="uid://cnheej0sxmoxg" path="res://Scripts/Parts/PlayerDetection.gd" id="7_oyrq2"]
[ext_resource type="Texture2D" uid="uid://dt0qtxu2l646n" path="res://Assets/Sprites/Tilesets/Terrain/Overworld.png" id="7_xg4af"]
[ext_resource type="Script" uid="uid://73oviwf6bbys" path="res://Scripts/Classes/Components/TilesetTextureSetter.gd" id="8_l3xjf"]
[ext_resource type="JSON" path="res://Assets/Sprites/Tilesets/Terrain/TerrainTiles.json" id="9_oyrq2"]
@ -53,6 +54,10 @@ _data = {
&"Raise": SubResource("Animation_7xlhl")
}
[sub_resource type="SegmentShape2D" id="SegmentShape2D_76jrx"]
a = Vector2(0, -16)
b = Vector2(0, 16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_2hcdu"]
texture = ExtResource("7_xg4af")
texture_region_size = Vector2i(8, 8)
@ -126,6 +131,14 @@ autostart = true
[node name="SmallCastleVisual" parent="." instance=ExtResource("5_an8pi")]
position = Vector2(0, -40)
[node name="PlayerDetection" type="Area2D" parent="."]
script = ExtResource("7_oyrq2")
metadata/_custom_type_script = "uid://cnheej0sxmoxg"
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerDetection"]
position = Vector2(0, -16)
shape = SubResource("SegmentShape2D_76jrx")
[node name="Overlay" type="TileMapLayer" parent="."]
visible = false
z_index = 10

View file

@ -41,7 +41,7 @@ func _process(_delta: float) -> void:
func _physics_process(_delta: float) -> void:
for i: Player in get_tree().get_nodes_in_group("Players"):
if i.can_pose and i.global_position >= global_position and i.sprite.sprite_frames.has_animation("PoseDoor"):
if i.state_machine.get_state() == "LevelExit" and i.can_pose and $PlayerDetection.is_player_in_area() and i.global_position >= global_position and i.sprite.sprite_frames.has_animation("PoseDoor"):
i.is_posing = true; i.can_pose = false
i.global_position = global_position
i.play_animation("PoseDoor")