I have spent a day or 2 straight trying to solve this!

Godot Version

v4.7.1.stable.official

Question

How do I get my children enemies to actually copy the enemy, and on top of that, why do the signals not automatically connect when dragging in a new enemy??

FIrst box is player, second box is enemy, third box is the level.

comments are just code I have in reserve incase I need it, not relevant.

My first ever game so i’m learning as I go

extends CharacterBody2D

signal selfLocate(value)
signal updateHP(value)
signal resendDMGOutput(value)

var SANITY = 30
var HP = 30
var WRATH = DMG 
var DMG = 5
var rangedDMG = DMG
var GREED = LUCK 
var LUCK = 0
var SLOTH = SPD
@export var SPD : float = 100
var PRIDE = ARMR
var ARMR = 0
var GLUTTONY = MLTP 
var MLTP = 0.0
var LUST = CD 
var CD = 0.0
@onready var animated_sprite = $RomeoSprite

func _physics_process(_delta):
	var character_direction = Input.get_vector("Move_Left","Move_Right","Move_Down","Move_Up")
	velocity = character_direction * SPD
	move_and_slide()

	emit_signal("selfLocate",position)

	if HP < 1:
		get_tree().reload_current_scene()



func _on_heart_body_entered(body: Node2D) -> void:
	if body.is_in_group("Romeo"):
		emit_signal("dmgEnemy",rangedDMG)
		print("hhhhhh")


func _on_heart_holder_play_shooting() -> void:
	$RomeoSprite.play("Shooting")


func _on_heart_holder_play_shot() -> void:
	$RomeoSprite.play("Shot")


func _on_romeo_sprite_animation_finished() -> void:
	$RomeoSprite.play("Idle")


func _on_happy_enemy_output_recieve_dmg() -> void:
	emit_signal("resendDMGOutput",DMG)


func _on_happy_enemy_dmg_romeo(value: Variant) -> void:
	$RomeoSprite.play("Injured")
	HP -= value
	emit_signal("updateHP",value)

extends CharacterBody2D

signal outputRecieveDMG
signal DMGRomeo(value)

var HP = 10
var DMG = 5
var SPD = 65.0
var LUCK = 0
var player_pos
var target_pos
#@onready var player = get_parent().get_node("RomeoBody")


func _on_romeo_body_self_locate(value: Variant) -> void:
	player_pos = value
	target_pos = (player_pos - position).normalized()

	if position.distance_to(player_pos) > 1:
		velocity = target_pos * SPD
		move_and_slide()


func _physics_process(_delta):
	#player_pos = RomeoLocation.global_position

		

	if HP < 1:
		SPD = 0
		$AnimatedSprite2D.play("Death")
		queue_free()

func _on_atkzone_body_entered(_body: Node2D) -> void:
	$Swing.visible = true
	get_node("Swing/AnimatedSprite2D").play("Swing")

func _on_atkzone_body_exited(_body: Node2D) -> void:
	$Swing.visible = false

func _on_swing_body_entered(body: Node2D) -> void:
	if body.is_in_group("Romeo"):
		emit_signal("DMGRomeo",DMG)


func _on_romeo_body_resend_dmg_output(value: Variant) -> void:
	HP -= value
	$AnimatedSprite2D.play("Hurt")


func take_damage1():
	emit_signal("outputRecieveDMG")


func _on_animated_sprite_2d_animation_finished() -> void:
	$AnimatedSprite2D.play("Normal")

extends Node2D

@export var enemy_new: PackedScene = preload("res://Scenes/HappyEnemy.tscn")

func _ready() -> void:
    var spawn_point = $Spawnpoint1
    $Essentials/SpawnTimer.start()
    $Essentials/SpawnTimer/SpawnRate.start()

func spawn_enemy():
    var enemy_temp = enemy_new.instantiate()
    #var enemy_new: PackedScene = preload("res://Scenes/HappyEnemy.tscn").instantiate()
    add_child(enemy_temp)
    enemy_temp.position = $Essentials/Spawnpoint1.global_position

func _on_spawn_timer_timeout() -> void:
    print("TIEM")
    $Essentials/SpawnTimer.stop()
    $Essentials/SpawnTimer/SpawnRate.stop()

func _on_spawn_rate_timeout() -> void:
    spawn_enemy()
    $Essentials/SpawnTimer/SpawnRate.wait_time = randi_range(0,3)

It’s not clear what you mean by that.

Connect to what?

You’ll have to elaborate a bit more on the problem and post your scene tree.
You also might want to check help section posting guidelines:

I want my room to begin and then spawn in functioning replicas of my enemy.

As of right now, upon being summoned, they don’t have any of the enemy elements, they just sit there doing their little sprite animation

bc i am new I can only have one image

What elements are they supposed to have?

So connections you make in the editor gets saved into the scene you’re editing, not into the node itself. The RomeoBody signals you hooked up to the HappyEnem in Room1 are stored in Room1.tscn against that one specific node, so dragging in a second enemy gives you a fresh node with nothing attached, and an enemy created with instantiate() never had a chance at those connections at all. The signals made inside HappyEnemy.tscn (ATKzone, Swing, the AnimatedSprite2D finishing) do ride along with the instance since they’re saved in that scene file, which could be why a spawned one plays its animation and does nothing else.

You’d connect the cross scene ones in code right after adding the child:

func spawn_enemy():
	var enemy_temp = enemy_new.instantiate()
	add_child(enemy_temp)
	enemy_temp.position = $Essentials/Spawnpoint1.global_position

	var romeo = $Essentials/Romeo
	romeo.selfLocate.connect(enemy_temp._on_romeo_body_self_locate)
	romeo.resendDMGOutput.connect(enemy_temp._on_romeo_body_resend_dmg_output)
	enemy_temp.DMGRomeo.connect(romeo._on_happy_enemy_dmg_romeo)
	enemy_temp.outputRecieveDMG.connect(romeo._on_happy_enemy_output_recieve_dmg)

I was assuming Essentials/Romeo from your scene tree screenshot.

THAT’S how you use connect, thank you, I will report back when I get the chance!

Thank you SO MUCH! Genuine savior