§ How to · with Forge AI

How to make a Roblox killfeed (with AI)

By Sametcan Tasgiran, Founder & Developer·Published ·Updated

A Roblox killfeed needs four pieces: kill detection from any damage source, a corner notification UI, kill streak escalation, and weapon/team icons. Forge AI generates all four in 32 seconds.

3 files · 110 lines · 32 seconds · 1 credit. Animated entry, auto-fade, team-color coded.

Universal kill detection

Hooks into any Humanoid death and reads the LastDamageSource attribute (set by the damage system). Works with swords, guns, NPCs, environment hazards.

Corner notification UI

Top-right stack of 5 most recent kills. New kills slide in from the right, push older ones down, auto-fade after 5 seconds.

Kill streak escalation

Tracks consecutive kills per player. 3-kill 'Triple', 5-kill 'Killing Spree', 10-kill 'Rampage'. Each tier has a unique audio cue and feed color.

Weapon icons

Reads the weapon's ImageId attribute. The icon appears between killer and victim names ('PlayerA [sword-icon] PlayerB'). Custom icons supported per weapon.

Team color coding

Killer name in their team color, victim in theirs. Friendly fire shown with a warning glyph. Self-eliminations ('PlayerA [skull] PlayerA' for void deaths) handled.

Headshot indicator

Special icon (red dot) for headshot kills. Damage system sets a 'headshot' flag in LastDamageSource — killfeed reads it and renders the icon.

Files Forge AI ships for this prompt

3 files · 110 lines · 32 seconds · 1 credit

ServerScriptService/KillfeedServer.lua

Death detection, streak tracking, broadcast to clients

48 lines

ReplicatedStorage/Remotes/KillfeedEvent

Server → all clients on kill

instance

StarterGui/KillfeedUI.lua

Corner stack, slide-in, auto-fade, icon rendering

62 lines

Sample output: ServerScriptService/KillfeedServer.lua

--!strict
-- ServerScriptService/KillfeedServer.lua  (Forge AI · excerpt)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local KillfeedEvent = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("KillfeedEvent")

local STREAK_TIERS = {
    [3] = { label = "TRIPLE", color = Color3.fromRGB(255, 200, 0) },
    [5] = { label = "KILLING SPREE", color = Color3.fromRGB(255, 120, 0) },
    [10] = { label = "RAMPAGE", color = Color3.fromRGB(255, 0, 0) },
}

local streaks: { [Player]: number } = {}

local function onCharacter(player: Player, character: Model)
    local humanoid = character:WaitForChild("Humanoid") :: Humanoid
    humanoid.Died:Connect(function()
        local src = character:GetAttribute("LastDamageSource")
        local killerId = character:GetAttribute("LastDamageKillerId")
        local weapon = character:GetAttribute("LastDamageWeapon") or "fist"
        local headshot = character:GetAttribute("LastDamageHeadshot") == true

        streaks[player] = nil  -- reset victim's streak

        local killer = killerId and Players:GetPlayerByUserId(killerId)
        if killer and killer ~= player then
            streaks[killer] = (streaks[killer] or 0) + 1
        end

        local streakInfo = killer and STREAK_TIERS[streaks[killer] or 0]

        KillfeedEvent:FireAllClients({
            killer = killer and killer.Name,
            victim = player.Name,
            weapon = weapon,
            headshot = headshot,
            streakLabel = streakInfo and streakInfo.label,
            streakColor = streakInfo and streakInfo.color,
        })
    end)
end

Players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(c) onCharacter(player, c) end)
end)

Building a Roblox killfeed

Killfeeds are deceptively important. They tell players who is winning, what is meta, and where the action is. A bad killfeed (laggy, unclear, missing data) makes a PvP game feel unresponsive. A good killfeed makes every kill feel like a celebration. Forge AI ships the celebration version.

The Forge AI killfeed prompt produces a 3-file system in 32 seconds. The whole system reads from a standard attribute pattern: LastDamageSource, LastDamageKillerId, LastDamageWeapon, LastDamageHeadshot. As long as your damage system sets these attributes (which Forge's combat, gun, and boss systems all do), the killfeed works with zero integration.

Kill streak escalation is the dopamine layer. Three consecutive kills = TRIPLE, five = KILLING SPREE, ten = RAMPAGE. Each tier has a unique color and an audio cue. The streak resets on death. This pattern is borrowed directly from Halo and CS — it works because players know the references and feel the achievement.

Weapon icons close the information gap. 'PlayerA killed PlayerB' tells you who but not how. 'PlayerA [sword] PlayerB' shows the weapon at a glance, which lets players spot meta weapons in real time. Custom icons are read from the weapon Tool's ImageId attribute — no central registry needed.

Team coloring and the headshot indicator are the polish details. Player names in their team color make spectating clear. The headshot dot rewards precision and makes those moments feel earned. Together, the killfeed transforms a UI element from forgotten chrome into a key engagement layer.

See more on the Luau generator, the game builder, or browse the full blog.

Frequently asked

How does the killfeed know what weapon was used?+

The damage system (combat, gun, etc.) sets a LastDamageWeapon attribute on the victim before applying damage. The killfeed reads it on Humanoid.Died. This pattern works with any Forge-generated combat system out of the box.

Can I customize the streak tier names?+

Yes. STREAK_TIERS is a top-of-file table — add/remove tiers, change labels, colors. Forge generates the default with 3 tiers; you can extend to as many as you want.

What about environment kills (lava, void, falling)?+

Environment damage sources set LastDamageSource to a non-player ID. KillfeedServer interprets this and shows the entry as 'PlayerA [environment-icon]'. The killer name is replaced with the source ('Lava', 'Void', 'Falling damage').

Can I add team-colored names?+

Yes. The KillfeedEvent payload includes killer.TeamColor and victim.TeamColor. KillfeedUI reads them and colors the names accordingly. Forge wires this if your game has teams.

How long do entries stay on screen?+

5 seconds by default. Configurable in KillfeedUI.lua. The stack holds the 5 most recent kills — older ones get pushed out when new ones arrive.

Related Forge AI prompts