xyz So I made the connections using the inspector and also copied and pasted the code from the tutorial, no hand typing. I only hand typed one connection because you have to, and that was "new_game".
Note: The tutorial from godotengine.org says to do the following:
"In the Node tab, connect the HUD's start_game signal to the new_game() function of the Main node by clicking the "Pick" button in the "Connect a Signal" window and selecting the new_game() method or type "new_game" below "Receiver Method" in the window. Verify that the green connection icon now appears next to func new_game() in the script."
I'm not able to follow the above instructions suggesting to click "Pick" and select new_game(). It's not an option after selecting pick. I can only do this the second way the instructions suggest, which says to type "new_game" below "Receiver Method", however, when I do that it doesn't seem to be actually connecting?
On the other hand, this YouTube tutorial suggests that it ONLY works by actually typing "new_game" in the receiver method, so who knows?
Back to my attempt:
Here are screenshots of the StartButton and MessageTimer connections:


Also I made a mistake in my original post, that was the code for hud, not main. Although that's probably obvious. This is the code for main:
extends Node
@export var mob_scene: PackedScene
var score
# Called when the node enters the scene tree for the first time.
func _ready():
func game_over():
$ScoreTimer.stop()
$MobTimer.stop()
$HUD.show_game_over()
func new_game():
score = 0
$Player.start($StartPosition.position)
$StartTimer.start()
$HUD.update_score(score)
$HUD.show_message("Get Ready")
yield($StartTimer, "timeout")
$ScoreTimer.start()
$MobTimer.start()
func _on_score_timer_timeout():
score += 1
$HUD.update_score(score)
func _on_start_timer_timeout():
$MobTimer.start()
$ScoreTimer.start()
func _on_mob_timer_timeout():
# Create a new instance of the Mob scene.
var mob = mob_scene.instantiate()
# Choose a random location on Path2D.
var mob_spawn_location = get_node("MobPath/MobSpawnLocation")
mob_spawn_location.progress_ratio = randf()
# Set the mob's direction perpendicular to the path direction.
var direction = mob_spawn_location.rotation + PI / 2
# Set the mob's position to a random location.
mob.position = mob_spawn_location.position
# Add some randomness to the direction.
direction += randf_range(-PI / 4, PI / 4)
mob.rotation = direction
# Choose the velocity for the mob.
var velocity = Vector2(randf_range(150.0, 250.0), 0.0)
mob.linear_velocity = velocity.rotated(direction)
# Spawn the mob by adding it to the Main scene.
add_child(mob)
func _on_hud_start_game():
new_game()
And here is screenshots of the connection in Main

I see what the problem is now, but I do not know how to fix it. Even though the inspector shows a connection, There doesn't seem to be a connection in the script for Main. At least, I don't think there is. In the hud script, you can see the little green connection icons on the left side of the script left of func _on_start_button_pressed(): and func _on_message_timer_timeout():. However, there isn't an icon in Main left of func _on_hud_start_game() like you would expect.
When I had the program open last night, it wasn't showing the green connection button on any of the above. Now that I restarted my computer and the green connection button is showing (I haven't touched the file at all other than closing and reopening/exploring) I'm thinking it was glitching last night which was really throwing me off. Assuming the green connection buttons are showing accurately now, I just need to figure out why there isn't one for _on_hud_start_game():. I will work on it and see if I can come up with a solution, but does anybody have a solution in the meantime?