致敬老宝可梦游戏,而不借用它们
《金·银·水晶》把玩家走的每一步都送进同一个例程:每 256 步让同行队伍里的蛋向孵化推进一格,每 512 步提升队伍的亲密度,每 4 步对中毒的宝可梦造成伤害。《绿宝石》按实时时钟分四个阶段培育树果,从种下到结果需要 4 到 96 小时,还让一句两个词的说法每天浮动 5 分,并在存档与存档之间传播。1234 这些是机制,而致敬作品可以保留的正是机制。不能保留的东西,记录已经说明了:在这份记录里,2016 年至 2024 年间被下架、或在收到下架通知后被撤下的同人游戏、工具包和论坛,无一例外都建立在宝可梦自己的名称、美术或代码之上,或者链接到了这样的游戏;5678 而唯一一起围绕机制打的官司,即 2024 年 9 月 18 日在东京提起的 Palworld 诉讼,所依据的专利,其权利要求要求的是瞄准并投掷捕获道具、显示捕获可能性的指示,或在半空中骑上可骑乘角色。910111213 于是我为了看清系统而读了四份反编译代码,为了看清界线而读了权利要求和法院相关报道,然后为我们的 app Kiradex 写了一份简报:保留行走、时钟、卡片、单向落差、每周展厅和会传播的说法,而其中每一个像素、每一个词、每一个数字都由我们自己绘制。
TL;DR
- 行走就是货币。 两套引擎都把大地图上的每一步送进同一个函数,蛋、亲密度、中毒、除虫喷雾、狩猎地带和再战都在监听它。节拍很粗(4、128、256 和 512 步),所以奖励以“事件”的形式到来;预算按步数而不是秒数来花:一次狩猎地带 500 步,三种除虫喷雾分别是 100、200 和 250 步。1214151617
- 时钟给了一周形状。 《水晶》把一天切在 4 点、10 点和 18 点,在周二、周四和周六举办 20 分钟的捕虫大赛,每周五抽一次幸运号码并与您拥有的每一只宝可梦比对,并在午夜重置 16 个每日标志;《绿宝石》在日期变化时运行十一项更新,并在您回来时按流逝的分钟数让树果生长。18192021223
- 地位是给别人看的。 《绿宝石》的训练家卡片每多一颗星就换一种颜色,四颗星各对应一种不同的玩法;一个箱子以 6×5 的网格装 30 只;对战开拓区的对战塔、对战宫殿、对战竞技场或对战工厂的一轮挑战是 7 场(对战巨蛋的一次锦标赛是 4 场,对战管道一轮是 14 个房间,对战金字塔一次攀登是 7 层),而对战塔的开拓区首脑(Frontier Brain)出现在连胜的第 35 场和第 70 场。232425
- 别人的世界来到了您的世界。 记录交换(record mixing)在存档之间复制 5,188 字节:20 个秘密基地、25 个电视节目栏位(其中 20 个专门留给只能通过这种方式到来的节目)、5 个流行语(trendy phrase),以及一份对战塔记录;每五名玩家中就有一人一开始遇到的是追潮流的人(Hipster),他每次到来都会教您一个隐藏词。262728
- 著作权、商标和专利是三条不同的线。 Uranium 的开发者在 2016 年表示没有任何人直接联系过他们,并在收到下架通知后撤下了游戏;Prism 在 2016 年 12 月 21 日收到了停止侵权函;Relic Castle 在 2024 年 3 月据报道收到 DMCA 通知后下线;Palworld 是唯一的专利案件,2025 年 11 月被缩窄到游戏的旧版本,禁令请求仍在,截至 2026 年 10 月 4 日没有任何裁决的报道。5682930
- 致敬游戏保留了类型,丢掉了名字。 我查看了六款致敬游戏和 Palworld 的 Steam 商店说明,没有一款写了“Pokémon”;它们的开发者在采访中则毫不避讳地提到这个名字,把它当作影响来源。3132
- 这对 Kiradex 意味着什么。 一份简报,而不是一个构建版本:窗台上的一盆植物,在广场上每走 256 步就长一截;一个按 app 自身时钟送达的早晨木箱;收藏者卡片上的四颗星;路线上的一道单向落差(由讨论高低差和路线的文章来决定);每周展厅每参加七次就得一枚玫瑰徽章;以及一句在广场之间传播的两个词的说法。每一项都写明了不得相似的东西和一项测试可以执行的检查,另附一份 app 绝不能做的事情清单。读了四项专利,没有就计步器或时钟做专利检索,也没有咨询律师:这是一名开发者的解读,不是法律意见。33
1. “那种感觉”由什么构成,我又是怎么测量的
这篇文章写的不是《红》《金》或《红宝石》里的生物,而是它们周围的那些时刻:回家路上孵出的蛋,周五的广播节目,变成金色的卡片,用连接线玩了一个下午之后出现在您自己游戏里的朋友的秘密基地。这些时刻都是系统,而这篇文章讲的就是系统。本系列此前的文章测量了图块、人物和建筑;这一篇测量的是那些让口袋里的世界在卡带关机时仍显得活着的循环,然后阅读围绕那些深爱这些游戏的作品的法律记录,最后写下我们的小镇可以借用什么、不能借用什么。343536
Kiradex 是一款卡牌扫描 app,旁边有一座像素小镇 Kiradex World:一个由 16 像素图块铺成的广场,收藏者们在其中走动、说预设台词、展示自己的卡片。34 它扫描的是真正的宝可梦卡牌,这正是这篇文章必须小心的原因。app 自己的规则在这项研究之前就写好了,已经规定“nothing of theirs in the world”(世界里不放任何属于他们的东西):没有生物,没有训练家,没有捕获装置,没有道馆或徽章设计,没有音乐,没有“Poké-”开头的名字。37 这篇文章回答的是下一个问题:像我们这样的小镇,可以从那么多收藏者从小玩到大的游戏里拿走什么?我们又怎么知道?
方法
前半部分是从源代码而不是 wiki 中读出来的;只有关于宝可全能竞技赛的那一段是例外,文中已注明。pret 项目维护着 Game Boy 和 Game Boy Advance 游戏的反编译:能重新构建出每款游戏的 C 和汇编代码,README 列出了它所复现的每个 ROM 的 SHA-1,游戏的常量都有名字,有些地方还带着逆向工程者写的注释。我用了其中四个仓库的浅克隆,各取 master 分支上的一个提交:pokered 取 d2704a6(2026 年 9 月 22 日提交),pokecrystal 取 5beda23(9 月 29 日),pokeemerald 取 731ad5b(10 月 1 日),pokefirered 取 037335f(9 月 26 日)。38 一个名为 measure_systems.py 的脚本会打印第 2 至第 6 节引用的每一个常量及其文件和行号,并推导出各项计数(43 种树果每个阶段的时长、电话和再战栏位、电视节目种类、每日标志);另一个脚本 measure_map_features.py 遍历《绿宝石》的每一张地图,把每个布局的格子与其图块集的属性表对照,按地图类型统计落差格、自行车专用格、长草格以及可用居合劈砍倒的树。3839 这两个脚本得出的数字是测量值;关于什么在何时触发的描述,是我对这些数字所指向的代码路径的解读。凡是反编译代码带有注释的地方,我也读了注释所描述的代码,因为两者可能不一致:在《水晶》的步数例程里,调用方的注释说亲密度每 256 步上升一次,而被调用的例程每两次调用才动作一次,所以第 2 节以代码为准。2 《红宝石·蓝宝石》不在这些克隆中;本文凡是谈到它们的地方,都是从《绿宝石》和《火红》中解读《红宝石》或《蓝宝石》存档的代码里读出来的。23
后半部分是在 2026 年 10 月 4 日抓取并保存的:任天堂和 The Pokémon Company 自己的新闻稿和规则页面、Pocketpair 的公告、来自 Google Patents 的三项日本专利和一项美国专利(日本的权利要求附 Google 的英文机器翻译,美国的权利要求用专利本身的英文)、六款致敬游戏和 Palworld 的 Steam 商店记录,以及有署名媒体注明日期的报道。第 7 至第 11 节的每一项主张都注明了出处是哪份文件或哪家媒体。凡是无法访问的页面,我都说明了。凡是我自己得出的结论,都标明是我的结论。
本文的任何内容都不是法律意见。我是一个读过这些文件的开发者,没有就其中任何一点咨询过律师,我读的是四项专利,而不是这两家公司的全部专利组合。
本文背后的研究是 Kiradex 仓库里的一份调研档案,每一个事实都附有 URL,每一个由脚本产出的数字都带有 [measured] 标签;本文就是把那份档案写成可读的样子,而第 14 节就是它的简报。33
2. 计步器:行走就是货币
掌机玩家有一个从不停歇的动作。两套引擎都把它送进同一个函数,其他一切都在监听这个函数。读这两个函数,是看清老游戏的生命力有多少是用步数支付的最快途径。
《金·银·水晶》:CountStep
在《水晶》中,大地图上的每一步都经过 engine/overworld/events.asm 里的 CountStep。它在连接房间里跳过;如果有待触发的特殊电话或除虫喷雾即将失效,就先把这一步让给它们;然后把中毒计数器和一个单字节步数计数器各加 1,并根据计数器的值采取行动。反编译代码的注释说明了每个分支做什么:“Every 256 steps, increase the happiness of all your Pokemon”(每 256 步,提升所有同行宝可梦的亲密度);“Every 256 steps, offset from the happiness incrementor by 128 steps”(每 256 步,与亲密度递增错开 128 步),减少蛋的孵化计数器(代码把计数器与 $80,即 128 比较);“Every 4 steps, deal damage to all poisoned Pokemon”(每 4 步,对所有中毒的宝可梦造成伤害)。1 第一条注释描述的是调用,而不是结果。被调用的 engine/events/happiness_egg.asm 中的 StepHappiness 开头有它自己的注释“Raise the party’s happiness by 1 point every other step cycle”(每隔一个步数周期,把队伍的亲密度提升 1 点):它让第二个单字节计数器在 0 和 1 之间翻转(and 1),每隔一次调用就什么也不做直接返回。所以队伍的亲密度每 512 步上升 1,蛋不计在内。2 关于蛋的注释以一个限制结尾:计数在第一个“one that is ready to hatch”(准备好孵化的那个)处停止。engine/pokemon/breeding.asm 中的 DoEggStep 按顺序遍历队伍,把每个蛋的计数器减 1,一旦有计数器归零就立即返回;随后 CountStep 把这一步交给孵化脚本,队伍中排在后面的蛋则要等下一个节拍。40 每走一步,CountStep 还会给寄存在培育屋的两只宝可梦各加 1 点经验值,最后再统计自行车步数。1
自行车是这个例程里最妙的笑话。在《金·银·水晶》中,自行车店把自行车借给您,店主的号码会存进您的电话;只要您在有信号的范围内骑了至少 1,024 步,他就会打电话来,而自行车计数器会在 65,535 封顶,而不是回绕。1 自行车是一块骑着走的广告牌,游戏在统计您骑着它有没有被人看见。
《绿宝石》:TryStartStepCountScript
《绿宝石》在一步上挂了更多东西。在 src/field_control_avatar.c 中,TryStartStepCountScript 依次推进:再战计数器、亲密度计数器、遥远孤岛计数器、中毒、蛋的孵化、异常天气的结束、打开洞穴入口的点字谜题、五通脚本安排的电话、狩猎地带、凌波号的走廊,以及 Match Call。中毒每 4 步发作一次(%= 4),但在秘密基地里从不发作。14 亲密度并不是板上钉钉。每 128 步(计数器保持在 %= 128),游戏会为队伍中的每个栏位各调用一次 AdjustFriendship,而这个函数在注释“50% chance every 128 steps”(每 128 步 50% 的几率)之下,只要 Random() & 1 为真就提前返回;于是队伍里除蛋以外的每只宝可梦各自掷一次硬币,只有在赢了的节拍上才获得亲密度:平均每 256 步一次。1415
蛋按自己的时钟走。培育屋的步数计数器是一个单字节,到 255 时触发并回绕,所以每 256 步,队伍中的每个蛋(在下文的限制之内)失去一个孵化周期;如果队伍里有具备火焰之躯或熔岩铠甲的宝可梦,就失去两个。《绿宝石》以自己的形式有同样的限制:循环会跳过被标记为损坏数据的蛋(MON_DATA_SANITY_IS_BAD_EGG),一旦遇到计数器已经为 0 的蛋,就停下来让这个蛋孵化,所以队伍中排在它后面的蛋要等下一个节拍。培育屋也在同一个 256 步的节拍上掷骰决定是否产生新蛋,即当第二只亲代的步数低字节达到 0xFF 时。41
是预算,不是计时器
另一种步数是预算,一次性花掉。最清楚的例子是狩猎地带。在《红·蓝》中,入口收取 500 元,交给您 30 个狩猎球,在步数计数器里写入 502,然后自动带您往园区里走三步;《绿宝石》则把计数器设为整整 500。16 《红》为什么从 502 而不是 500 开始,代码没有说明,我也没有实际运行游戏去数这三步中有几步被计数器扣掉。除虫喷雾也是预算,从《红》到《绿宝石》都没变:除虫喷雾 100 步,白银喷雾 200 步,黄金喷雾 250 步。17 再战在第三世代变成了预算:集齐五枚徽章之后,《绿宝石》的再战计数器在 255 步时充满,下一次加载地图时,这条路线上随机某位训练家可能想再打一场;《火红·叶绿》的对战搜寻器,即向训练家请求再战的道具,要走满 100 步才能再次使用。42
一步能换来什么,以每次事件所需步数计;由 figures.py 根据 measure_systems.out.txt 绘制。43
为什么奏效
从代码中可以得出三个设计上的结论,它们正是值得保留的部分。
一切都在粗节拍上。 两个世代里,蛋都是每 256 步推进一次;第二世代每 512 步提升亲密度,第三世代每 128 步给队伍里的每只宝可梦一次亲密度的抛硬币。玩家看不到数字一点点跳动;他们看到的是偶尔发生的事件,一条“蛋在动”的消息,或一只忽然变得更亲近的宝可梦。单字节计数器是 Game Boy 能拥有的最便宜的时钟,而按我的解读,这也是奖励感觉像天气而不像进度条的原因:您没法盯着它看,所以您会注意到它。《绿宝石》的抛硬币让这种天气名副其实:同样一段路,亲密度可能涨,也可能不涨。121415
预算靠移动来花,而不是靠等待。 狩猎地带的 500 步,以及除虫喷雾的 100、200 或 250 步,只有在走路时才会消耗。停下来读文字、思考,或者为了吃晚饭把游戏机放下的玩家,什么也不会失去。1617 对于每隔几分钟屏幕就会被扣下的手机 app 来说,这是比倒计时更好的约定。
行走是一种社交信号。 自行车店的来电,是游戏注意到您骑着它的自行车出过门;《绿宝石》的再战计数器,则让一条路线“记得”您离开后又回来了。142 按我的解读,计步器最深的妙处在于:它让世界对玩家的存在作出回应,却不要求玩家做任何事,只要人在那里就行。
这些都不需要生物:一个计数器、一个节拍、一份预算。著作权不延及操作方法,而计数器恰恰属于操作方法;44 是否有人就步数驱动的机制持有专利,是我没有检索的问题,第 14 节也是这么写的。第 14 节把这个计数器用在了一盆植物上。
3. 时钟与日历:一周是有形状的
《金·银》在卡带里放了一个实时时钟,设计者把它花在了约定上。《绿宝石》保留了时钟,又把约定搬到了一本会自己翻页的日历上。两者合在一起,是我所知道的支持“一个在您离开时也在变化的世界”的最好论据。
一天的三个时段
《金·银·水晶》把一天分成三段:早晨从 04:00 到 09:59,白天从 10:00 到 17:59,夜晚从 18:00 到 03:59。常量是 MORN_HOUR 4、DAY_HOUR 10 和 NITE_HOUR 18,TimesOfDay 表带有注释“0400-0959 morn | 1000-1759 day | 1800-0359 nite”。反编译代码里,它旁边还留着一张未使用的 BetaTimesOfDay 表,值为 20、40 和 60。18
Kiradex 已经有自己的时间,而且刻意没有用这些钟点。它的 Daylight.Phase 是 6 点到 9 点为早晨,9 点到 17 点为白天,17 点到 20 点为傍晚,其余为夜晚,还有自己的四档亮度;第 14 节的简报保持这一点不变。45
固定星期几的约定
自然公园的捕虫大赛在周二、周四和周六举行:入口的脚本只检查这三天,不检查别的日子。比赛持续现实时间 20 分钟,发 20 个公园球(BUG_CONTEST_MINUTES 20、BUG_CONTEST_BALLS 20),一个每日标志阻止同一天第二次参加。19 《水晶》在午夜重置 16 个每日标志,两个字节各 8 个:钢铁的精灵球制作、捕虫大赛、大量出现、树果树、理发、百货商店的招式学习器、招式教学等。20
幸运号码节目每周一次。距离下一个周五的倒计时会选出一个新的五位数号码;游戏把它与您拥有的每一只宝可梦(队伍里的和全部 14 个箱子里的)的训练家 ID 从最右一位开始比对:五位全中得一等奖,中三位或四位得二等奖,中两位得三等奖。21 电话里有 24 位训练家,每人有一个星期几和一个时段可以打电话约他们再战,每个星期几分配三到四人,第 6 节会再回到他们。46
《水晶》中的一天和一周,以及 app 自己的一天;由 figures.py 根据 measure_systems.out.txt 和 Daylight.swift 绘制。43
《绿宝石》的日历
每当日期变化,《绿宝石》会在 UpdatePerDay 中运行十一项“每日”更新:清除每日标志;推动流行语;让电视节目和大量出现的消息老化;天气;宝可病毒;幻岛的号码;小田卷博士的状态;对战开拓区的两位人物,各一次调用;浅滩洞穴的道具;以及彩票号码。同一个文件规定,玩家站在宝可梦中心里时,这一切都跳过。22 《绿宝石》有 12 个具名的每日标志,其中 9 个是从某人那里白拿的树果:华丽大赛大厅、路线上的三个人、树果大师(Berry Master)和他的妻子、水静市、花店,以及琉璃市。其余三个是秘密基地、彩票,以及徒弟(Apprentice)的离开。47
按真实小时生长的花园
第三世代的树果树有种下、发芽、长高、开花和结果几个阶段,外加一个供活动树使用的“闪闪发光”阶段,存档中有 128 个树的栏位。48 生长按实时时钟的分钟数进行,而不是按步数:UpdatePerMinute 把流逝的分钟数交给 BerryTreeTimeUpdate,每个阶段持续 stageDuration × 60 分钟,结果阶段则持续四倍长;之后这棵树会自行重新种回发芽阶段,没有采摘的果实随之消失(berryYield = 0),最多重新生长 10 次后被清除。3 如果一次交给它的分钟数达到 71 个阶段长度,树也会被清除,这是我对 minutes >= GetStageDurationByBerryType(tree->berry) * 71 的解读:对于阶段长度为一小时的树果,大约相当于离开三天。3
在 43 个树果定义中,stageDuration 为 1 小时的有 5 种,3 小时的 12 种,4 小时的 1 种,6 小时的 11 种,12 小时的 1 种,18 小时的 5 种,24 小时的 8 种,所以从种下到第一次结果需要 4、12、16、24、48、72 或 96 小时。3 浇水每个阶段记录一次,共四个标志;收获量从一个随浇水阶段数上升的区间里随机抽取:一次都没浇就是该树果的最小值,每多浇一个阶段,区间就从最小值向最大值移动四分之一,抽出的值再四舍五入(CalcBerryYieldInternal)。3 对 43 种树果的收获量范围枚举这个函数:最大值比最小值至多大 2 的 33 种,四个阶段都浇水时总是得到最大值;其余 10 种(收获量为 2 到 6 或 3 到 6)四个阶段都浇水时得到最大值或少 1,而收获量为 2 到 6 的树果,浇一个阶段得 2 或 3,浇两个得 3 或 4,浇三个得 4 或 5,浇四个得 5 或 6。49
《绿宝石》的树果需要多长时间;由 figures.py 根据 measure_systems.out.txt 中的 stageDuration 计数绘制。43
这个想法比 Game Boy Advance 活得更久。《心金·魂银》的宝可全能竞技赛我没有测量过,只是从 Serebii 的攻略中了解到:每轮三个项目结束后会给“plus 100 points if you came in first”(第一名额外加 100 分),而它的商店所卖的东西“change each day”(每天都会变)。50
为什么奏效
一周是有形状的。《金·银》把时钟花在约定上:一周三天的比赛,24 位各自只能在某个星期几的某个时段联系上的训练家,周五的抽奖,以及午夜会回来的 16 件事。19462120 《绿宝石》把约定变成了漂移:流行语每天变动 5,大量出现持续 2 天,新闻倒计时 4 天,树果需要 4 到 96 小时。451273 按我的解读,结果就是一个在卡带关机时也在变化的世界,而这正是再次开机的全部理由。
有两个细节对手机很重要。《绿宝石》拒绝在宝可梦中心里运行当天的更新,所以存在一个脚下什么都不会变的安全房间。22 而且树果的生长是在您回来时根据流逝的分钟数计算的,不依赖一个必须一直运行的计时器,所以您不在的时候树也在长。不过它不会等您:成熟的果实会在树上留四个阶段长度,然后掉落,对于阶段长度为一小时的树果就是四小时;离开 71 个阶段长度,树就会被清除。3 我也希望我们的 app 这样运作:在到达时根据时钟计算世界的状态,绝不依赖一个在手机揣在口袋里时也必须一直运行的计时器。API 方面的内容见第 13 节。
4. 展示给人看的东西:卡片、箱子、连胜和抽奖
老游戏给地位赋予了实物般的形态,而这些形态无一例外都是另一位玩家能看到的东西。
训练家卡片和它的星星
《绿宝石》的训练家卡片随星星数改变颜色:没有星时是绿色,然后是青铜、紫铜、白银,四颗星时是金色。《火红·叶绿》的关都卡片依次是蓝、绿、青铜、白银、金。23 《绿宝石》的四颗星在 CountPlayerTrainerStars 中,是四项彼此无关的成就:进入名人堂;完成丰缘图鉴;在水静市美术馆挂满全部五幅大师级华丽大赛画作;以及集齐对战开拓区的所有标志。23 当《绿宝石》读取来自《红宝石》或《蓝宝石》的卡片时,它改用 GetRubyTrainerStars 计星:名人堂、丰缘图鉴和画作照样计入,而对战塔超过 49 连胜(battleTowerStraightWins > 49)取代了开拓区标志。23 《火红·叶绿》为连接对象生成卡片时,计入的是名人堂、关都图鉴、全国图鉴,以及两个无线小游戏合起来的一颗星:摘 200 个树果和连续跳 200 次。52
卡片也是一件社交物品。它带有简易会话(Easy Chat)个人资料、上限为 9,999 的连接对战胜负、交换次数、与朋友进行的华丽大赛和宝可方块次数,以及首次进入名人堂所用的时间,上限为 999 小时 59 分 59 秒。23
为什么奏效。 四种不同类型的长期壮举,每一项都会为您连接时别人看到的东西重新上色,所以隔着一个房间也能看出颜色。《火红》把四颗星中的一颗花在与朋友一起玩上。卡片上没有一样东西是买来的;按我的解读,这正是金色卡片值得展示的原因。
电脑里的箱子
存储空间一代比一代大。《红·蓝》有 12 个箱子,每箱 20 只,共 240 只;《金·银·水晶》有 14 个每箱 20 只的箱子,共 280 只(日版构建把每箱定义为 30 只);《红宝石·蓝宝石·绿宝石》有 14 个每箱 30 只的箱子,共 420 只,每个箱子是 6×5 的网格,有名字和壁纸。24 一个 30 只的箱子和活页册的一页是同一个思路:一个奖励整理的固定网格,而壁纸让它不只是一张列表,更像一个房间。
缎带和代币
《绿宝石》定义了 32 种缎带 ID:一个冠军缎带;20 个华丽大赛缎带,五个类别各四个级别;Winning、Victory、Artist 和 Effort;以及七个纪念缎带。一枚缎带让一只宝可梦的缎带数超过四枚时(代码检测 GetRibbonCount(...) > NUM_CUTIES_RIBBONS,而该常量为 4),只要有空栏位并且没有同类节目在排队,就可能生成一档关于它主人的电视节目;节目生成时处于关闭状态(active = FALSE,源代码里注释说在通过记录交换传递之前不会激活),所以只有在记录交换把它带到另一台游戏里之后才会出现在电视上。532754 游戏城的代币上限为 9,999(MAX_COINS)。55 代币是本文中唯一被第 14 节明确拒绝的系统,理由与任天堂无关:Kiradex 的用户是儿童,36 而它的世界背后的收藏研究已经排除了付费随机物品和任何形似老虎机的东西。33
对战塔和开拓区的连胜
对战塔、对战宫殿、对战竞技场或对战工厂的一轮挑战是 7 场;对战巨蛋的一次锦标赛是 4 场(DOME_ROUNDS_COUNT 4),对战管道一轮是 14 个房间(NUM_PIKE_ROOMS 14),并非每个房间都有对战,对战金字塔一次攀登是 7 层。FRONTIER_STAGES_PER_CHALLENGE 7 是一个共享常量,而不是每个设施都遵守的规则。连胜最多计到 9,999。25 每个设施的开拓区首脑会在连胜的固定节点出现,先给银色标志,再给金色标志。frontier_util.c 中的那张表不能照字面读:检查时会把当前连胜加上每个设施各自的修正值,再把和与表中的值比较(winStreak + modifier == value)。对战塔、对战宫殿、对战竞技场、对战工厂和对战管道的修正值为 1,所以首脑是第 35 场对战,而不是赢满 35 场之后的那一场;对战巨蛋为 0,它的连胜计的是赢得的锦标赛数;对战金字塔也为 0,它的连胜计的是通过的层数。25
| 设施 | 连胜计的是 | 银色首脑 | 金色首脑 |
|---|---|---|---|
| 对战塔 | 赢得的对战 | 第 35 场 | 第 70 场 |
| 对战巨蛋 | 赢得的锦标赛 | 第 5 次锦标赛 | 第 10 次锦标赛 |
| 对战宫殿 | 赢得的对战 | 第 21 场 | 第 42 场 |
| 对战竞技场 | 赢得的对战 | 第 28 场 | 第 56 场 |
| 对战工厂 | 赢得的对战 | 第 21 场 | 第 42 场 |
| 对战管道 | 通过的房间 | 第 28 个房间 | 第 140 个房间 |
| 对战金字塔 | 通过的层数 | 通过 21 层后 | 通过 70 层后 |
来源:frontier_util.c(表格和检查),各连胜计的是什么则见各设施的脚本;由 measure_systems.py 和人工阅读得出。25
对战塔的里程碑形状最干净:七场一组,首脑是第五组的最后一场,也是第十组的最后一场。连胜是内容,首脑是标点。
奖励收藏规模的抽奖
《绿宝石》的彩票中心(Lottery Corner)每天抽一个新号码,并与您拥有的每一只宝可梦(队伍和箱子里的)的训练家 ID 从最右一位开始比对;代码里写着“do not calculate ticket values for eggs”(不为蛋计算彩票值)。中两位、三位、四位或五位,分别获得 PP 提升剂、学习装置、活力块或大师球,一个每日标志让您一天只能抽一张(FLAG_DAILY_PICKED_LOTO_TICKET)。56 《水晶》每周的幸运号码也按同样的方式分三档:两位数字相同,三位或四位,以及五位全中。21
为什么奏效。 抽奖把箱子变成了彩票。您拥有的每一只宝可梦都算数,包括带着其他训练家 ID 的交换来的宝可梦,所以一个庞大、多样、经过大量交换的收藏,运气确实更好。但它终究是抽奖,而抽奖让奖励变得随机,本系列关于装饰物的规则“never random, never on a countdown”(绝不随机,绝不倒计时)拒绝这一点;第 14 节没有收录它。36
5. 会记事的地面:落差、可砍的树和两辆自行车
城镇之间的路线有自己的一套词汇:单向的边缘,以及在您能打开之前就看得见的锁。我用 measure_map_features.py 在《绿宝石》中统计了它们:这个脚本逐格读取每张地图的布局,并在图块集的属性表中查找每个格子的行为。统计的是格子而不是地形要素:一道长长的落差由许多格组成,被多张地图共用的布局只计一次。39
落差是路线的装置
在《绿宝石》的 41 个路线布局、共 87,787 格中,有 726 个单向落差格(MB_JUMP_* 行为)和 2,777 个长草格;41 条路线中有 21 条有落差。前四条路线的落差格分别是 13、17、24 和 13 个。落差还出现在 9 个城市布局中(34 格)、地下(215 格)和室内(48 格),而 7 个城镇布局中一个也没有。39
《绿宝石》中按地图类型统计的落差格;由 figures.py 根据 measure_map_features.py 的输出绘制。4339
落差让玩家可以快速往下走,同时迫使回程走另一条路,于是一条短短的路线里就有了一个环。人们居住、玩家抵达的城镇里,从来没有落差。
早早露面的锁:可砍的树和两辆自行车
《绿宝石》放置了 33 个可用居合劈砍倒的树对象,22 个在路线上,11 个在室内,大多是道馆谜题。39 两辆自行车把守着不同的地面。音速自行车格(泥泞的斜坡和有裂缝的地板)在路线上有 52 个,地下有 150 个;越野自行车格(轨道和颠簸的斜坡)有 85 个,全在路线上。39 音速自行车有三档速度逐级加速(sMachBikeSpeeds = {NORMAL, FAST, FASTEST});越野自行车把按住 B 键加方向的输入读作花式动作:翘头和兔跳。57
为什么奏效
在您能打开之前就看得见的锁,是一种承诺。可砍的树和自行车专用地面在第一次走过时向玩家展示一条捷径,在之后某次走过时兑现它;而《绿宝石》两辆自行车配上两种上锁的地面,让选哪辆自行车变成了选这一趟看到哪一半捷径。3957 落差在方向上起同样的作用:往下又快又自由,往上则是另一条路。
落差也是本文中唯一一处我们自己先前的决定提出反对的地方。建筑研究拒绝了落差,理由是在俯视视角下,自由的高度很难读懂;建筑那篇文章也把“a one-way ledge”(单向落差)列为小镇所没有的东西之一。3533 一格高的单向落差并不是自由的高度:它没有 z 轴,只是行走图中的一条单向边。所以简报提出了一个收窄后的形式,而把决定留在它该在的地方,也就是尚未发表的、讨论高低差和路线的文章。
6. 别人的世界:记录交换、流行语和电话
这一节的系统是我最想放进广场的,因为它们关乎其他玩家,却不需要其他玩家在同一时刻在线。
秘密基地和记录交换
《绿宝石》的秘密基地最多可放 16 件装饰品;玩家的卧室可放 12 件;一份存档保存 20 个基地,包括您自己的和您从其他玩家那里收到的。58 从哪里收到?从记录交换:两名玩家连接并交换记录时,游戏会在存档之间复制一份 0x1444 字节,即 5,188 字节的记录。它的字段依次是:全部 20 个秘密基地、25 个电视节目栏位、新闻、紫堇市的老爷爷(Mauville Old Man)、5 个流行语、培育屋的邮件、一份对战塔记录、一件礼物道具、水静市的女士(Lilycove Lady)、两位徒弟,以及对战开拓区的排名大厅记录(ranking-hall records)。26
所以,用连接线玩了一个下午之后,朋友的基地就在您的游戏里,您可以走进去。他们的电视节目在您的电视上播出。他们的对战塔记录也一并到来。按我的解读,《绿宝石》里让人感觉鲜活的东西,大多是从别人那里来的。
电视
《绿宝石》的电视有 25 个节目栏位:5 个留给关于您自己游玩经历的节目,20 个留给只能通过记录交换到来的节目。有 11 种“普通”节目,以及 19 种只能通过记录交换存在的节目(Trend Watcher、Secret Base Visit、Lotto Winner、Spot the Cuties 等),外加大量出现的报道;新闻事件在播出前倒计时 4 天。27 通关之后,您每打完一场对战,无论是否抓到了什么,都有 1/200 的几率(rbernoulli(1, 200))安排一条大量出现的报道,但若那是一场连接、狩猎、对战开拓区或其他特殊对战,或者电视 25 个栏位的前 24 个中已经有一条大量出现的报道(检查在最后一个栏位之前一格停下),则不会安排,而且只有在留给您自己节目的 5 个栏位中有一个是空的时才会安排。报道要等一天才能播出(daysBeforeOutbreak = 1,由每日更新倒数),而大量出现本身要等您在电视上看到这条报道时才开始,那时会调用 StartMassOutbreak;从那时起它持续 2 天,让所报道的种类占到某一条路线上遭遇宝可梦的一半(probability = 50)。51 大量出现的节目和其他节目一样通过记录交换传播,所以朋友那里的大量出现也可能出现在您的电视上。5126
流行语:一句有半衰期的说法
“Dewford Trend”是武斗镇大厅(Dewford Hall)里的人们反复说的两个简易会话词。dewford_trend.c 顶部的注释块本身就是一份设计文档。每个短语都有一个流行度,其“Initialized as a random value between 30-127 inclusive”(初始化为 30 到 127 之间、含两端的随机值);“If a submitted phrase is less trendy than the current one it won’t be accepted”(如果提交的短语不如当前的流行,就不会被接受);而一个“boring”(变得无聊)的短语会“lose trendiness over time until it reaches 0”(随时间失去流行度,直到降为 0),然后再涨回它的最大值,在那里又一次变得无聊。4 代码对这条接受规则有两个例外。一份存档提交的第一个短语,如果该存档从未交换过记录,会不经比较直接替换当前的词;而当新短语的流行度与当前短语相同时,最大值更高的一方胜出,如果最大值也相同,就由抛硬币(Random() & 1)决定。4 每日更新按流逝的天数,每天把每个短语移动 5 分(clockRand = days * 5)。4 系统按流行度排序保存 5 个短语;交换记录时,您的短语会被对方的替换,“unless the phrase is the same, in which case the version with a higher trendiness value is used”(除非短语相同,此时使用流行度更高的那一份)。4
追潮流的人和隐藏词
Trendy Sayings 是另一回事:一个由 33 个词组成的隐藏简易会话词组。28 反编译代码的注释说明了获得方式:它们“normally inaccessible”(通常无法获得),而“The Hipster can unlock one word each time he is received via record mixing (and once if he is the player’s default Old Man)”(追潮流的人每次通过记录交换被接收时可以解锁一个词;如果他是玩家默认的老爷爷,则解锁一次)。28 紫堇市的老爷爷有五种(Bard、Hipster、Trader、Storyteller、Giddy),您的游戏从哪一种开始,由训练家 ID 的最后一位决定:(trainerId % 10) / 2。所以只有当这一位是 2 或 3 时,追潮流的人才是默认的那位:五名玩家中的一人。其他人必须与这样的玩家交换记录,才能见到他。28
电话再战和来电
《水晶》的电话能存 10 个联系人(CONTACT_LIST_SIZE 10)。24 位训练家可能准备好再战,每人一个每日标志;10 位可能打电话说有道具要给您;而 24 位中的每一位都有一个星期几和一个时段可以由您打过去,早晨 9 位、白天 7 位(《水晶》一天中的第二个时段,10 点到 18 点)、晚上 8 位,每个星期几三到四位。46 来电是配给的:每接到一个电话,一个 20 分钟的计时器(ReceiveCallDelays)就开始,每当它到时而没有来电,就依次缩短为 10、5、3 分钟,它控制着源代码注释所说的“50% chance for a call”(来电的几率为 50%)那次掷骰;打来电话的人从该时段能联系上的联系人中抽取,而您站在出入口上或不在信号范围内时,不会有电话打来。59
为什么奏效
别人的世界来到了您的世界。 五千字节载着 20 个基地、20 个别人电视节目的栏位和 5 句说法。2627 这一切都不需要对方在您游玩时在场;只需要您和对方见过一次。
流行语是一种有半衰期的传染。 在一份存档的第一个短语之后,新短语只有超过当前短语才能占领一个城镇,变得无聊时会褪色,并通过接触传播;两份存档相遇时,共有短语以流行度更高的那份为准。4 这是只用一把数字就搭成的完整社交机制:一个分数、一种漂移、一条接触规则。
追潮流的人是刻意稀缺的。 五名玩家中只有一人拥有他;其他人要通过拥有他的人才能见到他,每次见面都能学到 33 个隐藏词中的一个。28 词汇本身变成了一种在人与人之间流传的收藏品。
打扰是配给的。 来电由一个计时器和一次抛硬币控制,您站在门口时永远不会打来;刚接完一个电话后等待最久,20 分钟。59 按我的解读,一个会跟您说话的世界,只有在它很少说话时才迷人。
7. 三条不同的线:著作权、商标、专利
从这里到第 11 节都是记录:任天堂和 The Pokémon Company 针对什么采取了行动、依据是什么,又放过了什么。把三种保护区分开很重要,因为谈论抄袭宝可梦的人通常想的是其中一种,得到的回答却来自另一种。
著作权保护表达。 美国版权局的 Circular 33 把想法、程序、过程、系统和操作方法置于著作权之外;具体的图块、sprite、音乐、文字和角色是受保护的表达。4434 本系列的第一篇文章在其 FAQ 中这样说,并已于 10 月 4 日更正为明确写出著作权:风格、方法和系统不受著作权保护,具体的表达才受保护。34 第 2 至第 6 节的所有内容,按我的解读都是方法:一个计步器、一个时钟、一张带星的卡片、一个带分数的短语。
商标保护标识。 The Pokémon Company 自己的日文网站写明“ポケットモンスター・ポケモン・Pokémon”(精灵宝可梦、宝可梦、Pokémon)是任天堂、Creatures 和 GAME FREAK 的商标。60 用来销售产品的名称是商标问题;同样的名称用来说明某物是什么,就像一款扫描宝可梦卡牌的 app 不得不做的那样,属于指示性使用(nominative use),我们自己的世界设计文档把它描述为其他所有卡牌 app 的做法,这也正是 Kiradex 的规则早已划定的界线。37
专利保护一项被请求的方法,一步一步地。 日本和美国已经向任天堂和 The Pokémon Company 授予了专利,其权利要求是游戏程序,以程序让计算机做什么的方式来描述。1161 专利权利要求是一串步骤;按我的解读(这不是法律意见),一项权利要求只有在游戏执行了其中的每一个步骤(每一步都按法院的解释来理解)或其等同物时才会覆盖这款游戏,而两国法院都承认等同物。美国最高法院逐个步骤地适用这一等同原则,“to each of the individual elements of a claim”(适用于权利要求的每一个单独要素),日本最高法院则在 1998 年列出了一个在某一部分与权利要求不同的产品仍落入其范围的条件。6263 因此,改变或去掉一个步骤,只是主张修改后的游戏落在某项权利要求之外的一个论点,而不是结果:是否落在外面,取决于那种解释和等同判断,而在这里唯一的案件中,还没有任何法院作出裁决。第 9 节会读这里要紧的四项权利要求。
下面的记录按每起案件是依据三者中的哪一种来打的进行分类。只有一起是专利案件。
按日期和依据排列的记录;由 figures.py 根据第 8 节和第 9 节引用的带日期页面绘制。43
8. 同人游戏、一个工具包和一个论坛:什么招来了行动
Pokémon Uranium,2016 年 8 月:下架通知,以及开发者自称没有收到的那封信
Uranium 常被描述为收到了停止侵权函的游戏;Aftermath 在 2026 年 10 月 1 日发表的一篇同人游戏专题也说它“was reportedly issued cease and desists from the legal teams at Nintendo and The Pokémon Company”(据报道收到了任天堂和 The Pokémon Company 法务团队发出的停止侵权函)。64 但开发者当时的说法不同。Kotaku 在 2016 年 8 月 13 日报道,制作这款游戏的粉丝们在九年的工作之后撤下了所有下载链接,并全文刊登了他们的声明:“After receiving more than 1,500,000 downloads of our game, we have been notified of multiple takedown notices from lawyers representing Nintendo of America.”(在我们的游戏获得超过 1,500,000 次下载之后,我们获悉了代表 Nintendo of America 的律师发出的多份下架通知。)还有:“While we have not personally been contacted, it’s clear what their wishes are, and we respect those wishes deeply.”(虽然我们本人并没有被联系,但他们的意愿很明确,我们深深尊重这些意愿。)Kotaku 补充说,开发者表示他们“haven’t received any cease & desist letters from Nintendo’s lawyers yet”(还没有收到任天堂律师的任何停止侵权函)。5 我们自己的世界设计文档曾把它写成停止侵权函;准确的说法是,Uranium 是在下架通知之后被撤下的,而且它的标题里就带着那个名字。375
Pokémon Prism,2016 年 12 月:发布前四天的停止侵权函
Prism 是另一回事:不是一款宝可梦风格的新游戏,而是《水晶》本身的 ROM 改版,历时八年制作,计划在圣诞节当天发布。Kotaku,2016 年 12 月 29 日:“Nintendo hit them with a cease and desist four days before release”(任天堂在发布前四天给他们发了停止侵权函),而一切都“seemed ready for an official release until December 21st, when representatives of Nintendo sent a cease and desist to the project”(看起来已经准备好正式发布,直到 12 月 21 日任天堂的代表向这个项目发出了停止侵权函)。随后,作者关闭了自己的网站,那个网站还托管着另外两款 ROM 改版:Pokémon Brown 和 Rijon Adventures。6 第二天的 Nintendo Life 也给出了同样的日期和 12 月 25 日的计划发布日。65 一份经过涂黑处理的信件扫描件被一位第三方上传到了 Internet Archive,上传者称是一位 Prism 的贡献者发给他的;上传者的描述带有论战色彩,而我没有读过这份扫描件,所以它只是通往该文件的线索,而不是本文的出处。66
Pokémon Essentials,2018 年 8 月:一个工具包
Essentials 是一个用 RPG Maker 制作类宝可梦游戏的免费工具包。TechSpot 在 2018 年 8 月 29 日跟进 Ars Technica 的报道称:任天堂发出了 DMCA 下架通知,托管该工具包 wiki 的 Fandom 照办了,PokéCommunity 的同人游戏版块也删除了下载。TechSpot 自己的看法是,“the assets Pokemon Essentials uses appear to be identical to the ones in Pokemon games”(Pokemon Essentials 使用的素材看起来与宝可梦游戏中的素材完全相同)。7
Relic Castle,2024 年 3 月:一个论坛,以及从未被证实的发件人
我们自己的研究简报曾把 Relic Castle 和 Essentials 归为 2018 年的下架。33 实际是 2024 年 3 月。GamesRadar+,2024 年 3 月 22 日:这个自 2014 年起运营的同人论坛下线了;其声明说“the Relic Castle website has been taken down following a DMCA takedown notice”(Relic Castle 网站因一份 DMCA 下架通知而被关闭)。GamesRadar+ 指出,该网站“didn’t host these games directly”(并不直接托管这些游戏),但允许发布指向它们的链接,而通知是谁发出的并未得到证实。8
同人项目是怎样被注意到的,用注意到它们的那位律师的话说
Don McGowan 曾是 The Pokémon Company 的首席法务官。2024 年 3 月,Aftermath 问他公司如何处理针对同人项目的停止侵权函,他答道:“Short answer: thanks to you folks.”(简单说:多亏了你们。)他告诉自己法学院的学生,世上最糟的事情就是一个同人项目“gets press, because now I know about you”(上了新闻,因为这样我就知道你了)。还有后半句:“You don’t send a takedown right away. You wait to see if they get funded (for a Kickstarter or similar); if they get funded then that’s when you engage. No one likes suing fans.”(你不会马上发下架通知。你会等着看他们能不能筹到钱(比如在 Kickstarter 之类的平台上);如果筹到了,那就是你出手的时候。没人喜欢起诉粉丝。)67 Video Games Chronicle 第二天刊登了同样的引语。68
中国,2025 年:整款游戏的复制
记录中金额最大的一笔,是一起著作权和不正当竞争案件,而不是同人游戏。The National Law Review 报道,2025 年 2 月 21 日,广东省高级人民法院宣布,在围绕 2021 年 12 月起诉的游戏“Pokémon: Remastered”的案件中,The Pokémon Company 获得 1.07 亿元人民币的和解;该公司曾索赔 5 亿元人民币,并在深圳的一审中获判 1.07 亿元。69 报道所概括的一审理由,值得任何写致敬作品的人仔细读一读:被诉游戏的角色、主角和地图与原作“one-to-one”(一一)对应,其系统“highly similar or even completely consistent, and many numerical system designs are the same”(高度相似甚至完全一致,许多数值系统设计相同)。69 按我的解读,数字只是对一款把其他一切也都抄了的游戏所作认定中的一条线索;但这正是第 14 节只取少数几个整数作为起点、在游戏的数字并不整的地方自定范围、并且从不导入游戏数据表的原因。
记录显示了什么
四起同人案件中有三起使用了宝可梦自己的表达,第四起 Relic Castle 则托管了指向使用这些表达的游戏的链接。Uranium 在标题中使用了这个名字,并且据其开发者统计已被下载 150 万次;Prism 是《水晶》的 ROM 改版,建立在游戏自己的代码和美术之上;Essentials 附带的素材被一位记者称为与游戏中的完全相同;Relic Castle 链接到这类游戏。5678 按我的解读,每一起的依据都是著作权:其中两起是据报道的 DMCA 通知,而 DMCA 通知是著作权通知,尽管向 Relic Castle 发通知的是谁并未得到证实;关于另外两起的报道没有给出依据,但两款游戏都建立在原作的表达之上,而 Uranium 还带着那个名字,这也涉及商标问题。没有一起是专利行动。前首席律师补上了触发条件:先是媒体曝光,然后是钱。67
我的解读: 记录显示,行动针对的是宝可梦的表达,以及曝光加上筹款,而不是因为一款游戏属于这个类型。第 11 节中的每一款致敬游戏都属于这个类型,都在收费销售,都没有被报道成为行动的对象。这一解读关乎已经发生的事情,而不是对将来会发生什么的承诺。
9. Palworld:唯一一起关于机制的案件
Palworld 是改变解读的那起案件,因为它是记录中唯一以专利为依据的。它也仍未结束。
声明,2024 年 1 月
Pocketpair 于 2024 年 1 月 19 日发售了 Palworld。10 1 月 25 日,The Pokémon Company 在其企业网站上发布了一则标题为 他社ゲームに関するお問い合わせについて 的公告,我译作关于涉及其他公司游戏的咨询,正文为日文,下面附有英文文本。英文文本是:“We have not granted any permission for the use of Pokémon intellectual property or assets in that game. We intend to investigate and take appropriate measures to address any acts that infringe on intellectual property rights related to the Pokémon.”(我们没有许可在该游戏中使用宝可梦的知识产权或素材。对于任何侵犯宝可梦相关知识产权的行为,我们打算展开调查并采取适当措施。)公告没有点出游戏的名字。70 上面的日文文本多说了一件英文省略了的事:咨询中包括认为该游戏与宝可梦相似的意见(ポケモンに類似しているというご意見)。70 同一天 Nintendo Life 的报道点出了游戏的名字。71
起诉,2024 年 9 月
任天堂和 The Pokémon Company 于 2024 年 9 月 19 日宣布,他们已于“on September 18, 2024”(2024 年 9 月 18 日)在东京地方法院对 Pocketpair 提起专利侵权诉讼,以 Palworld“infringes multiple patent rights”(侵犯多项专利权)为由,请求“an injunction against infringement and compensation for damages”(停止侵权的禁令和损害赔偿)。9 Pocketpair 在 2024 年 11 月 8 日的报告中公布了涉案专利和诉讼请求:10
| 专利 | 申请日 | 登记日 |
|---|---|---|
| JP 7545191 | 2024 年 7 月 30 日 | 2024 年 8 月 27 日 |
| JP 7493117 | 2024 年 2 月 26 日 | 2024 年 5 月 22 日 |
| JP 7528390 | 2024 年 3 月 5 日 | 2024 年 7 月 26 日 |
原告请求对 Palworld 发出禁令,并向每位原告支付 500 万日元及迟延损害金,即“compensation for a portion of the damages incurred between the date of registration of the patents and the date of filing of this lawsuit”(对自专利登记日至本诉讼提起日之间所产生损害的部分赔偿)。10 Google Patents 把任天堂和 The Pokémon Company 列为全部三项专利的受让人。111213 这三项专利都是在 Palworld 发售之后申请的,但并非从零开始。GamesRadar+ 援引日本专利代理人栗原潔(Kiyoshi Kurihara)的说法报道称,三项都是一项母专利的分案专利,并称该母专利于 2021 年 12 月登记。72 Google Patents 的同族表格说法不同:三项专利各自列出 2021 年 12 月 22 日的优先权日,并通过分案源自当天提交的一件申请,7493117 和 7545191 源自 JP 2021-208275,7528390 源自 JP 2021-208276;这两件申请后来分别以 JP 7398425 B2(2023 年 12 月 14 日)和 JP 7349486 B2(2023 年 9 月 22 日)公布。2021 年 12 月是申请日;在我保存的页面里,两者都没有找到登记日。111213
三项权利要求说了什么
以下是每项专利的权利要求 1,取自 Google Patents 对日文的机器翻译;以日文文本为准,而且权利要求可能在诉讼中被订正,Google 的页面未必会反映出来。7333 我做了概括,翻译本身的措辞放在引号里。
JP 7493117,指示。 在“the first mode”(第一模式)下,程序确定“a direction of aim in the virtual space based on a first operation input which is a directional input”(基于作为方向输入的第一操作输入而确定的虚拟空间中的瞄准方向);在第二次输入时,把瞄准转向一个场地角色,并且“a first indicator is displayed”(显示第一指示);在第三次输入时,让玩家角色朝瞄准方向释放“a capture item for capturing the field character in the aiming direction”(用于捕获场地角色的捕获道具);命中时进行“a capture success determination”(捕获成功判定);而这个指示是“information indicating the ease of making a positive judgment of the successful capture judgment”(表示捕获成功判定作出肯定判断之容易程度的信息)。11
JP 7545191,投掷。 按下一个按钮会进入准备姿态,准备释放第一类别组中的捕获道具或第二类别组中的战斗角色;方向输入设定瞄准;一次“using an operation button different from the operation button”(使用与该操作按钮不同的操作按钮)的输入选择是哪一个捕获道具或战斗角色;松开第一个按钮就把选中的那个投出去;命中的捕获道具开始捕获判定;而被释放到可以战斗之处的战斗角色会使“a battle between the combat character and the field character on the field to commence”(场地上的战斗角色与场地角色之间的战斗开始)。12
JP 7528390,骑乘。 玩家角色由操作输入控制;它骑乘自己拥有的“a plurality of types of rideable characters”(多种可骑乘角色)之一,并且“when a first operation input is performed while the player character is in the air”(当玩家角色处于空中时进行第一操作输入),它会登上“an airborne rideable character”(空中的可骑乘角色)并在空中移动。13
GamesRadar+ 也给出了同样的对应关系,来源是栗原和专利代理机构 Siarasia(经由 Automaton):7545191 是瞄准并投掷的捕获,7493117 是捕获可能性的指示,7528390 是登乘与骑乘。72
游戏改了什么
Pocketpair 2025 年 5 月 8 日的公告说明了它做了什么。2024 年 11 月 30 日发布的补丁 v0.3.11“removed the ability to summon Pals by throwing Pal Spheres and instead changed it to a static summon next to the player”(移除了通过投掷帕鲁球召唤帕鲁的功能,改为在玩家身旁静态召唤);从 v0.5.5 起,“gliding will be performed using a glider rather than with Pals”(滑翔将使用滑翔翼而非帕鲁进行)。公告明说“these changes were indeed a result of the ongoing litigation”(这些变更确实是正在进行的诉讼的结果),并表示 Pocketpair 将继续“to dispute these claims and assert the invalidity of the patents in question”(对这些主张提出异议,并主张涉案专利无效)。74 按我的解读,每项改动各触及一项权利要求中的一个步骤:第一项是 JP 7545191 权利要求 1 中以投掷方式释放战斗角色,第二项是 JP 7528390 中的空中坐骑。修改后的游戏现在是否落在任一权利要求之外,取决于法院如何解释这些步骤;Pocketpair 的公告报告的是它改了什么,而不是一项认定,而且还没有任何法院作出裁决。
缩窄,2025 年 11 月
Automaton 于 2026 年 6 月 12 日根据其日本员工查阅的东京地方法院记录以及 Games Fray 报道称,原告“revised the scope of their claims in November 2025 so that they now apply only to older versions of Palworld”(于 2025 年 11 月修改了诉讼请求的范围,使其现在只针对 Palworld 的旧版本)。同一篇报道写道:“While the plaintiffs are still seeking an injunction against Palworld, limiting the lawsuit to older versions of the game appears to reduce the likelihood that the current version will be directly affected.”(虽然原告仍在寻求对 Palworld 的禁令,但把诉讼限定在游戏的旧版本,似乎降低了当前版本受到直接影响的可能性。)法院记录显示,2026 年 10 月 1 日排定了一次技术说明会,2026 年 11 月 9 日排定了法院给出初步看法。29
截至 2026 年 10 月 4 日,Pocketpair 的重要公告列表在 2025 年 5 月 8 日之后再没有关于这起诉讼的内容,我也没有找到任何有署名的媒体报道 10 月 1 日的说明会上发生了什么。没有任何判决、和解或禁令的报道。30 Palworld 在 2026 年 7 月结束了 Early Access:Steam 上列出的发售日期为“9 Jul, 2026”,Automaton 报道的公布日期为 7 月 10 日。7529
作为现有技术的同人游戏
记录里有一个值得单独写一段的讽刺。Automaton 于 2026 年 7 月 22 日报道,日本特许厅维持了对任天堂和 The Pokémon Company 的分案申请 No. 2026-019762 的驳回,该申请描述的是一种“in-game monster-capturing system”(游戏内怪物捕获系统)。关键依据之一,是 2013 年 YouTube 上一段同人游戏 Pokémon Generations 的视频。任天堂一方主张这款同人游戏侵犯了其著作权;按 Automaton 的概括,审查员的回答是“whether an invention infringes on copyright or not has no bearing on determining inventive step”(一项发明是否侵犯著作权,与判断创造性毫无关系)。这次驳回涉及的是那件分案申请,而不是在东京主张的那些专利,任天堂有三个月时间可以对此请求复审。76 一款同人游戏,也就是第 8 节那些案件所涉及的那类项目,成了关于这项机制的证据。
美国方面:一项专利,正在再审查
据我所能查到,还没有关于在美国起诉 Pocketpair 的报道。美国专利是有的。US 12,403,397 已转让给任天堂和 The Pokémon Company,于 2023 年 3 月 1 日提交,2025 年 9 月 2 日获授权。61 它的权利要求 1 在场地上移动玩家角色,并通过输入召唤“a sub character”(一个副角色);如果副角色出现的地方有敌人,战斗就以“a first mode in which the battle proceeds based on an operation input”(战斗基于操作输入进行的第一模式)进行,如果没有,副角色就开始自动移动;第二次输入把它派往某个方向,那里的敌人会开始“a second mode in which the battle automatically proceeds”(战斗自动进行的第二模式)。61
Engadget 于 2025 年 11 月 4 日报道,USPTO 局长亲自下令对该专利进行再审查,并援引 2002 年科乐美的一件申请和任天堂更早的一份出版物作为现有技术。7778 律师事务所 MBHB 在 2026 年 4 月 3 日写道,编号为 90/020,162 的再审查已产生首次审查意见通知书,于 2026 年 3 月 25 日发出,依据 35 U.S.C. § 103 以显而易见为由驳回了该专利的全部权利要求,答复期限为 2026 年 6 月 25 日,延期则为 2026 年 9 月 25 日。79 我没有找到关于任天堂答复或之后任何进展的报道。
所读四项专利权利要求 1 中选出的捕获、战斗和骑乘步骤,加上其中两项共有的移动步骤,以及本 app;由 figures.py 根据 measure_patent_claims.out.txt 和美国权利要求绘制。4373
这对致敬作品意味着什么
这是我的解读,不是法律意见。 一项权利要求只有在产品执行了其中的每一个步骤(按法院对每一步的解释)或其等同物时,才会覆盖该产品,而两国法院都承认等同物(第 7 节)。Pocketpair 修改了投掷召唤和滑翔,并表示仍然对侵权和专利的有效性提出异议;Automaton 报道说,这些改动可能促成了原告把请求缩窄到旧版本,同时禁令请求仍在。7429 这两者都不是认定当前游戏落在权利要求之外,也还没有任何法院作出裁决。Kiradex 确实执行了一个被请求保护的步骤:收藏者通过输入在场地上移动,这是美国权利要求的第一步,也是 JP 7528390 步骤的一部分,还是大多数游戏都有的一步。它没有捕获,没有投掷的物体,没有生物,没有战斗,也没有坐骑,而这四项权利要求每一项都还要求捕获、战斗或骑乘步骤,所以按我的解读,它们都不能描述 Kiradex。这是对四项专利的解读,不是自由实施(freedom-to-operate)检索。任天堂和 The Pokémon Company 还持有我没读过的其他专利,我也没有检索关于计步器、时钟驱动事件或传播短语的专利。第 14 节的禁止清单让 app 远离这里读到的捕获、战斗和骑乘步骤,仅此而已。
10. 两家公司公布了什么
据我所能找到的,两家公司都没有公布过关于同人游戏的政策。它们公布的东西范围更窄,而两份文件指向同一个方向。
The Pokémon Company 的日本网站规则
日本官方网站的规则页面有一段关于二次创作的条款,而那是一份单向许可。任何人基于 ポケモン財産(宝可梦财产,页面将其定义为受著作权、商标、专利、商业秘密、隐私权和形象权保护的素材)创作或使用二次创作作品,即授予 The Pokémon Company 集团、任天堂、Creatures、GAME FREAK 及其指定方一项非独占、可再许可、免版税、永久、不可撤销、全球范围的许可,可将其用于任何目的。下一句的原文是 個人的な利用を超えた…利用を許諾するものではありません,按我的翻译,它说的是:无论这些公司如何使用您的作品,都不等于许可您在个人使用之外使用宝可梦财产或您的二次创作作品。适用日本法律,东京地方法院对一审拥有专属管辖权。60 同一页面还写明,公司不接受外部主动提出的角色或商品企划和创意(企画・アイデア…一切公募をしておりません),并写明 ポケットモンスター、ポケモン 和 Pokémon 这些名称是任天堂、Creatures 和 GAME FREAK 的商标。60
pokemon.com 上的美国法律信息页面,据二手资料称有一条英文的同人画作条款,但在 2026 年 10 月 4 日向我的抓取工具返回了机器人验证页面,其存档副本也返回了同样的拦截。我没有尝试绕过它,所以它的文本在这里未经核实,本文也不引用它。80
任天堂的游戏内容指南
任天堂针对视频和图片分享的指南允许您在为视频和图片分享网站制作的内容中使用“for which Nintendo owns the copyright”(任天堂拥有著作权的)游戏画面和截图,并说“We encourage you to create videos that include your creative input and commentary.”(我们鼓励您制作包含您自己的创意和解说的视频。)变现只能通过任天堂列出的方式,并且“you may not sell any videos, music, or images that you created using Nintendo Game Content”(您不得出售使用任天堂游戏内容制作的任何视频、音乐或图片)。对于要做任何别的东西的人来说,要紧的是第 6 问:同人画作、音乐,以及游戏画面和截图以外的内容都不在指南范围内,而“Any other use of Nintendo’s intellectual property and creation of content outside of this scope is subject to the relevant laws of the applicable jurisdiction.”(对任天堂知识产权的任何其他使用,以及在此范围之外创作内容,均受适用法域的相关法律约束。)81
这意味着什么
我的解读: 同人游戏没有安全港。任天堂的指南覆盖画面和截图,其余一切都交给一般法律;The Pokémon Company 的规则让二次创作作品反向许可给公司,而对创作者,除了个人使用之外什么也不许可。8160 取而代之存在的是执法上的自由裁量,而第 8 节的记录就是这种裁量迄今的样子。对 Kiradex 来说,实际后果是简报禁止清单里的两行:不做任何构成宝可梦财产二次创作的东西;不向任何一家公司的粉丝渠道或创意渠道发送任何东西。
11. 致敬游戏,用它们自己的话说
Coromon、Nexomon: Extinction、Cassette Beasts、Temtem、Monster Sanctuary 和 Moonstone Island 都在像素或低多边形的世界里推出了“捕捉并培养”的循环,都在收费销售,而且据我所查,没有一款被报道成为行动的对象。它们如何描述自己,是本文最实用的指引,因为那是正在运营的工作室实际的做法。
商店页面不点任何人的名
我统计了七款游戏,即这六款加上 Palworld,在 Steam 商店记录中的这个词,记录于 2026 年 10 月 4 日通过 Steam 的 app details API 获取。在它们的简短说明和详细说明里,七款没有一款写了“Pokémon”。它们写的是“monster-taming RPG”(驯服怪物的 RPG,Coromon)、“a return to classic monster catching games”(回归经典的怪物捕捉游戏,Nexomon: Extinction)、带有“Fusion System”的“Collect awesome monsters”(收集超棒的怪物,Cassette Beasts)、“an online creature-collection adventure”(在线生物收集冒险,Temtem)、“Monster taming meets metroidvania”(驯服怪物遇上银河恶魔城,Monster Sanctuary)、带有“card-based encounters”的“a creature-collecting life-sim”(基于卡牌遭遇的生物收集生活模拟,Moonstone Island),以及“Fight, farm, build and work alongside mysterious creatures”(与神秘生物并肩战斗、耕种、建造和工作,Palworld)。31 只有一条记录包含这个词:Temtem 的评测引语字段里有一句 Rock Paper Shotgun 的媒体评语,称它是“A Pokemon-like that listens to what fans want”(一款倾听粉丝心声的类宝可梦游戏)。31 在这七条记录里,工作室自己的文字从不借这个名字来卖货。
采访里则直言不讳
在采访中,同一批开发者坦然谈论宝可梦:把它当作起点,然后从那里走开。Nintendo Life 在系列 30 周年之际,于 2026 年 3 月 2 日发表的专题中采访了其中几位。Crema 的 Guillermo Andrades:“In the early days of developing Temtem, we wanted to create almost a 1:1 homage to Pokémon”(在开发 Temtem 的早期,我们想做的几乎是对宝可梦 1:1 的致敬),后来团队才为“different approaches and unique twists”(不同的思路和独特的变化)找到了更多空间。Nexomon 的首席开发者 JVemon:“Strong inspirations needed to be drawn if we were to tap into the same player base.”(如果要触及同一批玩家,就得汲取强烈的灵感。)Coromon 的 Jochem Pouwels 把长草丛称为“a little slot machine of possibility”(一台小小的可能性老虎机)。Moonstone Island 的 Sandy Spink:“I got an atomic purple Game Boy Color and Pokémon Blue for my sixth birthday.”(我六岁生日时收到了一台透明紫色的 Game Boy Color 和《蓝》。)以及 Bytten Studio 的 Tom Coxon:“I’ve never felt like Pokémon was the only thing a monster-collecting RPG could be.”(我从来不觉得怪物收集 RPG 只能是宝可梦那个样子。)32
Cassette Beasts 是意图表达得最清楚的一款。据 Nintendo Life 2023 年 4 月的报道,它的出发点是这样一个问题:“How can two people make a monster-collecting game that does stuff that Pokémon doesn’t do?”(两个人怎样才能做出一款做宝可梦不做的事情的怪物收集游戏?)Jay Baylis:“We love Pokémon, sure, but we’re not making a game meant to be a tribute or derivative.”(我们当然爱宝可梦,但我们做的不是一款要当致敬作或衍生作的游戏。)82 Temtem 在 2018 年 4 月宣布时,Gematsu 用该媒体自己的话把它报道为“a massively multiplayer creature collection adventure game inspired by Pokemon”(一款受宝可梦启发的大型多人生物收集冒险游戏)。83
为什么奏效
我的解读: 这些工作室之间实际通行的准则,和法律与指南所指的方向是一样的。在交谈中说出宝可梦的名字来说明自己从哪里来;绝不用它来卖东西;一切都自己画;把循环改到足以称为自己的东西(Cassette Beasts 的融合,Moonstone Island 用卡牌取代对战)。Kiradex 比它们任何一款离这个类型都更远,完全没有生物、捕捉和对战,借的东西也更少:一段行走、一个时钟、一张卡片、一句说法。
12. 手艺,写成带数字的规则
简报就是由这些规则搭起来的。每条规则用一般性的措辞陈述一项机制,并注明它所依据的测量事实。这些数字是老游戏的数字,作为我们自己调校的起点保留,绝不作为可以导入的数据表;第 8 节的中国案件就是做这种区分的原因。69
| 要素 | 规则 | 来源 |
|---|---|---|
| 步数节拍 | 由步数推动的东西按 128 到 512 步的粗节拍推进,绝不每步都动,让奖励以事件而非仪表的形式到来 | 第二世代蛋每 256 步、亲密度每 512 步;第三世代每 128 步每只同行宝可梦一次 50% 的亲密度判定,蛋每 256 步 |
| 步数预算 | 受行走量限制的东西按步数而非秒数消耗;短、中、长三档保护为 100、200、250 步;一次外出 500 步 | 除虫喷雾,从第一世代到第三世代未变;《绿宝石》的狩猎地带 |
| 一天的时段 | 用设备自己的时钟把一天切成几个有名字的时段;我们的是 6、9、17、20 点,而不是游戏的 4、10、18 点 | 《水晶》的 TimesOfDay;Kiradex 的 Daylight.Phase |
| 约定 | 在固定星期几重复的活动,一个固定星期几的每周抽奖,每位联系人每个星期几最多一个时段 | 三天、每次 20 分钟的捕虫大赛;周五的幸运号码;24 个再战时段 |
| 生长 | 四个阶段,最后一个是前三个阶段各自长度的四倍(简报中为 256、256、256 和 1,024 广场步);回来时根据流逝时间计算;成熟的收获等四个阶段长度后掉落,只有非常长的离开才会清除植物 | 《绿宝石》树果:4 到 96 小时,结果阶段结束时未采的果实消失,离开 71 个阶段长度后树被清除 |
| 安全房间 | 站在里面时当天的变化永远不会触发的地方 | 《绿宝石》在宝可梦中心里跳过当天的更新 |
| 星星 | 四颗星,四种不同的玩法,每颗都为卡片重新上色;绝不一项活动给两颗,绝不能买 | 《绿宝石》的四颗星和五种卡片颜色 |
| 网格 | 一个箱子是 30 格的一页,6×5 | 第三世代的箱子,从每箱 20 增加而来 |
| 落差 | 放在路线上,绝不放在城镇里;第一条路线上 10 到 25 个落差格 | 《绿宝石》:路线上 726 个落差格,7 个城镇中为 0;101 号至 104 号道路上 13 到 24 个 |
| 连胜 | 七个一组,在第 5 组和第 10 组设里程碑 | 对战塔每轮 7 场的挑战;首脑出现在第 35 场和第 70 场 |
| 传播的说法 | 分数在设定范围内随机起始,每天漂移 5,在峰值变得过时,到 0 又变得新鲜;新说法只有分数更高才取代旧的;两个地方相遇时,共有说法以分数更高的为准;保留 5 个 | 《绿宝石》的流行语,分数起始于 30 到 127 之间;《绿宝石》还会让存档的第一个短语不经比较就进入,并以抛硬币决定完全平局,简报去掉了这两点,并自定范围 |
| 稀有的老师 | 一位难以找到的老师(我们的老师一次只待在一个房间,每周换地方),通过接触相遇;每次见面(每天至多一次)按固定顺序教隐藏列表中的下一个词 | 追潮流的人:五名玩家中一人,33 个隐藏词 |
| 收藏抽奖 | 研究过,但不实现:与玩家拥有的一切比对的抽奖会奖励大收藏,但奖品是随机的,而本系列的装饰物绝不随机 | 《绿宝石》的彩票中心;《水晶》每周的幸运号码;人物那篇文章的装饰物规则 |
| 打扰 | 任何不请自来的打扰,都用一个每次发生后从最长时间重新开始的计时器加一次抛硬币来控制,并且绝不在门口发生 | 《水晶》的来电计时器:来电后 20 分钟,没有来电时依次为 10、5、3 分钟,以及 50% 的判定 |
| 上限 | 自建场所的物品 16 件,卧室 12 件,保存的他人场所 20 个 | 《绿宝石》的秘密基地、卧室和基地数量上限 |
| 他人的世界 | 让其他玩家的场所、新闻和说法来到您的世界,而不需要他们同时在线 | 《绿宝石》5,188 字节的交换记录 |
| 表达 | 机制加上您自己的表达;不用游戏的名称、美术、音乐、文字或代码 | 2016 年至 2024 年的记录;Circular 33 |
| 被请求保护的步骤 | 去掉所读权利要求中的捕获、战斗和骑乘步骤:没有瞄准并投掷的捕获道具,没有捕获指示,没有被放出去战斗的伙伴,没有空中坐骑,没有以两种模式战斗的被召唤帮手 | JP 7493117、7545191、7528390;US 12,403,397 |
表格来源:计步器;121415411716 时钟;1845192146223 卡片和箱子;2324 落差;39 连胜;25 记录交换;4285826 抽奖;5636 来电;59 记录和权利要求。4411121361
有两条规则值得各说一句。安全房间是不读代码我就想不到的一条:一个会自己变化的世界,需要一个不变的地方,对 Kiradex 来说,那就是收藏者自己的房间。而表达这条规则,是把整个法律部分浓缩成一行,这就是它放在设计表里而不是免责声明里的原因:它是锻炉逐个像素遵守的规则,就像锻炉遵守调色板一样。
13. Apple 的做法:世界里的步数,日历给出的一天
简报的任何部分都不需要新的框架。它需要把两个决定做对:步数从哪里来,以及一天是什么。
一步是广场里的一步,而不是街上的一步
iOS 提供了两种统计一个人真实步数的方式。Core Motion 的 CMPedometer 自 iOS 8.0 起可用,是“An object for fetching the system-generated live walking data”(用于获取系统生成的实时步行数据的对象),使用它需要在 app 的 Info.plist 中提供一段用途说明,系统会在权限提示中显示;HealthKit 的 stepCount 数量类型同样自 iOS 8.0 起可用,是“A quantity sample type that measures the number of steps the user has taken”(测量用户所走步数的数量样本类型)。8485
简报两者都不用。第 14 节里让植物生长的步数,是广场里的步数。服务器已经会拒绝移动到任何不可行走的图块,并对收藏者的移动频率做了限速;它还没有检查一次移动是否是到相邻的图块,所以“计一步”就意味着计一次被接受的、一格的移动,这一点由简报的验收测试固定下来。86 我的解读: 一款儿童 app 为了让一个像素装饰生长而申请运动或健康权限,是不相称的;这会在一款收藏 app 里放进一个与收藏无关的健康权限,还会把这盆植物变成健身追踪器,那是另一种产品。老游戏数的也是世界里的步数。
一天是收藏者日历上的一天
Kiradex 已经从设备时钟读取钟点:Daylight.Phase(hour:) 把 6 到 9 点映射为早晨,9 到 17 点为白天,17 到 20 点为傍晚,其余为夜晚,而 -plazaHour 启动参数会为 UI 测试固定钟点。45 一天一次的事件还需要一个概念:日期键。Foundation 的 Calendar 直接提供了它。startOfDay(for:) 返回“the first moment of a given Date”(给定 Date 的第一个时刻),isDate(_:inSameDayAs:) 回答两个日期是否在同一天,两者都自 iOS 8.0 起可用;传入 Calendar.current,它们就按收藏者自己的日历来回答。8788 下面是早晨木箱检查的草图,还没有进入 app。木箱在 06:00,也就是 Daylight 早晨的开始时到达,并一直等到被打开,所以检查只问今天的木箱是否已经到达、是否已经被打开。它读取钟点的方式与广场的舞台已有的方式相同:测试用 -plazaHour 启动 app 时取 Daylight.forcedHour,否则取收藏者的时钟,所以简报的 UI 测试可以驱动它:
/// Whether a crate is waiting for this collector now: today's crate has
/// arrived (it comes at 06:00, the start of Daylight's morning) and they
/// have not opened one today. It does not leave at 09:00.
func crateIsWaiting(lastOpened: Date?, now: Date = .now,
calendar: Calendar = .current) -> Bool {
let hour = Daylight.forcedHour ?? calendar.component(.hour, from: now)
guard hour >= 6 else { return false }
guard let lastOpened else { return true }
return !calendar.isDate(lastOpened, inSameDayAs: now)
}
这在形态上就是《绿宝石》的 UpdatePerDay:当天的状态在到达时根据日期计算,不需要任何东西一直运行才能保证它正确。22 对于跨越午夜仍开着的 app,有两个通知可以重新启用它。NSCalendarDayChanged“posted whenever the calendar day of the system changes, as determined by the system calendar, locale, and time zone”(每当系统的日历日按系统日历、区域设置和时区发生变化时发出),自 iOS 8.0 起可用;UIKit 的 significantTimeChangeNotification 会在“a change to a new day (midnight), a carrier time update, or a change to, or from, daylight savings time”(进入新的一天(午夜)、运营商更新时间,或进入或退出夏令时)时发出。8990
服务器需要什么
广场的服务器目前只负责在线状态:它转发位置和预设台词,什么也不存储。8633 简报中的两项会改变这一点,而且两者性质不同。会传播的说法需要每个广场房间一条小小的持久记录:两个词的索引、一个分数、一个峰值、一个漂移方向,以及最后一次应用漂移时的服务器日期,不包含任何关于谁提出或携带了这句说法的信息。这条记录属于房间,而不属于人。每周展厅的玫瑰徽章需要每位收藏者的参赛次数,而这确实属于人:它是参与历史,存储在服务器用来识别收藏者的那个标识符之下。目前那个标识符是 app 自己生成的:收藏者第一次加入广场时在设备上生成的一个 UUID,保存在 app 的存储中,每次连接时发送,服务器把它当作 UUID 读取。86 app 的世界设计文档计划改用 Game Center 的玩家 id 作为服务器的键,并这样说它:“That is a persistent identifier, which COPPA counts as personal information when combined with other data”(那是一个持久标识符,COPPA 认为它与其他数据结合时属于个人信息),所以设计配有隐私政策,没有第三方分析或广告,有“deletion on request”(应要求删除),并且被构建为“to collect as little as possible from anyone”(从任何人那里收集尽可能少的信息)。37 按我的解读,app 自己的 UUID 也是持久标识符,因为它生成一次后就被保留,所以无论参赛次数存在两个标识符中的哪一个之下,这些规则都适用(简报第 5 项说明了做法)。我的解读: 凡是收藏者之间共享的东西,比如说法每天的漂移,都应该按服务器的日期而不是手机的日期运行,因为手机的时钟可以往前调;凡是私人的、装饰性的东西,比如木箱,可以信任手机,因为把自己的时钟往前拨来提早打开一张贴纸,并不会让任何人吃亏。
代价
这里的一切都还没有构建,所以什么都没有计时。一个日期键是一次日历调用,一个计步器是每位收藏者一个整数;我预计两者都不会出现在性能分析里,但在一个构建版本在手机上测量之前,我不会把这当作事实来说。
14. 简报:Kiradex 要构建什么,以及必须通过的检查
这一节是我的综合,为这个 app 而写。每一个要素都保留了第 2 至第 6 节中的一项机制,并把全部表达替换成 Kiradex 自己的:它的调色板、锻炉绘制的图块、预设台词和 kira 星。每一项都写明了不得相似的东西,以及一项测试、一次截图或一个脚本可以执行的检查。法律注释是解读,不是意见。
已经存在、在其上构建的东西:16 像素图块的广场,预设台词保存在服务器上,服务器只负责在线状态、什么也不存储;Daylight.swift 及其自己的时段(早晨 6 到 9 点,白天 9 到 17 点,傍晚 17 到 20 点,夜晚),它们本来就不是《水晶》的 4、10、18 点,并会保持这样;带主题的每周展厅;收藏者卡片,上面有赞助等级、徽针和来自真实扫描的等级;以及每位收藏者的房间。86453533
1. 窗台上的植物:一个让房间里长出东西的计步器
- 机制。 每位收藏者的房间窗边都有一盆植物。广场和路线上的步数喂养它:每 256 步长一个生长阶段,共四个阶段(育苗盘、新芽、枝叶繁茂、开花);最后一个阶段持续四倍长,然后落下一朵压花,那是一件房间装饰,颜色取小镇 14 条调色板色阶中按固定顺序排在下一位的那一条,绝不随机,然后植物从新芽重新开始。房间里的步数永远不计:房间是安全的地方,就像《绿宝石》在秘密基地里暂停中毒、在宝可梦中心里暂停当天的更新一样。(规则:步数节拍、生长、安全房间。)1142234
- 原因。 行走是广场上唯一恒定的动作;粗节拍让花成为一个事件;而花是可以摆放的东西,又反过来充实房间。
- 步数是广场步数,不是健康数据。 不用 Core Motion,不用 HealthKit(第 13 节)。
- 不得相似。 蛋、孵化器、任何会孵化的东西、树果树、树果的名称或 sprite、与收获档次挂钩的浇水机制、培育屋。任何会变成生物的东西都不行。任何字符串里都不出现“berry”“egg”或“hatch”(树果、蛋、孵化)。
- 验收标准。 一项服务器测试让一个机器人逐格走 2,048 步,断言在 256、512 和 768 步时阶段变化,在 1,792 步时落下一朵压花、植物回到新芽(开花阶段持续 1,024 步),下一次变化在 2,048 步,而在房间地图内走的步以及被接受的超过一格的移动都不会引起变化;每个阶段的房间截图显示锻炉绘制的植物,调色板检查确认每个像素都在锻炉的调色板里。
2. 早晨的木箱:带早晨事件的每日时钟
- 机制。 在 Kiradex 自己的早晨开始时,也就是收藏者时钟的 06:00(
Daylight.Phase.morning从 6 点开始),一个送货木箱会出现在卡牌店门外,并一直留在那里直到被打开。打开它会得到一份固定清单上的下一样东西:一张贴纸、一种相框颜色,或者一个用于说法的词(第 6 项)。每天一个木箱,永远不会堆积。当天的状态在到达时根据本地日期计算,绝不依赖一个持续运行的计时器。(规则:一天的时段、约定、生长。)4522 - 没有倒计时,没有运气。 本系列关于装饰物的规则是“never random, never on a countdown”(绝不随机,绝不倒计时)。36 所以木箱没有截止时间:它不会在 09:00 离开,而且由于内容按顺序出自同一份清单,跳过一天只会推迟下一张贴纸,永远不会让人错过一张。早晨是它到达的时间,而不是一个必须赶上的窗口。
- 一周的形状。 像《水晶》那样给一周安排有名字的日子,但每天至多一个约定:展厅的评审日按计划保持每周一次,另外某个工作日的傍晚,店主会重新布置橱窗。1921
- 不得相似。 捕虫大赛(周二、周四和周六的限时捕捉)、钢铁的精灵球制作、广播抽奖节目、宝可装置或电话。游戏内没有任何来电。
- 验收标准。 以
-plazaHour 7启动的 UI 测试显示一个未打开的木箱,以-plazaHour 21启动的也一样;以-plazaHour 5启动的还什么都不显示。针对日期键的单元测试表明,同一个本地日期内打开两次的木箱只发放一次,把日期往后推一天就会重新启用;一项跳过三天再打开木箱的测试拿到的是清单上的下一件,而不是往后数第三件。
3. 带星星的收藏者卡片
- 机制。 别人点您时弹出的那张卡片最多可以获得四颗星,每颗对应一种不同的玩法,卡片边框随着每颗星按 Kiradex 自己的顺序变化:没有星时是素面,然后是哑光、箔线、全息边框,四颗星时是满 kira。建议的星星都来自真实的收藏或广场玩法:通过扫描集齐一套真实的卡牌系列;拜访 100 个不同的房间;在每周展厅中获得名次;以及在 30 个不同的日子扫描。赞助等级作为卡片上单独的一行保留,绝不成为一颗星。(规则:星星。)23
- 为什么不是连续 30 天。 调研档案提出的是 30 天的扫描连续记录。我把它改成了 30 个不同的日子,这些日子永不过期,因为会中断的连续记录会惩罚离开一周的孩子,也因为正如本系列人物那篇文章所记录的,PEGI 自 2026 年 6 月起已把会过期的登录连续记录纳入评级。3336
- 不得相似。 “训练家卡片”这个名称;训练家卡片的版式(右侧肖像、底部一排徽章、ID 号和金钱);绿、青铜、紫铜、白银和金色的卡片配色;徽章形状;道馆相关的内容;名人堂时间。星星只画成 Kiradex 的 kira 星。
- 验收标准。 一项快照测试渲染 0 到 4 颗星的卡片,确认五种边框按此顺序出现;一项单元测试证明没有任何购买路径会设置星星(StoreKit 交易永远不触碰星星字段);在字符串目录中搜索“Trainer”一无所获。
4. 路线上的单向落差
- 机制。 在广场外的路线上设置一格高的单向落差:从上面走下去会下降一行,永远不能爬回去。每一段落差都让回程变成另一条路,所以短路线里有一个环。第一条路线上 10 到 25 个落差格,对照 101 号至 104 号道路的 13 到 24 个;城镇里没有。(规则:落差。)39
- 由谁决定。 建筑研究拒绝了落差,因为在俯视视角下自由的高度很难读懂;一格高的单向落差没有高度,只是行走图中的一条有向边。本简报是收窄这一拒绝,而不是推翻它,决定权属于本系列讨论高低差和路线的文章。3533
- 不得相似。 宝可梦的落差图块(顶缘发亮的草边加一道暗色阴影线)、它的跳跃动画或音效。在锻炉中用 Kiradex 的调色板画成石砌路缘或树篱台阶,并配上自己的下落帧。
- 验收标准。 服务器的行走校验在落差格处有有向边;一项测试断言反方向的一步被拒绝;一个广度优先搜索脚本报告一条与去程不同的回程路径。
5. 每周展厅,七次一组
- 机制。 保留展厅已经计划好的每周评审。把开拓区的形状加在参与上,而不是加在获胜上:每参加七次,收藏者卡片上就多一枚展厅玫瑰徽章,在第 35 次和第 70 次参加,也就是第五组和第十组时,展厅管理员会出来看他们的展示。参赛次数无论何时发生都算,绝不只算连续的几周,理由同第 3 项。玫瑰徽章来自参与和获得名次,绝不来自购买。(规则:连胜。)25
- 数据。 参赛次数是与收藏者标识符绑定的参与历史,所以按 app 自己的规则属于个人信息:它只存储在服务器用来识别收藏者的那一个标识符之下,无论当时是哪一个,不与其他任何东西关联(目前是 app 为广场生成的 UUID;一旦服务器按世界设计文档的计划改用 Game Center 玩家 id 作为键,就是后者;两者都是持久标识符),受隐私政策约束,绝不发送给分析或广告服务,并在收到删除请求时与该收藏者的其余记录一并删除。它只是一个累计数,不保留单次参赛的日志。世界设计文档没有设定保留期限;那要交给文档本身已经要求的律师审阅。3786
- 不得相似。 华丽大赛的类别(帅气、美丽、可爱、聪明、强壮)、级别名称(普通级、超级、高级、大师级)、华丽大赛会场的舞台、表演回合、对战塔、开拓区标志、宝可梦缎带设计。Kiradex 的玫瑰徽章是自己的,用自己的调色板。
- 验收标准。 一项服务器测试让一名模拟参赛者参加 70 次,断言在第 7、14 次等处获得玫瑰徽章,在第 35 和 70 次时管理员来访;一项用最高等级赞助者进行的测试显示评分没有差别;一项删除测试删除一名收藏者后,确认在其标识符下没有留下任何参赛次数。
6. 本周的说法:一句在广场之间传播的短语
- 机制。 每个广场房间都有一句说法:两个词,取自 Kiradex 自己的预设词汇,一个表达感受的词加一个收藏用词(“lucky binder”“quiet holo”)。当有人提出一对词时,服务器给它一个 25 到 100 之间的峰值,这是 Kiradex 自己的范围(《绿宝石》的范围是 30 到 127,在 7 位字段的上限之内),以及一个介于 25 和该峰值之间的起始分数。分数每天上涨 5,直到峰值,此时说法变得过时;然后每天下降 5,直到下限 0,此时它变得新鲜并再次上涨;某天的变动如果会越过峰值或下限,就停在那里。收藏者可以在布告栏提出一对新词;只有分数严格更高时它才会取代房间里的说法,平分时房间保留原来的。这是 Kiradex 的简化:《绿宝石》让存档的第一个短语不经比较就进入,并以抛硬币决定完全平局。收藏者从一个房间走到另一个房间时,说法随之旅行,两个房间的说法相遇处,分数高的胜出。小镇里的收藏者会重复当前的说法。其中一位,收词人,一次只待在一个房间,每周换地方;和他交谈会按固定顺序解锁隐藏列表中的下一个预设词,绝不随机,每天至多一个。(规则:传播的说法、稀有的老师。)428
- 服务器。 每个房间一条小小的持久记录:两个词的索引、一个分数、一个峰值、一个漂移方向,以及最后一次应用漂移时的服务器日期。读取时,服务器对自该日期以来的每一天应用 5 分,一天一天地应用,然后存下今天的日期,所以无论房间被读取多少次、服务器是否重启,每一天都只应用一次。《绿宝石》的
UpdatePerDay用一个存储的天数做同样的事:把它和今天的比较,把差值交给流行语,然后存下今天的。22 这条记录属于房间:其中没有任何关于谁提出或携带了这句说法的信息(第 13 节)。 - 儿童安全。 只用预设词,来自服务器持有并可以停用的列表,就像广场的预设台词已经做到的那样。没有自由文本,也没有用户自创的词。86
- 不得相似。 简易会话的词组和词(包括 33 个 Trendy Sayings)、武斗镇大厅、紫堇市的老爷爷、追潮流的人的外观、作为具名功能的记录交换、关于流行趋势的电视节目。
- 验收标准。 一项服务器测试:一名收藏者从房间 A 走到房间 B 时,A 中分数为 90 的说法遇到 B 中分数为 60 的说法,B 的说法变成 A 的;一对与房间说法分数相同的新词不会取而代之。一项漂移测试让一句说法从 45 开始、处于上升中、峰值为 60:在下一个服务器日期读取三次后它是 50,而不是 60;服务器重启后在该日期读取仍是 50;然后十天不读取,第一次读取一次性应用全部十天,涨到 60、变得过时,再降到 20,与每天读一次的结果相同;一句分数为 10 的过时说法,三天后读取为 5,在触到 0 之后正在上升。91 一个脚本把预设词汇与 pokeemerald 的简易会话词表进行比对,确认没有共有的多词条目(像“hello”这样常见的单个词无法避免,也无妨)。一项收词人测试:收藏者与他的第 n 次交谈(每次在不同的日子)解锁隐藏列表上的第 n 个词,同一天再谈则什么也不解锁。
绝不
- 世界中的任何地方都没有宝可梦的表达: 没有生物,没有生物剪影,也没有与之神似的原创生物,没有训练家、道具、地名、音乐、音效、图块、sprite、调色板或屏幕版式取自、描摹自或重画自任何一款宝可梦游戏。37
- 不把系列词汇用作功能名称: 宝可梦图鉴、精灵球、任何 Poké 开头的东西、训练家卡片、道馆、徽章、四天王、名人堂、狩猎地带、除虫喷雾、秘密基地、记录交换、简易会话、Trendy Saying、华丽大赛、宝可导航、宝可装置、Match Call、对战搜寻器、对战塔、开拓区。我没有核查其中哪些是注册商标;合在一起,它们会把一款产品标记为衍生品,而致敬游戏自己的商店说明连系列名都不用。31
- 不做任何被请求保护的捕获、战斗或骑乘步骤: 没有为捕获任何东西而瞄准并投掷的东西;没有捕获可能性指示;没有被放出去战斗的伙伴;没有飞行或滑翔的坐骑;没有以两种模式战斗的被召唤帮手。11121361
- 不在 app 或锻炉中使用来自反编译的代码或数据。 它们用于研究和测量;其代码和素材源自那些游戏。
- 营销中除了 app 规则允许的那一行说明性描述外,不出现“Pokémon”: App Store 名称、副标题、图标、截图、广告和预告片都保持干净。3731
- 不搞建立在宝可梦情怀之上的众筹或媒体推介。 先上新闻再筹款,正是 The Pokémon Company 前首席律师描述的触发条件。67
- 不要赌博的形态,装饰物不靠运气: 没有老虎机,没有游戏城,没有抽奖,没有随机物品,付费的免费的都没有。3336
- 不向 The Pokémon Company 或任天堂发送创意或同人作品, 也不使用它们的粉丝或创意渠道:它们的规则会让这类作品反向许可给它们,并声明不接受外部主动提出的创意。60
- 卡牌图片不超出识别用途: 绝不打包进 app,绝不用于营销美术,绝不印在周边上。37
- 不用健康或运动数据换取游戏奖励(第 13 节)。
不在本简报中
代币和游戏城(上文已拒绝);每日抽奖(曾起草过一个与扫描卡牌的收藏编号比对的版本,后来放弃了,因为奖品是随机的);电话和电视(广场的预设台词已经会说话,而一个会给孩子的手机打电话的世界,不是我想构建的世界);大量出现和成群出现(没有生物可以成群);电脑箱子(一份收藏如何在一页上排列,属于房间那篇文章);自行车和可砍的树(它们属于路线);秘密基地的上限(房间的上限归房间那篇文章管);以及宝可全能竞技赛的一切。
诚实的局限
读了四项专利,三项日本的、一项美国的,取自 Google Patents,日本的权利要求读的是机器翻译;没有就计步器、时钟或传播短语做专利检索;没有咨询律师。截至 2026 年 10 月 4 日,Palworld 案仍未结束:技术说明会排在 10 月 1 日,结果没有报道,法院的初步看法排在 11 月 9 日。美国再审查的下一步没有报道。The Pokémon Company 的美国法律页面无法访问。上面的每一项,都是我认为可以作为我们自己的表达自由使用的机制,而每一个这样的认为,都是一种解读。297980
核心要点
如果您负责画美术
- 每一个像素都自己画,用自己的调色板,按自己的规则。记录中招来行动的每一个同人项目,都使用了游戏自己的名称、美术或代码,或者链接到使用了这些东西的游戏。5678
- 即使机制本身不是表达,机制的外观也是表达:落差可以是一道石砌路缘,星星可以是您自己的星,卡片的颜色可以是您自己的顺序。在动笔之前,先写下每个元素不得与什么相似。
- 词汇要用自己的。训练家卡片、狩猎地带、秘密基地之类的名称会把产品标记为衍生品;致敬游戏自己的商店说明连系列名都不用。31
如果您负责构建引擎
- 在世界里计步,而不是在人身上计步:计一次经服务器校验的一格移动,绝不为了一件装饰去用 Core Motion 或 HealthKit。8684
- 在到达时根据日期键(
startOfDay(for:)、isDate(_:inSameDayAs:))计算当天,用NSCalendarDayChanged重新启用,后台不保留任何持续运行的东西;这就是用 Swift 写的《绿宝石》的UpdatePerDay。87888922 - 共享的东西按服务器的时钟运行,私人的、装饰性的东西按手机的时钟运行。
- 绝不发布来自反编译的代码或数据;读它,测量它,引用它。
如果您负责设计循环
- 用粗节拍(128 到 512 步)回报行走,让预算按步数而不是秒数消耗,并让离开的代价很小:《绿宝石》成熟的树果要等四个阶段长度才掉落,只有非常长的离开才会清除这棵树。1214153
- 给一周安排有名字的日子,每天至多一个约定,并保留一个什么都不会变的安全房间。192122
- 四颗星,四种不同的玩法,一颗都不卖;如果玩家是孩子,就统计参与次数,而不是不间断的连续记录;也不要有靠运气或赶时间获得的装饰物。2336
- 让别人的世界来到您的世界:一句带分数、漂移和接触规则的说法,会在玩家相遇时旅行,无需任何通告。426
- 逐步阅读您所在类型的专利权利要求,记下您的设计确实执行了哪些步骤(这里,通过输入移动角色就是其中之一),并去掉让每项权利要求之所以成立的那些步骤;然后明确说出您读了哪些专利。这是我的解读,不是法律意见。11121361
常见问题
能做一款受宝可梦启发的游戏而不被起诉吗?
没人能保证这一点,这也不是法律意见。不过记录是一致的:在这份记录中,2016 年至 2024 年间招来下架的同人项目,使用了宝可梦自己的名称、美术或代码,或者链接到使用了这些东西的游戏;而唯一一起围绕机制打的官司 Palworld,所依据的专利,其权利要求要求的是特定步骤,例如瞄准并投掷捕获道具。567810 著作权不保护系统或操作方法,但商标保护名称,而专利可以请求保护一种游戏方法。4411 Coromon、Temtem 和 Cassette Beasts 这样的致敬游戏用自己的美术推出了这一类型,它们 Steam 页面上的简短说明和详细说明,也就是我统计的那些由开发者撰写的字段,从不使用这个名字;Temtem 的页面在一条媒体引语中出现过一次。31
Pokémon Uranium 收到停止侵权函了吗?
按其开发者的说法,没有。Kotaku 在 2016 年 8 月 13 日报道的他们的声明说,在超过 1,500,000 次下载之后,他们“been notified of multiple takedown notices from lawyers representing Nintendo of America”(获悉了代表 Nintendo of America 的律师发出的多份下架通知),并说“we have not personally been contacted”(我们本人并没有被联系);下载链接是他们自己撤下的。5 Pokémon Prism 确实收到了一封,时间是 2016 年 12 月 21 日,比计划的发布日早四天。665
任天堂和 The Pokémon Company 用哪些专利起诉 Palworld?
三项日本专利,在 Pocketpair 2024 年 11 月 8 日的报告中被点名:第 7545191 号(从准备姿态瞄准并投掷捕获道具或战斗角色,用第二个按钮选择道具或角色)、第 7493117 号(显示捕获成功可能性的指示)和第 7528390 号(骑乘自己拥有的角色,包括在半空中登上会飞的角色)。三项都是在 2024 年、Palworld 发售之后,作为分案申请提交的,其优先权可追溯到 2021 年 12 月 22 日提交的申请。1072111213 一项美国专利 12,403,397,涉及一个以两种模式战斗的被召唤副角色,目前正在再审查中,还没有关于在美国起诉 Pocketpair 的报道。6179
Palworld 诉讼结束了吗?
截至 2026 年 10 月 4 日,还没有。Automaton 在 2026 年 6 月根据东京地方法院的记录报道,原告在 2025 年 11 月把诉讼请求缩窄到 Palworld 的旧版本,同时仍在寻求禁令,技术说明会排在 2026 年 10 月 1 日,法院的初步看法排在 2026 年 11 月 9 日。没有任何判决、和解或禁令的报道,而 Pocketpair 自 2025 年 5 月 8 日以来没有发布任何关于这起诉讼的内容。2930
任天堂允许同人游戏吗?
据我所能找到的,任天堂或宝可梦公布的指南中,没有一份涵盖同人游戏。任天堂的游戏内容指南涵盖游戏画面和截图,并说对其知识产权的任何其他使用“is subject to the relevant laws of the applicable jurisdiction”(受适用法域的相关法律约束);The Pokémon Company 的日本网站规则让二次创作作品反向许可给公司,而对创作者,除了个人使用之外什么也不许可。8160 按我的解读,没有安全港,只有执法上的自由裁量;该公司的前首席法务官说过,触发条件是先上新闻、再筹款。67
老宝可梦游戏里的计步器是怎么运作的?
大地图上的每一步都经过同一个例程。在《金·银·水晶》中,它每 256 步让队伍中的蛋向孵化推进,每 512 步提升队伍的亲密度(它的亲密度例程每 256 步被调用一次,每隔一次调用才动作),每 4 步伤害一只中毒的宝可梦,并在骑行 1,024 步后让自行车店老板打来电话;在《绿宝石》中,每 128 步队伍里每只宝可梦有 50% 的几率获得亲密度,蛋每 256 步失去一个周期,按队伍顺序推进到第一个准备孵化的蛋为止。狩猎地带(500 步)和除虫喷雾(100、200 和 250 步)是靠行走来花的预算。121415411617
《金·银》的实时时钟改变了什么?
一天有三个时段:早晨从 4:00 起,白天从 10:00 起,夜晚从 18:00 起;捕虫大赛在周二、周四和周六举行,每次 20 分钟;幸运号码抽奖每周一次,在周五;24 位训练家各自可以在一个星期几的一个时段被叫来再战;16 个每日标志在午夜重置。1819214620 《绿宝石》在此之上加了一本日历:需要 4 到 96 小时才结果的树果,以及每天漂移 5 分的流行语。34
本站相关内容:在 iPhone 上造一个像素艺术世界是本系列的第一篇指南,介绍了描绘小镇所用的图块系统、调色板和 RealityKit 配方,其法律 FAQ 就是本文第 7 至第 10 节的简短版;像素艺术建筑建造了小镇的房屋、展厅和摆放那盆植物的房间,并把单向落差列为小镇目前还没有的东西之一;像素艺术人物讲的是那位会走完 256 步的收藏者,其中关于装饰物和儿童的规则,正是第 3 项从连续记录改过来的依据。
参考来源
-
pret,
pokecrystal/engine/overworld/events.asm,提交5beda23(第 877 行起的CountStep:DoRepelStep、wStepCount,注释“Every 256 steps, increase the happiness of all your Pokemon”“Every 256 steps, offset from the happiness incrementor by 128 steps”及cp $80,“Every 4 steps, deal damage to all poisoned Pokemon”;培育屋的经验值步数处理;第 1279 行起的DoBikeStep,含cp HIGH(1024)和 65,535 上限),https://github.com/pret/pokecrystal/blob/master/engine/overworld/events.asm。常量和行号由作者为本文准备的证据文件夹中的measure_systems.py打印(输出measure_systems.out.txt),2026 年 10 月 4 日运行;行为描述是作者对代码的解读。 ↩↩↩↩↩↩↩↩↩↩↩ -
pret,
pokecrystal/engine/events/happiness_egg.asm,提交5beda23(第 107 行的StepHappiness;第 108 行的注释“Raise the party’s happiness by 1 point every other step cycle”;第 110 至 115 行的ld hl, wHappinessStepCount、inc a、and 1、ld [hl], a、ret nz;用cp EGG跳过蛋),https://github.com/pret/pokecrystal/blob/master/engine/events/happiness_egg.asm,每当单字节的wStepCount回绕时由engine/overworld/events.asm中的CountStep调用。行号由measure_systems.py打印,输出measure_systems.out.txt,2026 年 10 月 4 日重新运行;亲密度每 512 步上升一次,是作者对这一翻转的解读。 ↩↩↩↩↩↩↩↩ -
pret,
pokeemerald/src/berry.c,提交731ad5b(BerryTreeTimeUpdate,第 1089 行的* 71清除判断,第 1109 和 1127 行的minutesUntilNextStage *= 4,第 1071 行的 10 次重新生长重置,第 1252 行返回stageDuration * 60的GetStageDurationByBerryType,CalcBerryYieldInternal;第 1064 至 1072 行的BerryTreeGrow,结果阶段结束时将berryYield = 0并把阶段设回BERRY_STAGE_SPROUTED;43 种树果的stageDuration值)以及pokeemerald/src/clock.c(UpdatePerMinute),https://github.com/pret/pokeemerald/blob/master/src/berry.c。按阶段时长的计数(1 小时:5,3 小时:12,4 小时:1,6 小时:11,12 小时:1,18 小时:5,24 小时:8)和到第一次结果的小时数由measure_systems.py推导,输出measure_systems.out.txt,2026 年 10 月 4 日。 ↩↩↩↩↩↩↩↩↩↩↩ -
pret,
pokeemerald/src/dewford_trend.c,提交731ad5b(文件开头的注释:流行度“Initialized as a random value between 30-127 inclusive”,接受规则和“boring”规则,SAVED_TRENDS_COUNT (5),记录交换规则;第 96 行含clockRand = days * 5的UpdateDewfordTrendPerDay;第 369 至 383 行的SeedTrendRng,抽取Random() % 98再加 30;第 151 行起的TrySetTrendyPhrase,其第 158 至 169 行的首次提交分支在存档从未改变过流行语、也从未交换过记录时不经比较直接设置词语,第 181 行的比较使用SORT_MODE_NORMAL下的CompareTrends,第 332 至 337 行和第 366 行:先比流行度,再比最大流行度,完全平局时用Random() & 1),https://github.com/pret/pokeemerald/blob/master/src/dewford_trend.c,以及同一提交的include/global.h(第 643 和 644 行的trendiness:7和maxTrendiness:7,所以分数不能超过 127)。行号由measure_systems.py打印。 ↩↩↩↩↩↩↩↩↩↩↩ -
Jason Schreier,“Pokémon Uranium Creators Pull Game After A Reported 1.5 Million Downloads”,Kotaku,2016 年 8 月 13 日(页面上的日期;美国东部时间 20:34,即 UTC 的 8 月 14 日),全文刊登开发者声明,2026 年 10 月 4 日访问,https://kotaku.com/pokemon-uranium-creators-pull-game-after-1-5-million-do-1785258831。 ↩↩↩↩↩↩↩↩
-
Heather Alexandra,“Pirates Leak Pokémon Prism After Nintendo Shuts It Down”,Kotaku,2016 年 12 月 29 日(12 月 21 日的停止侵权函、计划的圣诞节发布、Pokémon Brown 和 Rijon Adventures 被撤下),2026 年 10 月 4 日访问,https://kotaku.com/pirates-leak-pokemon-prism-after-nintendo-shuts-it-down-1790598623。 ↩↩↩↩↩↩↩
-
Cohen Coberly,“Nintendo slaps fan game creation tool ‘Pokemon Essentials’ with DMCA takedown”,TechSpot,2018 年 8 月 29 日,跟进 Ars Technica 的报道(Fandom 的配合、PokéCommunity 删除下载、关于素材的引语),2026 年 10 月 4 日访问,https://www.techspot.com/news/76202-nintendo-slaps-fan-game-creation-tool-pokemon-essentials.html。 ↩↩↩↩↩
-
Catherine Lewis,GamesRadar+,“After almost 10 years, unofficial Pokemon website known for sharing fan-made games shuts down after reportedly receiving a DMCA takedown notice”,2024 年 3 月 22 日(Relic Castle 的声明;只提供链接而不托管;发件人未经证实),2026 年 10 月 4 日访问,https://www.gamesradar.com/after-almost-10-years-unofficial-pokemon-website-known-for-sharing-fan-made-games-shuts-down-after-reportedly-receiving-a-dmca-takedown-notice/。 ↩↩↩↩↩↩
-
Nintendo Co., Ltd. 与 The Pokémon Company,“Filing Lawsuit for Infringement of Patent Rights against Pocketpair, Inc.”,联合新闻稿,2024 年 9 月 19 日(2024 年 9 月 18 日向东京地方法院提起;禁令和损害赔偿),2026 年 10 月 4 日访问,https://www.nintendo.co.jp/corporate/release/en/2024/240919.html。 ↩↩
-
Pocketpair,“Report on Patent Infringement Lawsuit”,重要公告,2024 年 11 月 8 日(Palworld 于 2024 年 1 月 19 日发售;第 7545191、7493117 和 7528390 号专利及其申请日和登记日;禁令,以及向每位原告支付 500 万日元及迟延损害金),2026 年 10 月 4 日访问,https://www.pocketpair.jp/en/news/report-on-patent-infringement-lawsuit/。 ↩↩↩↩↩↩
-
Google Patents,JP7493117B2,“Game program, game system, game device, and game processing method”(受让人 Nintendo Co., Ltd. 和 The Pokémon Company;申请日 2024 年 2 月 26 日;优先权表给出的优先权日为 2021 年 12 月 22 日,要求优先权的申请表列出同日提交的 JP2021208275A,即 JP7398425B2,公开文献列表显示 JP7398425B2 于 2023 年 12 月 14 日公开),权利要求 1 为 Google 从日文的机器翻译,2026 年 10 月 4 日保存,并由作者为本文准备的证据文件夹中的
measure_patent_claims.py提取(输出measure_patent_claims.out.txt),https://patents.google.com/patent/JP7493117B2/en。以日文文本为准。 ↩↩↩↩↩↩↩↩↩↩ -
Google Patents,JP7545191B1,“Game program, game system, game device, and game processing method”(受让人 Nintendo Co., Ltd. 和 The Pokémon Company;申请日 2024 年 7 月 30 日;优先权日 2021 年 12 月 22 日,经由其母申请 JP2024031879A,后者是与 JP2021208275A 同族的分案,JP2021208275A 于 2021 年 12 月 22 日提交,2023 年 12 月 14 日以 JP7398425B2 公开),权利要求 1 为 Google 的机器翻译,2026 年 10 月 4 日保存,由
measure_patent_claims.py提取,https://patents.google.com/patent/JP7545191B1/en。以日文文本为准。 ↩↩↩↩↩↩↩↩ -
Google Patents,JP7528390B2,“Game program, game system, information processing device, and information processing method”(受让人 Nintendo Co., Ltd. 和 The Pokémon Company;申请日 2024 年 3 月 5 日;优先权日 2021 年 12 月 22 日,属于同日提交的 JP2021208276A 的同族,后者于 2023 年 9 月 22 日以 JP7349486B2 公开),权利要求 1 为 Google 的机器翻译,2026 年 10 月 4 日保存,由
measure_patent_claims.py提取,https://patents.google.com/patent/JP7528390B2/en。以日文文本为准。 ↩↩↩↩↩↩↩↩ -
pret,
pokeemerald/src/field_control_avatar.c,提交731ad5b(第 543 至 604 行的TryStartStepCountScript,包括第 565 行的ShouldDoBrailleRegicePuzzle及IslandCave_EventScript_OpenRegiEntrance,以及第 570 至 590 行的五个ShouldDo...Call检查;亲密度对应第 620 行的(*ptr) %= 128;中毒对应第 645 行的(*ptr) %= 4,在秘密基地中跳过),https://github.com/pret/pokeemerald/blob/master/src/field_control_avatar.c。行号由measure_systems.py打印。 ↩↩↩↩↩↩↩↩ -
pret,
pokeemerald/src/pokemon.c,提交731ad5b(第 5914 行起的AdjustFriendship;用species != SPECIES_EGG排除蛋;对于FRIENDSHIP_EVENT_WALKING,第 5950 至 5952 行的注释“50% chance every 128 steps”和if (Random() & 1) return;;第 2100 行的步行修正值{ 1, 1, 1}),https://github.com/pret/pokeemerald/blob/master/src/pokemon.c,以及src/field_control_avatar.c(UpdateFriendshipStepCounter,在第 624 至 626 行对队伍的每个栏位调用AdjustFriendship(mon, FRIENDSHIP_EVENT_WALKING))。行号由measure_systems.py打印,2026 年 10 月 4 日重新运行;平均每 256 步一次,是由 128 步节拍上的 50% 判定推导出来的。 ↩↩↩↩↩↩ -
pret,
pokered/scripts/SafariZoneGate.asm,提交d2704a6(第 186 行的 30 个球,第 188 和 190 行的HIGH(502)/LOW(502),第 214 行的 500 元文本,随后第 192 至 194 行的ld a, PAD_UP、ld c, 3和call SafariZoneEntranceAutoWalk,以及第 195 行的SetEvent EVENT_IN_SAFARI_ZONE;步数本身在engine/events/hidden_events/safari_game.asm中递减,此处未作模拟),https://github.com/pret/pokered/blob/master/scripts/SafariZoneGate.asm,以及731ad5b的pokeemerald/src/safari_zone.c(第 61 行的sSafariZoneStepCounter = 500),https://github.com/pret/pokeemerald/blob/master/src/safari_zone.c。行号由measure_systems.py打印。 ↩↩↩↩↩ -
pret,
d2704a6的pokered/engine/items/item_effects.asm(ItemUseRepel的ld b, 100、ItemUseSuperRepel的ld b, 200、ItemUseMaxRepel的ld b, 250),https://github.com/pret/pokered/blob/master/engine/items/item_effects.asm,以及731ad5b的pokeemerald/src/data/items.h(holdEffectParam为 100、200、250),https://github.com/pret/pokeemerald/blob/master/src/data/items.h。行号由measure_systems.py打印。 ↩↩↩↩↩ -
pret,
5beda23的pokecrystal/constants/misc_constants.asm(第 36 至 38 行的MORN_HOUR 4、DAY_HOUR 10、NITE_HOUR 18)和pokecrystal/engine/rtc/rtc.asm(TimesOfDay表及其第 50 行的注释;未使用的BetaTimesOfDay),https://github.com/pret/pokecrystal/blob/master/constants/misc_constants.asm 和 https://github.com/pret/pokecrystal/blob/master/engine/rtc/rtc.asm。行号由measure_systems.py打印。 ↩↩↩↩ -
pret,
5beda23的pokecrystal/maps/Route35NationalParkGate.asm(第 38 至 40 行对周二、周四和周六的星期检查)和pokecrystal/constants/script_constants.asm(第 293 和 294 行的BUG_CONTEST_BALLS 20、BUG_CONTEST_MINUTES 20),https://github.com/pret/pokecrystal/blob/master/maps/Route35NationalParkGate.asm。行号由measure_systems.py打印。 ↩↩↩↩↩↩↩ -
pret,
5beda23的pokecrystal/constants/engine_flags.asm(wDailyFlags1和wDailyFlags2,各 8 个标志),https://github.com/pret/pokecrystal/blob/master/constants/engine_flags.asm。由measure_systems.py计数。 ↩↩↩↩ -
pret,
5beda23的pokecrystal/engine/overworld/time.asm(第 241 行的.GetDaysUntilNextFriday)和pokecrystal/engine/events/lucky_number.asm(与每只已拥有宝可梦的 ID 比对,以及三档奖项),https://github.com/pret/pokecrystal/blob/master/engine/events/lucky_number.asm。行号由measure_systems.py打印;奖项档次是作者对该例程的解读。 ↩↩↩↩↩↩↩↩ -
pret,
731ad5b的pokeemerald/src/clock.c(UpdatePerDay:在第 38 行读取存储的天数VAR_DAYS,第 41 行与今天的天数比较,第 43 行计算daysSince,第 44 至 54 行用它进行十一次调用,第 55 行存储今天的天数;其中两次是UpdateFrontierManiac和UpdateFrontierGambler;第 28 行的!InPokemonCenter()守卫位于每日和每分钟更新之前),https://github.com/pret/pokeemerald/blob/master/src/clock.c。行号由measure_systems.py打印。 ↩↩↩↩↩↩↩↩↩↩ -
pret,
731ad5b的pokeemerald/src/trainer_card.c(第 267 至 280 行按星数排列的丰缘和关都卡片配色;第 663 至 677 行的CountPlayerTrainerStars;第 679 至 692 行的GetRubyTrainerStars,用于《红宝石》或《蓝宝石》的卡片:名人堂首次登录时间、caughtAllHoenn、第 687 行的battleTowerStraightWins > 49以及hasAllPaintings;第 711 至 743 行的 9,999 和 999 上限),https://github.com/pret/pokeemerald/blob/master/src/trainer_card.c。行号由measure_systems.py打印;《红宝石·蓝宝石》不在克隆之列,所以它们的规则是从这段解读其卡片的代码中读出来的。 ↩↩↩↩↩↩↩↩↩ -
pret,
pokered/constants/pokemon_data_constants.asm(MONS_PER_BOX 20、NUM_BOXES 12)、pokecrystal/constants/pokemon_data_constants.asm(MONS_PER_BOX 20、MONS_PER_BOX_JP 30、NUM_BOXES 14)和pokeemerald/include/pokemon_storage_system.h(TOTAL_BOXES_COUNT 14、IN_BOX_ROWS 5、IN_BOX_COLUMNS 6,箱子名称和壁纸),https://github.com/pret/pokeemerald/blob/master/include/pokemon_storage_system.h。行号由measure_systems.py打印。 ↩↩↩ -
pret,
731ad5b的pokeemerald/include/constants/battle_frontier.h(MAX_STREAK 9999、FRONTIER_STAGES_PER_CHALLENGE 7)和pokeemerald/src/frontier_util.c(第 88 至 94 行的开拓区首脑连胜表,第四列为修正值;第 1656 至 1693 行的GetFrontierBrainStatus,第 1662 行的winStreakNoModifier + sFrontierBrainStreakAppearances[facility][3]和第 1674 行的比较;第 2111 行起的IncrementWinStreak)。各连胜计的是什么,读自同一提交中各设施的脚本:对战塔、对战宫殿、对战竞技场和对战工厂的对战房间在每击败一名对手后调用BattleFrontier_EventScript_IncrementWinStreak,并在对战数达到 7 时结束挑战(各房间scripts.inc中的case 7:对战塔第 51 行、对战宫殿第 70 行、对战竞技场第 107 行、对战工厂第 104 行);对战金字塔在BattlePyramid_WarpToNextFloor中调用它(data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc,第 88 行),并在第 7 层之后把玩家送到顶层(第 93 行);对战巨蛋每赢得一次锦标赛调用一次,位于BattleFrontier_BattleDomeLobby_EventScript_WonChallenge(data/maps/BattleFrontier_BattleDomeLobby/scripts.inc,第 44 和 45 行),而IncrementWinStreak(src/frontier_util.c,第 2130 至 2134 行)会同时增加domeWinStreaks和domeTotalChampionships;一次锦标赛为DOME_ROUNDS_COUNT 4轮(include/constants/battle_dome.h,第 8 行)。(src/battle_dome.c中的IncrementDomeStreaks也会做同样的事,但它的宏dome_incrementstreaks在data/中没有任何地方使用。)include/constants/battle_pike.h在第 4 行设定NUM_PIKE_ROOMS 14,并列出九种房间,其中包括完全回复和部分回复、一个异常状态房间和一个有非玩家角色的房间,而src/battle_pike.c在第 1401 行把对战管道的连胜除以NUM_PIKE_ROOMS,https://github.com/pret/pokeemerald/blob/master/src/frontier_util.c。行号由measure_systems.py打印。 ↩↩↩↩↩↩ -
pret,
731ad5b的pokeemerald/src/record_mixing.c(第 67 至 78 行的交换记录布局,结束于偏移0x1434,再加 16 字节填充,共0x1444字节),https://github.com/pret/pokeemerald/blob/master/src/record_mixing.c。行号由measure_systems.py打印。 ↩↩↩↩↩↩ -
pret,
731ad5b的pokeemerald/include/constants/tv.h(POKENEWS_COUNTDOWN 4、NUM_NORMAL_TVSHOW_SLOTS 5、5 加 20 的TV_SHOWS_COUNT;节目种类由measure_systems.py统计为普通 11 种、仅限记录交换 19 种、大量出现 1 种;第 84 行的NUM_CUTIES_RIBBONS 4,即 Spot the Cuties 的调用方用来比较的常量),https://github.com/pret/pokeemerald/blob/master/include/constants/tv.h。 ↩↩↩↩↩ -
pret,
731ad5b的pokeemerald/src/easy_chat.c(第 5429 至 5436 行关于 Trendy Sayings 的注释)、pokeemerald/include/constants/easy_chat.h(NUM_TRENDY_SAYINGS 33)、pokeemerald/src/mauville_old_man.c(第 120 行的(trainerId % 10) / 2)和pokeemerald/include/constants/mauville_old_man.h(五种类型),https://github.com/pret/pokeemerald/blob/master/src/easy_chat.c 和 https://github.com/pret/pokeemerald/blob/master/src/mauville_old_man.c。行号由measure_systems.py打印。 ↩↩↩↩↩↩↩ -
Automaton West,“Nintendo and The Pokémon Company have reportedly narrowed Palworld lawsuit to older versions of the game only, likely thanks to ‘preventive’ updates by Pocketpair”,2026 年 6 月 12 日(Automaton 日本员工查阅的东京地方法院记录,以及 Games Fray;2025 年 11 月的修改;仍在寻求的禁令;2026 年 10 月 1 日和 11 月 9 日的日期;公布的 7 月 10 日发售),2026 年 10 月 4 日访问,https://automaton-media.com/en/news/nintendo-and-the-pokemon-company-have-reportedly-narrowed-palworld-lawsuit-to-older-versions-of-the-game-only-likely-thanks-to-preventive-updates-by-pocketpair/。 ↩↩↩↩↩↩
-
Pocketpair,重要公告列表,2026 年 10 月 4 日访问(最新一则公告为 2026 年 1 月 12 日,关于一款卡牌游戏;关于诉讼的最新一则为 2025 年 5 月 8 日),https://www.pocketpair.jp/en/news/category/important-en/。没有报道只是作者能找到的范围,并非证明。 ↩↩↩
-
作者统计,2026 年 10 月 4 日:用草稿旁的
figures/steam_names.py,对作者为本文准备的证据文件夹中保存的七条 Steam app details 记录(steam_*.html;Coromon 1218210、Nexomon: Extinction 1196630、Cassette Beasts 1321440、Temtem 745920、Monster Sanctuary 814370、Moonstone Island 1658150、Palworld 1623730)逐字段统计“Pokémon”或“Pokemon”:所有简短说明和详细说明中均为零;Temtem 的reviews字段中有一处,是 Rock Paper Shotgun 的引语。输出figures/steam_names.out.txt。 ↩↩↩↩↩↩↩ -
Nintendo Life,“’The Single Best Game Concept Ever’ - Pokémon-Inspired Devs Talk The Series That Started It All”,2026 年 3 月 2 日(Andrades、JVemon、Pouwels、Spink、Coxon),2026 年 10 月 4 日访问,https://www.nintendolife.com/features/the-single-best-game-concept-ever-pokemon-inspired-devs-talk-the-series-that-started-it-all。 ↩↩
-
作者的调研档案,“Homage without borrowing”,2026 年 10 月 4 日,Kiradex 仓库中的
docs/research/homage/01-homage.md:本文第 14 节所依据的简报、建筑研究对落差的拒绝(其第 8.8 节)、收藏研究中关于付费随机物品和老虎机的内容,以及广场服务器只负责在线状态的设计。私有仓库。 ↩↩↩↩↩↩↩↩↩↩↩ -
Blake Crosley,“Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew”,blakecrosley.com,2026 年 10 月 3 日,2026 年 10 月 4 日更新(锻炉的 58 种颜色、十四条色阶;法律 FAQ 于 10 月 4 日更正,写明著作权并加入 Palworld 的专利),https://blakecrosley.com/blog/pixel-art-world-on-iphone。 ↩↩↩↩↩
-
Blake Crosley,“Pixel-Art Structures: Houses, Halls and Interiors on iPhone”,blakecrosley.com,2026 年 10 月 3 日(房间、展厅,以及小镇所没有的东西之一“a one-way ledge”),https://blakecrosley.com/blog/pixel-art-structures-on-iphone。 ↩↩↩↩
-
Blake Crosley,“Pixel-Art People: Characters and a Creator on iPhone”,blakecrosley.com,2026 年 10 月 3 日(PEGI 自 2026 年 6 月起对付费随机物品和会过期的登录连续记录的评级;其规则:每件装饰物都“purely visual, never random, never on a countdown”(纯视觉,绝不随机,绝不倒计时)),https://blakecrosley.com/blog/pixel-art-characters-on-iphone。 ↩↩↩↩↩↩↩↩
-
作者的 app,Kiradex 仓库提交
b1b78b1(2026 年 10 月 4 日),docs/WORLD.md第 1 节“Can this exist without being sued”(Kiradex World 的规则、那一行说明性描述、仅用于识别的卡牌图片,以及本文所更正的早先关于 Uranium 的措辞),第 2 节(为尽可能少收集信息而构建的设计,第 146 至 149 行),以及第 3 节的数据段落(以 Game Center 玩家 id 为键的服务器、COPPA 在与其他数据结合时视为个人信息的持久标识符、隐私政策、无第三方分析或广告、应要求删除,第 199 至 206 行)。私有仓库。 ↩↩↩↩↩↩↩↩ -
作者的测量,2026 年 10 月 4 日,2026 年 10 月 5 日扩展为打印注释引用的每一行:作者为本文准备的证据文件夹中的
measure_systems.py,在 pret 的pokered(d2704a6)、pokecrystal(5beda23)、pokeemerald(731ad5b)和pokefirered(037335f)的浅克隆上运行,这些 master 分支提交的日期分别为 2026 年 9 月 22 日、9 月 29 日、10 月 1 日和 9 月 26 日(在各克隆中用git show -s查看);它打印每个常量及其文件和行号,并推导计数,输出measure_systems.out.txt。各仓库的 README 列出了它们所构建的每个 ROM 的 SHA-1,例如 https://github.com/pret/pokeemerald/blob/master/README.md。 ↩↩ -
作者的测量,2026 年 10 月 4 日:作者为本文准备的证据文件夹中的
measure_map_features.py,遍历731ad5b的 pretpokeemerald中的每一个data/maps/*/map.json,把每个唯一布局的map.bin与其主、次metatile_attributes.bin对照(落差为MB_JUMP_*;音速专用为MB_MUDDY_SLOPE和MB_CRACKED_FLOOR;越野专用为轨道和MB_BUMPY_SLOPE;MB_TALL_GRASS),并在所有地图上统计OBJ_EVENT_GFX_CUTTABLE_TREE对象;为本文重新运行,输出保存为草稿旁的figures/measure_map_features.out.txt。统计的是格子而非地形要素;共用布局只计一次。 ↩↩↩↩↩↩↩↩↩ -
pret,提交
5beda23的pokecrystal/engine/overworld/events.asm(第 892 和 893 行的注释行“decrease the hatch counter of all your eggs until you reach the first”和“one that is ready to hatch”;第 898 和 899 行的farcall DoEggStep和jr nz, .hatch;.hatch在第 928 行载入PLAYEREVENT_HATCH,后者运行HatchEggScript,该标签位于第 999 行,第 1000 行有callasm OverworldHatchEgg)以及同一提交的pokecrystal/engine/pokemon/breeding.asm(第 174 行起的DoEggStep:按顺序遍历wPartySpecies,跳过不是EGG的条目,遇到蛋时在第 185 行执行dec [hl],计数器归零时在第 189 行以非零结果返回),https://github.com/pret/pokecrystal/blob/master/engine/pokemon/breeding.asm。后面的蛋要等下一个节拍,是作者对这次提前返回的解读。 ↩ -
pret,
731ad5b的pokeemerald/src/daycare.c(第 890 行的(daycare->mons[1].steps & 0xFF) == 0xFF;第 898 行的++daycare->stepCounter == 255;GetEggCyclesToSubtract;第 903 行起的队伍循环,第 907 行跳过MON_DATA_SANITY_IS_BAD_EGG,第 911 行只在eggCycles != 0时扣减,否则在第 922 行设置gSpecialVar_0x8004 = i并在第 923 行返回,所以循环在这个蛋处结束;随后ShouldEggHatch在src/field_control_avatar.c第 554 至 557 行启动EventScript_EggHatch),https://github.com/pret/pokeemerald/blob/master/src/daycare.c。行号由measure_systems.py打印。 ↩↩↩ -
pret,
731ad5b的pokeemerald/src/battle_setup.c(第 1792 行的STEP_COUNTER_MAX 255,第 1796 行的HasAtLeastFiveBadges()),https://github.com/pret/pokeemerald/blob/master/src/battle_setup.c,以及037335f的pokefirered/src/vs_seeker.c(第 855 行的vsSeekerChargeSteps == 100),https://github.com/pret/pokefirered/blob/master/src/vs_seeker.c。行号由measure_systems.py打印。 ↩↩ -
作者的图表,2026 年 10 月 4 日绘制(权利要求矩阵的法律注释于 2026 年 10 月 5 日重绘),由草稿旁的
figures/figures.py根据measure_systems.out.txt、measure_map_features.out.txt、measure_patent_claims.out.txt、保存的美国专利页面、第 8 节和第 9 节引用的带日期的记录页面以及Kiradex/World/Daylight.swift绘制;脚本在绘制前会重新读取并断言源数据。没有游戏美术,没有标志。 ↩↩↩↩↩↩ -
U.S. Copyright Office,Circular 33: Works Not Protected by Copyright,https://www.copyright.gov/circs/circ33.pdf,如本系列第一篇文章所引用(其注释 19,2026 年 10 月 2 日访问)。 ↩↩↩↩
-
作者的 app,Kiradex 仓库提交
b1b78b1:Kiradex/World/Daylight.swift(Phase.init(hour:):case 6..<9: self = .morning,9..<17为白天,17..<20为傍晚,其余为夜晚;第 100 至 105 行的Daylight.forcedHour,读取-plazaHour启动参数)、Kiradex/World/PlazaStage.swift(第 58 行的daylight(at:),在设置了Daylight.forcedHour时使用它)以及KiradexUITests/KiradexUITests.swift(以-plazaHour 21启动的一段行走)。私有仓库。 ↩↩↩↩↩ -
pret,
5beda23的pokecrystal/constants/phone_constants.asm(CONTACT_LIST_SIZE 10)和pokecrystal/constants/engine_flags.asm(wDailyRematchFlags24、wDailyPhoneItemFlags10、wDailyPhoneTimeOfDayFlags24;来电时段按星期:周一 3、周二 3、周三 4、周四 4、周五 4、周六 3、周日 3,按时段:早晨 9、下午 7、夜晚 8,由measure_systems.py统计),https://github.com/pret/pokecrystal/blob/master/constants/phone_constants.asm。 ↩↩↩↩↩ -
pret,
731ad5b的pokeemerald/include/constants/flags.h(12 个具名的FLAG_DAILY_*标志,其中 9 个是树果赠礼),https://github.com/pret/pokeemerald/blob/master/include/constants/flags.h。由measure_systems.py列出。 ↩ -
pret,
731ad5b的pokeemerald/include/constants/berry.h(第 20 至 26 行的阶段常量,第 130 行的BERRY_TREES_COUNT 128),https://github.com/pret/pokeemerald/blob/master/include/constants/berry.h。行号由measure_systems.py打印。 ↩ -
作者的枚举,2026 年 10 月 5 日:作者为本文准备的证据文件夹中的
enumerate_berry_yield.py,它打印731ad5b的 pokeemeraldsrc/berry.c中的CalcBerryYieldInternal(第 1210 至 1234 行:一次都没浇水时return min;否则在(max - min) * (water - 1)到(max - min) * water除以NUM_WATER_STAGES(4)并四舍五入后的区间内取randMin + Random() % (randMax - randMin + 1)),读取 43 种树果的minYield和maxYield(1 到 2 的 14 种,2 到 3 的 14 种,2 到 4 的 5 种,2 到 6 的 5 种,3 到 6 的 5 种),并列出每种浇水阶段数可能得到的所有收获量;输出enumerate_berry_yield.out.txt。 ↩ -
Serebii.net,“Pokéathlon”(《心金·魂银》;三个项目为一轮、第一名加分、每日商店,以及“Daily & Weekly Events”标题),2026 年 10 月 4 日访问,https://www.serebii.net/heartgoldsoulsilver/pokeathlon.shtml。二手资料;未经测量。 ↩
-
pret,
731ad5b的pokeemerald/src/tv.c(第 1115 行由TryPutPokemonTodayOnAir调用的TryStartRandomMassOutbreak;第 1652 行的通关标志;第 1654 至 1657 行检查已有大量出现的循环,它以i < LAST_TVSHOW_IDX运行,而LAST_TVSHOW_IDX在第 49 行定义为TV_SHOWS_COUNT - 1,所以只检查 25 个栏位中的第 0 至 23 个;第 1563 行起的StartMassOutbreak,在第 1578 行设置outbreakDaysLeft = 2,并在第 4906 行由DoTVShowPokemonNewsMassOutbreak,即在电视上播放的大量出现报道调用;第 1716 至 1737 行的UpdateTimeBeforeMassOutbreak每天倒数daysBeforeOutbreak,而GetRandomActiveShowIdx只有在它归零时才把大量出现报道提供给电视,第 800 行;第 1659 行的rbernoulli(1, 200);第 1661 和 1662 行的空栏位检查,其中第 3118 行起的FindFirstEmptyNormalTVShowSlot只在前NUM_NORMAL_TVSHOW_SLOTS(5)个栏位中寻找未播出的栏位;第 1680 行的probability = 50;第 1682 行的daysBeforeOutbreak = 1),https://github.com/pret/pokeemerald/blob/master/src/tv.c,以及src/battle_main.c(第 5098 行起的HandleEndTurn_FinishBattle,在第 5102 至 5108 行跳过连接、录制的连接、首战、狩猎、e-Reader、满充教学和开拓区对战,并在第 5126 行调用TryPutPokemonTodayOnAir)。行号由measure_systems.py打印。 ↩↩↩ -
pret,
037335f的pokefirered/src/trainer_card.c(连接用卡片的星星:第 850 行的HasAllKantoMons(),第 886 行的berriesPicked >= 200 && jumpsInRow >= 200),https://github.com/pret/pokefirered/blob/master/src/trainer_card.c。行号由measure_systems.py打印。 ↩ -
pret,
731ad5b的pokeemerald/include/constants/pokemon.h(从第 100 行的CHAMPION_RIBBON开始的缎带 ID),https://github.com/pret/pokeemerald/blob/master/include/constants/pokemon.h。 ↩ -
pret,
731ad5b的pokeemerald/src/field_specials.c(第 1386 行的if (GetRibbonCount(leadMon) > NUM_CUTIES_RIBBONS),调用方之一;contest_util.c、battle_tower.c和post_battle_event_funcs.c中的华丽大赛、对战塔和战后调用方使用同样的>判断)以及src/tv.c(第 2253 行起的TryPutSpotTheCutiesOnAir:需要一个空的记录交换栏位,且尚未生成 Spot the Cuties 节目,第 2258 行,并在第 2262 行以注释“NOTE: Show is not active until passed via Record Mix.”设置show->cuties.active = FALSE),https://github.com/pret/pokeemerald/blob/master/src/tv.c。 ↩ -
pret,
731ad5b的pokeemerald/include/constants/coins.h(MAX_COINS 9999),https://github.com/pret/pokeemerald/blob/master/include/constants/coins.h。 ↩ -
pret,
731ad5b的pokeemerald/src/lottery_corner.c(第 16 至 19 行的四种奖品;第 64 行的注释“do not calculate ticket values for eggs”;第 70 和 94 行“多于一位”的规则),https://github.com/pret/pokeemerald/blob/master/src/lottery_corner.c,以及include/constants/flags.h中的FLAG_DAILY_PICKED_LOTO_TICKET和src/clock.c中的SetRandomLotteryNumber。行号由measure_systems.py打印。 ↩↩ -
pret,
731ad5b的pokeemerald/src/bike.c(sMachBikeSpeeds、越野自行车的花式动作处理),https://github.com/pret/pokeemerald/blob/master/src/bike.c。 ↩↩ -
pret,
731ad5b的pokeemerald/include/constants/global.h(SECRET_BASES_COUNT 20、DECOR_MAX_SECRET_BASE 16、DECOR_MAX_PLAYERS_HOUSE 12),https://github.com/pret/pokeemerald/blob/master/include/constants/global.h。 ↩↩ -
pret,
5beda23的pokecrystal/engine/overworld/time.asm(第 45 行的ReceiveCallDelays:db 20, 10, 5, 3,以wTimeCyclesSinceLastCall为索引;CheckReceiveCallTimer在计时器每次到时都将其加一,最多到 3,第 47 至 59 行;InitCallReceiveDelay,第 12 至 14 行,将其重置为 0;Script_ReceivePhoneCall在每次来电后调用它,engine/phone/phone.asm第 431 行)以及pokecrystal/engine/phone/phone.asm(第 119 行的注释“50% chance for a call”;时段和信号范围检查),https://github.com/pret/pokecrystal/blob/master/engine/phone/phone.asm。行号由measure_systems.py打印。 ↩↩↩ -
The Pokémon Company,ポケットモンスターオフィシャルサイト,ご利用について(网站规则),关于二次创作的段落、不接受外部主动提出的创意的段落以及商标说明,2026 年 10 月 4 日访问,https://www.pokemon.co.jp/rules/。正文中的译文为作者所译。 ↩↩↩↩↩↩
-
Google Patents,US12403397B2,“Storage medium, information processing system, information processing apparatus, and game processing method”(受让人 Nintendo Co., Ltd. 和 The Pokémon Company;2023 年 3 月 1 日提交;2025 年 9 月 2 日授权),权利要求 1,2026 年 10 月 4 日保存,https://patents.google.com/patent/US12403397B2/en。 ↩↩↩↩↩↩↩
-
Warner-Jenkinson Co. v. Hilton Davis Chemical Co., 520 U.S. 17 (1997),判例汇编官撰写的判决摘要(syllabus),由康奈尔大学法学院 Legal Information Institute 发布,2026 年 10 月 5 日保存(法院“adheres to the doctrine of equivalents”(坚持等同原则),据此,一项在字面上不侵权的产品或方法,若其要素与权利要求的要素之间存在“equivalence”(等同),则“may nonetheless be found to infringe”(仍可能被认定侵权),而该原则适用于“to each of the individual elements of a claim, rather than to the accused product or process as a whole”(权利要求的每一个单独要素,而不是被诉产品或方法的整体);摘要只是概述,不属于判决意见的一部分),https://www.law.cornell.edu/supct/html/95-728.ZS.html。 ↩
-
日本最高法院第三小法庭,1998 年 2 月 24 日判决,案号 1994(O)1083,即滚珠花键轴承装置案,采用知识产权高等法院在其关于等同原则的重要判决列表中发布的英文译本,2026 年 10 月 5 日保存(当一项产品在某一部分与权利要求不同时,如果满足五个条件,它“regarded as identical with the construction as indicated in the scope of the patent claim”(被视为与专利权利要求范围中所载的构成相同),第一个条件是“this part is not the essential part of the patented invention”(该部分不是专利发明的本质部分),最后一个条件是不存在特殊情形,“such as the fact that the products had been intentionally excluded from the scope of the patent claim in the patent application process”(例如该产品在专利申请过程中被有意排除在权利要求范围之外)),https://www.courts.go.jp/ip/eng/assets/ip/eng/chizai_en/chizai_en-pdf-1640.pdf,链接自 https://www.courts.go.jp/ip/eng/hanrei/Important_IP_Judgment_by_Category/Patent/Doctrine_of_Equivalents/index.html。以日文判决为准。 ↩
-
Ana Diaz,“Pokémon Fangames Evolve Beyond Their Origins”,Aftermath,2026 年 10 月 1 日(首发于 2026 年 9 月 30 日的 Fansplaining),2026 年 10 月 4 日访问,https://aftermath.site/pokemon-fangames-fansplaining/。这正是 app 的世界设计文档中关于 Uranium 那句话的出处。 ↩
-
Nintendo Life,“Fan-Made Pokémon Prism Game Leaks Online After Nintendo Shutdown Notice”,2016 年 12 月 30 日(12 月 21 日的信函;计划于 12 月 25 日发布),2026 年 10 月 4 日访问,https://www.nintendolife.com/news/2016/12/fan-made_pokemon_prism_game_leaks_online_after_nintendo_shutdown_notice。 ↩↩
-
Internet Archive,“Nintendo’s Cease and Desist to Pokémon Prism”,由一位第三方上传,上传者称这份涂黑的扫描件是一位 Prism 贡献者发给他的;上传者的描述带有立场,本文未阅读该扫描件,https://archive.org/details/pokemon-prism-cease-desist。 ↩
-
Luke Plunkett,“Pokémon’s Former Chief Lawyer On Shutting Down Fan Games & Honeymoon Business Deals”,Aftermath,2024 年 3 月 13 日(对 Don McGowan 的“What I Do”访谈),2026 年 10 月 4 日访问,https://aftermath.site/pokemon-lawyer-cease-desist-fan-project-pikachu-movie/。 ↩↩↩↩
-
Chris Scullion,“Former Pokémon lawyer says fundraising and press coverage lead to fan project takedowns”,Video Games Chronicle,2024 年 3 月 14 日,2026 年 10 月 4 日访问,https://www.videogameschronicle.com/news/former-pokemon-lawyer-says-fundraising-and-press-coverage-lead-to-fan-project-takedowns/。 ↩
-
The National Law Review,“Guangdong Higher People’s Court: 107 Million RMB Settlement in Pokémon Copyright and Unfair Competition Case”,2025 年 2 月 23 日(2 月 21 日的公布;2021 年 12 月起诉;索赔 5 亿元人民币;一审理由),2026 年 10 月 4 日访问,https://natlawreview.com/article/guangdong-higher-peoples-court-107-million-rmb-settlement-pokemon-copyright-and。 ↩↩↩
-
The Pokémon Company,他社ゲームに関するお問い合わせについて,企业新闻,2024 年 1 月 25 日(日文正文,下附英文声明),2026 年 10 月 4 日访问,https://corporate.pokemon.co.jp/media/news/detail/335.html。 ↩↩
-
Nintendo Life,“The Pokémon Company Releases Official Statement About Palworld”,2024 年 1 月 25 日,2026 年 10 月 4 日访问,https://www.nintendolife.com/news/2024/01/the-pokemon-company-releases-official-statement-about-palworld。 ↩
-
GamesRadar+,“Palworld developer reveals the exact patents it’s alleged to have infringed upon in the Nintendo lawsuit, and they all have application dates after the survival game’s release”,2024 年 11 月 8 日(三项专利的对应关系,经由 Automaton、栗原潔和专利代理机构 Siarasia;2021 年 12 月的母专利),2026 年 10 月 4 日访问,https://www.gamesradar.com/games/survival/palworld-developer-reveals-the-exact-patents-its-alleged-to-have-infringed-upon-in-the-nintendo-lawsuit-and-they-all-have-application-dates-after-the-survival-games-release/。 ↩↩↩
-
作者的提取,2026 年 10 月 4 日,2026 年 10 月 5 日重写:作者为本文准备的证据文件夹中的
measure_patent_claims.py从保存的 Google Patents 页面读取标题、受让人和日期,并从页面自身的权利要求容器(日文页面为<claim num="1">,美国页面为CLM-00001)中完整取出权利要求 1,对三项日本专利分别打印日文原文和 Google 的英文机器翻译,对美国专利打印英文原文,均不截断;输出measure_patent_claims.out.txt。第一版把权利要求部分压平并在 3,000 个字符处截断,它的 JP 7545191“权利要求 1”一直延续到了权利要求 2;第一版与新版并排保留。 ↩↩ -
Pocketpair,“Regarding the lawsuit, changes to Palworld and the future”,重要公告,2025 年 5 月 8 日(2024 年 11 月 30 日的补丁 v0.3.11;补丁 v0.5.5;这些变更是“a result of the ongoing litigation”(正在进行的诉讼的结果)),2026 年 10 月 4 日访问,https://www.pocketpair.jp/en/news/regarding-the-lawsuit-changes-to-palworld-and-the-future/。 ↩↩
-
Steam,Palworld(app 1623730)的 app details,发售日期“9 Jul, 2026”,2026 年 10 月 4 日通过商店 API 获取,https://store.steampowered.com/app/1623730/Palworld/。 ↩
-
Automaton West,“Nintendo patent tied to Palworld lawsuit stays rejected as JPO shuts down objections in unusually sharp-tongued notice”,2026 年 7 月 22 日(分案申请 No. 2026-019762;2013 年 Pokémon Generations 的视频;审查员关于创造性的理由;三个月期限),2026 年 10 月 4 日访问,https://automaton-media.com/en/news/nintendo-patent-central-to-palworld-lawsuit-stays-rejected-as-jpo-shuts-down-objections-in-unusually-sharp-tongued-notice/。 ↩
-
Engadget,“Nintendo’s patent on summoning fighting NPCs is being reexamined”,2025 年 11 月 4 日(局长的命令;被援引为现有技术的 2002 年科乐美申请和任天堂出版物),2026 年 10 月 4 日访问,https://www.engadget.com/gaming/nintendo/nintendos-patent-on-summoning-fighting-npcs-is-being-reexamined-180949135.html。 ↩
-
Claire Jackson,“US Patent Office Reexamining Controversial Pokemon Patent”,Kotaku,2025 年 11 月 4 日,2026 年 10 月 4 日访问,https://kotaku.com/pokemon-patent-summoning-nintendo-palworld-monsters-2000641133。 ↩
-
Andrew H. Velzen,“Pokémon Reexam Receives First Action from USPTO”,MBHB,2026 年 4 月 3 日(再审查 No. 90/020,162;2026 年 3 月 25 日发出、依据 35 U.S.C. § 103 驳回全部权利要求的首次审查意见通知书;2026 年 6 月 25 日和 9 月 25 日的答复期限;引用了权利要求 1),2026 年 10 月 4 日访问,https://www.mbhb.com/intelligence/snippets/pokemon-reexam-receives-first-action-from-uspto/。 ↩↩↩
-
The Pokémon Company International,法律信息页面,https://www.pokemon.com/us/legal/information:2026 年 10 月 4 日向作者的抓取工具返回了机器人验证页面,其 Wayback Machine 副本也返回了同样的拦截;未经核实。 ↩↩
-
Nintendo,“Nintendo Game Content Guidelines for Online Video & Image Sharing Platforms”及其 FAQ(关于销售的 A5;关于其他内容的 Q6 和 A6),2026 年 10 月 4 日访问,https://www.nintendo.co.jp/networkservice_guideline/en/index.html。 ↩↩↩
-
Nintendo Life,“Cassette Beasts Dev On Doing What Pokémon Doesn’t In A Zelda-Inspired Overworld”,2023 年 4 月 26 日,2026 年 10 月 4 日访问,https://www.nintendolife.com/features/cassette-beasts-dev-on-doing-what-pokemon-doesnt-in-a-zelda-inspired-overworld。 ↩
-
Gematsu,“Crema Games announces Pokemon-inspired multiplayer creature collection game Temtem”,2018 年 4 月 30 日,2026 年 10 月 4 日访问,https://www.gematsu.com/2018/04/crema-games-announces-pokemon-inspired-multiplayer-creature-collection-game-temtem。 ↩
-
Apple Developer Documentation,“CMPedometer”(iOS 8.0;“An object for fetching the system-generated live walking data”;用途说明要求),2026 年 10 月 4 日以 JSON 形式获取,https://developer.apple.com/documentation/coremotion/cmpedometer。 ↩↩
-
Apple Developer Documentation,“stepCount”(HKQuantityTypeIdentifier;iOS 8.0),2026 年 10 月 4 日以 JSON 形式获取,https://developer.apple.com/documentation/healthkit/hkquantitytypeidentifier/stepcount。 ↩
-
作者的 app,Kiradex 仓库提交
b1b78b1:server/app/rooms.py(WALKABLE、is_walkable、may_move)、server/app/main.py(第 156 行起的_player,在第 160 行把每个连接的玩家id作为 UUID 读取,连同一个昵称和其展示的卡片;_tile,拒绝移动到不可行走的图块;以及第 217 行起的移动处理器,在第 222 行设置玩家的图块)、server/app/lines.py(“The preset lines: everything anyone can say in the plaza. Nothing is typed”(预设台词:任何人在广场上能说的一切。无需输入任何内容))、Kiradex/World/PlazaStage.swift(第 333 行的@AppStorage("plaza.id")属性,其文档注释说明该 id 只生成一次,从不输入也不显示;以及join(),在它为空时于第 576 和 577 行将其设为UUID().uuidString)和Kiradex/World/PlazaClient.swift(hello 消息,在第 135 行发送该 id)。私有仓库。 ↩↩↩↩↩↩↩ -
Apple Developer Documentation,“startOfDay(for:)”(Calendar;iOS 8.0),2026 年 10 月 4 日以 JSON 形式获取,https://developer.apple.com/documentation/foundation/calendar/startofday(for:)。 ↩↩
-
Apple Developer Documentation,“isDate(:inSameDayAs:)”(Calendar;iOS 8.0),2026 年 10 月 4 日以 JSON 形式获取,https://developer.apple.com/documentation/foundation/calendar/isdate(:insamedayas:)。 ↩↩
-
Apple Developer Documentation,“NSCalendarDayChanged”(NSNotification.Name;iOS 8.0),2026 年 10 月 4 日以 JSON 形式获取,https://developer.apple.com/documentation/foundation/nsnotification/name-swift.struct/nscalendardaychanged。 ↩↩
-
Apple Developer Documentation,“significantTimeChangeNotification”(UIApplication;讨论部分中的示例),2026 年 10 月 4 日以 JSON 形式获取,https://developer.apple.com/documentation/uikit/uiapplication/significanttimechangenotification。 ↩
-
作者的检查,2026 年 10 月 5 日:草稿旁的
figures/saying_drift.py,用验收测试的数字运行简报提出的漂移规则,并断言一次性应用十天与每天读取十次结果相同;输出figures/saying_drift.out.txt(同一日期读取三次后和重启后均为 50;十天后为 20,已过时;一句分数为 10 的过时说法三天后为 5,正在上升)。 ↩