Godot Admob App Open
poingstudios/godot-admob-plugin
Provides instructions to implement, load, show, and destroy App Open ads (shown on application startup or app resume) in GDScript and C.
A skill your agent uses when implementing signals in C — [Signal] delegates, EmitSignal patterns, async signal awaiting, and event-driven architecture
$ npx skills add jame581/GodotPrompter --skill csharp-signals -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jame581/GodotPrompter csharp-signals --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/csharp-signals .claude/skills/csharp-signals && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "csharp-signals" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signals into .claude/skills/csharp-signals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "csharp-signals", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signalsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jame581/GodotPrompter --skill csharp-signals -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jame581/GodotPrompter csharp-signals --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/csharp-signals .agents/skills/csharp-signals && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "csharp-signals" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signals into .agents/skills/csharp-signals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "csharp-signals", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jame581/GodotPrompter --skill csharp-signals -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jame581/GodotPrompter csharp-signals --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/csharp-signals .cursor/skills/csharp-signals && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "csharp-signals" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signals into .cursor/skills/csharp-signals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "csharp-signals", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jame581/GodotPrompter.git --path skills/csharp-signals--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jame581/GodotPrompter --skill csharp-signals -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jame581/GodotPrompter csharp-signals --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/csharp-signals .gemini/skills/csharp-signals && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "csharp-signals" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signals into .gemini/skills/csharp-signals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "csharp-signals", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jame581/GodotPrompter csharp-signalsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jame581/GodotPrompter --skill csharp-signals -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/csharp-signals .github/skills/csharp-signals && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "csharp-signals" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signals into .github/skills/csharp-signals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "csharp-signals", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jame581/GodotPrompter --skill csharp-signals -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jame581/GodotPrompter csharp-signals --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/csharp-signals .opencode/skills/csharp-signals && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "csharp-signals" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/csharp-signals into .opencode/skills/csharp-signals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "csharp-signals", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
csharp-signalsA skill your agent uses when implementing signals in C — [Signal] delegates, EmitSignal patterns, async signal awaiting, and event-driven architecture
Csharp Signals is an agent skill from jame581/GodotPrompter. Use when implementing signals in C — [Signal] delegates, EmitSignal patterns, async signal awaiting, and event-driven architecture
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/awaiting-signals.md`, `references/connecting-gdscript-signals.md` and `references/custom-signal-patterns.md`).
It sits in Game Development, covering Game development and Event-driven systems. It works with C# and Godot. The repository describes itself as: Agentic skills framework for Godot 4.x. Domain-specific skills for AI coding agents (Claude Code, Copilot, Antigravity, Cursor). The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1e7d79d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Csharp Signals loads about 2.4k tokens when it runs, and up to ~5.4k if it reads all its reference files. Until then it costs about 37 tokens; SKILL.md has 812 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jame581/GodotPrompter at commit 1e7d79d, republished under its MIT licence (© jame581). 812 words, ~2,409 tokens.
.claude/skills/csharp-signals/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.This skill is C# only. For general C# conventions and project setup, see the csharp-godot skill. Godot signals in C# require a different mental model from GDScript: delegates declared with [Signal], strongly-typed +=/-= connections, and mandatory disconnection in _ExitTree(). All examples target Godot 4.x with no deprecated APIs.
Related skills: csharp-godot for C# conventions and project setup, event-bus for global signal hub architecture, component-system for signal-based component communication.
Signals are declared as public delegate void with the [Signal] attribute inside a partial class that extends a Godot type. The delegate name must end with EventHandler — Godot strips that suffix to produce the signal name exposed to the engine.
using Godot;
public partial class Player : CharacterBody2D
{
// Signal name in engine: "HealthChanged"
[Signal] public delegate void HealthChangedEventHandler(int current, int maximum);
// Signal name in engine: "Died"
[Signal] public delegate void DiedEventHandler();
// Signal name in engine: "ItemCollected"
[Signal] public delegate void ItemCollectedEventHandler(string itemName);
}Naming rules:
| Delegate name | Engine signal name |
|---|---|
HealthChangedEventHandler | HealthChanged |
DiedEventHandler | Died |
ItemCollectedEventHandler | ItemCollected |
PlayerSpawnedEventHandler | PlayerSpawned |
Omitting the EventHandler suffix compiles without error but registers no Godot signal — the signal will not appear in the editor and EmitSignal will throw at runtime.
Parameter type constraints: Signal parameters must be Godot-marshallable types: int, float, bool, string, Vector2, Vector3, Color, GodotObject subclasses, GodotDictionary, GodotArray. Plain C# classes, structs, and generics are not allowed as parameters.
Use EmitSignal(SignalName.SignalName, args...). The SignalName nested class is auto-generated by the Godot source generators at build time — one static string constant per declared signal.
using Godot;
public partial class Player : CharacterBody2D
{
[Signal] public delegate void HealthChangedEventHandler(int current, int maximum);
[Signal] public delegate void DiedEventHandler();
[Signal] public delegate void ItemCollectedEventHandler(string itemName);
[Export] public int MaxHealth { get; set; } = 100;
private int _currentHealth;
public override void _Ready()
{
_currentHealth = MaxHealth;
}
public void TakeDamage(int amount)
{
_currentHealth = Mathf.Clamp(_currentHealth - amount, 0, MaxHealth);
// Type-safe emission — SignalName.HealthChanged is a generated constant.
EmitSignal(SignalName.HealthChanged, _currentHealth, MaxHealth);
if (_currentHealth == 0)
EmitSignal(SignalName.Died);
}
public void CollectItem(string itemName)
{
EmitSignal(SignalName.ItemCollected, itemName);
}
}EmitSignal validates argument count and types at runtime in debug builds. Passing the wrong number of arguments raises an error immediately, making bugs easy to locate.
+= operator (preferred)using Godot;
public partial class HudLayer : CanvasLayer
{
private Player _player;
public override void _Ready()
{
_player = GetNode<Player>("../Player");
// Connect with += — mirrors C# event syntax.
_player.HealthChanged += OnHealthChanged;
_player.Died += OnDied;
_player.ItemCollected += OnItemCollected;
}
private void OnHealthChanged(int current, int maximum)
{
GetNode<ProgressBar>("HealthBar").Value = (double)current / maximum * 100.0;
GetNode<Label>("HealthLabel").Text = $"{current} / {maximum}";
}
private void OnDied()
{
GetNode<Control>("DeathScreen").Show();
}
private void OnItemCollected(string itemName)
{
GetNode<Label>("PickupLabel").Text = $"Picked up: {itemName}";
}
}Use lambdas for one-off, short-lived responses. Store the lambda in a field if you need to disconnect it later.
// Anonymous lambda — cannot be disconnected by reference later.
_player.Died += () => GetNode<AudioStreamPlayer>("DeathSound").Play();
// Stored lambda — can be disconnected.
private Action<string> _onItemCollected;
public override void _Ready()
{
_onItemCollected = (itemName) =>
{
_collectCount++;
UpdateCollectDisplay();
};
_player.ItemCollected += _onItemCollected;
}
public override void _ExitTree()
{
_player.ItemCollected -= _onItemCollected;
}_Ready()Always connect inside _Ready(). The node's references are resolved and the scene tree is available at that point. Connecting in the constructor or field initializers may fail because Godot node infrastructure is not yet initialised.
Unlike GDScript (which auto-cleans on queue_free), C# must disconnect explicitly in _ExitTree() — otherwise the listener delegate keeps the GodotObject alive past disposal, causing leaks. Use signal -= handler mirroring how you += handler in _Ready().
See references/disconnecting.md for the
-=cleanup pattern, why C# differs from GDScript, and a SafeDisconnect helper.
await ToSignal(node, SignalName.X) pauses until the signal fires. Returns Variant[] of the signal's args. Add a timeout with Task.WhenAny or a CancellationTokenSource to avoid permanent hangs.
See references/awaiting-signals.md for basic await, return-value extraction, and both timeout patterns.
Three patterns: typed event args (wrap signal payload in a Resource subclass), static event bus (use C# static event as a pure-C# alternative when both peers are C#), generic signal helper (one helper per SignalName.X to reduce repetition).
See references/custom-signal-patterns.md for full code on each pattern.
When the signal is declared in a GDScript node and the listener is C#, use node.Connect("signal_name", new Callable(this, MethodName.Handler)). The MethodName generated symbol still works for C# methods.
See references/connecting-gdscript-signals.md for the full pattern with both string-name and
MethodNamevariants.
| Mistake | Symptom | Fix |
|---|---|---|
Forgetting EventHandler suffix on the delegate | Compiles fine; signal does not appear in editor; EmitSignal fails at runtime with "signal not found" | Rename to XxxEventHandler |
Wrong parameter types or count in EmitSignal | Runtime error in debug build: "Signal parameter mismatch" | Match EmitSignal args exactly to the delegate signature |
| Connecting to a freed object | ObjectDisposedException or silent crash on next signal emission | Guard with IsInstanceValid before connecting; store reference safely |
Not disconnecting in _ExitTree() | Memory leak; crash on next signal emission after node is freed | Add _ExitTree() override with matching -= for every += |
Passing wrong argument count to EmitSignal | Debug-build error: "Expected N arguments, got M" | Count signal delegate parameters and match exactly |
| Using static C# events for cross-language signals | GDScript cannot observe the event; no error, just silent non-delivery | Use Godot [Signal] for any signal GDScript must receive |
| Double-connecting the same handler | Handler fires twice per emission; subtle logic bugs | Check if already connected, or use ConnectFlags.OneShot; never call += twice for the same method |
Awaiting a signal in _Ready() before the tree is ready | NullReferenceException or signal never resolves because the source node is not yet in the tree | Defer with await ToSignal(GetTree(), SceneTree.SignalName.ProcessFrame) first, or move the await to a method called after _Ready() |
[Signal] delegate name ends with EventHandlerEmitSignal uses SignalName.XxxName constants (not raw strings)EmitSignal argument count and types match the delegate signature exactly+= connections are in _Ready() (not in constructors or field initializers)+= has a matching -= in _ExitTree()IsInstanceValid guards are in place where the signal source may be freed before the subscriberasync signal awaits are not blocking _Ready() directly; deferred if necessaryConnect("snake_case_name", Callable.From<T>(Method))RefCounted-derived wrapper classes used for complex signal payloads, not plain C# classes or structs© jame581, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/csharp-signals of jame581/GodotPrompter.
Open the folder on GitHubat commit 1e7d79d
Csharp Signals next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Csharp Signals this skilljame581/GodotPrompter | 799 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Godot Admob App Openpoingstudios/godot-admob-plugin | 632 | — | ~1k | Automated safety check: Pass | MIT | |
| Godot Admob Bannerpoingstudios/godot-admob-plugin | 632 | — | ~718 | Automated safety check: Pass | MIT | |
| Godot Admob Get Startedpoingstudios/godot-admob-plugin | 632 | — | ~1k | Automated safety check: Pass | MIT | |
| Godot Admob Interstitialpoingstudios/godot-admob-plugin | 632 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Godot Admob Native Overlaypoingstudios/godot-admob-plugin | 632 | — | ~1k | Automated safety check: Pass | MIT |
poingstudios/godot-admob-plugin
Provides instructions to implement, load, show, and destroy App Open ads (shown on application startup or app resume) in GDScript and C.
poingstudios/godot-admob-plugin
Provides instructions to implement, load, and destroy banner ads (AdView) using custom or adaptive sizes in GDScript and C.
poingstudios/godot-admob-plugin
Provides instructions to initialize the Godot AdMob SDK and configure user consent (UMP Flow) in GDScript and C.
poingstudios/godot-admob-plugin
Provides instructions to implement, load, show, and destroy interstitial ads (full-screen image/text ads) in GDScript and C.
poingstudios/godot-admob-plugin
Provides instructions to implement, load, show, and destroy Native Overlay ads (customized/native-looking Control node template overlays) in GDScript and C.
moeru-ai/airi
Apply the Stage Tamagotchi Godot C development method and code style when working in apps/stage-tamagotchi-kirie or its migration predecessor, engines/stage-tamagotchi-godot.
jame581/GodotPrompter
Covers Godot 4.3+ 2D systems with GDScript and C# examples: canvas layers, draw order, TileMaps, parallax, lights and shadows, particles and custom drawing.
jame581/GodotPrompter
Covers Godot 4.3+ 3D systems such as materials, lighting, shadows, environment, global illumination, fog, LOD, occlusion culling and decals, with GDScript first and C# second.
jame581/GodotPrompter
Builds a data-driven ability system in Godot 4 from Resources and a component node, with cooldowns, buffs, stat modifiers, gameplay tags and HUD binding.
jame581/GodotPrompter
Covers Godot 4.3+ editor plugins: plugin folders, @tool scripts, the EditorPlugin lifecycle, custom inspectors, dock panels and gizmos, in GDScript and C#.
jame581/GodotPrompter
Covers pathfinding and enemy movement in Godot 4.3 and later: navigation regions, NavigationAgent nodes, steering, behavior trees and patrol routes.
jame581/GodotPrompter
Covers animation in Godot 4.3 and later: AnimationPlayer basics, AnimationTree blend trees and state machines, sprite animation, skeleton IK and code-driven motion.
Categories
A skill your agent uses when implementing signals in C — [Signal] delegates, EmitSignal patterns, async signal awaiting, and event-driven architecture. Csharp Signals is an agent skill from jame581/GodotPrompter.
Csharp Signals fits situations like: implementing signals in C — [Signal] delegates; emitSignal patterns; async signal awaiting; event-driven architecture.
Run `npx skills add jame581/GodotPrompter --skill csharp-signals -a claude-code`. Or copy the skill folder (skills/csharp-signals in jame581/GodotPrompter) into .claude/skills/csharp-signals in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jame581/GodotPrompter --skill csharp-signals -a codex`. Or copy the skill folder (skills/csharp-signals in jame581/GodotPrompter) into .agents/skills/csharp-signals in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jame581/GodotPrompter --skill csharp-signals -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/csharp-signals, .gemini/skills/csharp-signals, .github/skills/csharp-signals and .opencode/skills/csharp-signals in your project.
SKILL.md names no scripts, command-line tools or credentials: Csharp Signals is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Csharp Signals is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Csharp Signals: Godot Admob App Open (poingstudios/godot-admob-plugin, 632 stars), Godot Admob Banner (poingstudios/godot-admob-plugin, 632 stars), Godot Admob Get Started (poingstudios/godot-admob-plugin, 632 stars) and Godot Admob Interstitial (poingstudios/godot-admob-plugin, 632 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jame581 (a GitHub user) maintains it in jame581/GodotPrompter, which has 799 GitHub stars. The repository holds 58 skills in this directory. The repository was last updated on October 8, 2026.
Source: jame581/GodotPrompter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.