How to make bullets fire in a specific direction based on the parent

Godot Version

4.3

Question

I’m making a shoot 'em up boss rush game, and I can make bullets spawn that go forwards and backwards. However, I can’t make them go sideways of the boss. Could anyone please tell me how to make a bullet that can go any direction? I’ve been stuck on this problem for a little while now.

Code

Bullet:

extends CharacterBody3D

var direction: Vector3
var new_direction: Vector3
var StartPos: Vector3
var in_parry_zone = false

func _ready() -> void:
	global_transform.origin = StartPos
	new_direction = direction

func _physics_process(delta: float) -> void:
	velocity = new_direction
	move_and_slide()

func _on_area_3d_body_entered(body: Node3D) -> void:
	if body.is_in_group("player"):
		body.hit = true
		queue_free()

Boss:

extends CharacterBody3D

@onready var timer: Timer = $Timer

var SPEED = 15
var bullet = preload("res://normal_bullet.tscn")
var started_liftoff = false
var HP = 200
var invicible = true
var hit = false
var spawner: float
var phase = 1

func _ready() -> void:
	timer.start()

func _process(delta: float) -> void:
	if phase == 2:
		rotation.y -= 0.02
		timer.wait_time = 0.3
	if HP <= 100:
		phase = 2
	StatHandler.boss_position = global_position
	if hit:
		HP -= 10
		hit = false
	var player = get_tree().get_first_node_in_group("player")
	if player != null and phase == 1:
		look_at_target_interpolated(0.05)
	if HP <= 0:
		kill()

func look_at_target_interpolated(weight: float) -> void:
	var player = get_tree().get_first_node_in_group("player")
	var xform := transform
	xform = xform.looking_at(player.global_position, Vector3.UP)
	transform = transform.interpolate_with(xform, weight)

func _on_timer_timeout() -> void:
	var player = get_tree().get_first_node_in_group("player")
	if StatHandler.boss_ready:
		if player != null:
			var instance = bullet.instantiate()
			instance.direction = global_transform.basis.z.normalized() * -1 * SPEED
			instance.StartPos = global_position
			add_sibling(instance)
			if phase == 2:
				var instance2 = bullet.instantiate()
				instance2.direction = global_transform.basis.z.normalized() * 1 * SPEED
				instance2.StartPos = global_position
				add_sibling(instance2)

func kill():
	StatHandler.boss_ready = false
	queue_free()

func ready_up():
	StatHandler.boss_ready = true

Any help would be greatly appreciated!

if global_transform.basis.z is forwards and backwards, then .x is left and right.