Skip to content

Commit 11692c6

Browse files
rodrigofalcoclaude
andcommitted
fix: Improved cornering physics for better archetype balance
- Speeders now brake harder before corners (visibly slow down) - Turners maintain speed through corners more effectively - Added sharp corner detection with different braking behavior - Speeders lose more time in sharp corners vs turners 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent de63c5a commit 11692c6

1 file changed

Lines changed: 32 additions & 10 deletions

File tree

src/engine/physics.js

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,40 @@ export class PhysicsEngine {
109109
while (angDiff <= -Math.PI) angDiff += Math.PI * 2;
110110
while (angDiff > Math.PI) angDiff -= Math.PI * 2;
111111

112-
// Detect if we're in a corner (significant angle change needed)
113-
const isCorner = Math.abs(angDiff) > 0.15;
112+
// Detect corner intensity (0 = straight, higher = sharper turn)
113+
const cornerIntensity = Math.abs(angDiff);
114+
const isCorner = cornerIntensity > 0.12;
115+
const isSharpCorner = cornerIntensity > 0.25;
114116

115-
// Apply cornering speed penalty/bonus based on archetype
117+
// Apply cornering speed based on archetype
118+
// Speeders MUST brake hard before corners, turners maintain speed
116119
if (isCorner && !racer.finished) {
117-
const corneringSpeed = racer.currentSpeed * cornerMult;
118-
// Turners maintain speed, speeders slow down
119-
if (cornerMult < 1.0) {
120-
racer.currentSpeed = Math.max(corneringSpeed, racer.currentSpeed * 0.98);
121-
} else if (cornerMult > 1.0) {
122-
// Turners can accelerate slightly through corners
123-
racer.currentSpeed = Math.min(maxSpeed, racer.currentSpeed * 1.01);
120+
// Calculate target corner speed based on archetype
121+
// Lower cornerMult = needs to slow down more
122+
const cornerSpeedFactor = 0.7 + (cornerMult * 0.25); // 0.7-0.95 range
123+
const targetCornerSpeed = maxSpeed * cornerSpeedFactor;
124+
125+
if (isSharpCorner) {
126+
// Sharp corners: everyone slows, but speeders slow much more
127+
const sharpBrakeFactor = 0.85 + (cornerMult * 0.12); // 0.85-0.97
128+
racer.currentSpeed *= sharpBrakeFactor;
129+
130+
// Speeders brake even harder in sharp corners
131+
if (cornerMult < 1.0) {
132+
racer.currentSpeed *= 0.94;
133+
}
134+
} else {
135+
// Normal corners
136+
if (cornerMult < 1.0) {
137+
// Speeders: brake before the corner
138+
racer.currentSpeed = Math.min(racer.currentSpeed, targetCornerSpeed);
139+
racer.currentSpeed *= 0.97;
140+
} else if (cornerMult > 1.0) {
141+
// Turners: maintain or slightly increase speed through corners
142+
if (racer.currentSpeed < targetCornerSpeed) {
143+
racer.currentSpeed += normalAccel * 0.5;
144+
}
145+
}
124146
}
125147
}
126148

0 commit comments

Comments
 (0)