Help with playing animations

hey so i have a game where you can place down troops and im currently trying to play their animations on the client, only problem is i dont want to load animations more than once because of the 256 limit and also optimization

the code below is what ive been able to come up with, and it works the first time, however as soon as i place down a second troop the value obviously isnt nil anymore so it wont load the animation for the second troop

is there any way to check if it has loaded for a specific humanoid or something? im a little lost

local walkTrack
events.Animate.OnClientEvent:Connect(function(troop, action)
	local animator = troop:FindFirstChild("Humanoid").Animator
	
	if action == "Walk" then
		if walkTrack == nil then
			print("aaa")
			walkTrack = animator:LoadAnimation(game.ReplicatedStorage.Animations:FindFirstChild(troop.Name).Walk)
		end
		walkTrack:Play()
	end
1 Like

There is a function called animator:GetAnimationTracks() i think thats what its called and it returns an array of all of the tracks.

2 Likes

ive tried to do something with that but an animation could already be loaded even if its not playing

local AnimationTrack = ANIMATION_TRACK

while AnimationTrack.Length == 0 do
	AnimationTrack:Play()
	task.wait()
end

wont work unfortunately if i place down a second troop while the first one’s animation is still playing then the length isnt 0 anymore and the second one doesnt get animated

You wanna use 1 animation track?

i dont want to load the same animation track more than once because there is a 256 limit

That doesn’t make sense. The walktrack is always played on the first troop

local troop = workspace.Troop

local animator = troop.Humanoid.Animator
local anim_id = 123123
for _,anim in animator:GetPlayingAnimationTracks() do
	if anim.Animation.AnimationId == anim_id then
		print(anim,
			"IsPlaying", anim.IsPlaying,
			"Length", anim.Length,
			"Priority", anim.Priority,
			"Speed", anim.Speed
		)
	end
end

Try running this to see what is happening while it is supposed to be playing.

[EDIT] I changed anim.AnimationId to anim.Animation.AnimationId

sorry i don’t quite get what you mean

roblox has a limit of 256 for how many animations you can have loaded, so to avoid hitting that, you’re supposed to load the track once and Play() it over and over again, instead of loading it each time

i’m asking how to do that, like if there are any ways to check if it has been loaded

hey animation tracks dont have IDs, only the animation instances do so i modified it a bit:

for _, anim in animator:GetPlayingAnimationTracks() do
	if game.ReplicatedStorage.Animations.Knight:FindFirstChild(anim.Name).AnimationId == anim_id then
		print(anim,
			"IsPlaying", anim.IsPlaying,
			"Length", anim.Length,
			"Priority", anim.Priority,
			"Speed", anim.Speed
			)
		end
	end

here are the results, although im not sure what you need from this, there are no errors im just asking how to do it

20:55:52.416  Walk IsPlaying true Length 0 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:52.567  Walk IsPlaying true Length 0 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:52.567  Walk IsPlaying true Length 0 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.665  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.666  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.667  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.766  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.767  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.768  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.768  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.865  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.866  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.867  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.867  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:53.868  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.148  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.149  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.150  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.151  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.152  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.153  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.231  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.232  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.233  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.233  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.234  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.235  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.236  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.349  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.350  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.350  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.351  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.352  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.352  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.353  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.354  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.448  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.449  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.450  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.451  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.451  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.452  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.453  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.453  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.454  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.548  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.549  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.549  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.550  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.551  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.551  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.552  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.553  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.554  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.554  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.648  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.649  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.649  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.650  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.650  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.651  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.652  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.652  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.653  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.654  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.654  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.748  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.749  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.750  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.750  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.751  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.752  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.752  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.753  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.753  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.754  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.755  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.755  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.831  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.832  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.833  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.834  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.835  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.835  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.836  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.837  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.837  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.838  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.839  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.840  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.840  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.932  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.933  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.934  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.934  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.935  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.936  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.936  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.937  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.937  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.938  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.938  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.939  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.940  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:54.940  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.047  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.048  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.048  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.049  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.050  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.050  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.051  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.052  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.052  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.053  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.054  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.054  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.055  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.055  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.056  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.148  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.149  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.150  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.150  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.151  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.152  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.152  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.153  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.154  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.154  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.155  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.156  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.157  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.157  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.158  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.159  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.247  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.248  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.249  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.249  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.250  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.251  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.251  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.252  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.253  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.253  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.254  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.254  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.255  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.256  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.256  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.257  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:55:55.258  Walk IsPlaying true Length 1 Priority Enum.AnimationPriority.Action Speed 1  -  Client - Animations:15
  20:56:08.782  Disconnect from ::ffff:127.0.0.1|57601  -  Studio
1 Like

Please see the edit to my post.

Do u mean something like this?

local WalkTracks = {}

events.Animate.OnClientEvent:Connect(function(troop, action)
	local animator = troop:FindFirstChild("Humanoid").Animator

	if action == "Walk" then
		if not WalkTracks[troop] then
			print("aaa")
			WalkTracks[troop] = animator:LoadAnimation(game.ReplicatedStorage.Animations:FindFirstChild(troop.Name).Walk)
		end
		WalkTracks[troop]:Play()
	end
1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.