Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/bullish0x/GameStudionpx agentmods add skills/bullish0x/gamestudio/collision-systemWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/bullish0x/gamestudio/collision-system)<a href="https://agentmods.dev/skills/bullish0x/gamestudio/collision-system"><img src="https://agentmods.dev/badge/skills/bullish0x/gamestudio/collision-system.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00028 | $0.04618 |
| Opus 5 | $0.00014 | $0.02309 |
| Sonnet 5 | $0.00006 | $0.00924 |
| Haiku 4.5 | $0.00003 | $0.00462 |
Grade A, and why
collision-system scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 663 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Collision System
When to Use
Use this skill when:
- Implementing collision detection in ECS games
- Detecting entity interactions
- Implementing hit detection
- Building spatial partitioning
- Optimizing collision performance
Core Principles
- Broadphase First: Quick rejection using simple bounds
- Spatial Partitioning: Grid or octree for large scenes
- Component-Based: Collision data in components
- Event-Driven: Emit collision events
- Performance: Only check nearby entities
- Type Filtering: Collision layers/masks
Implementation
1. Collision Components
// components/Collider.ts
import { Component } from '../core/Component';
import * as THREE from 'three';
export type ColliderShape = 'box' | 'sphere' | 'capsule';
export class Collider implements Component {
shape: ColliderShape;
size: THREE.Vector3; // For box: width, height, depth; For sphere: radius in x
offset: THREE.Vector3;
isTrigger: boolean;
layer: number;
mask: number; // Which layers to collide with
constructor(
shape: ColliderShape,
size: THREE.Vector3,
options?: {
offset?: THREE.Vector3;
isTrigger?: boolean;
layer?: number;
mask?: number;
}
) {
this.shape = shape;
this.size = size;
this.offset = options?.offset || new THREE.Vector3();
this.isTrigger = options?.isTrigger || false;
this.layer = options?.layer || 0;
this.mask = options?.mask || 0xFFFFFFFF; // Collide with all by default
}
getBounds(position: THREE.Vector3): AABB | Sphere {
const center = position.clone().add(this.offset);
if (this.shape === 'sphere') {
return new Sphere(center, this.size.x);
} else {
return new AABB(
center.clone().sub(this.size.clone().multiplyScalar(0.5)),
center.clone().add(this.size.clone().multiplyScalar(0.5))
);
}
}
}
export class AABB {
constructor(
public min: THREE.Vector3,
public max: THREE.Vector3
) {}
intersects(other: AABB): boolean {
return (
this.min.x <= other.max.x && this.max.x >= other.min.x &&
this.min.y <= other.max.y && this.max.y >= other.min.y &&
this.min.z <= other.max.z && this.max.z >= other.min.z
);
}
contains(point: THREE.Vector3): boolean {
return (
point.x >= this.min.x && point.x <= this.max.x &&
point.y >= this.min.y && point.y <= this.max.y &&
point.z >= this.min.z && point.z <= this.max.z
);
}
getCenter(): THREE.Vector3 {
return new THREE.Vector3().addVectors(this.min, this.max).multiplyScalar(0.5);
}
getSize(): THREE.Vector3 {
return new THREE.Vector3().subVectors(this.max, this.min);
}
}
export class Sphere {
constructor(
public center: THREE.Vector3,
public radius: number
) {}
intersects(other: Sphere): boolean {
const distSq = this.center.distanceToSquared(other.center);
const radSum = this.radius + other.radius;
return distSq <= radSum * radSum;
}
intersectsAABB(aabb: AABB): boolean {
const closestPoint = new THREE.Vector3(
Math.max(aabb.min.x, Math.min(this.center.x, aabb.max.x)),
Math.max(aabb.min.y, Math.min(this.center.y, aabb.max.y)),
Math.max(aabb.min.z, Math.min(this.center.z, aabb.max.z))
);
const distSq = this.center.distanceToSquared(closestPoint);
return distSq <= this.radius * this.radius;
}
contains(point: THREE.Vector3): boolean {
return this.center.distanceToSquared(point) <= this.radius * this.radius;
}
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 663 lines · 28 tokens per session scan A 054f4e281b5d
collision-system is a skill published in the GitHub repository bullish0x/GameStudio (10 stars, last pushed 2mo ago), licensed MIT. It adds 28 tokens to every session and 4,618 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
game-development
Game development with Unity, Unreal Engine, and Godot. Use when building games, implementing game mechanics, physics, AI, or working with game engines.
ar-vr-xr
AR/VR/XR development with Unity XR, WebXR, ARKit, ARCore, Meta Quest SDK, and spatial computing. Use when building augmented reality, virtual reality, mixed reality applications, or spatial experiences.
sdf
SDFormat/SDF model and world authoring, validation, and simulator handoff. Use for .sdf files, SDFormat XML, models, worlds, links, joints, poses, frames, inertials, visual/collision geometry, mesh URIs, sensors, lights, physics, plugins, includes, Gazebo, static SDF review, or simulator-specific metadata. Do not use…
unity-agent-workflows
Use for AI-assisted Unity work that needs live repo discovery, project-derived routing, runtime-owner proof, runtime-visible output hard stops, runtime numeric proof for repeated visible-output failures, state-step guards, multi-agent scope ownership, modular C#/asmdef safety, UI/scene/visual asset gates, data-first…
using-bgs-archive
Use when the user wants to inspect, list, extract, unpack, or repack Bethesda BA2/BSA archives; determine archive format/version/compression; or build archive assets for an MO2 overlay. Triggers - "unpack BA2", "extract BSA", "pack archive", "inspect archive", "bgs-archive".
ai-ml-development
AI and machine learning development with PyTorch, TensorFlow, and LLM integration. Use when building ML models, training pipelines, fine-tuning LLMs, or implementing AI features.