freeslot("sfx_eeeeee",
"SPR_EEEE",
"S_PLAY_E")
sfxinfo[sfx_eeeeee].caption = "e"
sfxinfo[sfx_eeeeee].flags = SF_NOMULTIPLESOUND

local noise = S_PLAY_E
states[noise].sprite = SPR_EEEE
states[noise].frame = A
states[noise].tics = -1
states[noise].nextstate = S_PLAY_E

local scramble = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}
local argument = ""
for i = 1, 45
  argument = $ + scramble[P_RandomKey(#scramble+1)]
end

COM_AddCommand("e", function(player, arg)
	if (player and player.mo and player.mo.valid)
		if player != server
			return
		end
		if not player.mo.e
			if arg == argument
				for memer in players.iterate
					memer.mo.e = true
					for mo in mobjs.iterate()
						if mo.flags & (MF_ENEMY|MF_BOSS)
							P_KillMobj(mo, memer.mo)
						end
					end
					S_StartSound(memer.mo, sfx_eeeeee)
					memer.mo.state = S_PLAY_E
					memer.pflags = $|PF_FINISHED
				end
			elseif player.mo.e
			or not (player and player.mo and player.mo.valid)
				return
			end
		end
	end
end, 0)

addHook("ThinkFrame", do
	for player in players.iterate
		if player.mo and player.mo.valid
			if player.mo.e == true
			and player.mo.state != S_PLAY_E
				player.mo.state = S_PLAY_E
			end
		end
	end
end)

addHook("NetVars", function(network)
	scramble = network($)
	argument = network($)
end)

addHook("MapLoad", do
	argument = ""
	for i = 1, 45
		argument = $ + scramble[P_RandomKey(#scramble+1)]
	end
	COM_BufInsertText(player, 'bind e "e ' + argument + '"') 
end)