塞尔达传说:王国之泪和Gamekit
塞尔达是天。
当通关了塞尔达传说:旷野之息后,在互联网就看到一直有消息说塞尔达的续作已经在制作中,于是每次直面会总会期待老任的「One more thing」,可是老任像是故意一样,每次直面会总是失望而归。
网友还调侃道:全世界只有任天堂不知道塞尔达还有续作。
终于,在2019年的E3中,老任宣布的续作的开发!大家也终于放下心来。2021年的E3中老任也放出了第一支预告片,同时也宣布将在2022年发售,也第一次感受了弹幕的狂欢🎉

接下来的直面会,除了期待塞尔达续作的新预告,还要担心青沼英二的鞠躬。是的,大家对于青沼英二的鞠躬简直PDST了。
在跳票两次后,2023年5月12日,塞尔达传说:王国之泪终于确定了。
塞尔达传说:王国之泪
为了可以早点玩到便使用任亏劵预定了数字版,也同时为了满足自己的收藏癖,又预购了卡带,不得不说,任亏劵变成了我亏劵。🤣
天时地利
23年的1月初,之前的公司换了新的老板,新老板将技术部门搬到了上海,同时,不愿意妥协的我们...被裁了。
拿到N+1后就悠哉的打斯普拉遁3,然后就是过年。人不能闲下来,一旦享受了惬意的时光就开始变得懒散,被裁后除了帮前领导做外包,其余时间开始变得充裕起来,有了更多的时间打打游戏,做做其他事情。
所以这次有了充足的时间去玩塞尔达,也第一次见证了这么多好友同时在线:

废寝忘食的游玩
没有了工作的烦恼,接下来的日子,可以说是住在了海拉鲁大陆,除了睡觉和吃饭,其他时间都在王国之泪,也是第一次对一个游戏这么上瘾和痴迷,甚至手柄需要一天两充:

有了老头环和旷野之息的「教训」,这次从来没有看任何一篇攻略,包括神庙的位置和解法,四大迷宫的解法和Boss的打法。由于是续作,海拉鲁的大陆熟悉的不能再熟悉,除了几处偶尔的改动,开起神庙来简直易如反掌,甚至觉得老任故意减小了难度。
不得不吐槽:旷野之息的惯性太大,每次使用技能是总会下意识的按成Pad的UP键。🤣
究极手和余料建造
究极手无疑是这作重量级的技能,甚至有时候怀疑任天堂开发的精神状态,这么离谱的需求到底要怎么开发才能做出这个功能。
这作没有了大师摩托,习惯了在海拉鲁开摩托的我说实话是有点沮丧的,但是后来MK2出现了:只需要两个风扇+一个操纵杆就变成了超级方便的飞天载具,瞬间让跑图也变得很轻松。因为地面的神庙已经开的差不多了,所以地下的跑图基本就是点到点,效率++:

剧情
老任的剧情设计一直可以的,尽管被塞学家已经猜到是左纳乌文明的事情,但是真的亲身体会到每一滴龙泪的故事后,还是忍不住震撼。
200多个小时后,也到了游戏的后期。旷野之息中,本来准备去城堡里随便逛逛,不小心就进入了灾厄盖侬的Boss战,以至于王国之泪里,去做塞尔达的任务时,去城堡都在小心翼翼,生怕触发的Boss战。
好在这作的Boss是在地底,城堡现在可以随便逛!
终于趁着生日这天,结束了整个主线任务。暴揍加侬后,公主回来了。




一些感想
很久没有这样期待过一个游戏,也很久没有这么舒服的去玩一个游戏。尽管没有旷野之息那么的惊喜感(地底世界有赶工的嫌疑),但是王国之泪还是带给我了很多的快乐。
出色的物理引擎和超高的自由度无疑又给开放式世界带来了新的标准。
2023年12月
很遗憾,王国之泪并没有成为2023年TGA的年度游戏。但是没关系,塞尔达还是天。
GameKit
即刻的Yellow Page是一个非常棒的个人落地页,可以将一些社交信息展示出来,于是模仿(借鉴)Yellow Page的样式写了一个游戏落地页:GameKit,分享了我的游戏ID、最近游玩和奖杯,托管在 Vercel。

PSN数据
PSN的数据就方便,官方提供了原生的API接口可以访问到游玩历史和奖杯数据。通过 psn-php 项目,使用account_id就能拿到游戏列表和奖杯列表:
$user = $this->login()->users()->find($this->accountId);
$trophySummary = $user->trophySummary();
$collect = collect();
$collect->put('nickname', $user->onlineId()); // 昵称
$collect->put('avatar', $user->avatarUrl()); // 头像
$collect->put('is_online', $user->isOnline()); // 是否在线
$collect->put('is_plus', $user->hasPlus()); // 是否是PSN会员
$collect->put('process', $trophySummary->progress()); // 进度
$collect->put('level', $trophySummary->level()); // 等级
// 奖杯数据
$collect->put('trophy', [
'bronze' => $trophySummary->bronze(),
'silver' => $trophySummary->silver(),
'gold' => $trophySummary->gold(),
'platinum' => $trophySummary->platinum(),
]);
Switch数据
相比之下,Switch的数据获取起来简直不要太麻烦。s3s这个项目提供了可以获取到斯普拉遁3涂地和对战数据的方式,也基本了解了老任的认证方式:
- 通过登录授权页面获取到授权链接
- 解析授权链接,获取到session_token,有效期2年
- 通过session_token,获取api_token
之后,通过api_token去换取NSO的登录token,就可以得到NSO中不同Service中的数据了。

这个项目详细解释了登录流程中的每个接口和请求参数:
所以了解了老任的鉴权,动森的数据和喷喷战绩的数据也可以轻松获取到了。但是如何获取Switch游玩历史和时长却一直没有头绪,直到后来Jump和小黑盒都提供了Switch的游戏时长,更好奇他们时怎么做到的了。
游戏记录
目前已知的能查到游戏时长的有两个APP,Nintendo Switch™ Parental Controls和My Nintendo,前者是需要进行绑定才可以获取的,很显然并不是这个方式,而后者只支持日服账号的Switch账号,而Jump是可以支持所有服(除了港服)的账号的,所以My Nintendo也被我Pass掉了。
直到偶然间看到了这篇文章「个人数据中心:获取Switch游戏记录」,终于找到了那个接口,没错,竟然还是通过My Nintendo!
获取游戏历史
所有的鉴权流程都是一样的,区别是需要不同的client_id去请求session_token,通过api_token就可以直接请求到服务,而不需要再换去NSO的clien_token。
$url = 'https://news-api.entry.nintendo.co.jp/api/v1.1/users/me/play_histories';
$list = [];
try {
$headers = [
'Authorization' => "Bearer {$this->idToken}",
'User-Agent' => 'com.nintendo.znej/1.13.0 (Android/7.1.2)',
'Connection' => 'Keep-Alive',
'Accept-Encoding' => 'gzip'
];
$response = $this->request('get', $url, [
'headers' => $headers
]);
} catch (NsoException $e) {
throw new NsoException('获取游玩列表失败:' . $e->getMessage());
}
这样,就可以获取到所有游戏的游玩历史和时长了,大概长这样:
{
"playHistories": [
{
"titleId": "0100C2500FC20000",
"titleName": "スプラトゥーン3",
"deviceType": "HAC",
"imageUrl": "https://atum-img-lp1.cdn.nintendo.net/i/c/5b394a53470947d89f7c8ca59faa20c3_256",
"lastUpdatedAt": "2023-11-28T18:00:49+09:00",
"firstPlayedAt": "2022-09-09T00:02:57+09:00",
"lastPlayedAt": "2023-11-26T23:07:33+09:00",
"totalPlayedDays": 277,
"totalPlayedMinutes": 17863
},
{
"titleId": "0100535012974000",
"titleName": "HADES",
"deviceType": "HAC",
"imageUrl": "https://atum-img-lp1.cdn.nintendo.net/i/c/cd7edd3c53874bae8ae560ee36cd0b49_256",
"lastUpdatedAt": "2023-11-28T18:00:49+09:00",
"firstPlayedAt": "2021-07-16T00:20:42+09:00",
"lastPlayedAt": "2023-11-26T15:45:12+09:00",
"totalPlayedDays": 14,
"totalPlayedMinutes": 784
}
}
比较好奇的是,既然非日服的账号也可以正常使用,为什么My Nintendo不支持其他服账号登录呢?
时长冲突
由于换了Switch OLED,当我整机迁移后,原来的Switch变成了副机。发现很多个游玩过的游戏在Switch中变成了「x天开始游玩」,于是开始好奇NS的游戏统计到底是怎么回事。
找了一圈资料终于明白了Switch游戏时长的统计规律,发现Switch中显示的某个游戏的游玩时长并不是和账号有关,而是和游戏设备相关:
比如,设置主副机后,设备A玩旷野之息100小时后,再在设备B中使用同一个账号继续游玩10小时后,游玩列表中并不会显示110小时,因为设备B的实际游玩时间只有10小时。
那么如果需要游玩列表中显示110小时,则需要:
- 设备A继续游玩10小时
- 设备B游玩110小时
情况1也就是只有一台Switch的情况,而情况B就是主副机同时使用的情况,但是此时通过接口查看旷野之息的游玩时长,则是210小时。所以Switch中显示的游玩时长并不是真实的游戏时长,相反,接口中返回的才是正确的时长。
对老任的疑惑+1🤔
EOF
很遗憾,青沼英二已经确认王国之泪将没有DLC的计划,毕竟王国之泪本来也算是旷野之息的DLC。接下来,应该开始期待艾尔登法环的DLC了!
最后来张Switch的全家福:
