Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
thedivergentai avatar

Godot Genre Racing

  • 135 installs
  • 454 repo stars
  • Updated July 28, 2026
  • thedivergentai/gd-agentic-skills

Use godot-genre-racing for development tasks

About

godot-genre-racing: A skill for development. This provides functionality for development workflows.

  • godot-genre-racing

Godot Genre Racing by the numbers

  • 135 all-time installs (skills.sh)
  • +8 installs in the week ending Jul 27, 2026 (Skillselion tracking)
  • Ranked #2,658 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/thedivergentai/gd-agentic-skills --skill godot-genre-racing

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs135
repo stars454
Last updatedJuly 28, 2026
Repositorythedivergentai/gd-agentic-skills

What it does

Use godot-genre-racing for development tasks

Files

SKILL.mdMarkdownGitHub ↗

Genre: Racing

Expert blueprint for racing games balancing physics, competition, and sense of speed.

NEVER Do (Expert Anti-Patterns)

Physics & Handling

  • NEVER use a rigid camera attachment; strictly use a Smooth Follow pattern with lerp() to prevent motion sickness.
  • NEVER prioritize realism over fun; strictly increase Gravity Scale (2x-3x) and keep friction high for responsive arcade feel.
  • NEVER use VehicleBody3D default settings for karts; strictly rewrite suspension using Raycasts or custom spring/damper models.
  • NEVER apply steering torque directly to mass; strictly use a steering curve factored by lateral velocity.
  • NEVER calculate suspension without a damper model; strictly include damping to prevent eternal oscillation (bouncing).
  • NEVER ignore the Center of Mass property; strictly offset it downward to ensure stability during high-speed turns.
  • NEVER multiply engine force by delta; it is an integrated force in the physics solver.
  • NEVER rely on is_action_pressed() for manual gear shifting; strictly use is_action_just_pressed() for single-tap accuracy.

AI & Competition

  • NEVER use static AI speeds; strictly use Rubber-Banding to keep races competitive based on player distance.
  • NEVER run AI pathfinding across the entire track every frame; strictly use a "Look-Ahead" point on a spline/path.
  • NEVER ignore racing Checkpoints; strictly enforce sequential Area3D validation to prevent track shortcuts.
  • NEVER use standard Area3D for slipstreaming without a Dot Product check to ensure the player is directly behind.

Visuals & Audio

  • NEVER skip "Sense of Speed" effects; strictly implement dynamic FOV scaling, motion blur, and high-speed camera shake.
  • NEVER update minimap transforms for static elements in _process(); strictly update dynamic racers only.
  • NEVER serialize ghost cars as mass transform lists; strictly store positions/quaternions at fixed intervals.
  • NEVER use constant pitch for engine sounds; strictly map RPM or engine load to pitch_scale.
  • NEVER spawn particles for skid marks every frame; strictly use Trail3D or procedural strips for low-cost persistence.
  • NEVER use standard Strings for surface detection; strictly use StringName (e.g., &"asphalt").

---

🛠 Expert Components (scripts/)

Original Expert Patterns

  • arcade_vehicle_physics.gd - High-performance arcade handling with custom gravity, air control, and friction-slip drifting.
  • spline_ai_controller.gd - Professional racing AI using Path3D predictive steering and rubber-banding logic.

Modular Components

  • arcade_vehicle_controller.gd - Alternative tight, raycast-based vehicle movement model for non-physics karts.
  • slipstream_handler.gd - Drafting zones with relative dot-product checks for speed boosts.
  • lap_tracker.gd - High-precision lap management with sequential checkpoint logic.
  • ghost_recorder.gd - Binary transform serialization for lightweight ghost car playback.
  • engine_audio_controller.gd - RPM-to-pitch audio synthesis for engine revving and gear shifts.
  • skid_mark_emitter.gd - Conditional tire-slip trail system for persistent visual feedback.
  • minimap_icon_projector.gd - 3D-to-2D bridge for projecting racers onto a localized UI.
  • force_feedback_router.gd - Haptic and rumble management based on terrain and collisions.
  • raycast_suspension.gd - Spring/damper model for raycast wheels with configurable stiffness.
  • racing_checkpoint.gd - Indexed trigger gate for modular track-based lap progression.

---

Core Loop

1. Race: Player controls a vehicle on a track. 2. Compete: Player overtakes opponents or beats the clock. 3. Upgrade: Player earns currency/points to buy parts/cars. 4. Tune: Player adjusts vehicle stats (grip, acceleration). 5. Master: Player learns track layouts and optimal lines.

Skill Chain

PhaseSkillsPurpose
1. Physicsphysics-bodies, vehicle-wheel-3dCar movement, suspension, collisions
2. AInavigation, steering-behaviorsOpponent pathfinding, rubber-banding
3. Inputinput-mappingAnalog steering, acceleration, braking
4. UIprogress-bars, labelsSpeedometer, lap timer, minimap
5. Feelcamera-shake, godot-particlesSpeed perception, tire smoke, sparks

Architecture Overview

1. Vehicle Controller

Handling the physics of movement.

# car_controller.gd
extends VehicleBody3D

@export var max_torque: float = 300.0
@export var max_steering: float = 0.4

func _physics_process(delta: float) -> void:
    steering = lerp(steering, Input.get_axis("right", "left") * max_steering, 5 * delta)
    engine_force = Input.get_axis("back", "forward") * max_torque

2. Checkpoint System

Essential for tracking progress and preventing cheating.

# checkpoint_manager.gd
extends Node

var checkpoints: Array[Area3D] = []
var current_checkpoint_index: int = 0
signal lap_completed

func _on_checkpoint_entered(body: Node3D, index: int) -> void:
    if index == current_checkpoint_index + 1:
        current_checkpoint_index = index
    elif index == 0 and current_checkpoint_index == checkpoints.size() - 1:
        complete_lap()

3. Race Manager

high-level state machine.

# race_manager.gd
enum State { COUNTDOWN, RACING, FINISHED }
var current_state: State = State.COUNTDOWN

func start_race() -> void:
    # 3.. 2.. 1.. GO!
    await countdown()
    current_state = State.RACING
    start_timer()

Key Mechanics Implementation

Drifting

Arcade drifting usually involves faking physics. Reduce friction or apply a sideways force.

func apply_drift_mechanic() -> void:
    if is_drifting:
        # Reduce sideways traction
        wheel_friction_slip = 1.0 
        # Add slight forward boost on exit
    else:
        wheel_friction_slip = 3.0 # High grip

Rubber Banding AI

Keep the race competitive by adjusting AI speed based on player distance.

func update_ai_speed(ai_car: VehicleBody3D, player: VehicleBody3D) -> void:
    var dist = ai_car.global_position.distance_to(player.global_position)
    if ai_car_is_ahead_of_player(ai_car, player):
        ai_car.max_speed = base_speed * 0.9 # Slow down
    else:
        ai_car.max_speed = base_speed * 1.1 # Speed up

Godot-Specific Tips

  • VehicleBody3D: Godot's built-in node for vehicle physics. It's decent for arcade, but for sims, you might want a custom RayCast suspension.
  • Path3D / PathFollow3D: Excellent for simple AI traffic or fixed-path racers (on-rails).
  • AudioBus: Use the Doppler effect on the AudioListener for realistic passing sounds.
  • SubViewport: Use for the rear-view mirror or minimap texture.

Common Pitfalls

1. Floaty Physics: Cars feel like they are on ice. Fix: Increase gravity scale (2x-3x) and adjust wheel friction. Realism < Fun. 2. Bad Camera: Camera is rigidly attached to the car. Fix: Use a Marker3D with a lerp script to follow the car smoothly with a slight delay. 3. Tunnel Vision: No sense of speed. Fix: Increase FOV as speed increases, add camera shake, wind lines, and motion blur.

Advanced Racing Meta-Systems

Elite implementation of competitive integrity, aerodynamics, and auditory realism.

1. Drift-Boost (Mini-Turbo)

Implement a drift-boost mechanic by accumulating a charge variable during the _physics_process() callback while the player is in a drift state. Upon release, apply a burst of speed using apply_central_impulse() on the RigidBody3D (or VehicleBody3D), creating the classic arcade "Mini-Turbo" effect.

class_name DriftBoostSystem extends Node

var drift_charge: float = 0.0
const BOOST_MULTIPLIER = 1000.0

func _physics_process(delta: float) -> void:
    if owner.is_drifting:
        drift_charge += delta
    elif drift_charge > 0:
        execute_boost()

func execute_boost() -> void:
    var boost_force := owner.global_transform.basis.z * (drift_charge * BOOST_MULTIPLIER)
    owner.apply_central_impulse(boost_force)
    drift_charge = 0.0

2. Tire-Smoke Particles

Attach a GPUParticles3D node to each wheel and toggle the emitting property based on the wheel's traction state. This provides immediate visual feedback for drifting, burnouts, and high-speed braking.

class_name TireSmokeManager extends Node3D

@export var smoke_particles: GPUParticles3D
@export var wheel: VehicleWheel3D

func _process(_delta: float) -> void:
    # Emit smoke if the wheel is slipping significantly
    smoke_particles.emitting = wheel.get_skidinfo() < 0.5

3. Replay-Ghost Binary Storage

For high-performance ghost car replays, convert positional and rotational data into a PackedVector2Array or use Godot's binary .res format via ResourceSaver. This is significantly faster and more compact than text-based formats for storing frame-by-frame data.

class_name GhostRecorder extends Node

var frame_data: PackedVector3Array = []

func record_frame(pos: Vector3) -> void:
    frame_data.append(pos)

func save_ghost_binary(path: String) -> void:
    var file := FileAccess.open(path, FileAccess.WRITE)
    if file:
        file.store_var(frame_data) # Binary Variant serialization
        file.close()

Architectural Tip: When implementing Drift-Boost, use a Tween to briefly increase the Camera FOV during the boost to enhance the sense of sudden acceleration.

Reference

  • Master Skill: godot-master

Reference

  • Master Skill: godot-master

Related skills

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.