From c5851bd2885343f440c2e3be1d4d56f24a1ceea5 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Thu, 17 Jul 2025 10:12:06 -0600 Subject: [PATCH] Mrs. Sex takeover --- graphics/player/palettes/default.tex | Bin 624 -> 608 bytes graphics/player/sg.png | Bin 6241 -> 11162 bytes objects/player/player.gd | 31 +++++++++++++++ objects/player/player.tscn | 55 +++++++++++++++++++-------- 4 files changed, 70 insertions(+), 16 deletions(-) diff --git a/graphics/player/palettes/default.tex b/graphics/player/palettes/default.tex index b5838076d40a9b994f679aa813ab96f70e376074..92edf239b6ad4bc113e9b3663b408fc5c796820a 100644 GIT binary patch literal 608 zcmV-m0-ya-Q$s@n000005C8xT1ONa?0ssIgwJ-f(4FmNN0LEHlMF6ojYb-H&cm%h! z9H0hms8f)(9rgf~LTyOh0mMle$<>NhD!FTSuWggNa>_LT)2WA^`U6#!W24MXIJP~! z((UImodQMxOaM&)9LjQ?G>yPewSL_u>1PdGH`$FW$kD9+1(sH7|A40_OADT*nN{qw zSSPcu!)8WJU!C*^`4c>;$)0A2xk=CDS3uwo@B!Q;2_RXGBk>MQP(Do?Vmp%@P0gxw zqGShJHRDL2q#Ni*F$K#K`4Rj8*0vCfO>1W-L91Gph=h~>*!$=RvvjJIzO2%(`?6Vr zs{yL`@{;0j@H6-!{0BfrR{l#;f#4BVwAw*IlveKj9$da}jL?@#Eqow6U{BRRqCLSKwwW^7!luMkM zd2xMIE20P*HKKL{N35xd5m{JF#0f22Xh@}8K!h`{Q%{eZn=sng$haQJu(&MHz_?Oy zZ0zjph&nntVopwuYvm&hjEWc&6HutJ9YGG!ghL8jE(U;tA~j_m5@5wKhB5(7FcT=T zZ~YEy0KBy&*5bz!dyDP+CAFi*zR25ybL~8*y%FW89W}U}^q=qjuo$QAfo*R+BKsx! z9X9bE97D}GlF3H5i<#!4J8N3*5fo&}2YIEjAxT0-1*ft>$uLA>>2wS8Q?KceQbD1z u(#kRT!NsZ}-K2Mkm(kuy|C>WN#1J&CvJ#kQ%L|$09F7p-t|h@qcYr}mF}&yleXfI-%e7|e*wp!XSe%*z$KR4{3OZ1 zCuwe1t5~CQt5lnt4eOou|H%IWpEkrXGsEoU*YZCkz<-ZFwu%8b-T9Gy3GnwBjU*lMZ>sw`se2rXO7^%$p4c61V&V5{*Q-bmI$xRVzIJ?5GqeN zfk{9i%peZ3Y*R92F!YjFBxLz!C+E~E=S(L5SNXr-7nC39ec1}j1rU~B6+kYa{~Ucf zd1wqOR>bgiBSu!MYidBWN|h52phWb`3mDDCkkPGHiWD526AjX+(LFsgQW%sl(IO#G zk;Ep|K0Y?0hw0>U@w7^n(>gk3Y+(z-7?6Sy z8#50QAa*ean!qkCEUjn#Gs=Q^RQ}Xl<7p^(*s1;@jeXwF@jlUFuoojvWbqc~hL96{ z@P%Pqitz(--#8+E;pJv*f*y>ab0jaR(D|E80Ev*#(Oguj_5ckvh{dj#dvuYKbO~&7op1|rv@X$qGj{5T*!fNB@-)rk KXs82HQ$s`33M_;G diff --git a/graphics/player/sg.png b/graphics/player/sg.png index 88aaab2c0f3b0e76600d18c87b11ee779f66a1c6..03cd2dc03c5c81cf5a684db906ce2f9bb46f5227 100644 GIT binary patch literal 11162 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 diff --git a/objects/player/player.gd b/objects/player/player.gd index 22b8818..9a5c1d9 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -35,6 +35,10 @@ export var double_jump_force: float = 122.0 export var underwater = false ## old player controls export var beta_gameplay = false +## upward effect of air dash +export var dash_ascension: float = 50.0 +## side momentum of dash +export var dash_speed: float = 80.0 # velocity var velocity: Vector2 = Vector2.ZERO @@ -70,6 +74,7 @@ onready var edge_detector = $Graphics/EdgeDetector onready var body_shape: CollisionShape2D = $"%BodyShape" onready var cfox: Sprite = $"%CFox" onready var hitbox: Area2D = $"%Hitbox" +onready var shoot_hitbox: Area2D = $"%ShootHitbox" # OVERRIDES # func _ready() -> void: @@ -602,3 +607,29 @@ func _on_ShieldCooldown_timeout(): func _on_BetaFalling_state_entered() -> void: velocity.x = 0.0 + + +func _on_ShootHitbox_area_entered(area: Area2D) -> void: + if area.is_in_group("enemy_hitbox"): + area.get_parent().die() + state_chart.send_event("bounce") + + +func _on_AfterDashFall_state_entered() -> void: + animation_player.play("double_jump") + + +func _on_AirDash_state_entered() -> void: + velocity.x = dash_speed * sign(graphics.scale.x) + velocity.y = -dash_ascension + shoot_hitbox.monitoring = true + animation_player.play("shoot_airborne") + + +func _on_AirDash_state_exited() -> void: + shoot_hitbox.monitoring = false + + +func _process_airdash(delta) -> void: + if abs(velocity.x) < 4.0: + state_chart.send_event("grounded") diff --git a/objects/player/player.tscn b/objects/player/player.tscn index a05b632..a143bfd 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=52 format=2] +[gd_scene load_steps=53 format=2] [ext_resource path="res://objects/player/player.gd" type="Script" id=1] [ext_resource path="res://graphics/player/sg_zap.png" type="Texture" id=2] @@ -81,6 +81,9 @@ shader_param/border_color = Color( 0, 0, 0, 1 ) shader_param/border_corners = true shader_param/palette = ExtResource( 12 ) +[sub_resource type="RectangleShape2D" id=35] +extents = Vector2( 8.5, 6.5 ) + [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 2.5, 5 ) @@ -649,7 +652,7 @@ tracks/5/keys = { [sub_resource type="Animation" id=11] resource_name = "shoot_airborne" -length = 0.001 +length = 0.2 tracks/0/type = "value" tracks/0/path = NodePath("Graphics/Sprite:frame") tracks/0/interp = 1 @@ -657,10 +660,10 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), +"times": PoolRealArray( 0, 0.1 ), +"transitions": PoolRealArray( 1, 1 ), "update": 1, -"values": [ 48 ] +"values": [ 48, 49 ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:rotation_degrees") @@ -882,6 +885,8 @@ walk_acceleration_frames = 4.0 gravity = 700.0 jump_force = 140.0 double_jump_force = 124.0 +dash_ascension = 124.0 +dash_speed = 124.0 [node name="Graphics" type="Node2D" parent="."] @@ -998,6 +1003,15 @@ material = SubResource( 24 ) position = Vector2( 0, -10 ) texture = ExtResource( 4 ) +[node name="ShootHitbox" type="Area2D" parent="Graphics" groups=["arrow"]] +unique_name_in_owner = true +position = Vector2( 9, -6 ) +collision_mask = 5 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Graphics/ShootHitbox"] +position = Vector2( -8.5, 0.5 ) +shape = SubResource( 35 ) + [node name="BodyShape" type="CollisionShape2D" parent="."] unique_name_in_owner = true position = Vector2( 0.5, -5 ) @@ -1132,9 +1146,8 @@ initial_state = NodePath("Still") [node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 10 ) -to = NodePath("../../Shooting") +to = NodePath("../../../Airborne/AirDash") event = "shoot" -guard_expression = "can_shoot" [node name="On PushStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] script = ExtResource( 10 ) @@ -1212,9 +1225,8 @@ event = "duck_released" [node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"] script = ExtResource( 10 ) -to = NodePath("../../Shooting") +to = NodePath("../../../Airborne/AirDash") event = "shoot" -guard_expression = "can_shoot" [node name="On Jump" type="Node" parent="StateChart/Root/Movement/Grounded/Ducking"] script = ExtResource( 10 ) @@ -1265,9 +1277,8 @@ event = "grounded" [node name="On Shoot" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 10 ) -to = NodePath("../AirShooting") +to = NodePath("../AirDash") event = "shoot" -guard_expression = "can_shoot" [node name="On LadderTouched" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 10 ) @@ -1345,9 +1356,17 @@ script = ExtResource( 11 ) [node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 11 ) -[node name="AirShooting" type="Node" parent="StateChart/Root/Movement/Airborne"] +[node name="AfterDashFall" type="Node" parent="StateChart/Root/Movement/Airborne"] script = ExtResource( 11 ) +[node name="AirDash" type="Node" parent="StateChart/Root/Movement/Airborne"] +script = ExtResource( 11 ) + +[node name="On Bounce" type="Node" parent="StateChart/Root/Movement/Airborne/AirDash"] +script = ExtResource( 10 ) +to = NodePath("../../Jump/NormalJump") +event = "bounce" + [node name="Climbing" type="Node" parent="StateChart/Root/Movement"] script = ExtResource( 11 ) __meta__ = { @@ -1539,6 +1558,7 @@ wait_time = 2.0 one_shot = true [connection signal="tree_exited" from="." to="." method="_on_Player_tree_exited"] +[connection signal="area_entered" from="Graphics/ShootHitbox" to="." method="_on_ShootHitbox_area_entered"] [connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement" to="." method="_process_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded" to="." method="_on_Grounded_state_entered"] @@ -1555,8 +1575,8 @@ one_shot = true [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Shooting" to="." method="_on_Shooting_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Pushing" to="." method="_on_Pushing_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Grounded/Pushing" to="." method="_process_pushing"] -[connection signal="state_entered" from="StateChart/Root/Movement/Airborne" to="." method="reset_fall_speed"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne" to="." method="_on_Airborne_state_entered"] +[connection signal="state_entered" from="StateChart/Root/Movement/Airborne" to="." method="reset_fall_speed"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne" to="." method="_process_gravity"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Jump" to="." method="_process_horizontal_movement"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/Jump" to="." method="_process_jump"] @@ -1570,11 +1590,14 @@ one_shot = true [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/BetaFalling" to="." method="_on_NormalFalling_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/BetaFalling" to="." method="_on_BetaFalling_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/Falling/ScaredFalling" to="." method="_on_ScaredFalling_state_entered"] -[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_on_DoubleJump_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="reset_fall_speed"] +[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_on_DoubleJump_state_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/DoubleJump" to="." method="_process_horizontal_movement"] -[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/AirShooting" to="." method="_on_AirShooting_state_entered"] -[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/AirShooting" to="." method="_process_horizontal_movement"] +[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/AfterDashFall" to="." method="_on_AfterDashFall_state_entered"] +[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/AfterDashFall" to="." method="_process_horizontal_movement"] +[connection signal="state_entered" from="StateChart/Root/Movement/Airborne/AirDash" to="." method="_on_AirDash_state_entered"] +[connection signal="state_exited" from="StateChart/Root/Movement/Airborne/AirDash" to="." method="_on_AirDash_state_exited"] +[connection signal="state_physics_processing" from="StateChart/Root/Movement/Airborne/AirDash" to="." method="_process_airdash"] [connection signal="state_entered" from="StateChart/Root/Movement/Climbing" to="." method="_on_Climbing_state_entered"] [connection signal="state_exited" from="StateChart/Root/Movement/Climbing" to="." method="_on_Climbing_state_exited"] [connection signal="state_physics_processing" from="StateChart/Root/Movement/Climbing" to="." method="_process_climbing"]