<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Korvus </title>
    <description>The latest articles on DEV Community by Korvus  (@korvus228).</description>
    <link>https://dev.to/korvus228</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4090709%2F7ac67c37-bc29-486f-8c87-3b53def880a4.jpg</url>
      <title>DEV Community: Korvus </title>
      <link>https://dev.to/korvus228</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/korvus228"/>
    <language>en</language>
    <item>
      <title>An AI shopkeeper NPC for your Roblox game</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Mon, 31 Aug 2026 12:17:36 +0000</pubDate>
      <link>https://dev.to/korvus228/an-ai-shopkeeper-npc-for-your-roblox-game-dpo</link>
      <guid>https://dev.to/korvus228/an-ai-shopkeeper-npc-for-your-roblox-game-dpo</guid>
      <description>&lt;p&gt;A shopkeeper that actually answers questions about your items — "which sword is best against armor?" — feels alive in a way a static menu never does. Here's the minimal version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the NPC your catalog
&lt;/h2&gt;

&lt;p&gt;Put your item list in the system prompt so the NPC only talks about things that exist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;[[
You are Marta, a cheerful blacksmith's apprentice. You sell:
- Iron Sword (balanced), Warhammer (slow, heavy damage), Dagger (fast, weak).
Answer player questions in one or two short, in-character sentences. Never invent items.
]]&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;playerMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Make it hold up in a real game
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-player memory&lt;/strong&gt; so Marta remembers what a player already asked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A cooldown per player&lt;/strong&gt; so nobody can spam her.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter her replies&lt;/strong&gt; before showing them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the Cortex kit that's an NPC object with memory and moderation built in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;marta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;npc&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="n"&gt;personality&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;moderate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;marta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;say&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;playerMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free and open source: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>indiedev</category>
    </item>
    <item>
      <title>Smart Roblox enemies that react to what the player actually does</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Sat, 29 Aug 2026 12:42:31 +0000</pubDate>
      <link>https://dev.to/korvus228/smart-roblox-enemies-that-react-to-what-the-player-actually-does-3a5l</link>
      <guid>https://dev.to/korvus228/smart-roblox-enemies-that-react-to-what-the-player-actually-does-3a5l</guid>
      <description>&lt;p&gt;Scripted enemies repeat the same three lines forever. You can make a boss that taunts you about &lt;em&gt;how&lt;/em&gt; you're fighting instead — no dialogue tree, generated at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feed the model the game state
&lt;/h2&gt;

&lt;p&gt;The trick is turning the current situation into a short prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"The player has %d HP left, is using a %s, and has dodged %d attacks."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Health&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weaponName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dodgeCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;taunt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;"You are a smug arena boss. Taunt the player in one short line based on the situation."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;state&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the boss says different things when you're low on health versus when you're winning — because it's reading the actual state, not a fixed script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep it cheap and safe
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cache by a rounded state so similar situations reuse a line instead of paying again.&lt;/li&gt;
&lt;li&gt;Rate-limit per player so a spammer can't run up your usage.&lt;/li&gt;
&lt;li&gt;Filter the output before it appears over the enemy's head.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open-source Cortex kit handles caching, per-player limits, and moderation for you: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 ways to actually use AI in your Roblox game (2026)</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Thu, 27 Aug 2026 13:53:14 +0000</pubDate>
      <link>https://dev.to/korvus228/5-ways-to-actually-use-ai-in-your-roblox-game-2026-1a90</link>
      <guid>https://dev.to/korvus228/5-ways-to-actually-use-ai-in-your-roblox-game-2026-1a90</guid>
      <description>&lt;p&gt;"AI in Roblox" usually means a chatbot NPC and nothing else. There's a lot more you can wire up with one server request or a Studio plugin. Here are five that are genuinely useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Talking NPCs with memory
&lt;/h2&gt;

&lt;p&gt;A shopkeeper that remembers what you asked, a quest-giver that reacts to your choices. The trick most tutorials miss is per-player state — one global variable and every player shares the same conversation. Key it by &lt;code&gt;UserId&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Adaptive quests
&lt;/h2&gt;

&lt;p&gt;Generate quest text and objectives on the fly, then &lt;strong&gt;cache&lt;/strong&gt; identical prompts so you're not paying for the same quest twice. Endless content, tiny cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Chat moderation by meaning
&lt;/h2&gt;

&lt;p&gt;Word-list filters miss creative spelling and block innocent words. A model judges intent — "is this message harmful?" — and catches what a blocklist can't.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Generating Luau inside Studio
&lt;/h2&gt;

&lt;p&gt;This is the newest one and my favorite: a plugin where you type "a healing potion that gives +25 HP" and it writes the Tool + script and drops it in your place. It reads your selection too, so it can edit the script you have open.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Items, lore, and names
&lt;/h2&gt;

&lt;p&gt;Procedural item stats, weapon names, world lore — anything text-shaped — generated as structured data your game can read.&lt;/p&gt;

&lt;h2&gt;
  
  
  The common piece
&lt;/h2&gt;

&lt;p&gt;All five come down to one thing: a safe way to call a model from your game or Studio, with per-player state, retries, caching, and moderation handled for you. That's what &lt;strong&gt;Cortex&lt;/strong&gt; packages up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kit + plugin: &lt;strong&gt;github.com/cortex-rbx/roblox-ai-kit&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Free beta key: &lt;strong&gt;discord.gg/A3MSqwkvn7&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free open beta. Build one of these and tell me how it went.&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>ai</category>
      <category>gamedev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>An AI script generator that lives inside Roblox Studio</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Thu, 27 Aug 2026 13:53:13 +0000</pubDate>
      <link>https://dev.to/korvus228/an-ai-script-generator-that-lives-inside-roblox-studio-41je</link>
      <guid>https://dev.to/korvus228/an-ai-script-generator-that-lives-inside-roblox-studio-41je</guid>
      <description>&lt;p&gt;Searching for a &lt;strong&gt;Roblox AI script generator&lt;/strong&gt;? Most of them are a website where you paste a prompt, copy the code back, and paste it into Studio by hand. I wanted the opposite: describe what I want, and have it &lt;em&gt;appear in my place&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's &lt;strong&gt;Cortex&lt;/strong&gt; — a Studio plugin that turns plain English into Luau and runs it right there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type English, get working Luau
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;› a part that kills the player on touch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cortex writes it and runs it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Part"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Anchored&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;workspace&lt;/span&gt;

&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Touched&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;FindFirstChildOfClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Humanoid"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Health&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No copy-paste. It's in your Workspace, and &lt;code&gt;Ctrl+Z&lt;/code&gt; removes it like any Studio edit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things it's good at
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Boilerplate you hate typing&lt;/strong&gt; — RemoteEvents, DataStore scaffolds, Tool setups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editing the script you have open&lt;/strong&gt; — select a script, say "add a debounce", it patches the source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping&lt;/strong&gt; — "spinning platform", "day/night cycle", "sprint on Shift" — one line each.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;It's a plugin that calls a small gateway routing to frontier models (Claude, GPT-5). Generated code runs via &lt;code&gt;loadstring&lt;/code&gt; (with a &lt;code&gt;ModuleScript&lt;/code&gt; fallback), and every change is wrapped in &lt;code&gt;ChangeHistoryService&lt;/code&gt; so Undo/Redo behave normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it (free beta)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Plugin + kit: &lt;strong&gt;github.com/cortex-rbx/roblox-ai-kit&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;See the terminal: &lt;strong&gt;cortex-rbx.github.io/cortex.html&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Free key in the Discord: &lt;strong&gt;discord.gg/A3MSqwkvn7&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open beta — free for early testers. If it writes something wrong, tell me; that's exactly the feedback I need.&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>ai</category>
      <category>gamedev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I built an AI that writes and runs Luau inside Roblox Studio</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Thu, 27 Aug 2026 12:41:53 +0000</pubDate>
      <link>https://dev.to/korvus228/i-built-an-ai-that-writes-and-runs-luau-inside-roblox-studio-2pdf</link>
      <guid>https://dev.to/korvus228/i-built-an-ai-that-writes-and-runs-luau-inside-roblox-studio-2pdf</guid>
      <description>&lt;p&gt;Roblox Studio scripting is mostly boilerplate. You already know what you want — &lt;em&gt;a healing potion that gives +25 HP&lt;/em&gt;, &lt;em&gt;a door that opens when a player is near&lt;/em&gt; — but you still hand-write the Instance tree, wire the events, and wade through the property soup.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Cortex&lt;/strong&gt;: an AI terminal that lives &lt;em&gt;inside&lt;/em&gt; Studio. You type what you want in plain English, it turns that into Luau, and runs it right in your place. Made a mistake? &lt;code&gt;Ctrl+Z&lt;/code&gt;, like any other Studio action.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it feels like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;› make a healing potion that gives +25 HP
✻ Thinking…
⎿ applied Luau
   + HealingPotion (Tool) → StarterPack
   + heal server script
✔ done · Ctrl+Z to undo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reads your current selection too. Select a script, say &lt;em&gt;"make it respawn the player on death"&lt;/em&gt;, and it edits that script's &lt;code&gt;.Source&lt;/code&gt; in place — you're not copy-pasting snippets back and forth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it generated for that request
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Tool"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"HealingPotion"&lt;/span&gt;
&lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequiresHandle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StarterPack&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Script"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;[[
  script.Parent.Activated:Connect(function()
    local h = script.Parent.Parent:FindFirstChildOfClass("Humanoid")
    if h then h.Health = math.min(h.MaxHealth, h.Health + 25) end
  end)
]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Under the hood
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It's a Studio &lt;strong&gt;plugin&lt;/strong&gt; that calls a small gateway routing to frontier models (Claude, GPT-5).&lt;/li&gt;
&lt;li&gt;The generated Luau runs via &lt;code&gt;loadstring&lt;/code&gt;, with a &lt;code&gt;ModuleScript&lt;/code&gt; &lt;code&gt;require&lt;/code&gt; fallback.&lt;/li&gt;
&lt;li&gt;Every change is wrapped in &lt;code&gt;ChangeHistoryService&lt;/code&gt;, so Undo/Redo just works.&lt;/li&gt;
&lt;li&gt;No account, no config — install and go.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why not just use Studio's built-in Assistant?
&lt;/h2&gt;

&lt;p&gt;Roblox's own AI is handy for snippets, but Cortex &lt;strong&gt;builds in your place&lt;/strong&gt; and reads your actual selection and context. It's less "chat that hands you code to paste" and more "say what you want and it's there." Different tool for a different moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it (free, open beta)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kit + plugin loader: &lt;strong&gt;github.com/cortex-rbx/roblox-ai-kit&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;What the terminal looks like: &lt;strong&gt;cortex-rbx.github.io/cortex.html&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Grab a free beta key in the Discord: &lt;strong&gt;discord.gg/A3MSqwkvn7&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honest note: it's an open beta — free keys for early testers, no 24/7 uptime guarantee yet. If you try it and it breaks, tell me; that feedback is the whole point right now.&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>ai</category>
      <category>gamedev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Calling a ChatGPT-style API from a Roblox game (server-side)</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Thu, 27 Aug 2026 12:18:18 +0000</pubDate>
      <link>https://dev.to/korvus228/calling-a-chatgpt-style-api-from-a-roblox-game-server-side-16li</link>
      <guid>https://dev.to/korvus228/calling-a-chatgpt-style-api-from-a-roblox-game-server-side-16li</guid>
      <description>&lt;p&gt;You can give a Roblox game real generated text — dialogue, quests, item names — with a single HTTP request. The catch is &lt;em&gt;where&lt;/em&gt; you make it.&lt;/p&gt;

&lt;h2&gt;
  
  
  HttpService, from the server only
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;HttpService&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;GetService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"HttpService"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;pcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;HttpService&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;PostAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HttpService&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;JSONEncode&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"You are a wise shopkeeper. One sentence."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"what do you sell?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="n"&gt;Enum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HttpContentType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApplicationJson&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Authorization&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Bearer "&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="n"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turn on &lt;strong&gt;Game Settings → Security → Allow HTTP Requests&lt;/strong&gt; first, or every call fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The limits you will hit
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;500 requests/min per server.&lt;/strong&gt; Cache repeated prompts so you don't burn the budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No SSE streaming in live games.&lt;/strong&gt; Streaming only works in Studio; live servers are request/response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moderation.&lt;/strong&gt; Anything player-facing must be filtered, or your game risks removal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A shortcut
&lt;/h2&gt;

&lt;p&gt;The Cortex kit wraps all of this — one key, caching, retries, and moderation on by default, billed in Robux instead of a credit card. But the pattern above works with any backend. Open source: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to make an AI NPC in Roblox Studio (the multiplayer-safe way)</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Tue, 25 Aug 2026 15:58:41 +0000</pubDate>
      <link>https://dev.to/korvus228/how-to-make-an-ai-npc-in-roblox-studio-the-multiplayer-safe-way-54k7</link>
      <guid>https://dev.to/korvus228/how-to-make-an-ai-npc-in-roblox-studio-the-multiplayer-safe-way-54k7</guid>
      <description>&lt;p&gt;Most "AI NPC" tutorials work great in a solo test and then fall apart the moment two players are in the server. Here's how to do it so it actually holds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one request
&lt;/h2&gt;

&lt;p&gt;AI text generation happens on the server. Never call it from a LocalScript — your API key would ship to every client. Put a ModuleScript in ServerStorage and call it from a server Script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ServerStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"You are a gruff blacksmith. One short line."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"forge me a sword?"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;--&amp;gt; "Aye, hand over the ore and I'll hammer ye a blade."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The three bugs that only show up in multiplayer
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Global debounce.&lt;/strong&gt; Tutorials use one shared &lt;code&gt;isBusy&lt;/code&gt; flag, so only the &lt;em&gt;first&lt;/em&gt; player to talk gets a reply and everyone else is dropped. Fix: cooldown keyed by &lt;code&gt;UserId&lt;/code&gt;, not a global lock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No retries.&lt;/strong&gt; The endpoint 429s under load and one failed request kills the interaction. Fix: retry with backoff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unfiltered output.&lt;/strong&gt; Raw model text shown to players can get your game moderated. Fix: run replies through &lt;code&gt;TextService:FilterStringAsync&lt;/code&gt; before displaying.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Doing it right, briefly
&lt;/h2&gt;

&lt;p&gt;If you want per-player memory and the fixes above handled for you, the open-source Cortex kit gives you an NPC object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;bramm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;npc&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="n"&gt;personality&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"You are Bramm, a dwarven blacksmith."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;moderate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bramm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;say&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;              &lt;span class="c1"&gt;-- per-player memory + cooldown&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;safe&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;filterForPlayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;-- Roblox-filtered, safe to show&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code is MIT and readable: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>You don't need a credit card to add AI to your Roblox game</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Tue, 25 Aug 2026 06:15:45 +0000</pubDate>
      <link>https://dev.to/korvus228/you-dont-need-a-credit-card-to-add-ai-to-your-roblox-game-4mg4</link>
      <guid>https://dev.to/korvus228/you-dont-need-a-credit-card-to-add-ai-to-your-roblox-game-4mg4</guid>
      <description>&lt;p&gt;Most "add AI to your game" tutorials assume you'll sign up for OpenAI with a credit card, host a proxy, and eat per-token bills in dollars. But a Roblox game earns &lt;strong&gt;Robux&lt;/strong&gt;, not dollars — and plenty of Roblox devs are teenagers without a card at all.&lt;/p&gt;

&lt;p&gt;Here's the mismatch nobody addresses: your revenue is Robux, your AI bill is USD, and the two don't meet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pay for AI the same way your game earns
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cortex-rbx.github.io" rel="noopener noreferrer"&gt;Cortex&lt;/a&gt; is built for this: you &lt;strong&gt;pay in Robux&lt;/strong&gt; via a game pass, no card. The API key never leaves your server, and you're billed on &lt;strong&gt;output tokens only&lt;/strong&gt; — the system prompt, memory, and chat history you resend on every call are free, and repeated replies are cached for nothing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ServerStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"You are a gruff blacksmith. One line."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"forge me a sword?"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole integration — one function, one server-side request, and it works for NPCs, quests, item text, and chat moderation.&lt;/p&gt;

&lt;p&gt;It's OpenAI-compatible, so if you ever outgrow it you point your SDK somewhere else and only the address and key change.&lt;/p&gt;

&lt;p&gt;Free open beta, keys in the Discord: &lt;a href="https://discord.gg/A3MSqwkvn7" rel="noopener noreferrer"&gt;https://discord.gg/A3MSqwkvn7&lt;/a&gt; · kit: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>indiedev</category>
    </item>
    <item>
      <title>Generate endless Roblox quests with AI (and cache them so it's cheap)</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Sun, 23 Aug 2026 12:17:03 +0000</pubDate>
      <link>https://dev.to/korvus228/generate-endless-roblox-quests-with-ai-and-cache-them-so-its-cheap-3cj6</link>
      <guid>https://dev.to/korvus228/generate-endless-roblox-quests-with-ai-and-cache-them-so-its-cheap-3cj6</guid>
      <description>&lt;p&gt;Hand-written quests run out. Players finish your content faster than you can write it, and the tenth "collect 10 wolf pelts" quest feels like filler. You can generate quests on the fly instead — tuned to the player and the place.&lt;/p&gt;

&lt;h2&gt;
  
  
  One request
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ServerStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;quest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;"Give one short side-quest for a forest zone, player level 5. One sentence."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"player just entered the forest"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;--&amp;gt; "Find the woodcutter who vanished near the old mill before nightfall."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same pattern generates item names, descriptions, and lore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cache the world, not the player
&lt;/h2&gt;

&lt;p&gt;World-gen content (an item's description, a location's lore) is generated &lt;strong&gt;once&lt;/strong&gt; and then it's fixed — so cache it and never pay for it again. With &lt;a href="https://cortex-rbx.github.io" rel="noopener noreferrer"&gt;Cortex&lt;/a&gt;, cached repeats are free and you're billed on output tokens only, so a world full of generated flavor text costs almost nothing. Pay in Robux, key stays server-side.&lt;/p&gt;

&lt;p&gt;Free beta + open-source kit: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt; · demo: &lt;a href="https://cortex-rbx.github.io" rel="noopener noreferrer"&gt;https://cortex-rbx.github.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>AI chat moderation in Roblox — by meaning, not a word list</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Sun, 23 Aug 2026 12:16:33 +0000</pubDate>
      <link>https://dev.to/korvus228/ai-chat-moderation-in-roblox-by-meaning-not-a-word-list-5pk</link>
      <guid>https://dev.to/korvus228/ai-chat-moderation-in-roblox-by-meaning-not-a-word-list-5pk</guid>
      <description>&lt;p&gt;Word-list chat filters break the moment someone types &lt;code&gt;a s s a s s i n&lt;/code&gt; with spaces, or a slur spelled with a &lt;code&gt;0&lt;/code&gt;, or a perfectly innocent word that happens to contain a banned substring. You end up in an endless arms race patching your blocklist.&lt;/p&gt;

&lt;p&gt;An AI model reads the &lt;strong&gt;meaning&lt;/strong&gt; of a message, so it catches obfuscated toxicity and stops false-flagging harmless phrases.&lt;/p&gt;

&lt;h2&gt;
  
  
  One server-side call
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ServerStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cortex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;"You moderate a kids' game chat. Reply with exactly one word: SAFE or BLOCK."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;message&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"BLOCK"&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
    &lt;span class="c1"&gt;-- don't send it&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reply is one word, so it's cheap: with &lt;a href="https://cortex-rbx.github.io" rel="noopener noreferrer"&gt;Cortex&lt;/a&gt; you're billed on &lt;strong&gt;output tokens only&lt;/strong&gt;, and repeated messages are served from cache for free — so moderating your whole chat costs a fraction of a Robux. You pay in Robux, no credit card, and the key stays server-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Give the model your game's context ("kids' game", "PvP trash-talk is fine") so it matches your tolerance.&lt;/li&gt;
&lt;li&gt;Cache identical messages — spammers repeat themselves.&lt;/li&gt;
&lt;li&gt;Log &lt;code&gt;BLOCK&lt;/code&gt; verdicts so you can tune the prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free open beta and open-source kit: &lt;a href="https://github.com/cortex-rbx/roblox-ai-kit" rel="noopener noreferrer"&gt;https://github.com/cortex-rbx/roblox-ai-kit&lt;/a&gt; · demo: &lt;a href="https://cortex-rbx.github.io" rel="noopener noreferrer"&gt;https://cortex-rbx.github.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>moderation</category>
    </item>
    <item>
      <title>Add AI-powered talking NPCs to your Roblox game (one server request)</title>
      <dc:creator>Korvus </dc:creator>
      <pubDate>Sun, 23 Aug 2026 11:57:42 +0000</pubDate>
      <link>https://dev.to/korvus228/add-ai-powered-talking-npcs-to-your-roblox-game-one-server-request-28gk</link>
      <guid>https://dev.to/korvus228/add-ai-powered-talking-npcs-to-your-roblox-game-one-server-request-28gk</guid>
      <description>&lt;p&gt;Static dialogue trees get old the second a player types something you&lt;br&gt;
  didn't predict. Here's how to give any Roblox NPC a real brain — one that&lt;br&gt;
  answers &lt;em&gt;in character&lt;/em&gt; to whatever the player actually writes — with a&lt;br&gt;
  single server-side request.&lt;/p&gt;

&lt;p&gt;## The idea&lt;/p&gt;

&lt;p&gt;If you put an API key in a &lt;code&gt;LocalScript&lt;/code&gt;, it ships to every player and&lt;br&gt;
  gets scraped in minutes. Every AI call must go from a &lt;strong&gt;server&lt;/strong&gt; Script,&lt;br&gt;
  and you must enable &lt;strong&gt;Game Settings → Security → Allow HTTP Requests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;## One request&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
lua
  local HttpService = game:GetService("HttpService")

  local function ask(personality, playerMessage)
      local body = HttpService:JSONEncode({ system = personality, text =
  playerMessage })
      local res = HttpService:PostAsync("YOUR_AI_ENDPOINT", body)
      return HttpService:JSONDecode(res).text
  end

  print(ask("You are a gruff dwarven blacksmith. One short in-character
  line.",
            "can you forge me a sword?"))
  --&amp;gt; "Aye — hand over the ore and I'll hammer ye a blade."

  Swap the personality string and you have a merchant who haggles, a guard
  who warns you off, a priest who blesses you.

  Paying for it without a credit card

  Roblox devs earn Robux, not dollars, and plenty don't have a card to hand
  to OpenAI. So I built Cortex (https://cortex-rbx.github.io) — the same
  one-request idea, but you pay in Robux, the key stays server-side, and
  you're billed on output tokens only (the system prompt, memory and
  history you resend every call are free, and repeated lines are cached
  free — NPCs say a lot of similar things).

  local Cortex = require(game.ServerStorage.Cortex)
  local ai = Cortex.new("YOUR_KEY")
  print(ai:ask("You are a gruff blacksmith. One short line.", "forge me a
  sword?"))

  It's not just dialogue

  - Adaptive quests tuned to the player's level and story
  - Item names, descriptions and lore generated once and cached
  - Chat moderation by meaning (SAFE / BLOCK) — catches intent word-lists
  miss
  - An in-game assistant that explains a mechanic in words that fit the
  moment

  Try it

  - Live demo (a real model, not a scripted reply):
  https://cortex-rbx.github.io
  - Free open-source kit: https://github.com/cortex-rbx/roblox-ai-kit
  - Free beta key: https://discord.gg/A3MSqwkvn7

  Open beta, free right now. Would love feedback on the API and what you'd
  want your NPCs to say.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>roblox</category>
      <category>gamedev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
