@@ -238,13 +238,13 @@ export function createDonny(scene, gradientMap) { |
| 238 | 238 | // Rise from the water |
| 239 | 239 | const emergeProgress = Math.min(state.timer / 1.5, 1) |
| 240 | 240 | const easeOut = 1 - Math.pow(1 - emergeProgress, 3) |
| 241 | | - group.position.y = -2 + easeOut * 2.5 // Rise higher out of water |
| 241 | + group.position.y = -2 + easeOut * 2.25 // Rise higher out of water (10% less) |
| 242 | 242 | |
| 243 | 243 | // Slowly turn toward Doug - lugubrious, not laser tracking |
| 244 | 244 | group.rotation.y = lerpAngle(group.rotation.y, angleToDoug, delta * 0.5) |
| 245 | 245 | |
| 246 | | - // Tilt nose UP ~55 degrees - rotate around Z since model faces +X |
| 247 | | - group.rotation.z = 0.95 * easeOut |
| 246 | + // Tilt nose UP ~50 degrees - rotate around Z since model faces +X (8% less) |
| 247 | + group.rotation.z = 0.87 * easeOut |
| 248 | 248 | |
| 249 | 249 | // Gentle side-to-side rocking |
| 250 | 250 | group.rotation.x = Math.sin(state.timer * 4) * 0.06 |
@@ -257,14 +257,14 @@ export function createDonny(scene, gradientMap) { |
| 257 | 257 | break |
| 258 | 258 | |
| 259 | 259 | case 'surfaced': |
| 260 | | - // Bob gently, positioned higher |
| 261 | | - group.position.y = 0.5 + Math.sin(elapsed * 2) * 0.06 |
| 260 | + // Bob gently, positioned at adjusted height |
| 261 | + group.position.y = 0.25 + Math.sin(elapsed * 2) * 0.06 |
| 262 | 262 | |
| 263 | 263 | // Slowly turn toward Doug |
| 264 | 264 | group.rotation.y = lerpAngle(group.rotation.y, angleToDoug, delta * 0.3) |
| 265 | 265 | |
| 266 | | - // Keep steep tilt ~55 degrees - nose up, tail in water |
| 267 | | - group.rotation.z = 0.95 + Math.sin(elapsed * 1.5) * 0.04 |
| 266 | + // Keep tilt ~50 degrees - nose up, tail in water |
| 267 | + group.rotation.z = 0.87 + Math.sin(elapsed * 1.5) * 0.04 |
| 268 | 268 | |
| 269 | 269 | // Gentle side-to-side rocking |
| 270 | 270 | group.rotation.x = Math.sin(elapsed * 1.5) * 0.03 |
@@ -291,10 +291,10 @@ export function createDonny(scene, gradientMap) { |
| 291 | 291 | // Sink back down |
| 292 | 292 | const submergeProgress = Math.min(state.timer / 1.2, 1) |
| 293 | 293 | const easeIn = Math.pow(submergeProgress, 2) |
| 294 | | - group.position.y = 0.5 - easeIn * 2.7 |
| 294 | + group.position.y = 0.25 - easeIn * 2.5 |
| 295 | 295 | |
| 296 | 296 | // Tilt nose down as diving back under |
| 297 | | - group.rotation.z = 0.95 - easeIn * 1.2 |
| 297 | + group.rotation.z = 0.87 - easeIn * 1.1 |
| 298 | 298 | |
| 299 | 299 | // Add bubbles/ripples as submerging |
| 300 | 300 | if (Math.random() < delta * 4) { |