# Rooster Rush：给其他 Agent 的复现提示词

独立实现Three.js侧视公鸡平台游戏。保留本目录index.html完整静态CSS/招聘风开场文案，素材../../rooster-rush-game/assets/rooster.glb，vendor用同目录Three/GLTFLoader。不能读旧JS。独立组织确定性关卡、物理模型、场景渲染和输入。当前分数满10000仅使进度100%，没有真实招聘邮箱弹出逻辑，保持现有功能。

## 视觉场景
renderer antialias、DPR<=2、shadowMap enabled、outputEncoding sRGB。背景Canvas4×512渐变#f9d8ac→#fff8e9；Fog#f9e7c7近60远130，PerspectiveCamera42/W:H/.1/200。Hemisphere(#fff5df,#77502e,.65)，Directional#fff3d6/1.05@(8,18,10)，shadow1024方、正交边±30。远景三个Plane(w*6,5)，z/色/w分别−26/#d4c2a1/44、−40/#e4d1b0/60、−56/#eddcbf/80，位置(0,−4,z)。

材质MeshStandard：ground#bd7b43/.95rough，dirt#a1673a/1，platform#c98b4b/.9，qblock#f5c542/.6rough/.1metal，qspent#8a7a5c/.9，pipe#2fa86a/.7，coin#ffd23f/emissive#a8760a/.35rough/.5metal，enemy#b2472f/.8。地块Box(w,h,4)，中心(x,topY−h/2,0)、非ground投影、全部接影；ground另加Box(w,h,3.6)中心y再−.55、dirt材质。金币Cylinder(.34,.34,.1,20)、rotateXπ/2、投影；敌人Sphere(.44,18,14)、初始y.44、投影。

5团云：每团4个Sphere(1+j%2*.5,12,8)、#fff5e7/rough1、scale(1.4,.6,.5)、局部位置(j*1.2,sin(j)*.4,0)，团位置(−24+k*14,16+k%2*4,−18)。小屋墙Box(3.6,3.4,3)/#b98747/y1.7，屋顶Cone(3,1.5,4)/#951d1c/rotateYπ/4/y4，整屋(−13,0,−2)。

公鸡模型所有mesh投影/接影，按bbox高度缩到1.6，模型自身y减bbox.min.y*scale，放入holder；第一条GLTF动画循环，mixer每帧dt。未加载时白球Sphere(.55,18,14)替身立即可玩，成功后移除。身体位置(player.x,player.y+[替身?.8:0],0)，朝右rotateYπ/2、左−π/2。腾空上升stretch=1+min(.18,vy/60)，下降=1+min(.12,−vy/80)，地面1；squash=地面1否则max(.88,2−stretch)，scale(squash,stretch,squash)。

相机每帧x+=(player.x−x)*.12，y+=(max(11.2,player.y+4)−y)*.08，z=W<768?25:30，lookAt(cam.x,cam.y−1.6,0)；sun跟随cam.x+8，target(cam.x,0,0)。保留开场Playfair大字、暖色UI、右侧淡色进度与手机触控CSS。

## 确定性地形
初始nextX=−10/index0，保留玩家前80世界单位，段nextX<player.x−40时移除。每段seed=(index+1)*1234567，mulberry32：a+=0x6d2b79f5|0，t=imul(a^(a>>>15),1|a)，t=(t+imul(t^(t>>>7),61|t))^t，返回((t^(t>>>14))>>>0)/4294967296。前2段flat，其他用一个单独同seed生成器首数选类型；实际段随机序列另从同seed开头消费。类型数组：[flat,step-up,step-down,gap,platform,double-gap,enemy-flat,enemy-flat,enemy-flat,tower,qblock-row,qblock-row,pipe,pipe]。

地面高h12，top默认0，以下x为滚动游标：flat长16中心x+8，random>.5放金币(x+6,2.2)/(x+8,2.6)/(x+10,2.2)；step-up长10平地后长8/top1.6，金币第二段中心y3.2；step-down先8/top1.6再10平地；gap先10地面、金币坑中(x+2,2.4)，游标跨4，再10地面；double-gap先8地面、跨3.4、6地面/中心金币y2.6、再跨3.4、10地面（x累加6和3.4分两步）。platform长16地面，中心(x+8,top4.2,w5,h.8)悬台，金币x+7/8/9、y5.2。enemy-flat长16、n=1+floor(2random)，敌人x+16/(n+1)*(i+1)、vx=−2.2−1.4random。tower先4地面，再2/top2、中心金币y3.6，再10平地。qblock-row长16平地，n=2+floor(2random)、lucky=floor(random*n)，砖x+16/(n+1)*(i+1)、top4.5、w/h1.4，幸运star其余coin。pipe先6平地，水管中心x+.85、top2.2/w1.7/h4.2，金币x+.85/y4，游标跨2.1再8平地。ID保留g-/c-/e-/p-/q-/pipe-前缀+段号/项号。

## 物理与状态
player初始x/y/vx/vy0，groundedfalse/coyote0/buffered0/facing1/alivetrue；runningfalse、score0。dt首帧.016，其后min(.033,秒差)。仅running&&alive模拟。跑速9.5、加速度70、摩擦18：有方向时vx向目标速度每帧最多70dt，无方向按18dt减速。方向更新facing。coyote=grounded?.1:max(0,coyote−dt)；jumpFlag时buffered=.12并清flag，否则衰减；buffered>0且coyote>0时vy19.5、离地、清两计时。若松跳且vy>0，vy*=1−.55dt*8，再vy−=45dt。

附近solid筛abs(b.x−player.x)<14（移动前）。碰撞盒横±.45、底y/顶y+1.6。先x+=vxdt，严格AABB交叠时按vx符号推到砖边±.45、vx0；再y+=vydt、groundedfalse，AABB交叠上升顶头→y=砖底−1.6/vy0，下降→y=top/vy0/groundedtrue。qblock首次顶头置hit、换qspent、star加5否则1分，mesh y+.12后90ms减回。

金币只要abs(c.x−player.x)<1.1且abs(c.y−(player.y+.8))<1.2即collected、移除、加1。敌人x+=vxdt，若不在本段任一ground左右各内缩.3的范围则反转vx（不修正x）；显示y=.44+abs(sin(now/200))*.06。敌人dx<.8且abs(player.y−.5)<1.2时，如果vy<0且player.y−.88>−.1则踩死、vy12、加2，否则死亡。player.y<−8也死亡。按原顺序跑完该帧后prune地形，不提前break敌人遍历。

A/D或左右键持续跑；Space/Up/W preventDefault、jumpPressed/jumpFlag=true并start；keyup清jumpPressed。R reset。触控left/right/jump pointerdown同键盘，up/leave释放。开场按钮start并jumpFlag=true。死亡runningfalse/alivefalse，overlay移除intro，标题Game over、文本显示得分/重开说明、按钮Run again；按钮此后先start+flag再reset。reset移除关卡、重置x/y/vx/vy/alive/score/nextX/index，重新生成、隐藏overlay、runningtrue，其他coyote/grounded/输入状态按原值保留。progress=min(100,floor(score/100))%。清理计时器、GPU资源、事件/rAF。

验收：../scripts/check-rooster-rush.mjs先对照128段完整地形，再在1440×1000/390×844下比较受控16ms帧。覆盖开场、启动、右跑+按跳320ms/松跳320ms、摩擦、测试夹具顶问号砖与踩敌、跌落死亡、按钮重开和触控。测试夹具只在测试注入，不出现在产品。物理状态、得分、关卡/角色/相机几何均一致，截图逐像素一致。

## 本地图片与中英文（2026-09-21 更新）

本轮已接入本地公开图片和中英双语。复现时同时遵循 [共享规范](../../shared/README.md)：沿用当前本地图片路径，使用共享词典与语言偏好（`zh` / `en`），覆盖动态内容、辅助标签和 Canvas 文字；不要恢复旧的远程图片链接。中文拆字标题应先翻译再拆分，并保持原有动画机制。图片来源与替换映射在共享规范中列出。
