[gd_scene load_steps=11 format=2] [ext_resource path="res://Scripts/BaddieManager.gd" type="Script" id=1] [ext_resource path="res://Art/Enemies/basic_enemy3.png" type="Texture" id=2] [ext_resource path="res://Art/Enemies/basic_enemy1.png" type="Texture" id=3] [ext_resource path="res://Art/Enemies/basic_enemy2.png" type="Texture" id=4] [ext_resource path="res://Art/Enemies/basic_enemy4.png" type="Texture" id=5] [ext_resource path="res://Art/light.png" type="Texture" id=6] [sub_resource type="GDScript" id=1] script/source = "extends KinematicBody2D const UP = Vector2(0, -1) const BASE_GRAVITY = 20 export var active_distance = 32 export var angry_distance = 100 export var speed = 25 export var attack_speed = 1 var angry = false var knockback = 0 var player const UPDATE_ANGRY_TIME = 0.25 var motion = Vector2(0, 0) var TIMER func _ready(): $AnimatedSprite.play(\"default\") $Area2D.connect(\"body_entered\", self, \"collision_method\") var alarmRoot = get_parent().get_parent() if alarmRoot.has_node(\"BaddieAlarm\"): for node in alarmRoot.get_children(): if node.name == \"BaddieAlarm\": node.connect(\"timeout\", self, \"update_angry\") TIMER = node break else: var node = Timer.new() node.name = \"BaddieAlarm\" node.connect(\"timeout\", self, \"update_angry\") alarmRoot.add_child(node) node.start(UPDATE_ANGRY_TIME) TIMER = node func collision_method(body): if body.has_method(\"deal_damage\"): body.deal_damage() knockback += 100 func take_damage(dmg): knockback += 75 * dmg get_parent().take_damage(dmg) func update_angry(): if angry && global_position.distance_to(player.global_position) > angry_distance: angry = false elif global_position.distance_to(player.global_position) < active_distance: angry = true if(TIMER.wait_time <= 0): TIMER.start(UPDATE_ANGRY_TIME) func _physics_process(delta): #Implement the force of gravity! motion.y += BASE_GRAVITY if is_on_floor(): motion.y = 0 if knockback > 0: motion.y -= knockback/2 if(player.global_position.x > global_position.x): motion.x -= knockback else: motion.x += knockback knockback -= 30 else: if !player: player = get_node(\"/root/World/Player\") else: if angry: angry = true if($AnimatedSprite.animation != \"run\"): $AnimatedSprite.play(\"run\") if player.global_position.distance_to(global_position) > 24: if(player.global_position.x > global_position.x): motion.x += speed $AnimatedSprite.flip_h = false $Area2D.rotation = 0 else: motion.x -= speed $AnimatedSprite.flip_h = true $Area2D.rotation = PI else: knockback += 60 else: $AnimatedSprite.play(\"default\") motion = move_and_slide(motion, UP)" [sub_resource type="SpriteFrames" id=2] animations = [ { "frames": [ ExtResource( 2 ) ], "loop": true, "name": "default", "speed": 5.0 }, { "frames": [ ExtResource( 3 ), ExtResource( 4 ), ExtResource( 2 ), ExtResource( 5 ) ], "loop": true, "name": "run", "speed": 5.0 } ] [sub_resource type="CapsuleShape2D" id=3] [sub_resource type="RectangleShape2D" id=4] [node name="Basic Enemy" type="Node2D"] modulate = Color( 1, 1, 0, 1 ) script = ExtResource( 1 ) __meta__ = { "_edit_group_": true } HP = 3 [node name="KinematicBody2D" type="KinematicBody2D" parent="."] script = SubResource( 1 ) active_distance = 128 [node name="AnimatedSprite" type="AnimatedSprite" parent="KinematicBody2D"] frames = SubResource( 2 ) playing = true [node name="CollisionShape2D" type="CollisionShape2D" parent="KinematicBody2D"] scale = Vector2( 0.35, 0.45 ) shape = SubResource( 3 ) [node name="Area2D" type="Area2D" parent="KinematicBody2D"] [node name="CollisionShape2D" type="CollisionShape2D" parent="KinematicBody2D/Area2D"] position = Vector2( 5, -2 ) scale = Vector2( 0.5, 0.25 ) shape = SubResource( 4 ) one_way_collision_margin = 30.0 [node name="Light2D" type="Light2D" parent="KinematicBody2D"] texture = ExtResource( 6 ) texture_scale = 1.5 energy = 0.25