You can create bezier curves. They’re a type of spline which only require three parts to create a smooth curve. You can use this module to create bezier curves easily.
How would I access whether an enemy or such has entered the base? Using RemoteEvents could be easily manipulated.
Would I use tables to store data about the enemy?
This is currently my script for spawning enemies :
--// Services
local S_RS = game:GetService("ReplicatedStorage")
--// Constants
local COMMON = S_RS:WaitForChild("Common")
local RESOURCES = COMMON:WaitForChild("Resources")
local ENEMIES = RESOURCES:WaitForChild("Enemies")
local MODELS = ENEMIES:WaitForChild("Models")
local CONFIG = ENEMIES:WaitForChild("Config")
local ENUMS = require(COMMON:WaitForChild("Enums"))
--// Variables
local enemies = {}
--[[PRIVATE]]--
--[[PUBLIC]]--
function ENEMY.spawn_enemy(enemy_name: string, map, count: number, interval: number, start_delay: number): ()
assert(enemy_name, "Enemy name was not given, enemy name is required to spawn the enemy.")
local enemy_exists = MODELS:FindFirstChild(enemy_name)
assert(enemy_exists, "Enemy model was not found or not loaded.")
assert(enemy_exists.PrimaryPart, "Enemy model does not have a PrimaryPart.")
assert(count, "Count was not given, a required argument.")
assert(interval, "Interval number was not given, a required argument.")
assert(start_delay, "The Start Delay number was not given, a required argument.")
assert(map, "Map was not given, a required argument.")
task.wait(start_delay)
for enemy_count = 1, count, 1 do
local enemy_model = enemy_exists:Clone()
local enemy_config = require(CONFIG:WaitForChild(enemy_name) or CONFIG:WaitForChild("Default"))
assert(enemy_config, "Enemy config was not loaded or not found.")
local enemy = {}
enemy.HEALTH = enemy_config.HEALTH
enemy.CONFIG = enemy_config
enemy.ENUM = ENUMS.ENEMIES[enemy_name]
enemy.ENEMY = enemy_model.PrimaryPart
enemies[enemy_model] = enemy
enemy_model.Parent = workspace:WaitForChild("Enemies")
task.wait(interval)
end
print(enemies)
end
return ENEMY
You’re welcome, good luck with your tower defense game. Also, there was somebody on YouTube doing exactly what you are looking for, you can also message him, @samuelissad, about this topic, but unfortunately stopped the videos.