main = 6c92c844,每条带文件路径 / 分支 / 提交号,可自己核)|
排期母文档 Docs/roadmap/2026-09-roadmap.mdmain 的清单会把它们显示成「零实现」并据此派活,那是错的;
可反过来也成立:没合进 main 的东西在 09-17 内容锁定那天就是不存在。main,而 main 读不出「已经做完但没合」。
09-06 那一版就带着这一节,它当时抓到的问题今天更严重——release 侧四条全在飞,其中两条从 09-10 起就没再动。| 在飞的东西 | 分支 / 最后动作 | 已经做完的 | 还差什么(09-17 前要落地的) |
|---|---|---|---|
| IAP 全链 + StoreKit 在飞 唐奕新 YiXin Tang (09-13 Glenn 更正; roadmap 2.4 写的 Glenn 已过期) |
thread/tf-a60cb3 09-12 |
com.unity.purchasing 5.4.3 进 manifest · TDAppleStorePlatform.cs 真接 StoreKit(取商品 / 本地化价格 / 购买 / 恢复 / 启动读既有交易 / 先发权益再确认 pending order)· BillingMode.json · scripts/asc_create_iap.mjs ·
机器门 webgl_td_paywall_gate.mjs 13 条断言跑在真实部署包上 ·
ASC 商品已建齐:$4.99 / 简中+英文文案 / 175 地区 / 审核截图 / 状态 READY_TO_SUBMIT ·
TestFlight 包 1.0.0 (20260908151403) 已过 Apple 处理(VALID) |
① 合进 main(这是 09-17 硬门里最大的一块) ② 真人拿沙盒账号在真机跑一次购买 + 一次恢复购买——分支文档自己写着「自动门不能替代真实 Apple ID 的付款弹窗」 ③ build_ios.sh 还写死读 ~/.appstoreconnect,用椰岛新实体出包要加 config 目录开关(已知未做的口子) |
| 音频全套 在飞 roadmap 3.3 · Wesley |
thread/t-a0f9c3…1e9611 09-13 |
28 个命名音位(arrow / ballista / boss / build / button / coin / crowd / defeat / denied / early / final / fire / heavy / hold / hold_done / hold_loop / horn / ice / late / leak / menu / night / perk / rain / ship / victory / wavehorn / wipe)+ 81 个候选 wav ·
每音位音量已调(Audio/Review/manifest.json)· StreamingAssets/audio-credits.json 逐条记来源 / 作者 / 许可 URL(正是判据要的「版权来源可追溯」)·
引擎已接线(TDAudio.Review.cs + TDSim/TDFlow/TDGame/TDUI/TDCampaignUI) |
① Wesley 把试听台这一轮审完(09-12 首轮寒冰与漏怪被全否,09-13 改「只用免费素材」+ 固定批次) ② 合进 main —— 音频是进包的东西,09-17 之后进不去 ③ 目标写的是 BGM 2 + SFX 12,现在 28 个音位超了;口径要不要按实际改一下 |
| 年龄分级问卷 已完成(在 ASC 上) 不可降级 8 项之一 |
thread/app-store-age- rating-questionnai-e3f7a6 09-10 |
已应用并回读验证(2026-09-10):全球 13+,巴西与韩国 12+,越南 16+。
走 scripts/asc_age_rating.mjs 脚本填 + 回读,答案存 scripts/age_rating_rometd.json,内容变了重跑 plan 会 diff 出来 |
只差把记录合进 main(ASC 那边已经是真的了)。内容一改就要重跑 plan——这周还在加船、加登陆、加音频 |
| Android / Google Play 线 在飞 |
thread/w-google-play- ea7587 09-10 |
锁定 bundle id com.bajiao.rometd · 每次 Android 构建同时出 .aab 与 .apk · play_publish.py / play_verify.py / release_preflight.py / build_android_td.sh |
Play 不是本月硬承诺(iOS 为主)。但它顺手改了 ProjectSettings 的 bundle id,而 main 上现在还是 idle 遗留的 com.bajiao.civ——这一处早晚要合,别让两条分支各改一遍 |
| 两批 UI 重做(05ec / 0070) 连分支都没推 |
仅本地工作区 09-10 / 09-12 |
选关页紧凑地标大道 / 等大金纹卡 / 原生上边栏 / 两颗圆润星 / 手指拖动与背景视差;基础 UI 按塔库程序框扩到主菜单、选关、关卡详情 | 这是最危险的一类:不在 main,也不在任何远端分支,只在某台机器的工作区里。 spec §1 自己写着「尚未提交」「当前为本地未提交实现」。09-17 之后合进来就算新功能,要 Wesley 单条批准 |
scripts/app_privacy_rometd.json 答案是 collectsData: false → 标签「Data Not Collected」,
理由里逐条写着「没有任何第三方 SDK」「Assets/Scripts/TD 里没有任何远端主机」。main 上(09-09 客户端 / 09-10 接收端两条决策)数数已经接好并在上报:
StreamingAssets/thinkingdata_td.json 里 appid 与 serverUrl: https://ta2.cisgames.cn 都填好、disabled: false,
TDAnalytics.cs 带匿名设备 id POST 出去。这就是 Apple 定义的「收集」。invalidates_this_answer 第一条就是「Adding any analytics, ads, attribution, crash-reporting or remote-config SDK」。scripts/app_privacy_check.py 跑当前 main,
五项全 ok、退出码 0、打印「'Data Not Collected' still holds」。
原因是那道门只扫 .cs 里的字面 URL(if "http://" not in line and "https://" not in line),
而数数的地址按本项目「数值外置到 JSON」的惯例放在 StreamingAssets 里。
门的盲区恰好是这个仓库自己的写法。PrivacyInfo.xcprivacy;
(b) 首发关掉数数——把 disabled 置真、答案保持不变。
虚假申报是会被下架的那一类问题,不是会被驳回重交的那一类。
顺带:那道门也该补一条扫 StreamingAssets/*.json。PrivacyInfo.xcprivacy——全仓 0 个文件,而它是进包的,吃 09-17 死线。
分支上的答案文件自己记了该怎么做:PlayerPrefs 属于 required-reason API(NSPrivacyAccessedAPICategoryUserDefaults,理由 CA92.1),
并且要先看 Unity 6000.5 往生成的 Xcode 工程里写了什么再决定要不要手写。xcprivacy。
09-10 那条决策把 xcprivacy 划给了工程侧、只把问卷给 YQM——这条口径以 Glenn 09-13 的为准,
整块不再分家,因为 App Privacy 答案与 xcprivacy 必须列同一份数据类型,拆给两拨人正是它们会对不上的原因。numbers_td.json / TDCampaign.cs 里游戏真正会去加载的 id 逐个核文件,四类全齐:
12 关壁画 12/12(UI/Campaign/Fresco/fresco_<id>.png)·
升级项配饰 18/18(9 个可放置物 × 2 项,Perks/perk_<tower>_<perk>.png,同塔两项不共用)·
对话立绘 14/14(StreamingAssets/portraits/,实测是真 PNG、420×524、带 alpha,不是 LFS 指针)·
9 个可放置物本体全部有画。运行时 PNG 合计 316 张。GruntWalk8fps / RunnerRun8fps / ArmoredWalk8fps / DrummerMarch8fps /
DruidWalk8fps / ChariotRide8fps / BossWalk8fps),运兵船另有
TransportRow6fps + TransportSink6fps。
TDSpriteMap 的循环登记表里只有 7 条,没有 berserker——它有一张画得好好的静态图,
所以不缺文件、不报错、截图里完全正常,但它在场上是滑行的。TDRainSceneEffect + RomanTDRainOverlay.shader),
TDData.cs:1212 直接写着「PLACEHOLDER —— 黛尔's version wins if she ships one」。
09-11 已有决策:黛尔一提交就整层替换,不合并、不留 fallback,换的只是一个 component 加一个 shader,规则/波次/徽条全不动。
这条的风险是它看起来还行——决策原文就说,下一个人会默认它是既成事实。mudpit 的本体是程序画的地面斑块(MirePatchSprite);
民房只留 tower_house_1 是 09-10 作者主动砍掉 2/3/4 款的结果。publish_web_build,Cloudflare 只做回退),
实测单个 data 35.8 MiB 可发,那条上限不再卡看包通道。
② 年龄分级:09-10 已在 ASC 上应用并回读验证,13+。
Docs/decisions/2026-09-07-minigrove-default-delivery-for-panel-sessions.md · scripts/age_rating_rometd.json(分支)numbers_td.json 的 towers 实有 9 条不是 10 条,且不能全叫「塔」——按 attackKind 分:
5 座开火塔(arrow/cannon/ice/ballista/greekfire)· 1 个经济建筑(house,yield)· 1 个辅助(brazier,beacon,0 伤害)· 2 个陷阱(spikes trap / mudpit mire)。
对判据是好消息:目标 6 塔,实有 9 个可放置物。1.0.0 (20260908151403)(09-08,VALID);
口头传的 20260912170939 全仓 grep 不到——分支 09-12 还在动,很可能是那天又传了一个但没落记录。请上传的人确认一句是哪个,它决定 09-25 的 L2 会不会落下。TDPaywall.ProductId 在 main 上还是 com.bajiao.romantd.fullcampaign,
而分支上已改成 com.bajiao.rometd.fullunlock 并注明「旧占位 id 作废」。ASC 上建的是新的那个。合并前别拿 main 上这个 id 去对 ASC。transport,配套海上航道 / 桥梁 / 登陆点(09-07 桥梁、09-13 船 04 网格航道、09-13 后期分段登陆)。目标 8 含 boss,已超MaxStars = 2):把上面那条的区分度问题又压了一档waveGapSeconds = 5.0):堵住「清得慢 = 挣得多」的经济漏洞;波表未随之重配c6f30686),页面 lede 一直写着「本周 08-31 → 09-06」,整个 W2 没进过这里。
线上那一版还带着 09-06 的收官读数,但它从没被提交进仓库——所以连「上次写了什么」都得去线上扒。这一版起:本周区块 = W3,每条带可核对的证据,并且这份 HTML 就在 main 上。
Marketing/ 里最后一次真实活动是 08-20 的 idle 赛马,RomanTD 的投放侧到今天是零。| 时间 | 做什么 | 谁 | 为什么是这个时间 |
|---|---|---|---|
| 09-13 → 09-15 本周 |
App Store 商店页文案与元数据草案(EN 主 ZH 次)+ ASO 关键词池 | YQM | 已从 W3 尾提前到这里——名字赛马 09-15 起盘要用它的素材,不提前链条会断 |
| 09-15 起盘 |
游戏名买量赛马:每个名字一个 campaign / CA / LINK_CLICKS / 1d 点击 + 0 浏览 / 双帽 / Day1 $20 阶梯 / meta_guard 白名单 / race_report.py manifest | YQM | 倒推来的:名字 09-21 前必须定死 → 09-19/20 收盘 → 09-15 起盘。两个前置:候选名先过 App Store 重名/近似名与商标检索;素材必须单变量(只换名字、其余逐字一致),否则测的是素材不是名字。花钱授权是人类门 |
| 09-17 | Day-0 数据口径 + 埋点清单 | YQM | 市场侧唯一吃内容锁定死线的一条——要进包的埋点,09-17 之后进不去。和 App Privacy 那个决定是同一枚硬币的两面 |
| 09-19 → 09-20 | 赛马收盘 + 出报告 | YQM | 收盘走现成脚本 race_report.py <manifest>,不新造流水线 |
| 09-21 硬死线 | 游戏名定死 | Wesley 拍板 | 图标、5 张截图、关键词表全挂在名字上,W4 上架素材 09-21 开工 |
| W4 · 09-21 → | 上架素材:图标 / 5 张竖版截图 / 30 秒预览视频(脚本与分镜 YQM 出,执行 Daier) | Daier + YQM | 09-03 例会把 marketing materials 推到 W4;旧图标 A 与假门素材作废重出 |
| W5 · 09-28 → | 发布前投放素材准备 · Day-0 看板就位 | Wesley | roadmap 4.4 / 5.4 |
Docs/ai-context/marketing.md——它现在还停在 idle / Romanpunk 框架(最后复核 08-26),
任何 AI 接市场任务都会先读到这份过期的东西。| 触发日 | 级别 | 砍什么 | 按 09-13 实测会不会触发 |
|---|---|---|---|
| 09-17 内容未锁 |
L1 | 12 关 → 9 关 · 3 图 → 2 图 · 6 塔 → 5 塔 · 8 敌 → 6 敌 | 内容量这一侧不会触发。 12 关(TDCampaign.cs 12 个 TDLevelDef)· 9 个可放置物 · 9 种敌人,三项全部超过阶梯目标。
「3 图」这个口径已作废——现在是 12 关各自一张地图,不是 3 图 × 4 关。真正的 L1 风险不在内容量,在「锁」这个动作:在飞的四条 + 两批本地 UI 没合进来,锁了也是锁了个残缺包。 |
| 09-25 未出 TestFlight |
L2 | 砍中文(纯英文首发)· 音频只留核心 SFX · 教程降为一张静态图 | 中文与教程这两刀已经没有意义:双语 522/522 键完全对齐、教程覆盖第 1–3 关都已在 main。
音频那一刀也不必了——分支上是 28 个音位不是 12 个。 TestFlight 09-08 已有 VALID 包,若 09-25 前能把在飞的合进来再出一个,L2 触发条件解除。 |